:root{
  --bg:#0B0C0B;
  --panel:#111312;
  --surface:#151816;
  --ivory:#F4F0E6;
  --muted:#A8A49B;
  --dim:#8F8A80;
  --volt:#18D85F;
  --volt-hover:#58EE8A;
  --volt-ink:#071108;
  --border:rgb(244 240 230 / 0.16);
  --border-soft:rgb(244 240 230 / 0.10);
  --grid:rgb(244 240 230 / 0.055);
  --volt-soft:rgb(24 216 95 / 0.14);
  --sans:"Noto Sans TC","PingFang TC",sans-serif;
  --disp:"Archivo","Noto Sans TC",sans-serif;
  --mono:"JetBrains Mono",ui-monospace,monospace;
  --bar-h:92px;--banner-h:0px;--header-h:calc(var(--bar-h) + var(--banner-h));
  --mx:50%;
  --my:50%;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;background:var(--bg)}
body{min-width:320px;background:var(--bg);color:var(--ivory);font-family:var(--sans);font-weight:500;line-height:1.75;overflow-x:hidden}
body::before{content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;background:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:72px 72px}
body::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(circle 300px at var(--mx) var(--my),var(--volt-soft),transparent 76%);opacity:.52}
body.nav-open{overflow:hidden}
a{color:inherit;text-decoration:none}
button,input{font:inherit}
button{color:inherit}
img{display:block;max-width:100%}
:focus-visible{outline:2px solid var(--volt);outline-offset:4px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip-link{position:fixed;left:20px;top:12px;z-index:999;translate:0 -180%;background:var(--volt);color:var(--volt-ink);padding:10px 16px;font-weight:900}
.skip-link:focus{translate:0 0}
.wrap{width:min(1180px,calc(100% - 84px));margin-inline:auto}

/* Shared orbital header */
.site-header{position:fixed;inset:0 0 auto;z-index:100;background:rgb(11 12 11 / .86);-webkit-backdrop-filter:blur(16px) saturate(120%);backdrop-filter:blur(16px) saturate(120%);border-bottom:1px solid var(--border)}
.season-banner{margin:0;height:36px;display:flex;align-items:center;justify-content:center;padding:0 16px;background:var(--volt-soft);color:var(--ivory);font-size:13px;letter-spacing:.02em;text-align:center;border-bottom:1px solid var(--border-soft)}
.season-banner-short{display:none}
:root:has(.season-banner){--banner-h:36px}
@media(max-width:1060px){.season-banner{font-size:12px}.season-banner-long{display:none}.season-banner-short{display:inline}}
.header-inner{height:var(--bar-h);width:min(1500px,calc(100% - 84px));margin-inline:auto;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:16px}
.orb-brand{display:flex;align-items:center;gap:16px;min-width:220px}
.orb-brand img{height:34px;width:auto;background:transparent}
.brand-state{display:grid;gap:2px;padding-left:14px;border-left:1px solid var(--border)}
.brand-state strong{color:var(--volt);font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.16em}
.brand-state span{color:var(--dim);font-family:var(--mono);font-size:8px;letter-spacing:.1em}
.site-nav{display:flex;justify-content:center;align-items:center;gap:2px;min-width:0}
.site-nav a{min-height:44px;display:flex;align-items:center;padding:10px;color:var(--muted);font-family:var(--mono);font-size:12px;letter-spacing:.06em;border:1px solid transparent;white-space:nowrap;transition:color .2s,border-color .2s,background-color .2s,box-shadow .2s}
.site-nav a:hover,.site-nav a[aria-current="page"]{color:var(--ivory);border-color:var(--border);background:rgb(244 240 230 / .025)}
.site-nav a[aria-current="page"]{box-shadow:inset 0 -2px 0 var(--volt)}
.nav-more{position:relative;flex:0 0 auto}
.nav-more summary{display:flex;align-items:center;min-height:44px;padding:10px 25px 10px 10px;border:1px solid transparent;color:var(--muted);font-family:var(--mono);font-size:12px;letter-spacing:.06em;list-style:none;white-space:nowrap;cursor:pointer;transition:color .2s,border-color .2s,background-color .2s,box-shadow .2s}
.nav-more summary::-webkit-details-marker{display:none}
.nav-more summary::after{content:"⌄";position:absolute;right:11px;color:var(--volt);font-size:12px;transition:transform .2s}
.nav-more[open] summary::after{transform:rotate(180deg)}
.nav-more summary:hover,.nav-more summary:focus-visible,.nav-more-active summary{border-color:var(--border);color:var(--ivory);background:rgb(244 240 230 / .025);outline:none}
.nav-more-active summary{box-shadow:inset 0 -2px 0 var(--volt)}
.nav-more-links{position:absolute;top:calc(100% + 7px);right:0;z-index:102;display:grid;min-width:158px;padding:6px;border:1px solid var(--border);background:var(--panel);box-shadow:0 18px 40px rgb(0 0 0 / .32)}
.nav-more-links a{justify-content:flex-start;padding-inline:12px}
.header-cta{min-height:44px;display:flex;align-items:center;gap:10px;padding:10px 16px;border:1px solid var(--volt);color:var(--volt);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.08em;transition:.2s}
.header-cta::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--volt);box-shadow:0 0 12px var(--volt);animation:orb-pulse 1.8s ease-in-out infinite}
.header-cta:hover{background:var(--volt);color:var(--volt-ink);box-shadow:0 0 28px rgb(24 216 95 / .2)}
.menu-toggle{display:none;min-width:44px;min-height:44px;padding:0 14px;white-space:nowrap;background:none;border:1px solid var(--border);color:var(--ivory);font-family:var(--mono);font-size:11px;letter-spacing:.08em}
@keyframes orb-pulse{50%{opacity:.35;scale:.66}}

/* Keep translated navigation readable: collapse before labels begin competing for space. */
@media(max-width:1600px){
  .header-inner{width:min(100% - 48px,1500px);grid-template-columns:1fr auto auto auto;gap:12px}
  .orb-brand{min-width:0}
  .brand-state{display:none}
  .site-nav{position:fixed;inset:var(--header-h) 0 auto;background:var(--panel);border-bottom:1px solid var(--border);display:grid;grid-template-columns:repeat(3,1fr);padding:16px 24px;translate:0 -140%;opacity:0;visibility:hidden;pointer-events:none;transition:translate .22s,opacity .22s,visibility 0s linear .22s}
  body.nav-open .site-nav{translate:0 0;opacity:1;visibility:visible;pointer-events:auto;transition:translate .22s,opacity .22s,visibility 0s}
  .site-nav a{justify-content:center;border-color:var(--border-soft)}
  .nav-more{position:static;display:grid;grid-template-columns:1fr}
  .nav-more summary{justify-content:center;border:1px solid var(--border-soft)}
  .nav-more-links{position:static;min-width:0;padding:0;border:0;background:transparent;box-shadow:none}
  .nav-more-links a{justify-content:center;border-color:var(--border-soft)}
  .menu-toggle{display:block}
}

/* Page frame */
main{position:relative;padding-top:var(--header-h)}
.page-hero{position:relative;min-height:430px;display:grid;align-items:end;border-bottom:1px solid var(--border);overflow:hidden}
.page-hero::before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 0 49%,rgb(244 240 230 / .018) 50% 51%,transparent 52% 100%);background-size:100% 6px;opacity:.55}
.page-hero::after{content:"";position:absolute;right:7%;top:50%;width:min(34vw,420px);aspect-ratio:1;translate:0 -50%;border:1px solid rgb(24 216 95 / .17);border-radius:50%;box-shadow:inset 0 0 0 72px rgb(24 216 95 / .015),inset 0 0 0 144px rgb(24 216 95 / .012)}
.hero-inner{position:relative;z-index:2;padding-block:78px 64px}
.page-code{display:flex;align-items:center;gap:12px;color:var(--volt);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.18em;margin-bottom:22px}
.page-code::before{content:"";width:40px;height:2px;background:var(--volt);box-shadow:0 0 14px rgb(24 216 95 / .5)}
.page-hero h1{max-width:860px;font-family:var(--disp);font-size:clamp(46px,7.4vw,104px);font-weight:900;line-height:.92;letter-spacing:-.04em}
.page-hero h1 span{display:block;margin-top:16px;color:var(--muted);font-family:var(--mono);font-size:clamp(11px,1.1vw,15px);font-weight:700;letter-spacing:.18em;line-height:1.5}
.page-lead{max-width:670px;margin-top:24px;color:var(--muted);font-size:15px}
.page-index{position:absolute;z-index:1;right:5%;top:34px;color:rgb(244 240 230 / .055);font-family:var(--mono);font-size:clamp(110px,18vw,260px);font-weight:700;line-height:1;letter-spacing:-.1em;user-select:none}
.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}
.content-section{position:relative;padding-block:clamp(64px,8vw,104px);border-bottom:1px solid var(--border-soft)}
.content-section.tight{padding-top:0}
.section-head{display:grid;grid-template-columns:180px 1fr;gap:42px;align-items:end;margin-bottom:38px}
.section-code{display:grid;gap:8px;color:var(--volt);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.16em}
.section-code::before{content:"";width:34px;height:2px;background:var(--volt)}
.section-head h2{font-family:var(--disp);font-size:clamp(30px,4.2vw,56px);font-weight:900;line-height:1.08;letter-spacing:-.02em}
.section-head h2 small{display:block;margin-bottom:9px;color:var(--dim);font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.2em}

/* Shared modules */
.module{position:relative;border:1px solid var(--border);background:rgb(17 19 18 / .78);box-shadow:0 30px 80px rgb(0 0 0 / .22)}
.module::before,.module::after{content:"";position:absolute;left:-1px;top:-1px;background:var(--volt);box-shadow:0 0 10px var(--volt)}
.module::before{width:26px;height:2px}.module::after{width:2px;height:26px}
.module-bar{min-height:36px;border-bottom:1px solid var(--border-soft);display:flex;align-items:center;justify-content:space-between;gap:18px;padding:8px 15px;color:var(--dim);font-family:var(--mono);font-size:8px;letter-spacing:.14em}
.module-bar strong{display:flex;align-items:center;gap:7px;color:var(--volt);font-weight:700}
.module-bar strong::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--volt);box-shadow:0 0 8px var(--volt)}
.card-grid{display:grid;grid-template-columns:repeat(3,1fr)}
.card-grid.two{grid-template-columns:repeat(2,1fr)}
.orb-card{position:relative;padding:30px;border-right:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft);overflow:hidden}
.card-grid:not(.two) .orb-card:nth-child(3n){border-right:none}
.card-grid.two .orb-card:nth-child(2n){border-right:none}
.orb-card h3{font-size:19px;font-weight:900;line-height:1.35;margin:12px 0 9px}
.orb-card p{color:var(--muted);font-size:13.5px}
.orb-card .node{color:var(--volt);font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.16em}
.orb-card::after{content:attr(data-node);position:absolute;right:16px;bottom:2px;color:rgb(244 240 230 / .035);font-family:var(--mono);font-size:54px;font-weight:700;line-height:1}
.data-list{display:grid}
.data-list>div{display:grid;grid-template-columns:150px 1fr;gap:22px;padding:14px 0;border-top:1px solid var(--border-soft)}
.data-list dt{color:var(--dim);font-family:var(--mono);font-size:10px;letter-spacing:.1em}
.data-list dd{font-size:14px;font-weight:700}
.notice{display:flex;gap:14px;margin-top:24px;padding:18px 20px;border:1px solid rgb(24 216 95 / .28);background:rgb(24 216 95 / .035);color:var(--muted);font-size:13px}
.notice strong{flex:0 0 auto;color:var(--volt);font-family:var(--mono);font-size:10px;letter-spacing:.12em}
.button{min-height:46px;display:inline-flex;align-items:center;justify-content:center;text-align:center;gap:10px;padding:12px 22px;background:var(--volt);color:var(--volt-ink);font-family:var(--mono);font-size:11px;font-weight:700;letter-spacing:.08em;border:1px solid var(--volt);cursor:pointer;box-shadow:0 12px 38px rgb(24 216 95 / .16);transition:.2s}
.button:hover{background:var(--volt-hover);translate:0 -2px}
.button.ghost{background:transparent;color:var(--ivory);border-color:var(--border);box-shadow:none}
.button.ghost:hover{border-color:var(--volt);color:var(--volt);translate:0}
.tag{display:inline-flex;align-items:center;min-height:28px;padding:4px 9px;border:1px solid rgb(24 216 95 / .28);color:var(--volt);font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.12em}

/* Tabs */
.tablist{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--border);border-bottom:none;background:rgb(11 12 11 / .68)}
.tablist button{min-height:62px;padding:12px 18px;background:none;border:0;border-right:1px solid var(--border);color:var(--muted);cursor:pointer;text-align:left;transition:.2s}
.tablist button:last-child{border-right:0}
.tablist button:hover{background:rgb(244 240 230 / .025);color:var(--ivory)}
.tablist button[aria-selected="true"],.tablist button[aria-pressed="true"]{color:var(--ivory);background:var(--panel);box-shadow:inset 0 -3px 0 var(--volt)}
.tablist button strong{display:block;font-family:var(--disp);font-size:22px;font-weight:900;line-height:1}
.tablist button span{display:block;margin-top:5px;color:var(--dim);font-family:var(--mono);font-size:9px;letter-spacing:.1em}
.tabpanel[hidden]{display:none}

/* Registration */
.gateway-layout{display:grid;grid-template-columns:1.15fr .85fr;gap:24px}
.gateway-copy{padding:34px}
.gateway-copy h2{font-size:25px;font-weight:900;margin-bottom:12px}
.gateway-status{padding:30px;border:1px solid var(--volt);background:rgb(24 216 95 / .025)}
.status-line{display:flex;align-items:center;gap:10px;margin-bottom:18px;color:var(--volt);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.12em}
.status-line i{width:8px;height:8px;border-radius:50%;background:var(--volt);box-shadow:0 0 12px var(--volt)}
.race-panel{padding:34px}
.race-title{display:flex;align-items:end;justify-content:space-between;gap:18px;margin-bottom:22px}
.race-title strong{font-family:var(--disp);font-size:clamp(38px,6vw,72px);font-weight:900;line-height:.9}
.race-title span{color:var(--volt);font-weight:900}
.metric-grid{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--border-soft)}
.metric{padding:18px;border-right:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft)}
.metric:nth-child(3n){border-right:0}.metric:nth-last-child(-n+3){border-bottom:0}
.metric small{display:block;color:var(--dim);font-family:var(--mono);font-size:9px;letter-spacing:.1em;margin-bottom:5px}
.metric strong{font-size:14px}

/* Routes */
.route-workspace{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(260px,.8fr)}
.route-map{position:relative;min-height:500px;border-right:1px solid var(--border);background:rgb(8 9 8 / .66);overflow:hidden}
.route-map svg{width:100%;height:100%;min-height:500px}
.route-map-grid{position:absolute;inset:0;pointer-events:none;background:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:36px 36px}
.route-path{fill:none;stroke:var(--volt);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 5px rgb(24 216 95 / .62))}
.route-shadow{fill:none;stroke:rgb(244 240 230 / .1);stroke-width:12;stroke-linecap:round;stroke-linejoin:round}
.route-node{fill:var(--bg);stroke:var(--volt);stroke-width:3}
.route-map-label{position:absolute;left:18px;top:18px;z-index:2;padding:8px 10px;background:rgb(11 12 11 / .8);border:1px solid var(--border);color:var(--volt);font-family:var(--mono);font-size:9px;letter-spacing:.12em}
.route-info{padding:30px}
.route-info .distance{font-family:var(--disp);font-size:50px;font-weight:900;line-height:1}
.route-info .route-name{color:var(--volt);font-weight:900;margin:9px 0 18px}
.route-info .button{width:100%;margin-top:22px}
.cert-layout{display:grid;grid-template-columns:1.25fr .75fr}
.cert-image{display:grid;place-items:center;padding:18px;background:var(--ivory);border-right:1px solid var(--border)}
.cert-image img{max-height:620px;object-fit:contain}
.cert-info{padding:30px}
.cert-info h3{font-size:22px;line-height:1.35;margin:10px 0 20px}

/* Services */
.service-grid{display:grid;grid-template-columns:repeat(3,1fr)}
.service-node{border-right:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft)}
.service-node:nth-child(3n){border-right:0}.service-node:nth-last-child(-n+3){border-bottom:0}
.service-node summary{min-height:190px;padding:28px;cursor:pointer;list-style:none;position:relative}
.service-node summary::-webkit-details-marker{display:none}
.service-node summary::after{content:"＋";position:absolute;right:22px;top:22px;color:var(--volt);font-family:var(--mono)}
.service-node[open] summary::after{content:"−"}
.service-node h3{font-size:20px;margin:12px 0 8px}
.service-node p{color:var(--muted);font-size:13px}
.service-body{padding:0 28px 28px}

/* Race kit */
.shared-kit{display:grid;grid-template-columns:240px 1fr}
.product-surface{display:grid;place-items:center;min-height:230px;padding:18px;background:var(--ivory);overflow:hidden}
.product-surface picture{display:grid;place-items:center;width:100%;height:100%}
.product-surface img{max-height:260px;object-fit:contain}
.shared-kit-copy{display:flex;flex-direction:column;justify-content:center;padding:34px}
.shared-kit-copy h2{font-size:30px;margin:10px 0 6px}
.kit-grid{display:grid;grid-template-columns:repeat(4,1fr)}
.kit-grid.three{grid-template-columns:repeat(3,1fr)}
.kit-item{border-right:1px solid var(--border-soft)}
.kit-item .product-surface{height:min(300px,34vh);min-height:0}
.kit-item .product-surface picture{min-width:0;min-height:0}
.kit-item .product-surface img{width:100%;height:100%;min-width:0;min-height:0;max-height:100%;max-width:100%;object-fit:contain}
.kit-item:last-child{border-right:0}
.kit-copy{padding:18px 20px 24px}
.kit-copy h3{font-size:17px;margin-top:7px}
.kit-copy p{color:var(--muted);font-size:12px;margin-top:3px}
.media-open{width:100%;border:0;cursor:zoom-in}

/* News */
.filter-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:24px}
.filter-row button{min-height:44px;padding:9px 14px;border:1px solid var(--border);background:rgb(11 12 11 / .72);color:var(--muted);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.08em;cursor:pointer}
.filter-row button[aria-pressed="true"]{border-color:var(--volt);color:var(--volt);background:rgb(24 216 95 / .035)}
.news-list{display:grid}
.news-item{display:grid;grid-template-columns:128px 1fr auto;gap:24px;align-items:center;padding:24px;border-bottom:1px solid var(--border-soft);transition:.2s}
.news-item:last-child{border-bottom:0}
.news-item:hover{background:rgb(24 216 95 / .03);padding-left:30px}
.news-item time{color:var(--dim);font-family:var(--mono);font-size:10px}
.news-item h2{font-size:18px;line-height:1.4}
.news-item p{color:var(--muted);font-size:13px;margin-top:5px}
.news-item[hidden]{display:none}

/* FAQ */
.faq-tools{display:grid;grid-template-columns:1fr auto;gap:16px;margin-bottom:24px}
.search-field{min-height:48px;width:100%;padding:12px 16px;border:1px solid var(--border);background:rgb(11 12 11 / .76);color:var(--ivory)}
.search-field::placeholder{color:var(--dim)}
.faq-list{display:grid;gap:10px}
.faq-item{border:1px solid var(--border);background:rgb(17 19 18 / .74)}
.faq-item[open]{border-color:rgb(24 216 95 / .55)}
.faq-item summary{min-height:64px;display:grid;grid-template-columns:78px 1fr auto;gap:18px;align-items:center;padding:15px 20px;cursor:pointer;list-style:none;font-weight:900}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary::after{content:"＋";color:var(--volt);font-family:var(--mono)}
.faq-item[open] summary::after{content:"−"}
.faq-answer{padding:0 20px 22px 116px;color:var(--muted);font-size:14px}
.faq-answer a{display:inline-block;margin-top:10px;color:var(--volt);font-weight:700}
.faq-item[hidden]{display:none}
.empty-state{display:none;padding:26px;border:1px dashed var(--border);color:var(--muted)}
.empty-state.show{display:block}

/* Partners / contact / policy */
.partner-feature{display:grid;grid-template-columns:.75fr 1.25fr}
.partner-logo{display:grid;place-items:center;min-height:320px;padding:44px;background:var(--panel)}
.partner-logo img{width:min(240px,80%)}
.partner-copy{padding:40px}
.partner-copy h2{font-family:var(--disp);font-size:56px;line-height:1;margin:18px 0}
.channel-grid{display:grid;grid-template-columns:repeat(3,1fr)}
.channel-card{padding:28px;border-right:1px solid var(--border-soft)}
.channel-card:last-child{border-right:0}
.channel-card h3{font-size:19px;margin:12px 0 8px}
.channel-card p{color:var(--muted);font-size:13px;overflow-wrap:anywhere}
.channel-card .button{width:100%;margin-top:20px}
.policy-list{counter-reset:policy;display:grid;gap:12px}
.policy-node{counter-increment:policy;padding:30px 30px 30px 92px}
.policy-node::after{content:"0" counter(policy);position:absolute;left:24px;top:26px;color:var(--volt);font-family:var(--disp);font-size:30px;font-weight:900}
.policy-node h2{font-size:21px;margin-bottom:8px}
.policy-node p{color:var(--muted);font-size:14px}

/* Overview launcher */
.launcher-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.launcher-card{min-height:220px;display:flex;flex-direction:column;justify-content:space-between;padding:26px;border:1px solid var(--border);background:rgb(17 19 18 / .72);transition:.2s}
.launcher-card:hover{border-color:rgb(24 216 95 / .5);translate:0 -3px;box-shadow:0 18px 46px rgb(0 0 0 / .22)}
.launcher-card .index{color:var(--volt);font-family:var(--mono);font-size:10px;letter-spacing:.14em}
.launcher-card h2{font-size:22px;margin-top:10px}
.launcher-card p{color:var(--muted);font-size:13px;margin-top:8px}
.launcher-card .open{color:var(--volt);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.08em}

/* Lightbox */
.lightbox{width:min(920px,calc(100% - 32px));height:min(760px,calc(100vh - 32px));height:min(760px,calc(100dvh - 32px));margin:auto;display:none;flex-direction:column;overflow:hidden;border:1px solid var(--border);background:var(--panel);color:var(--ivory);padding:0;box-shadow:0 30px 90px rgb(0 0 0 / .6)}
.lightbox[open]{display:flex}
.lightbox::backdrop{background:rgb(0 0 0 / .82);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.lightbox-head{flex:0 0 auto;min-height:56px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border-bottom:1px solid var(--border)}
.lightbox-head [data-lightbox-title]{font-family:var(--display,inherit);font-size:clamp(16px,2.2vw,22px);font-weight:600;letter-spacing:.02em;color:var(--ivory);line-height:1.2;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lightbox-close{flex:0 0 auto;min-width:44px;min-height:44px;padding:0 14px;border:1px solid var(--border);background:none;color:var(--ivory);font-size:13px;cursor:pointer}
.lightbox-stage{position:relative;flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden;padding:20px 24px 112px;background:var(--ivory)}
.lightbox-stage>picture{display:grid;place-items:center;width:min(100%,460px);height:min(100%,460px);min-width:0;min-height:0;max-width:100%;max-height:100%;margin:0;overflow:hidden}
.lightbox-stage>picture>img{width:100%;height:100%;min-width:0;min-height:0;max-width:100%;max-height:100%;object-fit:contain}

/* Footer */
.site-footer{position:relative;background:rgb(11 12 11 / .86);border-top:1px solid var(--border)}
.site-footer .footer-inner{padding:20px 42px 14px}
.footer-top{display:grid;grid-template-columns:1fr 1.5fr;gap:48px;padding-bottom:20px}
.footer-brand img{height:32px;width:auto;background:transparent;margin-bottom:20px}
.footer-brand h2{font-size:26px;line-height:1.3}.footer-brand h2 span{color:var(--volt)}
.footer-brand p{color:var(--dim);font-family:var(--mono);font-size:9px;letter-spacing:.1em;margin-top:10px}
.footer-directory{display:grid;grid-template-columns:repeat(3,1fr);align-items:start;gap:26px}
.footer-directory>div{display:grid;align-content:start;gap:10px}
.footer-directory h3{color:var(--volt);font-family:var(--mono);font-size:9px;line-height:1.2;letter-spacing:.13em;margin:0}
.footer-directory nav,.footer-directory>div>div{display:grid;align-content:start;gap:2px}
.footer-directory a{display:inline-flex;align-items:center;min-height:30px;justify-self:start}
.footer-directory a,.footer-directory p{color:var(--muted);font-size:12px;line-height:1.35}
.footer-directory a:hover{color:var(--ivory)}
.footer-legal{display:flex;justify-content:space-between;gap:20px;padding-top:16px;border-top:1px solid var(--border-soft);color:var(--dim);font-family:var(--mono);font-size:8px;line-height:1.35;letter-spacing:.08em}

@media(max-width:1060px){
  :root{--bar-h:76px}
  .wrap{width:min(100% - 48px,1180px)}
  .header-inner{width:min(100% - 48px,1180px)}
  .header-inner{grid-template-columns:1fr auto auto}
  .page-hero{min-height:390px}
  .card-grid,.service-grid{grid-template-columns:repeat(2,1fr)}
  .card-grid:not(.two) .orb-card:nth-child(3n),.service-node:nth-child(3n){border-right:1px solid var(--border-soft)}
  .card-grid:not(.two) .orb-card:nth-child(2n),.service-node:nth-child(2n){border-right:0}
  .service-node:nth-last-child(-n+3){border-bottom:1px solid var(--border-soft)}
  .service-node:nth-last-child(-n+2){border-bottom:0}
  .route-workspace{grid-template-columns:1fr}.route-map{border-right:0;border-bottom:1px solid var(--border)}
  .kit-grid{grid-template-columns:repeat(2,1fr)}.kit-grid.three{grid-template-columns:repeat(3,1fr)}
  .launcher-grid{grid-template-columns:repeat(2,1fr)}
}

@media(max-width:760px){
  .wrap,.header-inner{width:min(100% - 36px,1180px)}
  .header-inner{grid-template-columns:1fr auto auto;gap:10px}
  .header-cta{min-width:88px;display:flex;justify-content:center;gap:7px;padding:10px 12px;background:var(--volt);color:var(--volt-ink);font-size:10px;letter-spacing:.08em;white-space:nowrap;box-shadow:0 10px 28px rgb(24 216 95 / .18)}
  .header-cta::before{background:var(--volt-ink);box-shadow:none}
  .site-nav{grid-template-columns:1fr 1fr;padding-inline:18px}
  .page-hero{min-height:430px;align-items:center}
  .page-hero::after{right:-30%;width:84vw}
  .hero-inner{padding-block:70px 48px}
  .page-index{right:18px;top:26px;font-size:118px}
  .page-hero h1{font-size:clamp(44px,17vw,72px)}
  .page-lead{font-size:14px}
  .section-head{grid-template-columns:1fr;gap:16px}
  .module-bar span:last-child{display:none}
  .gateway-layout,.cert-layout,.shared-kit,.partner-feature,.footer-top{grid-template-columns:1fr}
  .cert-image,.partner-logo{border-right:0;border-bottom:1px solid var(--border)}
  .tablist{grid-template-columns:1fr}.tablist button{border-right:0;border-bottom:1px solid var(--border)}
  .tablist button:last-child{border-bottom:0}
  .metric-grid{grid-template-columns:1fr 1fr}.metric:nth-child(3n){border-right:1px solid var(--border-soft)}.metric:nth-child(2n){border-right:0}.metric:nth-last-child(-n+3){border-bottom:1px solid var(--border-soft)}.metric:nth-last-child(-n+2){border-bottom:0}
  .card-grid,.card-grid.two,.service-grid,.channel-grid,.launcher-grid{grid-template-columns:1fr}
  .orb-card,.card-grid:not(.two) .orb-card:nth-child(2n),.card-grid:not(.two) .orb-card:nth-child(3n),.card-grid.two .orb-card:nth-child(2n),.service-node,.service-node:nth-child(2n),.service-node:nth-child(3n),.channel-card{border-right:0;border-bottom:1px solid var(--border-soft)}
  .service-node:nth-last-child(-n+2){border-bottom:1px solid var(--border-soft)}.service-node:last-child,.channel-card:last-child{border-bottom:0}
  .race-title{align-items:flex-start;flex-direction:column}
  .route-map,.route-map svg{min-height:390px}
  .kit-grid,.kit-grid.three{grid-template-columns:1fr 1fr}
  .kit-item:nth-child(2n){border-right:0}.kit-item{border-bottom:1px solid var(--border-soft)}
  .news-item{grid-template-columns:1fr auto;gap:8px 14px}.news-item time{grid-column:1}.news-item>div{grid-column:1}.news-item .tag{grid-column:2;grid-row:1/3}
  .faq-tools{grid-template-columns:1fr}.faq-item summary{grid-template-columns:64px 1fr auto;gap:10px;padding-inline:14px}.faq-answer{padding-left:14px}
  .partner-copy{padding:28px}.partner-copy h2{font-size:44px}
  .policy-node{padding:78px 22px 24px}.policy-node::after{left:22px;top:20px}
  .footer-top{gap:36px}.footer-directory{grid-template-columns:1fr 1fr}.footer-legal{display:grid}
  .lightbox{width:min(920px,calc(100% - 24px));height:calc(100vh - 24px);height:calc(100dvh - 24px)}
  .lightbox-stage{padding:16px 16px 100px}.lightbox-stage>picture{width:min(100%,380px);height:min(100%,380px);max-height:100%}
}

@media(max-width:460px){
  .header-inner{width:min(100% - 24px,1180px);gap:8px}
  .orb-brand img{height:30px}
  .header-cta{min-width:64px;padding-inline:8px;letter-spacing:.05em}
  .menu-toggle{min-width:56px;padding-inline:9px;font-size:0}
  .menu-toggle::after{content:"選單";font-size:10px;letter-spacing:.08em}
  body.nav-open .menu-toggle::after{content:"關閉"}
  :lang(en) .menu-toggle::after{content:"Menu"}
  :lang(en) body.nav-open .menu-toggle::after{content:"Close"}
  :lang(ja) .menu-toggle::after{content:"メニュー"}
  :lang(ja) body.nav-open .menu-toggle::after{content:"閉じる"}
  :lang(ko) .menu-toggle::after{content:"메뉴"}
  :lang(ko) body.nav-open .menu-toggle::after{content:"닫기"}
  .site-nav{grid-template-columns:1fr}
  .kit-grid,.kit-grid.three{grid-template-columns:1fr}.kit-item{border-right:0}
  .metric-grid{grid-template-columns:1fr}.metric,.metric:nth-child(2n),.metric:nth-child(3n){border-right:0;border-bottom:1px solid var(--border-soft)}.metric:last-child{border-bottom:0}
  .site-footer .footer-inner{padding:32px 24px 18px}
  .footer-top{gap:28px;padding-bottom:28px}
  .footer-brand img{height:30px;margin-bottom:14px}
  .footer-brand h2{font-size:clamp(23px,7vw,28px)}
  .footer-directory{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 16px;align-content:start}
  .footer-directory>div{min-width:0}
  .footer-directory>div:last-child{grid-column:1/-1;padding-top:20px;border-top:1px solid var(--border-soft)}
  .footer-directory h3{margin-bottom:10px}
  .footer-directory a,.footer-directory p{font-size:12px;line-height:1.55}
  .footer-legal{gap:8px;padding-top:18px}
}

@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* ===== unified nav node numbers ===== */
.site-nav a::before{content:attr(data-node);color:var(--dim);margin-right:7px;font-size:9px}

/* ===== language switching ===== */
.language-switcher{display:inline-flex;align-items:center;position:relative;white-space:nowrap}
.language-switcher-trigger{position:relative;display:flex;align-items:center;justify-content:space-between;gap:18px;min-width:108px;height:40px;padding:0 32px 0 12px;border:1px solid var(--border);border-radius:0;background:var(--panel);color:var(--ivory);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.05em;cursor:pointer;outline:none;transition:.2s}
.language-switcher-trigger::after{content:"⌄";pointer-events:none;position:absolute;right:11px;color:var(--volt);font-size:12px;transition:transform .18s ease}
.language-switcher-trigger:hover,.language-switcher-trigger:focus-visible,.language-switcher.is-open .language-switcher-trigger{border-color:var(--volt);box-shadow:0 0 0 2px rgb(24 216 95 / .16)}
.language-switcher.is-open .language-switcher-trigger::after{transform:rotate(180deg)}
.language-switcher-menu{position:absolute;z-index:104;top:calc(100% + 8px);right:0;display:grid;min-width:158px;padding:6px;border:1px solid var(--border);background:var(--panel);box-shadow:0 18px 44px rgb(0 0 0 / .48)}
.language-switcher-menu[hidden]{display:none}
.language-switcher-option{display:grid;grid-template-columns:10px 1fr;align-items:center;gap:9px;min-height:38px;padding:7px 10px;color:var(--muted);font-family:var(--mono);font-size:11px;font-weight:700;letter-spacing:.05em;outline:none;transition:.16s}
.language-switcher-option::before{content:"";width:5px;height:5px;border:1px solid var(--dim);border-radius:50%;opacity:.46}
.language-switcher-option:hover,.language-switcher-option:focus-visible{background:rgb(244 240 230 / .055);color:var(--ivory)}
.language-switcher-option:focus-visible{box-shadow:inset 2px 0 0 var(--volt)}
.language-switcher-option[aria-current="page"]{color:var(--volt);background:rgb(24 216 95 / .045)}
.language-switcher-option[aria-current="page"]::before{border-color:var(--volt);background:var(--volt);box-shadow:0 0 8px var(--volt);opacity:1}

/* ===== unified right-side section rail ===== */
main>section{scroll-margin-top:var(--header-h)}
.dots{position:fixed;right:18px;top:50%;translate:0 -50%;z-index:90;display:flex;flex-direction:column;gap:7px;padding:10px 6px;border:1px solid var(--border-soft);background:rgb(11 12 11 / .68);backdrop-filter:blur(8px)}
.dots::before,.dots::after{content:"";width:1px;height:24px;background:linear-gradient(var(--volt),transparent);position:absolute;left:50%}
.dots::before{bottom:100%}
.dots::after{top:100%;rotate:180deg}
.dots a{width:5px;height:19px;background:var(--dim);opacity:.4;transition:.25s}
.dots a:hover,.dots a.on{height:34px;background:var(--volt);opacity:1;box-shadow:0 0 12px rgb(24 216 95 / .45)}
@media(max-width:1060px){.dots{display:none}}

@media(max-width:1060px){
  .language-switcher{display:none}
  body.nav-open .language-switcher{display:inline-flex;position:fixed;z-index:103;top:calc(var(--header-h) + 12px);left:24px;right:auto;padding:0}
  body.nav-open .site-nav{padding-top:68px}
  .language-switcher-menu{right:auto;left:0}
}
@media(max-width:760px){
  body.nav-open .language-switcher{left:18px}
}

/* ===== native document scrolling =====
   Keep the one-screen visual rhythm without turning every section into a
   competing scroll container. Wheel and trackpad input stay interruptible. */
html{scroll-snap-type:none}
main>section{min-height:calc(100vh - var(--header-h));min-height:calc(100dvh - var(--header-h));height:auto;overflow:visible;scroll-snap-align:none;scroll-snap-stop:normal}
main>section.content-section{display:flex;flex-direction:column;justify-content:center}
.page-hero{min-height:calc(100vh - var(--header-h));min-height:calc(100dvh - var(--header-h));height:auto;align-items:center;overflow:hidden}
.page-hero .hero-inner{padding-block:48px}
.site-footer{scroll-snap-align:none}
@media(max-width:680px){
  /* Mobile browsers need one native page scroller; nested full-screen sections
     can trap vertical swipes inside embedded iOS browsers. */
  html{scroll-snap-type:none;scroll-behavior:auto}
  main>section{height:auto;overflow:visible;scroll-snap-align:none;scroll-snap-stop:normal}
  main>section.content-section{justify-content:flex-start}
  main>section{padding-bottom:env(safe-area-inset-bottom)}
  /* Keep the decorative orbit inside the hero without reintroducing a nested
     mobile scroller. The section remains auto-height and the page owns scroll. */
  .page-hero{height:auto;overflow:hidden}
  .content-section{padding-block:clamp(20px,4vh,36px)}
  .page-hero .hero-inner{padding-block:32px}
  /* The mobile route map is a read-only preview so a finger drag always
     continues the page scroll instead of being captured by MapLibre. */
  .route-live-map,.route-live-map .maplibregl-canvas{pointer-events:none!important;touch-action:auto!important}
}

/* ===== compact desktop density ===== */
@media(min-width:681px){
  .content-section{padding-block:clamp(24px,4vh,48px)}
  .section-head{margin-bottom:22px}
  .section-head h2{font-size:clamp(26px,3.4vw,44px)}
  .service-node summary{min-height:0;padding:20px 22px}
  .service-node h3{font-size:18px;margin:10px 0 6px}
  .service-node p{font-size:12.5px}
  .route-workspace{height:auto;min-height:500px}
  .route-map,.route-map svg{min-height:500px;height:100%}
  .route-info{overflow:visible}
  .route-info{padding:20px 22px}
  .route-info .distance{font-size:40px}
  .route-info .route-name{margin:7px 0 12px}
  .route-info .button{margin-top:12px;min-height:42px}
  .route-info .data-list>div{padding:9px 0}
  .tablist button{min-height:52px;padding:9px 16px}
  .notice{margin-top:14px;padding:12px 16px}
  .policy-node{padding:22px 26px 22px 84px}
  .cert-image img{max-height:min(500px,50vh)}
  .launcher-card{min-height:170px;padding:20px}
  .launcher-card h2{font-size:19px}
}
@media(min-width:1061px){
  .launcher-grid{grid-template-columns:repeat(4,1fr)}
}

/* ===== lightbox multi-angle thumbs ===== */
.lightbox-thumbs{position:absolute;z-index:2;left:50%;bottom:16px;width:max-content;display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:8px 10px;transform:translateX(-50%);border:1px solid rgb(11 12 11 / .24);background:rgb(11 12 11 / .88);box-shadow:0 12px 26px rgb(0 0 0 / .24)}
.lightbox-thumbs button{position:relative;box-sizing:border-box;flex:0 0 72px;width:72px;height:60px;min-width:0;min-height:0;padding:4px;border:1px solid rgb(244 240 230 / .32);background:#fffdf7;box-shadow:0 3px 10px rgb(0 0 0 / .18);cursor:pointer;display:grid;place-items:center;transition:.2s}
.lightbox-thumbs picture{box-sizing:border-box;display:grid;place-items:center;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}
.lightbox-thumbs button img{display:block;width:100%;height:100%;min-width:0;min-height:0;max-width:100%;max-height:100%;object-fit:contain;opacity:.8;transition:.2s}
.lightbox-thumbs button:hover img,.lightbox-thumbs button[aria-pressed="true"] img{opacity:1}
.lightbox-thumbs button:hover,.lightbox-thumbs button[aria-pressed="true"]{border-color:var(--volt);box-shadow:0 0 10px rgb(24 216 95 / .3)}
@media(max-width:760px){.lightbox-thumbs{bottom:12px;gap:6px;padding:6px 8px}.lightbox-thumbs button{flex-basis:60px;width:60px;height:50px}}

/* ===== race color identity (42K green / 21K sky / 5K amber) ===== */
:root{--race-42:#18D85F;--race-21:#3EC9F5;--race-5:#FFB040}
[data-race="42k"]{--race:var(--race-42)}
[data-race="21k"]{--race:var(--race-21)}
[data-race="5k"]{--race:var(--race-5)}
.tablist button[data-race][aria-selected="true"],.tablist button[data-race][aria-pressed="true"]{box-shadow:inset 0 -3px 0 var(--race)}
.tablist button[data-race][aria-selected="true"] strong,.tablist button[data-race][aria-pressed="true"] strong{color:var(--race)}
.tablist button[data-race]:hover strong{color:var(--race)}
[data-route-viewer] .route-path{stroke:var(--race,var(--volt));filter:drop-shadow(0 0 5px color-mix(in srgb,var(--race,var(--volt)) 62%,transparent))}
[data-route-viewer] .route-node{stroke:var(--race,var(--volt))}
[data-route-viewer] .route-map-label{color:var(--race,var(--volt))}
[data-route-viewer] .route-info .distance{color:var(--race,var(--ivory))}
[data-route-viewer] .route-info .tag{color:var(--race,var(--volt));border-color:color-mix(in srgb,var(--race,var(--volt)) 30%,transparent)}
.race-panel[data-race] .race-title strong{color:var(--race)}
.race[data-race]{box-shadow:inset 0 3px 0 var(--race)}
.race[data-race] .dist{color:var(--race)}
.race[data-race] .dist small{color:var(--muted)}

/* ===== live basemap (MapLibre + PMTiles, ported from production) ===== */
.route-map .route-live-map.maplibregl-map,.route-map .route-live-map{position:absolute;inset:0;width:100%;height:100%;z-index:1}
.route-live-map .maplibregl-canvas{outline:none}
.route-map .route-live-map.is-loading{opacity:0;pointer-events:none}
.route-map .route-map-label{z-index:3}
.route-live-map .maplibregl-ctrl-group{background:rgb(11 12 11 / .85);border:1px solid var(--border);border-radius:0;box-shadow:none}
.route-live-map .maplibregl-ctrl-group button{background:none}
.route-live-map .maplibregl-ctrl-group button span{filter:invert(1)}

/* ===== venue layout map (runner guide) ===== */
.venue-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px}
.venue-figure{padding:18px;border-right:1px solid var(--border-soft)}
.venue-figure figcaption{margin-top:10px;color:var(--dim);font-size:12px}
.venue-stage{position:relative;overflow:hidden;background:var(--panel)}
.venue-photo-img{display:block;width:100%;height:auto}
.venue-overlay{position:absolute;inset:0;width:100%;height:100%;font-family:var(--mono)}
.venue-dim{fill:#050605;opacity:0;pointer-events:none;transition:opacity .25s}
.has-active .venue-dim{opacity:.3}
.venue-marker{cursor:pointer;transition:opacity .2s}
.venue-marker circle{fill:var(--volt);stroke:#0B0C0B;stroke-width:5;transition:r .2s,fill .2s}
.venue-marker .venue-pulse{fill:none;stroke:var(--volt);stroke-width:4;opacity:0}
.venue-marker .venue-hit,.venue-marker.is-active .venue-hit{r:80;fill:transparent;stroke:none}
.venue-marker-medical circle{fill:#E0525F}
.venue-marker-medical .venue-pulse{fill:none;stroke:#E0525F}
.venue-num{fill:var(--volt-ink);font-size:32px;font-weight:700;text-anchor:middle;dominant-baseline:central;pointer-events:none}
.venue-marker-medical .venue-num{fill:#fff}
.has-active .venue-marker:not(.is-active){opacity:.35}
.venue-marker.is-active circle{r:38}
.venue-marker.is-active .venue-pulse{opacity:1;animation:venuePulse 1.6s ease-out infinite}
@keyframes venuePulse{from{r:38;opacity:.9}to{r:74;opacity:0}}
.venue-legend{list-style:none;display:grid;align-content:start}
.venue-legend button{width:100%;min-height:56px;display:grid;grid-template-columns:28px 1fr;gap:12px;align-items:center;padding:10px 18px;border:0;border-bottom:1px solid var(--border-soft);background:none;color:var(--ivory);text-align:left;cursor:pointer;transition:background .2s}
.venue-legend button:hover,.venue-legend button[aria-pressed="true"]{background:rgb(24 216 95 / .08)}
.venue-legend strong{display:block;font-size:14px;line-height:1.4}
.venue-legend small{display:block;color:var(--muted);font-size:12px;line-height:1.5}
.venue-key{width:26px;height:26px;display:grid;place-items:center;border-radius:50%;background:var(--volt);color:var(--volt-ink);font-family:var(--mono);font-size:12px;font-weight:700}
.venue-legend li:last-child .venue-key{background:#E0525F;color:#fff}
.venue-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:18px}
@media(max-width:1060px){
  .venue-layout{grid-template-columns:minmax(0,1fr) 250px}
  .venue-figure{align-self:start}
  .venue-legend button{padding:8px 12px;gap:10px}
}
@media(max-width:900px){
  .venue-layout{grid-template-columns:1fr}
  .venue-figure{border-right:0;border-bottom:1px solid var(--border-soft)}
  .venue-legend{grid-template-columns:1fr 1fr}
}
/* Portrait phones/tablets: keep the map on screen while the legend below it scrolls.
   Not in landscape, where the map alone is taller than the viewport. */
@media(max-width:900px) and (orientation:portrait){
  .venue-figure{position:sticky;top:var(--header-h);z-index:2;background:var(--panel)}
  .venue-legend button{scroll-margin-top:calc(var(--header-h) + var(--venue-fig-h, 0px) + 8px)}
}
@media(max-width:680px){
  .venue-figure{padding:10px}
  .venue-marker .venue-hit,.venue-marker.is-active .venue-hit{r:120}
  .venue-marker circle{r:52}
  .venue-marker.is-active circle{r:62}
  .venue-num{font-size:56px}
  .venue-legend{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){.venue-dim,.venue-marker,.venue-marker circle{transition:none}.venue-marker.is-active .venue-pulse{animation:none;opacity:0}}

/* ===== readability floor (review round 2) ===== */
html.lightbox-open{overflow:hidden}
.brand-state span,.module-bar,.footer-legal{font-size:10px}
.brand-state strong,.section-head h2 small,.orb-card .node,.tag,.tablist button span,.metric small,.route-map-label,.footer-brand p,.footer-directory h3,.site-nav a::before{font-size:10px}
/* Closed registration: no pulsing "live" indicator. */
.status-line.is-closed{color:var(--muted)}
.status-line.is-closed i{background:var(--dim);box-shadow:none;animation:none}
.module-bar strong.is-closed{color:var(--muted)}
.module-bar strong.is-closed::before{background:var(--dim);box-shadow:none}
@media(max-width:760px){
  .brand-state span,.brand-state strong,.module-bar,.footer-legal,.section-head h2 small,.orb-card .node,.tag,.tablist button span,.metric small,.route-map-label,.footer-brand p,.footer-directory h3,.data-list dt,.page-code,.section-code{font-size:11px}
  .button,.cta-solid{font-size:13px}
}

/* ===== event-area tent map (runner guide #event-area) ===== */
.event-map [data-zone="rest"]{--tent:#E0525F}
.event-map [data-zone="stall"]{--tent:#18D85F}
.event-map [data-zone="printing"],.event-map [data-zone="stage"]{--tent:#3E8BFF}
.event-map [data-zone="supplies"]{--tent:#F28AC0}
.event-map [data-zone="service"]{--tent:#F2C230}
.event-map .venue-layout{grid-template-columns:minmax(0,1fr) 320px}
.event-tent{cursor:pointer}
.event-tent rect{fill:var(--tent);fill-opacity:.5;stroke:#0B0C0B;stroke-width:2;pointer-events:all;transition:fill-opacity .2s,stroke .2s}
.event-tent[data-zone="stage"] rect{fill:none;stroke:var(--tent);stroke-width:5}
/* Proportional digits with plain zeros: the mono dotted zero made 10/18 and 20/28 look alike. */
.event-tent text{fill:#fff;font-family:var(--sans);font-variant-numeric:tabular-nums;font-size:25px;font-weight:900;text-anchor:middle;dominant-baseline:central;paint-order:stroke;stroke:#0B0C0B;stroke-width:3px;pointer-events:none}
.event-tent.is-active rect{fill-opacity:.95;stroke:#fff;stroke-width:4}
.event-tent[data-zone="stage"].is-active rect{fill:var(--tent);fill-opacity:.35;stroke:#fff;stroke-width:7}
.event-legend{display:grid;align-content:start}
.event-legend h3{display:flex;align-items:center;gap:8px;margin:0;padding:16px 18px 6px;color:var(--muted);font-family:var(--mono);font-size:11px;font-weight:700;letter-spacing:.12em}
.event-legend h3::before{content:"";width:10px;height:10px;border-radius:2px;background:var(--tent,var(--dim))}
.event-list button{min-height:44px;grid-template-columns:92px 1fr;padding:6px 18px}
.event-key{justify-self:start;min-width:26px;height:24px;padding:0 7px;display:inline-grid;place-items:center;border-radius:4px;background:var(--tent,var(--dim));color:#0B0C0B;font-family:var(--mono);font-size:11px;font-weight:700;white-space:nowrap}
.event-key:empty{min-width:14px;width:14px;height:14px;padding:0}
.event-list strong{font-size:14px;line-height:1.4}
@media(min-width:901px){
  /* The legend is taller than the map: keep the map in view while it scrolls, sized so it
     always fits under the header (image 1448x1086; ~96px for padding, caption and gap). */
  .event-map .venue-figure{position:sticky;top:calc(var(--header-h) + 8px);align-self:start}
  .event-map .venue-stage{max-width:calc((100vh - var(--header-h) - 96px) * 1.3333);margin-inline:auto}
}
@media(max-width:900px) and (orientation:portrait){
  /* Stacked and sticky: keep the map within ~60% of the space under the header. */
  .event-map .venue-stage{max-width:calc(((100vh - var(--header-h)) * .6 - 72px) * 1.3333);margin-inline:auto}
}
@media(max-width:1060px){.event-map .venue-layout{grid-template-columns:minmax(0,1fr) 280px}}
@media(max-width:900px){.event-map .venue-layout{grid-template-columns:1fr}}
@media(max-width:680px){
  .event-tent text{display:none}
  .event-list button{grid-template-columns:86px 1fr}
  /* Tents carry no numbers on phones: keep the "select a name" hint visible. */
  .event-map .module-bar span:last-child{display:block}
}
/* Two names per row wherever the legend sits under the map; on phones the key goes above its name. */
@media(max-width:900px){
  .event-list button{height:100%}
  .event-list li:nth-child(odd):not(:last-child) button{border-right:1px solid var(--border-soft)}
}
@media(max-width:680px){
  .event-list{grid-template-columns:repeat(2,minmax(0,1fr))}
  .event-list button{grid-template-columns:minmax(0,1fr);align-content:start;gap:6px;min-height:0;padding:10px 12px}
  /* Facilities have a colour dot instead of numbers: keep it beside the name. */
  .event-list button:has(.event-key:empty){grid-template-columns:14px minmax(0,1fr);align-content:center;align-items:center;gap:10px}
}
/* Keyboard focus moving back up the legend must not land under the fixed header;
   the portrait sticky-map rule adds the map height on top of this. */
:where(.venue-legend button){scroll-margin-top:calc(var(--header-h) + 8px)}
.venue-module .venue-figure.venue-figure-static{position:static}

/* ===== aid stations (routes page #aid-stations, generated by scripts/build-aid-stations.mjs) ===== */
/* The map and the station list form one block: the list sits beside the map (under it on
   narrow screens) and the map stays in view while the list scrolls. */
.route-side{min-width:0}
.route-info{display:grid;grid-template-columns:1fr 1fr;column-gap:10px;align-content:start}
.route-info>*{grid-column:1/-1}
.route-info>.tag{justify-self:start}
.route-info>.button{grid-column:auto;width:100%;margin-top:14px}
.route-info .data-list{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18px}
.route-info .data-list>div{grid-template-columns:1fr;align-content:start;gap:3px}
.aid-panel{padding:18px 22px 22px;border-top:1px solid var(--border);scroll-margin-top:var(--header-h)}
.aid-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 14px}
.aid-head h3{font-size:18px;font-weight:900}
.aid-head p{color:var(--muted);font-size:12.5px}
.aid-summary{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin:10px 0 12px;color:var(--muted);font-size:13px}
.aid-summary strong{color:var(--race,var(--volt));font-size:14px}
.aid-summary small{margin-right:6px;color:var(--dim);font-family:var(--mono);font-size:11px;letter-spacing:.1em}
.aid-list{list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-top:1px solid var(--border-soft);border-left:1px solid var(--border-soft)}
.aid-list button{width:100%;height:100%;min-height:54px;display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-content:center;align-items:center;gap:0 10px;padding:8px 12px;border:0;border-right:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft);background:none;color:var(--ivory);font:inherit;text-align:left;cursor:pointer}
.aid-list button:hover,.aid-list button[aria-pressed="true"]{background:color-mix(in srgb,var(--race,var(--volt)) 10%,transparent)}
.aid-list button[aria-pressed="true"]{box-shadow:inset 3px 0 0 var(--race,var(--volt))}
.aid-no{grid-row:span 2;width:28px;height:28px;display:grid;place-items:center;border:2px solid var(--bg);border-radius:50%;background:#fff;color:var(--bg);font-family:var(--mono);font-size:12px;font-weight:700}
.aid-list button[aria-pressed="true"] .aid-no{background:var(--race,var(--volt))}
.aid-list strong{font-family:var(--disp);font-size:16px;font-weight:900;line-height:1.15}
.aid-list small{color:var(--muted);font-size:12px;line-height:1.4}
.aid-list strong,.aid-list small{grid-column:2}
/* Medical post: white ring, red disc, white cross (same badge as on the map). */
.aid-med{flex:0 0 auto;width:22px;height:22px;border:2px solid #fff;border-radius:50%;background:linear-gradient(#fff,#fff) center/10px 3px no-repeat,linear-gradient(#fff,#fff) center/3px 10px no-repeat,#C8283A}
.aid-list .aid-med{grid-column:3;grid-row:1/span 2}
.aid-finish-med{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:12px;font-size:13px;line-height:1.5}
.aid-finish-med a{color:var(--race,var(--volt));text-decoration:underline;text-underline-offset:3px}
.aid-notes{display:grid;gap:4px;padding:14px 22px 16px;border-top:1px solid var(--border);color:var(--muted);font-size:12.5px;line-height:1.6}
.aid-notes .aid-rule{color:var(--ivory);font-size:14px}
/* A fixed map height keeps the SVG drawing and the live map the same size, so anchors below
   the map do not move when the live map takes over and fitBounds sees the final size. */
.route-map{height:500px;min-height:0;scroll-margin-top:calc(var(--header-h) + 8px)}
.aid-list button,.route-info .button{scroll-margin-top:calc(var(--header-h) + 8px)}
.route-map svg{display:block;height:100%;min-height:0}
.route-legend{position:absolute;left:18px;bottom:18px;z-index:3;display:flex;gap:14px;padding:7px 10px;border:1px solid var(--border);background:rgb(11 12 11 / .8);color:var(--ivory);font-size:11px}
.route-legend span{display:flex;align-items:center;gap:6px}
.route-legend i{flex:0 0 auto;width:13px;height:13px;border-radius:50%}
.route-legend-aid{border:2px solid var(--bg);background:#fff;box-shadow:0 0 0 1px rgb(244 240 230 / .5)}
.route-legend-end{border:3px solid var(--race,var(--volt));background:var(--bg)}
.route-legend-med{border:2px solid #fff;background:linear-gradient(#fff,#fff) center/7px 2px no-repeat,linear-gradient(#fff,#fff) center/2px 7px no-repeat,#C8283A}
.route-aid-node circle{fill:#fff;stroke:var(--bg);stroke-width:2}
.route-aid-node text{fill:var(--bg);font-family:var(--mono);font-size:11px;font-weight:700;text-anchor:middle;dominant-baseline:central}
.route-aid-node.is-active circle{fill:var(--race,var(--volt))}
.route-med-node circle,.route-aid-node .route-med-node circle{fill:#C8283A;stroke:#fff;stroke-width:2}
.route-med-node path{fill:none;stroke:#fff;stroke-width:2.2}
.aid-popup .maplibregl-popup-content{padding:6px 10px;border:1px solid var(--race,var(--volt));border-radius:0;background:var(--bg);color:var(--ivory);font-size:12px;font-weight:700;box-shadow:none}
.aid-popup.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{border-top-color:var(--race,var(--volt))}
@media(min-width:901px){
  /* Side by side from tablet landscape up; the map sticks below the header. */
  .route-workspace{grid-template-columns:minmax(0,1.5fr) minmax(320px,1fr);align-items:start;height:auto;min-height:0}
  /* The stuck map fills the viewport under the header, but never outgrows the side column
     (a percentage height resolves against the grid row), so no empty band shows below it. */
  .route-map{position:sticky;top:var(--header-h);height:min(calc(100svh - var(--header-h)),100%);min-height:380px;border-right:0;border-bottom:0}
  .route-side{align-self:stretch;border-left:1px solid var(--border)}
  .route-info{padding:18px 22px}
  .route-info .distance{font-size:34px}
  .aid-panel{scroll-margin-top:calc(var(--header-h) + var(--route-info-h, 0px))}
}
@media(max-width:680px){
  .route-map{height:390px}
  .aid-panel{padding:18px 16px 20px}
  .aid-notes{padding:14px 16px 16px}
  /* The phone map is not interactive, so its attribution stays expanded along the bottom edge. */
  .route-legend{left:12px;bottom:42px}
}
@media(max-width:600px),(min-width:901px) and (max-width:1060px){.route-info>.button{grid-column:1/-1}}
@media(max-width:360px){.aid-list{grid-template-columns:1fr}}
@media(max-width:900px) and (orientation:portrait) and (min-height:760px){
  /* Portrait phones and tablets: a shorter map stays on top while the list scrolls under it. */
  .route-map{position:sticky;top:var(--header-h);z-index:4;height:clamp(300px,42svh,460px);min-height:0}
  /* Anchors and keyboard focus must land below the stuck map, not under it. */
  .aid-panel,.aid-list button,.route-info .button{scroll-margin-top:calc(var(--header-h) + clamp(300px,42svh,460px) + 8px)}
}
/* Parking page: map beside (desktop) or above (phones) a slider of area cards; the map follows the card in view. */
.parking-explorer{display:grid;grid-template-columns:minmax(0,1fr) 440px}
.parking-map{position:relative;min-height:560px;border-right:1px solid var(--border);background:rgb(8 9 8 / .66)}
.parking-map .parking-live-map.maplibregl-map,.parking-map .parking-live-map{position:absolute;inset:0;width:100%;height:100%}
.parking-map[hidden]+.parking-slider{grid-column:1/-1}
.parking-slider{display:flex;flex-direction:column;min-width:0}
.parking-track{position:relative;flex:1;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain}
.parking-track::-webkit-scrollbar{display:none}
.parking-track:focus-visible{outline:2px solid var(--volt);outline-offset:-2px}
.parking-track .channel-card{flex:0 0 100%;scroll-snap-align:center;border-right:1px solid var(--border-soft);cursor:default}
.parking-track .data-list{margin-top:16px}
.parking-track .data-list>div{grid-template-columns:96px 1fr}
.parking-track .data-list+p{margin-top:14px}
.parking-slider-nav{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 28px;border-top:1px solid var(--border-soft)}
.parking-step{width:48px;height:44px;border:1px solid var(--border);background:transparent;color:var(--ivory);font-size:18px;cursor:pointer}
.parking-step:hover{border-color:var(--volt);color:var(--volt)}
.parking-count{color:var(--muted);font-family:var(--mono);font-size:12px;letter-spacing:.12em}
.parking-alert{margin-top:14px;color:#FF7A85 !important;font-weight:700}
.channel-card.parking-closed{box-shadow:inset 4px 0 0 #E0525F}
.parking-closed .tag{color:#FF7A85;border-color:rgb(224 82 95 / .5)}
.parking-label{display:none;flex-direction:column;align-items:center;padding:6px 10px;border:1px solid var(--volt);background:var(--bg);color:var(--ivory);text-align:center;line-height:1.3;cursor:pointer;white-space:nowrap}
.parking-label.is-active{display:flex}
.parking-label strong{font-size:13px}
.parking-label small{color:var(--volt);font-size:11px;font-weight:700}
.parking-label.is-closed{border-color:#E0525F}.parking-label.is-closed small{color:#FF7A85}
.parking-label[data-label="stadium"]{border-color:#fff}.parking-label[data-label="stadium"] small{color:var(--muted)}
.parking-label::after{content:"";position:absolute;width:10px;height:10px;border-radius:50%;background:var(--volt);box-shadow:0 0 0 3px var(--bg)}
.parking-label.is-closed::after{background:#E0525F}.parking-label[data-label="stadium"]::after{background:#fff}
.parking-label.at-bottom::after{bottom:-17px}.parking-label.at-top::after{top:-17px}.parking-label.at-left::after{left:-17px;top:calc(50% - 5px)}
#parking-shuttle .data-list>div{grid-template-columns:120px 1fr}
#parking-shuttle .shuttle-time{font-family:var(--disp);font-size:28px}
#parking-shuttle .channel-card p{margin-top:16px}
#parking-shuttle .channel-card .button{width:auto}
.policy-node p+p{margin-top:8px}
@media(max-width:900px){.parking-explorer{grid-template-columns:1fr}.parking-map{min-height:0;height:clamp(300px,48svh,420px);border-right:0;border-bottom:1px solid var(--border)}.parking-track .channel-card{flex-basis:88%}.parking-track::before,.parking-track::after{content:"";flex:0 0 6%}}
