/* MC2 — Motorball Championship. Self-contained stylesheet, loaded only on /mc2 pages.
   Fonts self-hosted from /public/fonts. Press Start 2P's charset was checked and
   does include U+00B2 (²), so where the wordmark is still set in type (compact
   contexts without the logo image) it uses the real glyph, not a <sup> fallback.
   Secondary/body font is Space Grotesk (non-pixel, self-hosted) — matches the
   main site's brand font, easier to read at body sizes than the pixel face.

   Art direction: "neon arcade" — a dark cyberpunk cabinet. Magenta leads because
   the real Motorball IS a pink ball (--pink-ball sits in the same family), so the
   loudest colour on the page is the event's own object rather than an arbitrary
   synthwave pick. Cyan is the opposing team; violet is ambient depth only and is
   never used for text (it measures 3.5:1 on --bg — decorative floor, not a
   reading colour). Corners stay square everywhere.

   Light comes from glow: text-shadow and box-shadow only. There is deliberately
   no filter: blur() anywhere — it is composited per-frame and wrecks the
   framerate of the venue projector view at /mc2/live. */

@font-face {
    font-family: 'Press Start 2P';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('/fonts/press-start-2p.ttf') format('truetype');
}

@font-face {
    font-family: 'Space Grotesk';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('/fonts/space-grotesk-regular.ttf') format('truetype');
}

@font-face {
    font-family: 'Space Grotesk';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url('/fonts/space-grotesk-medium.ttf') format('truetype');
}

@font-face {
    font-family: 'Space Grotesk';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('/fonts/space-grotesk-bold.ttf') format('truetype');
}

@media (prefers-reduced-motion: no-preference) {
    html {
        scroll-behavior: smooth;
    }
}

.mc2 {
    --bg: #06060B;
    --band: #0B0A14;        /* full-bleed alternating section background */
    --surface: #12101F;
    --edge: #2A2440;
    --edge-strong: #4A3D6B;
    --text: #F5F2FF;
    --muted: #A79FC4;       /* checked: 8.1:1 on --bg, 7.5:1 on --surface — clears 4.5:1 */

    --magenta: #FF2E97;     /* primary neon — 5.9:1 on --bg, safe for body text */
    --magenta-dim: #8A1252;
    --cyan: #00E5FF;        /* secondary neon / opposing team — 13.1:1 on --bg */
    --violet: #7B2BFF;      /* 3.5:1 on --bg — ambient glow and fills ONLY, never text */

    --red: #E02424;         /* kept for the logo tie-in and non-text marks */
    --red-hot: #FF3B30;     /* LIVE labels use this, not --red: 5.7:1 vs --red's 4.3:1 */
    --red-dim: #7A1414;
    --gold: #FFD200;        /* sampled from the event logo's wordmark yellow — prizes, Finals */

    --pink-ball: #FF5FA2;
    --pitch-green: #07231A;
    --pitch-green-line: #2FFF9E;
    --team-blue: #00E5FF;   /* token name kept so existing markup needs no edit; now cyan */

    background: var(--bg);
    color: var(--text);
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 16px;
    line-height: 1.6;
    min-height: 100vh;
    /* Ambient cabinet glow. Fixed so it stays put while the page scrolls, giving
       the whole document one consistent light source instead of per-section pools. */
    background-image:
        radial-gradient(ellipse 80% 55% at 50% 0%, rgba(123, 43, 255, 0.16), transparent 70%),
        radial-gradient(ellipse 70% 50% at 15% 100%, rgba(255, 46, 151, 0.10), transparent 70%);
    background-attachment: fixed;
    background-repeat: no-repeat;
}

.mc2 * {
    box-sizing: border-box;
    border-radius: 0 !important;
}

/* Sticky nav sits 64px tall — keep anchored sections clear of it. */
.mc2 [id] {
    scroll-margin-top: 76px;
}

/* Note: no blanket `image-rendering: pixelated` here — it only helps small
   pixel-art assets scaled UP. The logo PNG is large and detailed and gets
   scaled DOWN for compact placements, where nearest-neighbour downscaling
   turns it to noise; browser default (smooth) scaling reads far better. */
.mc2 svg {
    shape-rendering: crispEdges;
}

/* ---- Type scale ------------------------------------------------------- */

.mc2 .mc2-display {
    font-family: 'Press Start 2P', monospace;
    letter-spacing: 0.05em;
    line-height: 1.5;
}

.mc2 .mc2-display-hero {
    font-family: 'Press Start 2P', monospace;
    font-size: clamp(1.75rem, 5vw, 3.25rem);
    line-height: 1.3;
    letter-spacing: 0.04em;
}

.mc2 .mc2-display-title {
    font-family: 'Press Start 2P', monospace;
    font-size: 1.25rem;
    line-height: 1.4;
    letter-spacing: 0.04em;
}

@media (min-width: 640px) {
    .mc2 .mc2-display-title {
        font-size: 1.5rem;
    }
}

.mc2 .mc2-display-stat {
    font-family: 'Press Start 2P', monospace;
    font-size: 2rem;
    line-height: 1.2;
    letter-spacing: 0.02em;
}

.mc2 .mc2-lead {
    font-size: 1.25rem;
    line-height: 1.6;
}

.mc2 .mc2-prose {
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 16px;
    line-height: 1.7;
}

.mc2 .mc2-ui {
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 14px;
    font-weight: 700;
    line-height: 1.4;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.mc2 .mc2-eyebrow {
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.5;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--muted);
}

.mc2 :focus-visible {
    outline: 2px solid var(--cyan);
    outline-offset: 2px;
}

.mc2 table {
    border-collapse: collapse;
    width: 100%;
}

.mc2 th,
.mc2 td {
    border: 1px solid var(--edge);
    padding: 8px 12px;
    text-align: left;
    font-size: 16px;
}

.mc2 th {
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-weight: 700;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-size: 14px;
    background: rgba(123, 43, 255, 0.08);
}

/* ---- Colour utilities --------------------------------------------------- */

/* The neon tokens get first-party utilities rather than Tailwind arbitrary values
   (text-[var(--magenta)] and friends). Tailwind's output is compiled ahead of time
   into var/tailwind/app.built.css, so an arbitrary class for a token that did not
   exist at the last build silently resolves to nothing — the text just inherits and
   the page looks subtly wrong with no error anywhere. Owning these here keeps /mc2
   rendering correctly whether or not anyone remembers to re-run tailwind:build. */
.mc2 .mc2-fg-magenta { color: var(--magenta); }
.mc2 .mc2-fg-cyan { color: var(--cyan); }
.mc2 .mc2-fg-hot { color: var(--red-hot); }

/* ---- Glow utilities ---------------------------------------------------- */

/* Tight ring in the element's own colour + a wide coloured halo. Applying these
   to near-white text is what keeps a headline legible while still reading as neon:
   the letterform stays high-contrast, only the air around it is coloured. */
.mc2-glow {
    text-shadow: 0 0 6px rgba(255, 46, 151, 0.85), 0 0 26px rgba(255, 46, 151, 0.42);
}

.mc2-glow-cyan {
    text-shadow: 0 0 6px rgba(0, 229, 255, 0.8), 0 0 26px rgba(0, 229, 255, 0.38);
}

.mc2-glow-gold {
    text-shadow: 0 0 6px rgba(255, 210, 0, 0.75), 0 0 26px rgba(255, 210, 0, 0.35);
}

/* ---- HUD corner brackets ----------------------------------------------- */

/* Two opposing corners, not four — enough to read as a targeting frame without
   turning every panel into a box of ticks. */
.mc2-hud {
    position: relative;
}

.mc2-hud::before,
.mc2-hud::after {
    content: '';
    position: absolute;
    width: 14px;
    height: 14px;
    pointer-events: none;
    border-color: var(--magenta);
    border-style: solid;
}

.mc2-hud::before {
    top: -1px;
    left: -1px;
    border-width: 2px 0 0 2px;
}

.mc2-hud::after {
    right: -1px;
    bottom: -1px;
    border-width: 0 2px 2px 0;
}

.mc2-hud-cyan::before,
.mc2-hud-cyan::after {
    border-color: var(--cyan);
}

.mc2-hud-gold::before,
.mc2-hud-gold::after {
    border-color: var(--gold);
}

/* ---- Scanline overlay --------------------------------------------------- */

/* One fixed element, rendered once in mc2/base.html.twig. z-index sits below the
   sticky nav (40) and below the gallery lightbox (50) so neither picks up lines. */
.mc2-scanlines {
    position: fixed;
    inset: 0;
    z-index: 30;
    pointer-events: none;
    background-image: repeating-linear-gradient(
        to bottom,
        rgba(0, 0, 0, 0.2) 0px,
        rgba(0, 0, 0, 0.2) 1px,
        transparent 1px,
        transparent 3px
    );
}

/* A single slow bright sweep travelling down the screen — the one motion cue
   that sells "this is a monitor" without touching any of the content. */
.mc2-scanlines::after {
    content: '';
    position: absolute;
    inset-inline: 0;
    height: 34vh;
    background: linear-gradient(to bottom, transparent, rgba(0, 229, 255, 0.05), transparent);
    animation: mc2-sweep 9s linear infinite;
}

@keyframes mc2-sweep {
    0% { transform: translateY(-40vh); }
    100% { transform: translateY(140vh); }
}

/* Low-amplitude brightness flutter. Deliberately tiny and rare — anything more
   reads as a broken screen rather than a stylised one. Hero only. */
.mc2-crt {
    animation: mc2-crt 7s steps(1, end) infinite;
}

@keyframes mc2-crt {
    0%, 91%, 100% { opacity: 1; }
    92% { opacity: 0.93; }
    93% { opacity: 1; }
    97% { opacity: 0.96; }
    98% { opacity: 1; }
}

/* ---- Surfaces & cards -------------------------------------------------- */

/* Full-bleed alternating section band — the scroll's "beats". */
.mc2-band {
    background: var(--band);
    border-top: 1px solid var(--edge);
    border-bottom: 1px solid var(--edge);
}

.mc2-card {
    background: var(--surface);
    border: 1px solid var(--edge);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
    transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}

a.mc2-card:hover,
button.mc2-card:hover {
    transform: translateY(-2px);
    border-color: var(--magenta);
    box-shadow: 0 0 0 1px rgba(255, 46, 151, 0.35), 0 0 28px -6px rgba(255, 46, 151, 0.65);
}

/* Partner logos are exempt from the token palette — white backing is the
   standard "logo lockup" treatment so every logo's own colours stay true
   regardless of the page's dark theme. */
.mc2-card-white {
    background: #FFFFFF;
    border: 1px solid var(--edge);
    box-shadow: 0 0 24px -8px rgba(255, 46, 151, 0.4);
}

/* ---- Buttons & tabs ---------------------------------------------------- */

.mc2-btn {
    display: inline-block;
    padding: 12px 24px;
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    text-decoration: none;
    color: var(--text);
    background: rgba(18, 16, 31, 0.8);
    border: 1px solid var(--edge-strong);
    cursor: pointer;
    transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}

.mc2-btn:hover {
    transform: translateY(-1px);
    color: #FFFFFF;
    border-color: var(--cyan);
    box-shadow: 0 0 0 1px rgba(0, 229, 255, 0.4), 0 0 26px -6px rgba(0, 229, 255, 0.8);
}

/* Dark-on-neon: the fill is the light source, so the label is punched out of it.
   #0A0410 on --magenta measures 5.9:1. */
.mc2-btn-primary {
    background: var(--magenta);
    border-color: var(--magenta);
    color: #0A0410;
    box-shadow: 0 0 28px -6px rgba(255, 46, 151, 0.9);
}

.mc2-btn-primary:hover {
    background: #FF52AB;
    border-color: #FF52AB;
    color: #0A0410;
    transform: translateY(-1px);
    box-shadow: 0 0 36px -4px rgba(255, 46, 151, 1);
}

/* Tab strip — styled off aria-selected, which mc2-tabs toggles. */
.mc2-tab {
    padding: 10px 16px;
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--muted);
    background: none;
    border: none;
    border-bottom: 2px solid var(--edge);
    cursor: pointer;
    transition: color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}

.mc2-tab:hover {
    color: var(--text);
}

.mc2-tab[aria-selected="true"] {
    color: var(--magenta);
    border-bottom-color: var(--magenta);
    box-shadow: 0 6px 18px -10px var(--magenta);
}

/* ---- Sticky nav -------------------------------------------------------- */

.mc2-nav {
    position: sticky;
    top: 0;
    z-index: 40;
    background: rgba(6, 6, 11, 0.9);
    backdrop-filter: saturate(140%) blur(10px);
    border-bottom: 1px solid var(--edge);
    box-shadow: 0 1px 0 rgba(255, 46, 151, 0.25);
}

.mc2-nav-links {
    display: flex;
    align-items: center;
    gap: 4px;
    overflow-x: auto;
    scrollbar-width: none;
}

.mc2-nav-links::-webkit-scrollbar {
    display: none;
}

.mc2-nav-links a {
    flex-shrink: 0;
    padding: 8px 10px;
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    text-decoration: none;
    color: var(--muted);
    border-bottom: 2px solid transparent;
    transition: color 0.15s ease, border-color 0.15s ease;
}

.mc2-nav-links a:hover {
    color: var(--text);
    border-bottom-color: var(--cyan);
}

/* The one nav link that is an invitation rather than a destination. */
.mc2-nav-links a.is-play {
    color: var(--magenta);
    font-weight: 700;
}

.mc2-nav-links a.is-play:hover {
    color: #FFFFFF;
    border-bottom-color: var(--magenta);
    text-shadow: 0 0 14px rgba(255, 46, 151, 0.9);
}

/* ---- Hero -------------------------------------------------------------- */

/* Hero background: violet dome overhead, magenta pool at the floor, and a pixel
   grid that fades out toward the top so the lockup never fights it. */
.mc2-hero {
    position: relative;
    overflow: hidden;
    background-image:
        radial-gradient(ellipse 60% 45% at 50% 100%, rgba(255, 46, 151, 0.18), transparent 70%),
        radial-gradient(ellipse 75% 55% at 50% 0%, rgba(123, 43, 255, 0.22), transparent 70%),
        repeating-linear-gradient(0deg, transparent 0 31px, rgba(0, 229, 255, 0.045) 31px 32px),
        repeating-linear-gradient(90deg, transparent 0 31px, rgba(0, 229, 255, 0.045) 31px 32px);
}

/* Horizon rule at the base of the hero — the arcade cabinet's floor line. */
.mc2-hero::after {
    content: '';
    position: absolute;
    inset-inline: 0;
    bottom: 0;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--magenta), var(--cyan), transparent);
    box-shadow: 0 0 22px 1px rgba(255, 46, 151, 0.6);
}

/* Slow ambient drift on the hero logo — restrained, not a wobble. */
.mc2-hero-logo {
    animation: mc2-drift 6s ease-in-out infinite;
    filter: drop-shadow(0 0 26px rgba(255, 46, 151, 0.45));
}
@keyframes mc2-drift {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-6px); }
}

/* ---- Ticker ------------------------------------------------------------ */

.mc2-ticker {
    overflow: hidden;
    background: var(--band);
    border-top: 1px solid var(--magenta-dim);
    border-bottom: 1px solid var(--magenta-dim);
    box-shadow: inset 0 0 30px -12px rgba(255, 46, 151, 0.8);
}

/* Track holds the facts line twice (second copy aria-hidden); shifting the
   whole track by exactly -50% loops seamlessly. */
.mc2-ticker-track {
    display: inline-flex;
    white-space: nowrap;
    animation: mc2-ticker 40s linear infinite;
}

.mc2-ticker-track > span {
    padding: 10px 0;
}

@keyframes mc2-ticker {
    to { transform: translateX(-50%); }
}

/* ---- Bracket chart ----------------------------------------------------- */

.mc2-bracket {
    display: flex;
    align-items: stretch;
    gap: 28px;
    width: max-content;
    min-width: 100%;
}

.mc2-bracket-col {
    display: flex;
    flex-direction: column;
    min-width: 160px;
}

.mc2-bracket-col-matches {
    display: flex;
    flex-direction: column;
    flex: 1;
    justify-content: space-around;
    gap: 8px;
}

.mc2-bracket-match {
    position: relative;
    background: var(--surface);
    border: 1px solid var(--edge);
    padding: 8px 10px;
}

/* Connector tick reaching toward the next round's column. */
.mc2-bracket-col:not(:last-child) .mc2-bracket-match::after {
    content: '';
    position: absolute;
    right: -15px;
    top: 50%;
    width: 14px;
    height: 1px;
    background: var(--cyan);
    opacity: 0.55;
}

.mc2-bracket-match.is-final {
    border: 1px solid var(--gold);
    box-shadow: 0 0 0 1px rgba(255, 210, 0, 0.3), 0 0 28px -8px rgba(255, 210, 0, 0.8);
}

/* Horizontal-scroll wrapper with a right edge-fade hint on small screens. */
.mc2-scroll-x {
    overflow-x: auto;
    padding-bottom: 8px;
}

@media (max-width: 767px) {
    .mc2-scroll-x {
        -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
        mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
    }
}

/* ---- MakeCode-style block mock (static, on-palette) -------------------- */

.mc2-block {
    display: block;
    padding: 8px 14px;
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #0A0410;
    width: max-content;
}

.mc2-block-inner {
    margin-left: 16px;
    padding: 8px 14px;
    font-size: 14px;
    color: var(--text);
    background: var(--surface);
    width: max-content;
}

/* ---- Live / scoreboard ------------------------------------------------- */

.mc2-live-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    background: var(--red-hot);
    box-shadow: 0 0 12px 2px rgba(255, 59, 48, 0.9);
    animation: mc2-blink 1s steps(1) infinite;
}

@keyframes mc2-blink {
    50% { opacity: 0; }
}

/* Score digits and clock: near-white fill with a capped coloured halo. The cap
   matters — /mc2/live runs on a projector and a coloured *fill* plus a wide glow
   smears into an unreadable blob from the back of the hall. */
.mc2-slab-score {
    color: #FFFFFF;
    text-shadow: 0 0 4px rgba(255, 255, 255, 0.5), 0 0 18px rgba(255, 46, 151, 0.85);
}

.mc2-slab-clock {
    color: var(--cyan);
    text-shadow: 0 0 14px rgba(0, 229, 255, 0.55);
}

.mc2-slab {
    border-color: var(--edge-strong);
}

.mc2-slab.is-live {
    border-color: var(--magenta);
    box-shadow: 0 0 0 1px rgba(255, 46, 151, 0.3), 0 0 40px -12px rgba(255, 46, 151, 0.9);
}

.mc2-slab.mc2-flash {
    animation: mc2-flash 0.5s ease-out;
}

@keyframes mc2-flash {
    0% { background-color: var(--magenta-dim); }
    100% { background-color: var(--surface); }
}

.mc2-reconnecting {
    color: var(--muted);
    font-size: 14px;
}

/* ---- Reveal & decorations ---------------------------------------------- */

/* Section reveal-on-scroll — subtle fade + rise, staggered by data-delay. */
.mc2-reveal {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.6s cubic-bezier(.22,.9,.32,1), transform 0.6s cubic-bezier(.22,.9,.32,1);
}
.mc2-reveal.is-visible {
    opacity: 1;
    transform: translateY(0);
}
.mc2-reveal[data-delay="1"] { transition-delay: .08s; }
.mc2-reveal[data-delay="2"] { transition-delay: .16s; }
.mc2-reveal[data-delay="3"] { transition-delay: .24s; }

/* Decorative accent rule under section headings — magenta into cyan. */
.mc2-heading-accent {
    display: block;
    width: 64px;
    height: 3px;
    background: linear-gradient(90deg, var(--magenta), var(--cyan));
    box-shadow: 0 0 16px -2px rgba(255, 46, 151, 0.9);
    margin-top: 12px;
    margin-bottom: 32px;
}

.mc2-ball-pulse {
    animation: mc2-ball-pulse 2s ease-in-out infinite;
    transform-origin: 0px 100px; /* matches the isometric pitch's projected ball position */
}
@keyframes mc2-ball-pulse {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.3); }
}

/* micro:bit LED matrix — each cell cycles through the site's accent colours,
   staggered per-cell (see inline animation-delay) for a diagonal chase effect. */
.mc2-led {
    fill: var(--magenta);
    animation: mc2-led-cycle 4.8s ease-in-out infinite;
}
@keyframes mc2-led-cycle {
    0%, 100% { fill: var(--magenta); }
    25% { fill: var(--cyan); }
    50% { fill: var(--gold); }
    75% { fill: var(--violet); }
}
.mc2-led.is-static {
    animation: none;
}

/* micro:bit A/B buttons — simulated as real buttons */
.mc2-mb-btn {
    cursor: pointer;
    transform-box: fill-box;
    transform-origin: center;
    transition: transform 0.1s ease;
}
.mc2-mb-btn:active {
    transform: scale(0.85);
}
.mc2-mb-btn:focus-visible circle {
    outline: 2px solid var(--cyan);
    outline-offset: 2px;
}

/* ---- Arcade (the playable Motorball game) ------------------------------ */

.mc2-arcade-frame {
    position: relative;
    background:
        radial-gradient(ellipse 70% 60% at 50% 50%, rgba(123, 43, 255, 0.14), transparent 70%),
        var(--surface);
    border: 1px solid var(--edge-strong);
    box-shadow: inset 0 0 60px -20px rgba(0, 229, 255, 0.4);
}

/* The canvas is sized in CSS and back-buffered at devicePixelRatio by the
   controller — touch-action:none keeps the thumbstick from panning the page. */
.mc2-arcade-canvas {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 4 / 3;
    touch-action: none;
    cursor: pointer;
}

.mc2-arcade-canvas:focus-visible {
    outline: 2px solid var(--cyan);
    outline-offset: -2px;
}

/* Start / paused / full-time overlay, stacked above the canvas. */
.mc2-arcade-overlay {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 16px;
    padding: 24px;
    text-align: center;
    background: rgba(6, 6, 11, 0.82);
}

.mc2-arcade-overlay[hidden] {
    display: none;
}

.mc2-arcade-hud {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 10px 14px;
    border-bottom: 1px solid var(--edge);
    background: rgba(6, 6, 11, 0.6);
}

.mc2-arcade-score {
    font-family: 'Press Start 2P', monospace;
    font-size: 1.25rem;
    line-height: 1;
    color: #FFFFFF;
}

.mc2-arcade-key {
    display: inline-block;
    min-width: 26px;
    padding: 3px 7px;
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-align: center;
    color: var(--text);
    background: var(--surface);
    border: 1px solid var(--edge-strong);
}

/* On-screen thumbstick — only revealed on coarse pointers by the controller.
   These sit on top of the pitch, so they are deliberately translucent: the player
   needs to see the ball through their own thumb, and a solid control at this size
   hides a third of the playing area on a phone. */
.mc2-arcade-stick {
    position: absolute;
    left: 10px;
    bottom: 10px;
    width: 84px;
    height: 84px;
    border: 1px solid rgba(255, 46, 151, 0.45);
    background: rgba(6, 6, 11, 0.3);
    touch-action: none;
}

.mc2-arcade-stick-nub {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 34px;
    height: 34px;
    margin: -17px 0 0 -17px;
    background: rgba(255, 46, 151, 0.75);
    box-shadow: 0 0 18px -4px rgba(255, 46, 151, 0.9);
}

.mc2-arcade-boost {
    position: absolute;
    right: 10px;
    bottom: 10px;
    width: 64px;
    height: 64px;
    font-family: 'Space Grotesk', system-ui, sans-serif;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--cyan);
    background: rgba(0, 229, 255, 0.12);
    border: 1px solid var(--cyan);
    touch-action: none;
}

.mc2-arcade-boost:disabled {
    color: var(--muted);
    background: rgba(6, 6, 11, 0.3);
    border-color: var(--edge-strong);
}

@media (prefers-reduced-motion: reduce) {
    .mc2-live-dot,
    .mc2-slab.mc2-flash,
    .mc2-hero-logo,
    .mc2-ball-pulse,
    .mc2-ticker-track,
    .mc2-led,
    .mc2-crt,
    .mc2-scanlines::after {
        animation: none !important;
    }
    /* The sweep element has no resting position worth showing once frozen. */
    .mc2-scanlines::after {
        display: none;
    }
    .mc2-led:not(.is-static) {
        fill: var(--magenta) !important; /* freezes the idle chase; a button press (.is-static) still sets its own pattern via inline style */
    }
    .mc2-reveal {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}
