/* self-hosted Orbitron + Rajdhani (SIL OFL 1.1, via fontsource 5.3.0) */
@font-face{font-family:"Orbitron";font-style:normal;font-weight:700;font-display:optional;src:url("/ade-2026/fonts/orbitron-700.ee6acc5a.woff2") format("woff2")}
@font-face{font-family:"Rajdhani";font-style:normal;font-weight:400;font-display:optional;src:url("/ade-2026/fonts/rajdhani-400.759a9000.woff2") format("woff2")}
@font-face{font-family:"Rajdhani";font-style:normal;font-weight:700;font-display:optional;src:url("/ade-2026/fonts/rajdhani-700.5b7e4a6f.woff2") format("woff2")}
/* ADE 2026 hub — self-contained, prefixed .hub-, mobile-first. Matches the site palette (--primary-orange #FF9500, --dark-bg #0A0514, Rajdhani/Orbitron/Inter). */
:root{--hub-orange:#FF9500;--hub-cyan:#00FFFF;--hub-bg:#0A0514;--hub-card:#14101f;--hub-line:#2a2338;--hub-ink:#f5f2ec;--hub-muted:#b3aec4}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
.hub-body{margin:0;background:var(--hub-bg);color:var(--hub-ink);font:17px/1.6 Rajdhani,system-ui,sans-serif;padding-bottom:env(safe-area-inset-bottom)}
.hub-skip{position:absolute;left:-999px;top:0;background:var(--hub-orange);color:#000;padding:8px 12px;z-index:100}.hub-skip:focus{left:8px}
a{color:var(--hub-orange)}a:focus-visible,button:focus-visible,summary:focus-visible{outline:3px solid var(--hub-cyan);outline-offset:2px}
.hub-header{position:static;z-index:20;display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;padding:10px max(16px,env(safe-area-inset-left));background:rgba(10,5,20,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--hub-line)}
.hub-brand{display:inline-flex;align-items:center;min-height:44px;font-family:Orbitron,Rajdhani,sans-serif;font-weight:700;font-size:15px;color:var(--hub-ink);text-decoration:none;letter-spacing:.02em}
.hub-nav{display:flex;flex-wrap:wrap;gap:4px;max-width:100%}
.hub-nav a{display:inline-flex;align-items:center;min-height:44px;padding:0 12px;border-radius:999px;color:var(--hub-ink);text-decoration:none;font-weight:600;white-space:nowrap}
.hub-nav a:hover{background:var(--hub-card)}.hub-nav .hub-join{background:var(--hub-orange);color:#000}
.hub-main{max-width:1100px;margin:0 auto;padding:16px max(16px,env(safe-area-inset-left)) 40px}
.hub-hero h1{font-family:Orbitron,Rajdhani,sans-serif;font-size:clamp(28px,6vw,52px);line-height:1.08;margin:.2em 0 .4em}
.hub-kicker{color:var(--hub-orange);font-weight:700;letter-spacing:.08em;text-transform:uppercase;font-size:13px;margin:12px 0 0}
.hub-lead{font-size:1.1rem;max-width:760px;color:#e6e2ee;margin:0 0 1rem}
.hub-now{background:#0d2b1c;border:1px solid #1f7a4a;border-radius:10px;padding:10px 14px;margin:0 0 1rem;font-size:.95rem}
.hub-ctas{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 .6rem}
.hub-btn{display:inline-flex;align-items:center;min-height:48px;padding:0 20px;border-radius:999px;background:var(--hub-orange);color:#000;font-weight:700;text-decoration:none}
.hub-btn-ghost{background:transparent;color:var(--hub-orange);border:2px solid var(--hub-orange)}
.hub-meta,.hub-small{font-size:.9rem;color:var(--hub-muted)}
.hub-alerts{display:grid;gap:10px;margin:1.4rem 0}.hub-alerts p{margin:0;padding:12px 14px;background:#1d1406;border:1px solid #5a3a06;border-left:4px solid var(--hub-orange);border-radius:10px;font-size:.98rem}
.hub-guides h2,.hub-day h2,.hub-join h2,.hub-faqs h2,.hub-about h2{font-family:Orbitron,Rajdhani,sans-serif;font-size:clamp(20px,3.4vw,28px);margin:2rem 0 .8rem;line-height:1.2}
.hub-guide-grid{display:grid;grid-template-columns:1fr;gap:10px}@media(min-width:560px){.hub-guide-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:900px){.hub-guide-grid{grid-template-columns:repeat(3,1fr)}}
.hub-guide{display:flex;flex-direction:column;gap:4px;min-height:48px;padding:14px 16px;background:var(--hub-card);border:1px solid var(--hub-line);border-top:3px solid var(--hub-orange);border-radius:12px;text-decoration:none;color:var(--hub-ink)}
.hub-guide:hover{border-color:var(--hub-orange)}.hub-gk{font-weight:700;font-size:1.05rem}.hub-gt{color:var(--hub-muted);font-size:.95rem}
.hub-n{font-size:.85rem;color:var(--hub-muted);font-family:Rajdhani,sans-serif;font-weight:500}
.hub-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.hub-ev{display:grid;grid-template-columns:1fr auto;grid-template-areas:"t t" "name name" "line line" "s tix";gap:2px 12px;align-items:center;padding:12px 14px;background:var(--hub-card);border:1px solid var(--hub-line);border-radius:12px;font-size:.98rem}
.hub-ev strong{grid-area:name;font-size:1.05rem}.hub-ev .hub-v{display:none}
.hub-t{grid-area:t;color:var(--hub-orange);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:0}
.hub-l{grid-area:line;color:#d8d3e3;font-size:.92rem}
.hub-s{grid-area:s;justify-self:start;align-self:center;font-size:.78rem;font-weight:700;letter-spacing:.03em;border-radius:999px;padding:2px 10px;margin-top:4px;white-space:nowrap;display:inline-block}
.hub-on_sale{background:#123d24;color:#7be3a4}.hub-last_tickets{background:#44300a;color:#ffc46b}.hub-sold_out{background:#3d1414;color:#ff9a9a}.hub-free,.hub-free_rsvp{background:#10304a;color:#8fd0ff}.hub-check{background:#26262c;color:#c9c5bf}
.hub-tix{grid-area:tix;justify-self:end;align-self:center;min-height:44px;display:inline-flex;align-items:center;padding:0 14px;border:1px solid var(--hub-orange);border-radius:999px;text-decoration:none;font-weight:700;font-size:.9rem}
@media(min-width:700px){.hub-ev{grid-template-columns:auto 1fr auto auto;grid-template-areas:"t name s tix" "t line s tix";column-gap:14px}.hub-t{min-width:92px}.hub-s{margin-top:0}}
.hub-more{font-size:.95rem;margin:.6rem 0 0}
.hub-join{margin-top:2rem;padding:20px 18px;background:linear-gradient(135deg,#1a1030,#0d0a18);border:1px solid var(--hub-line);border-radius:14px}
.hub-faq{background:var(--hub-card);border:1px solid var(--hub-line);border-radius:10px;padding:0 14px;margin:0 0 8px}
.hub-faq summary{cursor:pointer;min-height:48px;display:flex;align-items:center;font-weight:700;font-size:1.02rem;list-style:none}
.hub-faq summary::-webkit-details-marker{display:none}.hub-faq summary::after{content:"+";margin-left:auto;color:var(--hub-orange);font-size:1.4rem}.hub-faq[open] summary::after{content:"–"}
.hub-faq p{margin:0 0 14px;color:#e6e2ee}
.hub-about p{color:var(--hub-muted);font-size:.95rem}
.hub-footer{border-top:1px solid var(--hub-line);padding:18px 16px calc(18px + env(safe-area-inset-bottom));text-align:center;font-size:.9rem;color:var(--hub-muted)}
/* quick signup (shared with homepage snippet) */
.adeq-form{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 6px}
.adeq-form input[type=email]{flex:1 1 220px;min-height:48px;font:16px Rajdhani,system-ui,sans-serif;padding:0 14px;border-radius:999px;border:1px solid #3a3350;background:#0a0514;color:#fff}
.adeq-form button{min-height:48px;padding:0 20px;border:0;border-radius:999px;background:var(--hub-orange);color:#000;font:700 16px Rajdhani,sans-serif;cursor:pointer}
.adeq-msg{font-size:.95rem;margin:4px 0 0;min-height:1.4em}.adeq-msg[data-state=ok]{color:#7be3a4}.adeq-msg[data-state=err]{color:#ff9a9a}
@media(min-width:700px){.hub-header{position:sticky;top:0}}
.hub-crumbs{font-size:.9rem;color:var(--hub-muted);margin:8px 0 0}.hub-evlink{color:inherit;text-decoration:none}.hub-meta a{white-space:nowrap}.hub-evlink:hover{color:var(--hub-orange)}
.hub-event h1{font-family:Orbitron,Rajdhani,sans-serif;font-size:clamp(24px,5vw,40px);line-height:1.12;margin:.2em 0 .5em}
.hub-event h2{font-family:Orbitron,Rajdhani,sans-serif;font-size:clamp(18px,3vw,24px);margin:1.8rem 0 .6rem}
.hub-lineup,.hub-related,.hub-sources{margin:0;padding-left:1.2rem;display:grid;gap:4px}.hub-lineup li{font-size:1.02rem}
.hub-note{padding:10px 14px;background:#1d1406;border:1px solid #5a3a06;border-left:4px solid var(--hub-orange);border-radius:10px;font-size:.95rem}
.hub-sources a{word-break:break-all;font-size:.9rem}

@media(max-width:480px){.adeq-form input[type=email]{min-width:0;width:100%}}
.hub-nav .hub-join{margin-top:0;border-color:transparent}

/* phase 6a */.hub-highlights{margin:1.6rem 0;padding:16px 18px;background:var(--hub-card);border:1px solid var(--hub-line);border-radius:14px}.hub-highlights h2{margin:0 0 .6rem}.hub-highlights h3{margin:1.2rem 0 .5rem;font-size:1.05rem;color:var(--hub-orange)}.hub-hl-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.hub-hl{display:flex;gap:10px;align-items:flex-start;line-height:1.5}.hub-tag{flex:0 0 auto;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#000;background:var(--hub-orange);border-radius:6px;padding:3px 7px;margin-top:3px;white-space:nowrap}.hub-past h2{color:var(--hub-muted)}.hub-done{color:#7be3a4}.hub-past .hub-list{opacity:.78}.hub-day h3{margin:1rem 0 .4rem;font-size:1rem;color:var(--hub-muted)}@media (max-width:520px){.hub-hl{flex-direction:column;gap:4px}}
/* phase 6b */.hub-figure{margin:1.2rem 0;border-radius:14px;overflow:hidden;background:var(--hub-card);border:1px solid var(--hub-line)}.hub-figure img{display:block;width:100%;height:auto}.hub-figure figcaption{padding:6px 12px}.hub-credit{margin:0;font-size:.78rem;color:var(--hub-muted)}.hub-credit a{color:var(--hub-muted)}.hub-explore{margin:1.2rem 0;padding:6px 14px;background:var(--hub-card);border:1px solid var(--hub-line);border-radius:10px;font-size:.95rem;line-height:1.9}.hub-explore a{display:inline-block;padding:8px 4px;min-height:24px}.hub-credit a{display:inline-block;padding:5px 0}.hub-nl{margin:1.6rem 0;padding:14px 18px;border-left:4px solid var(--hub-cyan);background:#0e1a1f;border-radius:0 12px 12px 0}.hub-nl h2{margin:0 0 .4rem;font-size:1.1rem}.hub-nl p{margin:0;line-height:1.55}.hub-table{width:100%;border-collapse:collapse;font-size:.95rem}.hub-table th,.hub-table td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--hub-line);vertical-align:top}.hub-table th{color:var(--hub-orange)}.hub-moreday{margin:.6rem 0}.hub-moreday summary{cursor:pointer;color:var(--hub-cyan);padding:10px 0;min-height:44px;display:flex;align-items:center}.hub-nav-days a[aria-current=page],.hub-nav a[aria-current=page]{color:#000;background:var(--hub-orange);border-radius:6px}@media (max-width:640px){.hub-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}}
/* phase 6b mobile */
/* ==========================================================================
   ADE 2026 hub — phase 6B mobile additions. APPEND to ade-2026-hub.css.
   CSS only. No new colours (brand tokens + existing pill colours only),
   no new fonts. Everything below either fills a gap (no existing rule
   sets the property) or is a deliberate mobile override of a rule above,
   marked [OVERRIDE]. Breakpoint 700px matches the two existing
   @media(min-width:700px) blocks.
   ========================================================================== */

/* ---- A. Header + nav (<700px): one-row chip scroller, sticky nav row ------
   Before: 9 links wrap to 3 rows, header = 213px at 320–390px (25% of the
   viewport before any content), header static so the day links are gone
   after the first scroll of a 38-row list. After: header 117px; the nav
   row (55px incl. border) stays on screen via sticky + negative top so the
   brand row scrolls away but the day-jump chips remain. Height is
   deterministic: 10 + 44 (brand, forced single line) + 8 + 44 (nav) + 10 + 1. */
@media (max-width: 699.98px) {
  .hub-header {
    position: sticky;                        /* [OVERRIDE] .hub-header{position:static} */
    top: -62px;                              /* 10 + 44 + 8: hide the brand row, keep the nav row */
    background: var(--hub-bg);               /* [OVERRIDE] rgba .92 + blur: the stuck row must not let orange links bleed through (measured); same colour, opaque */
    backdrop-filter: none;                   /* [OVERRIDE] GPU cost of blur under a sticky element on phones */
    -webkit-backdrop-filter: none;
    padding-top: 10px;
    padding-bottom: 10px;
    row-gap: 8px;
  }
  .hub-brand {
    flex: 1 1 100%;
    min-width: 0;
    height: 44px;                            /* exact, so the sticky offset is exact */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;                 /* last-resort guard only; see font-size below */
    font-size: clamp(11.5px, 3.6vw, 15px);   /* 320px → 11.5px, 390px → 14px, ≥417px → 15px */
  }
  .hub-nav {
    flex: 1 1 100%;
    flex-wrap: nowrap;                       /* [OVERRIDE] .hub-nav{flex-wrap:wrap} */
    gap: 6px;
    height: 44px;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior-x: contain;
    scroll-snap-type: x proximity;
    scroll-padding-inline: 8px;
    scrollbar-width: none;                   /* hide the scrollbar (Firefox) */
    padding-right: 40px;                     /* so the last chip ends left of the fade hint at scroll end */
  }
  .hub-nav::-webkit-scrollbar { display: none; }   /* hide the scrollbar (WebKit/Blink) */
  .hub-nav a {
    flex: 0 0 auto;
    height: 44px;
    scroll-snap-align: start;
  }
  /* right-edge fade hint in the page background colour; sits over the
     40px padding so the "Join free" chip is never under it at scroll end */
  .hub-header::after {
    content: "";
    position: absolute;
    right: 0;
    bottom: 10px;
    width: 40px;
    height: 44px;
    pointer-events: none;
    background: linear-gradient(90deg, rgba(10, 5, 20, 0), var(--hub-bg) 70%);
  }
  /* anchor targets (#sat, #sun, #highlights, #join …) stop below the sticky nav row */
  .hub-day, .hub-highlights, .hub-join, .hub-faqs, .hub-guides, .hub-about, .hub-hero {
    scroll-margin-top: 64px;                 /* 55px sticky row + 9px breathing room */
  }
  /* the skip link lands under the sticky header otherwise */
  .hub-main { scroll-margin-top: 64px; }
}
@media (min-width: 700px) {
  /* desktop header is already sticky (≈65px) but nothing set scroll-margin: the day
     heading was hidden under it after tapping Sat/Sun. */
  .hub-day, .hub-highlights, .hub-join, .hub-faqs, .hub-guides, .hub-about, .hub-main { scroll-margin-top: 80px; }
}
.hub-skip { min-height: 44px; display: inline-flex; align-items: center; }   /* measured 145×43 */

/* ---- B. Event rows (.hub-ev) ---------------------------------------------
   Rows already wrap cleanly at 320–430px (time / name / venue-line / pill +
   Tickets). Measured gaps: the event-name link is 20px tall (its own grid
   row, not inline text) → 44px hit box with padding + negative margin,
   layout unchanged. Pill text 12.5px → 13px, pill 24px → 27px tall. */
.hub-ev strong { min-width: 0; }
.hub-evlink {
  display: inline-block;
  padding: 12px 0;
  margin: -12px 0;
  overflow-wrap: anywhere;
}
.hub-ev strong, .hub-l { overflow-wrap: anywhere; }   /* long promoter names / URLs never push the row wider */
.hub-s { font-size: .8125rem; padding: 3px 10px; }    /* [OVERRIDE] .78rem / 2px 10px */
.hub-tix { min-width: 82px; justify-content: center; }
@media (max-width: 699.98px) {
  .hub-ev { row-gap: 4px; }
  .hub-tix { min-width: 96px; }                        /* a little wider thumb target */
}

/* ---- C. Secondary links: ≥24px hit boxes without layout change ---------
   WCAG 2.5.8 minimum for links in running text. Vertical padding on an
   inline, non-replaced element does not move the line box, it only grows
   the clickable/background box. Headline links in highlights: 20 → 32px.
   Source links (.hub-n a, 15px): → 25px. Meta/alert/lead links: → 27px. */
.hub-hl strong a { padding-block: 6px; }
.hub-n a, .hub-l a { padding-block: 5px; }
.hub-meta a, .hub-more a, .hub-alerts a, .hub-lead a, .hub-faq p a, .hub-about a, .hub-small a, .hub-now a, .hub-event p a { padding-block: 4px; }

/* ---- D. Lists whose primary action is a text link --------------------- */
/* Breadcrumbs: 17px links → 44px row, items centred, separators stay inline */
.hub-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 0 4px; min-height: 44px; }
.hub-crumbs a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 2px; }
/* Footer links: 17px → 44px rows, centred as before */
.hub-footer p { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 0 6px; margin: 0; }
.hub-footer a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 4px; }
/* Events A–Z (.hub-related, 147 rows) and "More for this day" / sources on event pages:
   the link is the row's action (20px tall). 12px row padding + 12px link padding
   with a cancelling negative margin = 44px hit box, adjacent hit boxes touch but
   do not overlap. */
.hub-related, .hub-sources { gap: 0; }                 /* [OVERRIDE] gap:4px — spacing now comes from li padding */
.hub-related li, .hub-sources li { padding: 12px 0; }
.hub-related a, .hub-sources a { display: inline-block; padding: 12px 0; margin: -12px 0; overflow-wrap: anywhere; }
.hub-sources a { word-break: normal; }                 /* [OVERRIDE] word-break:break-all → anywhere wraps at better points */

/* ---- E. Type sizes ---------------------------------------------------
   .hub-n carries real information (time · venue · status on 147 rows): 13.6 → 14px.
   .hub-tag 11.5 → 12px (uppercase label; stays small by design). */
.hub-n { font-size: .875rem; }                          /* [OVERRIDE] .85rem */
.hub-tag { font-size: .75rem; }                         /* [OVERRIDE] .72rem */
/* /ade-2026/events/ h1 had no rule at all (rendered as default 34px Rajdhani) */
.hub-event-h1 { font-family: Orbitron, Rajdhani, sans-serif; font-size: clamp(24px, 5vw, 40px); line-height: 1.12; margin: .2em 0 .5em; overflow-wrap: anywhere; }

/* ---- F. Highlights list: give each item a hairline so the 17-item column scans ---- */
.hub-hl { padding-bottom: 10px; border-bottom: 1px solid var(--hub-line); }
.hub-hl:last-child { padding-bottom: 0; border-bottom: 0; }

/* ---- G. Forms, focus, safe areas, motion ------------------------------ */
input:focus-visible { outline: 3px solid var(--hub-cyan); outline-offset: 2px; }   /* a/button/summary already had it */
.hub-faq summary::after { padding-left: 12px; }        /* keep the +/– clear of long questions (row is already 48px) */
.hub-main { padding-left: max(16px, env(safe-area-inset-left)); padding-right: max(16px, env(safe-area-inset-right)); }
.hub-header { padding-right: max(16px, env(safe-area-inset-right)); }
.hub-footer { padding-left: max(16px, env(safe-area-inset-left)); padding-right: max(16px, env(safe-area-inset-right)); }
/* This sheet declares no animations or transitions; guard anything injected (GTM, consent) and the nav scroller. */
@media (prefers-reduced-motion: reduce) {
  .hub-body *, .hub-body *::before, .hub-body *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  .hub-nav { scroll-snap-type: none; }
}
/* 320px stress: tighter row padding, two-line brand never happens (nowrap above) */
@media (max-width: 359.98px) {
  .hub-ev { padding: 10px 12px; }
  .hub-highlights, .hub-join { padding-left: 14px; padding-right: 14px; }
}
/* consent banner (injected by ade-2026-analytics.js): its inline text link is 17px tall → 25px hit box */
#iiadim-consent a { padding-block: 4px; }

/* phase 6c */

/* ==========================================================================
   ADE 2026 hub — phase 6C design layer. APPEND to ade-2026-hub.css.
   Brand frozen: #0A0514 / #14101f / #2a2338, orange #FF9500, cyan #00FFFF,
   ink #f5f2ec, muted #b3aec4, Orbitron + Rajdhani. Every colour below is one
   of those or an alpha of one of those. No JS. Mobile first; desktop deltas
   at 700px (existing breakpoint). Motion only inside
   (prefers-reduced-motion:no-preference); the kill-switch above still applies.
   [OVERRIDE] marks a rule that deliberately beats an earlier one.
   ========================================================================== */

/* ---- 0. tokens --------------------------------------------------------- */
:root{
  --hub-bg-2:#0f0a1b;--hub-card-2:#1a1528;--hub-line-2:#3a3150;--hub-ink-2:#e6e2ee;
  --o-06:rgb(255 149 0 / .06);--o-12:rgb(255 149 0 / .12);--o-20:rgb(255 149 0 / .2);--o-35:rgb(255 149 0 / .35);--o-50:rgb(255 149 0 / .5);
  --c-08:rgb(0 255 255 / .08);--c-15:rgb(0 255 255 / .15);--c-30:rgb(0 255 255 / .3);
  --hub-orange-deep:#c97400;      /* orange × .79 */
  --hub-green-bg:#123d24;--hub-green-bg-2:#0d2b1c;--hub-green-line:#1f7a4a;  /* on-sale/live greens, as the 6a/6b pills */
  --hub-cyan-bg:#0e1a1f;--hub-purple-2:#1a1030;  /* NL block + join card darks, as 6b */
  --st-on:#7be3a4;--st-last:#ffc46b;--st-sold:#ff9a9a;--st-free:#8fd0ff;
  --g-hero:linear-gradient(to top,var(--hub-bg) 0%,rgb(10 5 20 / .8) 30%,rgb(10 5 20 / .3) 62%,rgb(10 5 20 / .05) 100%);
  --g-hero-side:linear-gradient(to right,rgb(10 5 20 / .4),rgb(10 5 20 / 0) 60%);
  --g-rule:linear-gradient(90deg,var(--hub-orange),var(--o-20) 45%,transparent);
  --glow-o:0 0 0 1px var(--o-35),0 0 18px var(--o-20);
  --glow-c:0 0 0 1px var(--c-30),0 0 18px var(--c-15);
  --glow-text-c:0 0 12px rgb(0 255 255 / .6),0 0 28px rgb(0 255 255 / .35);
  --sh-2:0 2px 4px rgb(5 2 10 / .5),0 8px 20px rgb(5 2 10 / .45);
  --fs-2:clamp(1.12rem,1rem + .7vw,1.3rem);--fs-3:clamp(1.3rem,1.05rem + 1.6vw,1.75rem);--fs-4:clamp(1.6rem,1.05rem + 3.4vw,3.1rem);
  --gutter:max(16px,env(safe-area-inset-left));
  --t-fast:150ms;--t-base:250ms;--t-slow:400ms;--t-reveal:380ms;
  --e-out:cubic-bezier(.2,.7,.2,1);
}
@media(prefers-reduced-motion:reduce){:root{--t-fast:0ms;--t-base:0ms;--t-slow:0ms;--t-reveal:0ms}}

/* metric-matched fallbacks so display=optional never reflows (Orbitron is wide, Rajdhani is narrow) */
@font-face{font-family:"Orbitron-fb";src:local("Roboto Bold"),local("Roboto"),local("Arial Bold"),local("Arial"),local("Helvetica");size-adjust:112%;ascent-override:94%;descent-override:24%;line-gap-override:0%}
@font-face{font-family:"Rajdhani-fb";src:local("Roboto"),local("Arial"),local("Helvetica");size-adjust:88%;ascent-override:98%;descent-override:24%;line-gap-override:0%}
.hub-body{font-family:Rajdhani,"Rajdhani-fb",system-ui,sans-serif}   /* [OVERRIDE] adds the fallback face only */
.hub-brand,.hub-hero h1,.hub-event h1,.hub-event-h1,.hub-event h2,.hub-guides h2,.hub-day h2,.hub-join h2,.hub-faqs h2,.hub-about h2,.hub-highlights h2,.hub-nl h2{font-family:Orbitron,"Orbitron-fb",Rajdhani,sans-serif}
h1,h2{text-wrap:balance}
.hub-lead{text-wrap:pretty;max-width:62ch;color:var(--hub-ink-2)}  /* [OVERRIDE] 760px → measure */
.hub-n{font-family:inherit}  /* [OVERRIDE] picks up the metric fallback */
.hub-main>h2{font-family:Orbitron,"Orbitron-fb",Rajdhani,sans-serif}

/* ---- 1. header: hairline neon rule, active chip, press ------------------ */
/* .hub-header is already sticky (both breakpoints) so it is a containing block for the hairline; never set position here: top:-62px rides along */
.hub-header::before{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,transparent,var(--o-50) 30%,var(--c-30) 70%,transparent);pointer-events:none}
.hub-brand{letter-spacing:.03em;text-shadow:0 0 14px rgb(255 149 0 / .25)}
.hub-nav a{transition:background var(--t-fast) var(--e-out),color var(--t-fast) var(--e-out),transform var(--t-fast) var(--e-out),box-shadow var(--t-base) var(--e-out)}
@media(hover:hover){.hub-nav a:hover{background:var(--hub-card-2)}}
.hub-nav a:active{transform:scale(.95)}
.hub-nav a[aria-current=page],.hub-nav-days a[aria-current=page]{color:#000;background:var(--hub-orange);border-radius:999px;box-shadow:var(--glow-o)}  /* [OVERRIDE] 6px radius */
@media(hover:hover){.hub-nav a[aria-current=page]:hover{background:var(--hub-orange)}}
.hub-nav .hub-join{box-shadow:0 0 14px var(--o-35)}
@media(hover:hover){.hub-nav .hub-join:hover{background:var(--hub-orange);box-shadow:0 0 22px var(--o-50)}}
@media(max-width:699.98px){.hub-nav,.hub-nav-days{mask-image:linear-gradient(90deg,#000 calc(100% - 44px),transparent);-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 44px),transparent);padding-right:44px;scroll-padding-inline:16px}.hub-header::after{display:none}}
@media(min-width:700px){.hub-header{background:rgb(10 5 20 / .82);backdrop-filter:blur(10px) saturate(1.2);-webkit-backdrop-filter:blur(10px) saturate(1.2)}}

/* ---- 2. hero ------------------------------------------------------------ */
.hub-hero{position:relative}
.hub-hero h1{font-size:var(--fs-4);letter-spacing:.015em;line-height:1.06;margin:.15em 0 .35em;text-shadow:0 0 24px var(--o-20)}  /* [OVERRIDE] size → scale */
.hub-kicker{display:inline-flex;align-items:flex-start;gap:10px;text-wrap:balance;max-width:36ch}
.hub-kicker::before{content:"";width:22px;height:2px;margin-top:.5em;background:var(--hub-orange);box-shadow:0 0 8px var(--hub-orange);flex:0 0 auto}
/* 2a. photo hero (hub, day, venue, free, highlights, tonight …) */
.hub-hero--photo{isolation:isolate;margin:0 calc(-1*var(--gutter)) 24px;padding:96px var(--gutter) 22px;min-height:min(58svh,520px);display:flex;flex-direction:column;justify-content:flex-end;overflow:hidden;border-bottom:1px solid var(--hub-line)}
.hub-hero-img,.hub-hero-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 42%;z-index:-2;margin:0;display:block}
.hub-hero-img img{filter:saturate(1.05) contrast(1.04)}
.hub-hero--photo::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to bottom,rgb(10 5 20 / .6),rgb(10 5 20 / 0) 34%),var(--g-hero),var(--g-hero-side)}
.hub-hero--photo::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--g-rule);opacity:.9;pointer-events:none}
.hub-hero--photo h1{text-shadow:0 2px 14px rgb(10 5 20 / .9),0 0 30px var(--o-20)}
.hub-hero--photo .hub-kicker{text-shadow:0 1px 8px rgb(10 5 20 / .95);margin-top:0}
.hub-hero--photo .hub-lead{text-shadow:0 1px 6px rgb(10 5 20 / .9)}
.hub-credit--hero{position:absolute;right:var(--gutter);top:14px;z-index:1;margin:0;font-size:.68rem;color:var(--hub-ink-2);background:rgb(10 5 20 / .62);padding:3px 10px;border-radius:999px;max-width:70%;text-align:right;line-height:1.35}
.hub-credit--hero a{color:inherit;padding:0;display:inline}
@media(max-width:699.98px){.hub-hero--photo .hub-credit--hero{position:static;display:inline-block;margin:14px 0 0;max-width:none;text-align:left;font-size:.66rem;opacity:.85}.hub-hero--photo{padding-bottom:18px}:root{--g-hero:linear-gradient(to top,var(--hub-bg) 0,rgb(10 5 20 / .92) 46%,rgb(10 5 20 / .5) 72%,rgb(10 5 20 / .08) 100%)}}
/* the hero holds kicker + H1 + lead only; everything else moves to a tools card beneath it (generator) */
.hub-hero-tools{margin:-10px 0 24px;padding:14px 16px 16px;background:var(--hub-card);border:1px solid var(--hub-line);border-radius:14px;box-shadow:var(--sh-2)}
.hub-hero-tools>:first-child{margin-top:0}.hub-hero-tools>:last-child{margin-bottom:0}
.hub-hero-tools .hub-explore{margin:12px 0;background:var(--hub-bg)}
.hub-hero-tools .hub-lead{font-size:1rem}
.hub-hero-tools .hub-nav-days{margin:0 0 10px}
@media(min-width:700px){.hub-hero-tools{margin:-6px 0 28px;padding:18px 24px 20px;border-radius:16px}}
.hub-hero--photo .hub-kicker{background:rgb(10 5 20 / .7);padding:4px 10px 4px 8px;border-radius:999px}  /* measured: kicker over mid-hero photo was 1.4–2.4:1 on desktop */
@media(min-width:700px){:root{--g-hero:linear-gradient(to top,var(--hub-bg) 0%,rgb(10 5 20 / .88) 40%,rgb(10 5 20 / .5) 70%,rgb(10 5 20 / .08) 100%)}.hub-hero--photo{min-height:420px;padding:120px 40px 34px;margin:12px 0 28px;border:1px solid var(--hub-line);border-radius:18px;box-shadow:var(--sh-2)}.hub-hero--photo::after{left:18px;right:18px}}
/* 2b. plain hero (no photo): purple-black with an orange/cyan haze, same silhouette */
.hub-hero--plain{isolation:isolate;margin:12px 0 var(--s-6,24px);padding:24px 18px 20px;border:1px solid var(--hub-line);border-radius:18px;background:radial-gradient(120% 80% at 100% 0%,var(--o-12),transparent 55%),radial-gradient(80% 60% at 0% 100%,var(--c-08),transparent 60%),linear-gradient(135deg,#1a1030,var(--hub-bg-2));overflow:hidden}
.hub-hero--plain::after{content:"";position:absolute;left:18px;right:18px;bottom:0;height:2px;background:var(--g-rule);opacity:.9}
@media(min-width:700px){.hub-hero--plain{padding:36px 40px 28px}}
/* 2b2. event pages: the header block gets the plain-hero surface */
.hub-event-head{margin:8px 0 22px}
.hub-event-head h1{font-size:clamp(1.45rem,1.05rem + 2.4vw,2.4rem);line-height:1.12}
.hub-event-head .hub-lead{max-width:none}
.hub-event-head .hub-ctas{margin:14px 0 0}
/* 2c. live pill (tonight) */
.hub-live{display:inline-flex;align-items:center;gap:8px;min-height:32px;padding:0 12px 0 10px;border-radius:999px;background:rgb(18 61 36 / .9);color:var(--st-on);font-weight:700;font-size:.85rem;letter-spacing:.05em;text-transform:uppercase;margin:0 0 10px;box-shadow:0 0 0 1px rgb(123 227 164 / .3)}
.hub-live .hub-clock{font-family:Orbitron,"Orbitron-fb",sans-serif;font-variant-numeric:tabular-nums;color:var(--hub-cyan);text-shadow:var(--glow-text-c);letter-spacing:.04em}
.hub-dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--st-on);flex:0 0 auto}
.hub-dot::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid var(--st-on);opacity:0}
.hub-ev[data-live] .hub-t::before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--st-on);margin-right:7px;vertical-align:1px;box-shadow:0 0 6px var(--st-on)}
.hub-ev[data-live] .hub-t{white-space:normal;line-height:1.3}  /* [OVERRIDE] nowrap: 'on now · until 22:00' wraps inside its column */
.hub-ev[data-live]{border-color:rgb(123 227 164 / .35)}
.hub-ev[data-live] .hub-t{color:var(--st-on)}

/* ---- 3. section headings: orange rule, counter, uppercase count --------- */
.hub-day h2,.hub-highlights h2,.hub-guides h2,.hub-faqs h2,.hub-join h2,.hub-about h2,.hub-main>h2{font-size:var(--fs-3);letter-spacing:.015em;line-height:1.2;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;padding-bottom:8px;border-bottom:1px solid var(--hub-line);background:var(--g-rule) no-repeat 0 100%/45% 2px}  /* [OVERRIDE] size */
.hub-highlights h2,.hub-join h2{border-bottom:0;background:none;padding-bottom:0}
.hub-day h2 .hub-n,.hub-highlights h2 .hub-n{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--hub-muted);font-weight:600}
.hub-day h2 .hub-done{color:var(--st-on)}
.hub-main{counter-reset:hubsec}
.hub-day>h2{display:block}  /* inline flow: counter, title and count wrap like text, nothing orphans */
.hub-day>h2 .hub-n{margin-left:10px}
.hub-day>h2::before{counter-increment:hubsec;content:counter(hubsec,decimal-leading-zero);display:inline-block;font-size:.95rem;line-height:1;margin-right:10px;vertical-align:.1em;color:var(--hub-orange);letter-spacing:.1em;font-weight:700;text-shadow:0 0 12px var(--o-35)}
.hub-day:has(>h2+.hub-related)>h2::before{content:none;counter-increment:none}  /* A–Z letter sections are not numbered */  /* A–Z letter sections are not numbered */
.hub-past>h2::before{color:var(--hub-muted);text-shadow:none}
.hub-hour{display:flex;align-items:center;gap:10px;color:var(--hub-cyan);font-family:Orbitron,"Orbitron-fb",sans-serif;font-size:.82rem;letter-spacing:.1em;text-transform:uppercase;margin:1.2rem 0 .5rem}
.hub-hour::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--c-30),transparent)}

/* ---- 4. event rows ------------------------------------------------------ */
.hub-list>.hub-ev{min-width:0}  /* a grid item never widens its list past the viewport */
@media(max-width:379.98px){.hub-s::before{display:none}.hub-tix{min-width:82px}.hub-t{font-size:.72rem}}
.hub-ev{transition:background var(--t-fast) var(--e-out),border-color var(--t-fast) var(--e-out),transform var(--t-fast) var(--e-out),box-shadow var(--t-base) var(--e-out)}
@media(hover:hover){.hub-ev:hover{border-color:var(--hub-line-2);background:var(--hub-card-2)}}
.hub-ev:has(.hub-evlink:active){transform:scale(.995);background:var(--hub-card-2)}
.hub-ev:has(.hub-evlink:focus-visible){box-shadow:var(--glow-c)}
.hub-t{font-family:Orbitron,"Orbitron-fb",Rajdhani,sans-serif;font-size:.78rem;letter-spacing:.04em;font-weight:700}  /* [OVERRIDE] face */
.hub-ev strong{font-size:var(--fs-2);line-height:1.25}  /* [OVERRIDE] 1.05rem */
.hub-l{color:var(--hub-muted)}
/* long lists (≥10 rows): one card, rule-separated rows, whole row tappable */
.hub-list--table{gap:0;background:var(--hub-card);border:1px solid var(--hub-line);border-radius:14px;overflow:clip}
.hub-list--table .hub-ev{position:relative;border:0;border-radius:0;border-top:1px solid var(--hub-line);background:transparent}
.hub-list--table .hub-ev:first-child{border-top:0}
@media(hover:hover){.hub-list--table .hub-ev:hover{background:var(--o-06)}}
.hub-list--table .hub-ev[data-live]{box-shadow:inset 3px 0 0 var(--st-on)}
.hub-list--table .hub-evlink::after{content:"";position:absolute;inset:0}
.hub-list--table .hub-evlink{position:static}
.hub-list--table .hub-s,.hub-list--table .hub-tix,.hub-list--table .hub-l a{position:relative;z-index:1}
.hub-list--table .hub-ev:has(.hub-evlink:focus-visible){box-shadow:inset 0 0 0 2px var(--hub-cyan)}
/* status pills: colour as a glow, dot as a non-colour cue */
.hub-s{border:1px solid transparent;transition:box-shadow var(--t-base) var(--e-out)}
.hub-s::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:6px;background:currentColor;vertical-align:1px}
.hub-on_sale{box-shadow:0 0 0 1px rgb(123 227 164 / .35),0 0 10px rgb(123 227 164 / .25)}
.hub-last_tickets{box-shadow:0 0 0 1px rgb(255 196 107 / .4),0 0 12px rgb(255 196 107 / .25)}
.hub-sold_out{box-shadow:0 0 0 1px rgb(255 154 154 / .25)}
.hub-free,.hub-free_rsvp{box-shadow:0 0 0 1px rgb(143 208 255 / .35),0 0 10px rgb(143 208 255 / .25)}
.hub-check{opacity:.85}
.hub-sold_out::before,.hub-check::before{opacity:.5}
.hub-past .hub-s{filter:saturate(.4)}
/* tickets button */
.hub-tix{transition:background var(--t-fast) var(--e-out),color var(--t-fast),transform var(--t-fast) var(--e-out),box-shadow var(--t-base) var(--e-out)}
@media(hover:hover){.hub-tix:hover{background:var(--o-12);box-shadow:var(--glow-o)}}
.hub-tix:active{background:var(--hub-orange);color:#000;transform:scale(.96)}
@media(min-width:700px){.hub-ev{grid-template-columns:118px 1fr auto auto}.hub-list--table .hub-ev{padding:12px 16px}.hub-list:has([data-live]) .hub-ev{grid-template-columns:150px 1fr auto auto}.hub-t{font-size:.82rem}}
.hub-list--table .hub-evlink:focus-visible{outline:none}  /* the row draws the ring */

/* ---- 5. buttons, cards, guides ----------------------------------------- */
.hub-btn{transition:transform var(--t-fast) var(--e-out),box-shadow var(--t-base) var(--e-out),background var(--t-fast);box-shadow:0 4px 14px var(--o-20)}
@media(hover:hover){.hub-btn:hover{box-shadow:0 6px 22px var(--o-35)}}
.hub-btn:active{transform:scale(.97);background:var(--hub-orange-deep)}
.hub-btn-ghost{box-shadow:none}
@media(hover:hover){.hub-btn-ghost:hover{background:var(--o-12);box-shadow:var(--glow-o)}}
.hub-btn-ghost:active{background:var(--o-20)}
.hub-guide{position:relative;overflow:hidden;transition:transform var(--t-base) var(--e-out),box-shadow var(--t-base) var(--e-out),border-color var(--t-fast)}
.hub-guide::after{content:"→";position:absolute;right:14px;bottom:10px;color:var(--hub-orange);opacity:0;transform:translateX(-6px);transition:opacity var(--t-base) var(--e-out),transform var(--t-base) var(--e-out)}
@media(hover:hover){.hub-guide:hover{transform:translateY(-2px);box-shadow:var(--sh-2),var(--glow-o)}}
@media(hover:hover){.hub-guide:hover::after{opacity:1;transform:none}}
.hub-highlights{box-shadow:var(--sh-2)}
.hub-hl strong a{text-decoration:none;color:var(--hub-ink);background:linear-gradient(var(--hub-orange),var(--hub-orange)) no-repeat 0 100%/0 2px;transition:background-size var(--t-base) var(--e-out)}
@media(hover:hover){.hub-hl strong a:hover{background-size:100% 2px}}
.hub-hl strong a:focus-visible{background-size:100% 2px}
.hub-tag{font-family:Orbitron,"Orbitron-fb",sans-serif;letter-spacing:.06em;box-shadow:0 0 10px var(--o-20)}
.hub-alerts p{box-shadow:inset 3px 0 12px -6px var(--o-50);transition:border-color var(--t-fast)}
@media(hover:hover){.hub-alerts p:hover{border-color:var(--o-50)}}
.hub-explore{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:10px 12px;font-size:0;line-height:1}  /* [OVERRIDE] the ' · ' text nodes collapse to 0; chips carry the size */
.hub-explore .hub-n{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;font-weight:700;margin-right:2px}
.hub-explore a{font-size:.9rem;line-height:1;display:inline-flex;align-items:center;min-height:32px;padding:0 11px;border-radius:999px;border:1px solid var(--hub-line-2);color:var(--hub-ink);text-decoration:none;font-weight:600;transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),transform var(--t-fast)}  /* [OVERRIDE] 6b inline-block padding */
@media(hover:hover){.hub-explore a:hover{background:var(--o-12);border-color:var(--o-50);color:var(--hub-orange)}}
.hub-explore a:active{transform:scale(.95)}
.hub-join{box-shadow:var(--sh-2),inset 0 0 40px var(--o-06);border-color:var(--o-20)}
/* FAQ */
.hub-faq{transition:border-color var(--t-fast) var(--e-out),background var(--t-fast) var(--e-out)}
@media(hover:hover){.hub-faq:hover{border-color:var(--hub-line-2)}}
.hub-faq[open]{border-color:var(--o-35);background:var(--hub-card-2)}
.hub-faq summary::after{transition:transform var(--t-base) var(--e-out)}
.hub-faq[open] summary::after{content:"+";transform:rotate(45deg)}  /* [OVERRIDE] "–" → rotated + */
.hub-faq p{color:var(--hub-ink-2);max-width:62ch}
@supports selector(::details-content){.hub-faq::details-content{opacity:0;transform:translateY(-4px);transition:opacity var(--t-base) var(--e-out),transform var(--t-base) var(--e-out),content-visibility var(--t-base) allow-discrete}.hub-faq[open]::details-content{opacity:1;transform:none}}
/* Dutch block */
.hub-nl{position:relative;background:linear-gradient(135deg,#0e1a1f,var(--hub-card));box-shadow:inset 0 0 24px var(--c-08)}
.hub-nl h2{font-size:var(--fs-2);color:var(--hub-cyan);text-shadow:0 0 10px var(--c-30)}
.hub-nl::before{content:"NL";position:absolute;top:10px;right:14px;font:700 .68rem/1 Orbitron,"Orbitron-fb",sans-serif;letter-spacing:.12em;color:var(--hub-cyan);opacity:.7}
/* photo figures (event pages) */
.hub-figure{position:relative;isolation:isolate;box-shadow:var(--sh-2)}
.hub-figure--tint::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgb(10 5 20 / .9) 0,rgb(10 5 20 / 0) 55%);pointer-events:none;z-index:0}
.hub-figure--tint .hub-credit{font-size:.72rem;line-height:1.35}
@media(min-width:700px){.hub-figure img{aspect-ratio:21/9;object-fit:cover}}
.hub-figure--tint figcaption{position:absolute;left:0;right:0;bottom:0;padding:8px 12px;z-index:1}
.hub-figure--tint .hub-credit{text-shadow:0 1px 4px #000}
/* venue tiles (/ade-2026/venues/) */
.hub-vgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0 0 14px}
@media(min-width:560px){.hub-vgrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(min-width:900px){.hub-vgrid{grid-template-columns:repeat(4,minmax(0,1fr))}}
.hub-vtile{position:relative;isolation:isolate;display:grid;align-content:end;gap:2px;min-height:148px;padding:14px;border-radius:14px;overflow:clip;background:linear-gradient(160deg,var(--o-20),var(--hub-card) 70%);border:1px solid var(--hub-line);color:var(--hub-ink);text-decoration:none;transition:transform var(--t-base) var(--e-out),box-shadow var(--t-base) var(--e-out),border-color var(--t-fast)}
.hub-vtile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-1;filter:grayscale(1) contrast(1.1);mix-blend-mode:luminosity;opacity:.62;transition:opacity var(--t-base) var(--e-out),transform var(--t-slow) var(--e-out)}
.hub-vtile::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,var(--hub-bg) 15%,rgb(10 5 20 / .45) 60%,var(--o-12))}
.hub-vtile{min-width:0}
.hub-vtile strong{overflow-wrap:anywhere;font-family:Orbitron,"Orbitron-fb",sans-serif;font-size:.92rem;line-height:1.2;letter-spacing:.01em;text-shadow:0 1px 6px #000}
.hub-vtile .hub-n{color:var(--hub-muted);text-shadow:0 1px 4px #000;font-size:.8rem;line-height:1.3;font-weight:400}
.hub-vgrid+.hub-credit{line-height:1.45}.hub-vgrid+.hub-credit a{display:inline;padding:0}
@media(hover:hover){.hub-vtile:hover{transform:translateY(-2px);border-color:var(--o-35);box-shadow:var(--sh-2),var(--glow-o)}}
@media(hover:hover){.hub-vtile:hover img{opacity:.8;transform:scale(1.04)}}
.hub-vtile:focus-visible{outline:3px solid var(--hub-cyan);outline-offset:2px}
/* related / A–Z lists: rule-separated rows instead of bullets */
.hub-related{list-style:none;padding:0}
.hub-related li{padding:10px 0;border-top:1px solid var(--hub-line);transition:background var(--t-fast)}
.hub-related li:first-child{border-top:0}
.hub-related li .hub-n{display:block;margin-top:2px}
.hub-related li:has(>strong) .hub-n{display:inline;margin:0}  /* artists A–Z: several events per name stay inline */
.hub-s{display:inline-flex;align-items:center;vertical-align:middle}
.hub-hl .hub-n a:last-child{white-space:nowrap}
/* table */
.hub-table th{font-family:Orbitron,"Orbitron-fb",sans-serif;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase}
@media(hover:hover){.hub-table tbody tr:hover td{background:var(--o-06)}}

.hub-crumbs{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}  /* [OVERRIDE] 6b flex: one line, long last crumb truncates */
.hub-crumbs a{display:inline-block}
/* ---- 6. footer ----------------------------------------------------------- */
.hub-footer{position:relative;margin-top:48px;padding-top:30px;border-top:0;background:linear-gradient(to bottom,var(--hub-bg),var(--hub-bg-2))}  /* [OVERRIDE] border → gradient hairline */
.hub-footer::before{content:"";position:absolute;left:50%;top:0;width:min(60%,420px);height:1px;transform:translateX(-50%);background:linear-gradient(90deg,transparent,var(--o-50),transparent)}
.hub-footer a{color:var(--hub-muted);text-decoration-color:transparent;transition:color var(--t-fast),text-decoration-color var(--t-fast)}
@media(hover:hover){.hub-footer a:hover{color:var(--hub-orange);text-decoration-color:currentColor}}

/* ---- 7. long pages: render only what is on screen ----------------------- */
.hub-faqs{content-visibility:auto;contain-intrinsic-size:auto 620px}.hub-about{content-visibility:auto;contain-intrinsic-size:auto 250px}  /* never on <details> (closed = 47px, placeholder would mis-land every #anchor) nor on .hub-day (h2 counter needs layout) */

/* ---- 8. motion (all inside no-preference) -------------------------------- */
@media(prefers-reduced-motion:no-preference){
  .hub-hero-body>*,.hub-hero--plain>*{animation:hub-in var(--t-reveal) var(--e-out) 60ms both}  /* children, not the wrapper: a transformed wrapper would become the credit's containing block */
  @keyframes hub-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  @supports(animation-timeline:view()){
    .hub-vtile,.hub-figure{animation:hub-in linear both;animation-timeline:view();animation-range:entry 0% entry 40%}  /* decorative only: the guide cards carry internal-link anchor text and stay opaque for 900px-tall renderers */
  }
  .hub-dot::after{animation:hub-ring 2s var(--e-out) infinite}  /* transform+opacity only: compositor, one element */
  @keyframes hub-ring{from{transform:scale(.6);opacity:.75}to{transform:scale(1.7);opacity:0}}
  .hub-now{transition:opacity var(--t-slow) var(--e-out),transform var(--t-slow) var(--e-out),display var(--t-slow) allow-discrete}
  @starting-style{.hub-now:not([hidden]){opacity:0;transform:translateY(-6px)}}
  ::view-transition-old(root){animation-duration:160ms}
  ::view-transition-new(root){animation-duration:220ms}
  .hub-header{view-transition-name:hub-header}
}
@view-transition{navigation:auto}
@media(prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root){animation:none}}

@media print{.hub-vtile,.hub-figure,.hub-hero-body>*{animation:none;opacity:1}}

/* phase 6d */

/* ==========================================================================
   ADE 2026 hub — phase 6D: "the week in pictures" carousel. APPEND after the
   phase-6c layer. CSS scroll-snap, no JS; one card per swipe on phones,
   ~3 visible on desktop with a thin scrollbar. Brand tokens only.
   ========================================================================== */
.hub-pics{margin:1.6rem 0 1.2rem}
.hub-pics h2{font-family:Orbitron,"Orbitron-fb",Rajdhani,sans-serif;font-size:var(--fs-3);letter-spacing:.015em;line-height:1.2;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin:0 0 .6rem;padding-bottom:8px;border-bottom:1px solid var(--hub-line);background:var(--g-rule) no-repeat 0 100%/45% 2px}
.hub-pics h2 .hub-n{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;font-weight:600}
.hub-pics>.hub-lead{font-size:.98rem;margin-bottom:.6rem}
.hub-car{list-style:none;margin:0 calc(-1*var(--gutter));padding:6px var(--gutter) 14px;display:grid;grid-auto-flow:column;grid-auto-columns:min(74vw,300px);gap:12px;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:var(--gutter);-webkit-overflow-scrolling:touch;scrollbar-width:none}
.hub-car::-webkit-scrollbar{display:none}
.hub-pic{position:relative;isolation:isolate;scroll-snap-align:start;border-radius:14px;overflow:clip;background:var(--hub-card);border:1px solid var(--hub-line);aspect-ratio:4/5;display:grid;align-content:end;box-shadow:var(--sh-2);transition:border-color var(--t-fast),transform var(--t-base) var(--e-out)}
.hub-pic picture,.hub-pic img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2;margin:0;display:block}  /* photo below the ::before gradient */
.hub-pic img{transition:transform var(--t-slow) var(--e-out)}
.hub-pic::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,rgb(10 5 20 / .94) 0,rgb(10 5 20 / .55) 42%,rgb(10 5 20 / .06) 72%)}
.hub-pic-body{padding:14px 14px 34px}
.hub-pic-k{display:inline-block;font:700 .64rem/1.3 Orbitron,"Orbitron-fb",Rajdhani,sans-serif;letter-spacing:.1em;text-transform:uppercase;color:var(--hub-orange);margin-bottom:7px;padding:3px 7px;border-radius:6px;background:rgb(10 5 20 / .66)}
.hub-pic strong{display:block;font-size:1.04rem;line-height:1.25;text-shadow:0 1px 8px rgb(10 5 20 / .9);text-wrap:balance}
.hub-pic-link{color:var(--hub-ink);text-decoration:none}
.hub-pic-link::after{content:"";position:absolute;inset:0}
.hub-pic-credit{position:absolute;left:14px;right:14px;bottom:7px;z-index:1;font-size:.64rem;line-height:1.3;color:var(--hub-muted);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:6px 0;text-shadow:0 1px 4px #000}
.hub-pic-credit:hover{color:var(--hub-ink)}
.hub-pic:has(.hub-pic-link:focus-visible){outline:3px solid var(--hub-cyan);outline-offset:-3px}  /* outline paints above the photo; an inset shadow would not */
.hub-pic-link:focus-visible{outline:none}
.hub-pic-more{align-content:center;justify-items:center;text-align:center;background:linear-gradient(160deg,var(--o-12),var(--hub-card) 70%);padding:18px}
.hub-pic-more::before{content:none}
.hub-pic-more strong{font-family:Orbitron,"Orbitron-fb",sans-serif;font-size:1rem}
@media(hover:hover){.hub-pic:hover{border-color:var(--o-35)}.hub-pic:hover img{transform:scale(1.04)}}
@media(max-width:699.98px){.hub-car{mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}}
@media(min-width:700px){.hub-car{grid-auto-columns:280px;margin:0;padding:6px 0 16px;scrollbar-width:thin;scrollbar-color:var(--hub-line-2) transparent;scroll-padding-inline:0}.hub-car::-webkit-scrollbar{display:block;height:6px}.hub-car::-webkit-scrollbar-thumb{background:var(--hub-line-2);border-radius:999px}}
/* no scroll-reveal on cards: they carry link text and must be opaque for every renderer */
@media(prefers-reduced-motion:reduce){.hub-car{scroll-snap-type:none}}
