/*
Theme Name: SPIRITS
Template: apparatus
Theme URI: https://www.pixouls.com/
Author: Pixouls
Author URI: https://www.pixouls.com/
Description: Client-specific customizations built on the Apparatus framework by Pixouls.
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: LICENSE
Text Domain: apparatus-child
Tags:
*/


/* $TOKENS
--------------------------------------------------------*/
@font-face {
    font-family: 'Blackhawk';
    src: url('assets/fonts/BLACKHAWK.woff2') format('woff2');
    font-display: swap;
}
:root {
    /* Type — Adobe Fonts kit https://use.typekit.net/zwm6lsn.css (loaded via the
       Scripts options page). Shackleton (Fort Foundry, same family as the crest
       lettering) is the display slab: Condensed for headers, Regular for mid-size
       titles, Wide for short one-two-word moments. Industry is the text/UI sans —
       Book 400 (+ italic) for copy, Demi 600 for structure (nav subs, meta,
       form labels), Black 800 for punch (buttons, eyebrows, labels). Blackhawk
       stays numeric-accent only (jersey numbers, big stat digits).
       All Shackleton styles are single-weight: always font-weight 400 —
       anything heavier triggers ugly faux-bolding. */
    --spir-ff-head: 'shackleton-condensed', 'Arial Narrow', sans-serif;
    --spir-ff-disp: 'shackleton', 'Arial Narrow', sans-serif;
    --spir-ff-wide: 'shackleton-wide', 'Arial Black', sans-serif;
    --spir-ff-block: 'Blackhawk', 'Arial Narrow', sans-serif;
    --spir-ff-body: 'industry', -apple-system, 'Helvetica Neue', Arial, sans-serif;

    --spir-fs-hero: clamp(5.6rem, 11vw, 14rem);
    --spir-fs-page: clamp(4rem, 7vw, 8.8rem); /* inside-page H1 — between hero + section title */
    --spir-fs-title: clamp(3.2rem, 5vw, 6.4rem);
    --spir-fs-lead: clamp(1.6rem, 1.6vw, 2rem);

    /* Motion */
    --spir-ease: cubic-bezier(.2, .7, .1, 1);
    --spir-dur-fast: 240ms;
    --spir-dur: 480ms;

    /* Surfaces */
    --spir-veil: color-mix(in srgb, var(--c-d) 62%, transparent);
    --spir-edge: color-mix(in srgb, var(--c-pri) 55%, transparent);
}


/* $GLOBAL
--------------------------------------------------------*/
body {
    font-family: var(--spir-ff-body);
}
::-moz-selection {
    background: var(--c-pri);
    color: var(--c-w);
}
::selection {
    background: var(--c-pri);
    color: var(--c-w);
}


/* $TYPE
--------------------------------------------------------*/
/* Primary headings — Phantoms treatment: Acumin variable, heavy + condensed */
.spir-section-title,
.spir-hero__title,
.spir-next__title,
.spir-ticket-card__title,
.spir-learn__title,
.spir-fixture__vs,
.spir-player__name,
.spir-arc__title,
.spir-post__title,
.spir-gallery__title,
.spir-page-hero__title,
.spir-stix-cta__title {
    font-family: var(--spir-ff-head);
    font-weight: 400;
}
.spir-eyebrow {
    margin: 0 0 .8rem;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    color: var(--c-pri);
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .16em;
    text-transform: uppercase;
}
.spir-eyebrow--light {
    color: var(--c-w);
}
.spir-section-head {
    width: var(--w-lg);
    margin: 0 auto 3.2rem;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr 2.4rem auto;
    grid-template-columns: 1fr auto;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: end;
    gap: .8rem 2.4rem;
}
.spir-section-title {
    -ms-grid-column: 1;
    grid-column: 1;
    margin: 0;
    font-size: var(--spir-fs-title);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-section-title--sm {
    font-size: clamp(2.4rem, 3.2vw, 3.6rem);
}
.spir-section-note {
    -ms-grid-column: 1;
    grid-column: 1;
    margin: 0;
    color: color-mix(in srgb, var(--c-fg) 60%, var(--c-bg));
    font-size: 1.4rem;
    line-height: 1.5;
}
.spir-section-more {
    -ms-grid-column: 2;
    grid-column: 2;
    -ms-grid-row: 1;
    -ms-grid-row-span: 2;
    grid-row: 1 / span 2;
    color: var(--c-pri);
    font-weight: 800;
    font-size: 1.4rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    white-space: nowrap;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-section-more:hover {
    color: var(--c-qua);
}
/* FA arrows inline with uppercase micro-labels sit best a touch under
   the text size (same glyph as the swiper pagers, just smaller) */
.spir-section-more .fa-arrow-right,
.spir-ticket-card__link .fa-arrow-right,
.spir-fixture__cta-arrow .fa-arrow-right {
    font-size: .9em;
}
/* Swiper prev/next housed in the section head (replaces overlay arrows,
   which were hard to see over card imagery). */
.spir-section-nav {
    -ms-grid-column: 2;
    grid-column: 2;
    -ms-grid-row: 1;
    -ms-grid-row-span: 2;
    grid-row: 1 / span 2;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    position: relative;
    z-index: 5; /* calendar dropdown above fixtures / following content */
}
.spir-section-nav .spir-section-more {
    grid-column: auto;
    grid-row: auto;
}
.spir-section-nav .swiper-arr {
    position: static;
    -webkit-transform: skewX(-10deg);
        -ms-transform: skewX(-10deg);
            transform: skewX(-10deg); /* keep the slant, drop the absolute centering */
}


/* $BUTTONS
--------------------------------------------------------*/
/* The slant is a skewed ::before layer (not clip-path) so outlined variants
   get a real border that follows the parallelogram. Label stays upright. */
.spir-btn {
    position: relative;
    z-index: 0; /* own stacking context — keeps the ::before behind the label only */
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    padding: 1.6rem 3.2rem;
    border: none;
    background: none;
    font-family: var(--spir-ff-body);
    font-size: 1.4rem;
    font-weight: 800;
    letter-spacing: .12em;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease),
                color var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease),
                color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-btn::before {
    content: '';
    position: absolute;
    inset: 0 .4rem;
    z-index: -1;
    -webkit-transform: skewX(-10deg);
        -ms-transform: skewX(-10deg);
            transform: skewX(-10deg);
    -webkit-transition: background-color var(--spir-dur-fast) var(--spir-ease),
                border-color var(--spir-dur-fast) var(--spir-ease);
    transition: background-color var(--spir-dur-fast) var(--spir-ease),
                border-color var(--spir-dur-fast) var(--spir-ease);
}
.spir-btn:hover {
    -webkit-transform: translateY(-.2rem);
        -ms-transform: translateY(-.2rem);
            transform: translateY(-.2rem);
}
.spir-btn:focus-visible {
    outline: .2rem solid var(--c-pri);
    outline-offset: .4rem;
}
.spir-btn--primary {
    color: var(--c-w);
}
.spir-btn--primary::before {
    background: var(--c-pri);
}
.spir-btn--primary:hover {
    color: var(--c-w);
}
.spir-btn--primary:hover::before {
    background: var(--c-ter);
}
.spir-btn--ghost {
    color: var(--c-fg);
}
.spir-btn--ghost::before {
    border: .2rem solid var(--c-25);
    background: var(--spir-veil);
    -webkit-backdrop-filter: blur(.6rem);
    backdrop-filter: blur(.6rem);
}
.spir-btn--ghost:hover {
    color: var(--c-pri);
}
.spir-btn--ghost:hover::before {
    border-color: var(--c-pri);
}
/* Button rows / clusters — tighter than section gaps so paired CTAs read as one group */
.spir-hero__ctas,
.spir-page-hero__actions,
.spir-page-hero__jump,
.spir-ftr__cta-actions,
.spir-lesson__cta-actions {
    gap: .8rem;
}


/* $RAIL (fixed left header/nav — fully custom, no parent chrome)
--------------------------------------------------------*/
:root {
    --spir-rail-w: 22rem;
    /* Announcement bar height — matches parent .notif line-height (nowrap).
       Hero shrinks by this so bar + hero still fill one viewport. */
    --spir-notif-h: 0rem;
}
body:has(.notif) {
    --spir-notif-h: 3.2rem;
}
.app {
    padding-left: var(--spir-rail-w);
}
/* Fixed over the main column (not the rail). Main gets a top pad so content
   clears it; hero min-height subtracts the same so the ticker stays on-screen. */
.notif {
    position: fixed;
    top: 0;
    left: var(--spir-rail-w);
    right: 0;
    width: auto; /* override parent 100% — with left offset that overflowed the viewport */
    z-index: 900;
    font-family: var(--spir-ff-body);
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    text-decoration: none;
    -webkit-transition: background-color var(--spir-dur-fast) var(--spir-ease);
    transition: background-color var(--spir-dur-fast) var(--spir-ease);
}
.notif:hover {
    background-color: var(--c-ter); /* override parent c-sec swap */
}
.notif__button {
    font-weight: 800;
    background-color: color-mix(in srgb, var(--c-d) 40%, transparent);
    clip-path: polygon(.4rem 0, 100% 0, calc(100% - .4rem) 100%, 0 100%);
}
body:has(.notif) main.main {
    padding-top: var(--spir-notif-h);
}
.spir-rail {
    position: fixed;
    inset: 0 auto 0 0;
    z-index: 1000;
    width: var(--spir-rail-w);
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    /* Bottom burst — same subtle orange glow as the pop card / next-match
       panels: anchored in the bottom-left corner, radiating up-right behind
       the CTA/social area. */
    background:
        radial-gradient(40rem 36rem at 0% 100%, color-mix(in srgb, var(--c-pri) 22%, transparent) 0%, transparent 70%),
        var(--c-d);
    border-right: .1rem solid var(--c-25);
    overflow-y: auto;
    -ms-scroll-chaining: none;
        overscroll-behavior: contain;
}
/* $STARFIELD — reusable crest-star texture with a directional fade.
   Usage: <span class="spir-starfield spir-starfield--top" aria-hidden="true"></span>
   Anchor modifier (--top / --tr / --br / --bl) = where the field is densest; it
   dissolves away from that edge/corner. Size + position per use case. Add
   --anim for the slow orange sheen sweep — use sparingly (rail only for now);
   most star fields should stay static.
--------------------------------------------------------*/
.spir-starfield {
    position: absolute;
    pointer-events: none;
    overflow: hidden;
}
.spir-starfield::before {
    content: '';
    position: absolute;
    inset: 0;
    background-color: color-mix(in srgb, var(--c-w) 12%, transparent);
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 28'%3E%3Cpolygon points='14,4 16.25,10.91 23.51,10.91 17.63,15.18 19.88,22.09 14,17.82 8.12,22.09 10.37,15.18 4.49,10.91 11.75,10.91'/%3E%3C/svg%3E");
    -webkit-mask-size: 1.6rem 1.6rem;
    -webkit-mask-repeat: repeat;
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 28'%3E%3Cpolygon points='14,4 16.25,10.91 23.51,10.91 17.63,15.18 19.88,22.09 14,17.82 8.12,22.09 10.37,15.18 4.49,10.91 11.75,10.91'/%3E%3C/svg%3E");
    mask-size: 1.6rem 1.6rem;
    mask-repeat: repeat;
}
/* Directional fades (on the container, so they compose with the star mask). */
.spir-starfield--top {
    -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, color-stop(30%, #000), to(transparent));
    -webkit-mask-image: linear-gradient(180deg, #000 30%, transparent 100%);
    mask-image: -webkit-gradient(linear, left top, left bottom, color-stop(30%, #000), to(transparent));
    mask-image: linear-gradient(180deg, #000 30%, transparent 100%);
}
/* Corner fades are radial (farthest-side, anchored in the corner) so the
   dissolve completes inside the box on BOTH axes — a diagonal linear fade
   runs out of room on wide/short boxes and leaves a hard row of stars at
   the container edge. */
.spir-starfield--tr {
    -webkit-mask-image: radial-gradient(farthest-side at 100% 0%, #000 15%, transparent 92%);
    mask-image: radial-gradient(farthest-side at 100% 0%, #000 15%, transparent 92%);
}
.spir-starfield--br {
    -webkit-mask-image: radial-gradient(farthest-side at 100% 100%, #000 15%, transparent 92%);
    mask-image: radial-gradient(farthest-side at 100% 100%, #000 15%, transparent 92%);
}
.spir-starfield--bl {
    -webkit-mask-image: radial-gradient(farthest-side at 0% 100%, #000 15%, transparent 92%);
    mask-image: radial-gradient(farthest-side at 0% 100%, #000 15%, transparent 92%);
}
/* Sheen band lives in the middle of a 4x-tall image; it starts and ends
   fully off-canvas, so the linear loop wraps invisibly (no stutter). The
   slight 170deg tilt echoes the sash angle. */
.spir-starfield--anim::before {
    background-image: linear-gradient(170deg,
        transparent 45%,
        color-mix(in srgb, var(--c-pri) 65%, transparent) 50%,
        transparent 55%);
    background-size: 100% 400%;
    background-position: 0 100%;
    /* negative delay phase-shifts the loop so the band is just entering
       the viewport at load instead of ~3.3s in (band spans 45-55% of the
       4x-tall image, visible between 1/3 and 2/3 of the ride) */
    -webkit-animation: spir-star-sheen 10s linear -3.3s infinite;
            animation: spir-star-sheen 10s linear -3.3s infinite;
}
/* Top-down: background-position-y 100% -> 0 slides the band from above the
   view to below it (percentage positioning inverts against the taller image). */
@-webkit-keyframes spir-star-sheen {
    from { background-position: 0 100%; }
    to   { background-position: 0 0; }
}
@keyframes spir-star-sheen {
    from { background-position: 0 100%; }
    to   { background-position: 0 0; }
}
@media (prefers-reduced-motion: reduce) {
    .spir-starfield--anim::before {
        -webkit-animation: none;
                animation: none;
    }
}

/* $BANDS — alternating section surfaces (homepage + inside pages).
   Inside-page rhythm: .spir-page-hero (light, or --media photo) → first
   body section always .spir-band--dark → then alternate light / dark.
   Pair stars with the band: light → --br, dark → --bl. */
.spir-band {
    position: relative;
    isolation: isolate; /* keeps the z:-1 stars inside the section */
}
.spir-band--light {
    background:
        radial-gradient(70% 120% at 10% 0%, color-mix(in srgb, var(--c-pri) 14%, transparent) 0%, transparent 55%),
        var(--c-05);
}
.spir-band--dark {
    background: var(--c-bg);
}
.spir-section-stars {
    bottom: 0;
    width: min(41.6rem, 50%);
    height: 22.4rem;
    z-index: -1;
}
.spir-section-stars.spir-starfield--br {
    right: 0;
}
.spir-section-stars.spir-starfield--bl {
    left: 0;
}
/* Desync the sheen sweeps so consecutive sections don't pulse in lockstep
   (negative delays offset each loop's phase). */
.spir-roster .spir-section-stars::before,
.spir-tickets .spir-section-stars::before {
    -webkit-animation-delay: -3.3s;
            animation-delay: -3.3s;
}
.spir-league .spir-section-stars::before,
.spir-news .spir-section-stars::before {
    -webkit-animation-delay: -6.6s;
            animation-delay: -6.6s;
}
.spir-gallery .spir-section-stars::before,
.spir-partners .spir-section-stars::before {
    -webkit-animation-delay: -1.6s;
            animation-delay: -1.6s;
}
.spir-sched .spir-section-stars::before,
.spir-stix-pricing .spir-section-stars::before {
    -webkit-animation-delay: -5s;
            animation-delay: -5s;
}
.spir-stix-cta .spir-section-stars::before {
    -webkit-animation-delay: -8s;
            animation-delay: -8s;
}

/* Rail star field — dense at the top, dissolving into black downward. */
.spir-rail__stars {
    top: 0;
    left: 0;
    right: 0;
    height: 25.6rem;
}
.spir-rail > *:not(.spir-rail__stars) {
    position: relative;
    z-index: 1;
}
.spir-rail__crest {
    display: -ms-grid;
    display: grid;
    place-items: center;
    padding: 2.4rem 1.6rem 1.6rem;
    text-decoration: none;
}
.spir-rail__crest-img {
    display: block;
    width: 16.4rem;
    height: auto;
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-rail__crest:hover .spir-rail__crest-img {
    -webkit-transform: translateY(-.3rem) scale(1.02);
        -ms-transform: translateY(-.3rem) scale(1.02);
            transform: translateY(-.3rem) scale(1.02);
}
/* The crest is inline SVG (partials/modules/logo.php); the entrance is
   transform-only (no fades) and starts immediately on load. Figure
   (robe + eyes) and orb (gloves + ball) currently share the exact same
   animation — one rigid unit scaling in from the crest's bottom center,
   like he's approaching from far back in the shadows. Both anchor to the
   view-box (not their own fill-boxes) so they stay locked together
   mid-flight. The keystone clipPath inside the SVG keeps everything
   inside the crest. */
.spir-logo__figure,
.spir-logo__orb {
    transform-box: view-box;
    /* ~the figure's visual center; shared by both groups so ball and
       hands stay locked to the robe mid-flight */
    -webkit-transform-origin: 50% 62%;
        -ms-transform-origin: 50% 62%;
            transform-origin: 50% 62%;
    /* keep the animated groups on their own compositor layers — without
       this, scroll-induced layer churn briefly reuses a stale raster and
       the moving parts (eyes especially) blur for a beat */
    will-change: transform, translate, scale;
}
/* After the intro settles, an idle loop with two beats per 14s cycle
   (same idea as the blink loop): first he pulls the ball up while the
   hood dips down to peer into it, later he holds the ball out toward
   the viewer (gloves + ball swell ~9%). The position beats ride the
   composable `translate` property and the offer beat rides the
   composable `scale` property — the intro owns `transform`, so nothing
   fights. The orb's loops are chained after its intro lift with a
   delay; 14s against the 6.4s blink keeps the rhythms drifting out of
   phase so the idle never turns metronomic. */
.spir-logo__figure {
    -webkit-animation: spir-emerge 1.2s cubic-bezier(.22, .61, .36, 1) both,
               spir-figure-idle 14s ease-in-out 4s infinite;
            animation: spir-emerge 1.2s cubic-bezier(.22, .61, .36, 1) both,
               spir-figure-idle 14s ease-in-out 4s infinite;
}
@-webkit-keyframes spir-emerge {
    from {
        -webkit-transform: scale(.72);
                transform: scale(.72);
    }
    to {
        -webkit-transform: scale(1);
                transform: scale(1);
    }
}
@keyframes spir-emerge {
    from {
        -webkit-transform: scale(.72);
                transform: scale(.72);
    }
    to {
        -webkit-transform: scale(1);
                transform: scale(1);
    }
}
@-webkit-keyframes spir-figure-idle {
    0%, 20%, 52%, 100% {
        translate: 0 0;
    }
    30%, 42% {
        translate: 0 16px;   /* hood leans right in over the ball */
    }
}
@keyframes spir-figure-idle {
    0%, 20%, 52%, 100% {
        translate: 0 0;
    }
    30%, 42% {
        translate: 0 16px;   /* hood leans right in over the ball */
    }
}
/* The orb (gloves + ball) rides the same scale but anchored lower —
   around its own base rather than the figure's center — so the ball
   reads as growing up from below to meet him. Plus a small trailing
   lift that resolves slower, animated on the separate `translate`
   property so it composes with the scale instead of overriding it. */
.spir-logo__orb {
    -webkit-transform-origin: 50% 88%;
        -ms-transform-origin: 50% 88%;
            transform-origin: 50% 88%;
    -webkit-animation: spir-emerge 1.2s cubic-bezier(.22, .61, .36, 1) both,
               spir-orb-lift 1.8s cubic-bezier(.1, .8, .2, 1) both,
               spir-orb-idle 14s ease-in-out 4s infinite,
               spir-orb-offer 14s ease-in-out 4s infinite;
            animation: spir-emerge 1.2s cubic-bezier(.22, .61, .36, 1) both,
               spir-orb-lift 1.8s cubic-bezier(.1, .8, .2, 1) both,
               spir-orb-idle 14s ease-in-out 4s infinite,
               spir-orb-offer 14s ease-in-out 4s infinite;
}
@-webkit-keyframes spir-orb-lift {
    from {
        /* 28px keeps the gloves clear of the inner keystone hairline even
           at first frame, where the lift offset dips them the lowest */
        translate: 0 28px;
    }
    to {
        translate: 0 0;
    }
}
@keyframes spir-orb-lift {
    from {
        /* 28px keeps the gloves clear of the inner keystone hairline even
           at first frame, where the lift offset dips them the lowest */
        translate: 0 28px;
    }
    to {
        translate: 0 0;
    }
}
@-webkit-keyframes spir-orb-idle {
    0%, 20%, 52%, 100% {
        translate: 0 0;
    }
    30%, 42% {
        translate: 0 -20px;   /* ball drawn up for a closer look */
    }
}
@keyframes spir-orb-idle {
    0%, 20%, 52%, 100% {
        translate: 0 0;
    }
    30%, 42% {
        translate: 0 -20px;   /* ball drawn up for a closer look */
    }
}
/* Beat two: he presents the ball to the viewer — gloves + ball swell
   from the orb's base anchor, growing up and out toward the glass. */
@-webkit-keyframes spir-orb-offer {
    0%, 58%, 84%, 100% {
        scale: 1;
    }
    64%, 78% {
        scale: 1.16;
    }
}
@keyframes spir-orb-offer {
    0%, 58%, 84%, 100% {
        scale: 1;
    }
    64%, 78% {
        scale: 1.16;
    }
}
/* The spirit blinks — the gradient eye glows squash shut, revealing the
   dark sockets drawn beneath them. One quick blink per cycle. */
.spir-logo__eye {
    transform-box: fill-box;
    -webkit-transform-origin: 50% 60%;
        -ms-transform-origin: 50% 60%;
            transform-origin: 50% 60%;
    will-change: transform; /* stable raster — see note on the groups above */
    -webkit-animation: spir-blink 6.4s ease-in-out infinite;
            animation: spir-blink 6.4s ease-in-out infinite;
}
@-webkit-keyframes spir-blink {
    0%, 92%, 98%, 100% { -webkit-transform: scaleY(1); transform: scaleY(1); }
    95% { -webkit-transform: scaleY(.05); transform: scaleY(.05); }
}
@keyframes spir-blink {
    0%, 92%, 98%, 100% { -webkit-transform: scaleY(1); transform: scaleY(1); }
    95% { -webkit-transform: scaleY(.05); transform: scaleY(.05); }
}
@media (prefers-reduced-motion: reduce) {
    .spir-logo__figure,
    .spir-logo__orb,
    .spir-logo__eye {
        -webkit-animation: none;
                animation: none;
    }
}
.spir-rail__nav {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
    display: -ms-grid;
    display: grid;
    -ms-flex-line-pack: center;
        align-content: center;
    padding-block: 1.6rem;
}
.spir-rail__list {
    margin: 0;
    padding: 0;
    list-style: none;
}
.spir-rail__item + .spir-rail__item {
    border-top: .1rem solid var(--c-25);
}
.spir-rail__link {
    position: relative;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center; /* icons (svg) center better than baseline */
    gap: .8rem;
    padding: 1.6rem 2.4rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: 2.2rem;
    line-height: 1;
    letter-spacing: .01em;
    text-transform: uppercase;
    text-decoration: none;
    color: var(--c-fg);
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-rail__link::before {
    content: '';
    position: absolute;
    left: 0;
    top: 18%;
    bottom: 18%;
    width: .4rem;
    background: var(--c-pri);
    -webkit-transform: scaleY(0);
        -ms-transform: scaleY(0);
            transform: scaleY(0);
    -webkit-transform-origin: top;
        -ms-transform-origin: top;
            transform-origin: top;
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-rail__link:hover {
    color: var(--c-w);
    -webkit-transform: translateX(.8rem);
        -ms-transform: translateX(.8rem);
            transform: translateX(.8rem);
}
.spir-rail__link:hover::before {
    -webkit-transform: scaleY(1);
        -ms-transform: scaleY(1);
            transform: scaleY(1);
}
.spir-rail__icon {
    min-width: 2.4rem;
    font-size: 1.4rem;
    text-align: center;
    color: var(--c-pri);
    opacity: .55;
    -webkit-transition: opacity var(--spir-dur-fast) var(--spir-ease);
    transition: opacity var(--spir-dur-fast) var(--spir-ease);
}
.spir-rail__link:hover .spir-rail__icon {
    opacity: 1;
}
.spir-rail__foot {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    gap: .8rem;
    padding: 1.6rem 1.6rem 2.4rem;
}
.spir-rail__cta {
    display: block;
    padding: 1.6rem;
    text-align: center;
    background: var(--c-pri);
    color: var(--c-w);
    text-decoration: none;
    clip-path: polygon(.8rem 0, 100% 0, calc(100% - .8rem) 100%, 0 100%);
    -webkit-transition: background var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: background var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: background var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease);
    transition: background var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-rail__cta:hover {
    background: var(--c-ter);
    -webkit-transform: translateY(-.2rem);
        -ms-transform: translateY(-.2rem);
            transform: translateY(-.2rem);
}
.spir-rail__cta-label {
    display: block;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: 2rem;
    line-height: 1;
    text-transform: uppercase;
}
.spir-rail__cta-sub {
    margin: 0;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    text-align: center;
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
}

/* Mobile top bar + drawer backdrop (hidden on desktop) */
.spir-topbar {
    display: none;
}
.spir-rail-backdrop {
    position: fixed;
    inset: 0;
    z-index: 950;
    background: color-mix(in srgb, var(--c-d) 70%, transparent);
    -webkit-backdrop-filter: blur(.4rem);
    backdrop-filter: blur(.4rem);
}

@media only screen and (max-width: 1024px) {
    .app {
        padding-left: 0;
    }
    /* Full-bleed on mobile; sit under the sticky topbar (~8rem) */
    .notif {
        left: 0;
        top: 8rem;
    }
    body:has(.notif) .spir-hero {
        /* topbar is in-flow; subtract it too so the ticker still fits */
        min-height: calc(100svh - var(--spir-notif-h) - 8rem);
    }
    /* Sticky, not fixed — stays in flow so the contents set the bar height
       (no matching padding-top hack on .app needed) */
    .spir-topbar {
        position: sticky;
        top: 0;
        z-index: 940;
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-align: center;
            -ms-flex-align: center;
                align-items: center;
        gap: 1.6rem;
        padding: .8rem 1.6rem;
        background: color-mix(in srgb, var(--c-d) 88%, transparent);
        -webkit-backdrop-filter: blur(1.2rem);
        backdrop-filter: blur(1.2rem);
        border-bottom: .1rem solid var(--c-25);
    }
    .spir-topbar__crest {
        margin-right: auto;
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
    }
    .spir-topbar__crest-img {
        height: 6.4rem;
        width: auto;
        position: relative;
        top: .4rem;
    }
    .spir-topbar__cta {
        padding: .8rem 1.6rem;
        background: var(--c-pri);
        color: var(--c-w);
        font-size: 1.2rem;
        font-weight: 800;
        letter-spacing: .1em;
        text-transform: uppercase;
        text-decoration: none;
        clip-path: polygon(.6rem 0, 100% 0, calc(100% - .6rem) 100%, 0 100%);
    }
    .spir-topbar__burger {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
        -webkit-box-pack: center;
            -ms-flex-pack: center;
                justify-content: center;
        gap: .8rem;
        width: 4.8rem;
        height: 4.8rem;
        padding: .8rem;
        background: none;
        border: 0;
        cursor: pointer;
    }
    .spir-topbar__burger-line {
        display: block;
        width: 100%;
        height: .2rem;
        background: var(--c-fg);
        -webkit-transition: opacity var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
        transition: opacity var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
        transition: transform var(--spir-dur-fast) var(--spir-ease), opacity var(--spir-dur-fast) var(--spir-ease);
        transition: transform var(--spir-dur-fast) var(--spir-ease), opacity var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    }
    body.spir-nav-open .spir-topbar__burger-line:nth-child(1) {
        -webkit-transform: translateY(1rem) rotate(45deg);
            -ms-transform: translateY(1rem) rotate(45deg);
                transform: translateY(1rem) rotate(45deg);
    }
    body.spir-nav-open .spir-topbar__burger-line:nth-child(2) {
        opacity: 0;
    }
    body.spir-nav-open .spir-topbar__burger-line:nth-child(3) {
        -webkit-transform: translateY(-1rem) rotate(-45deg);
            -ms-transform: translateY(-1rem) rotate(-45deg);
                transform: translateY(-1rem) rotate(-45deg);
    }
    .spir-rail {
        width: min(32rem, 84vw);
        -webkit-transform: translateX(-100%);
            -ms-transform: translateX(-100%);
                transform: translateX(-100%);
        -webkit-transition: -webkit-transform var(--spir-dur) var(--spir-ease);
        transition: -webkit-transform var(--spir-dur) var(--spir-ease);
        transition: transform var(--spir-dur) var(--spir-ease);
        transition: transform var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease);
    }
    body.spir-nav-open .spir-rail {
        -webkit-transform: none;
            -ms-transform: none;
                transform: none;
    }
    body.spir-nav-open {
        overflow: hidden;
    }
}
@media only screen and (min-width: 1025px) {
    .spir-topbar,
    .spir-rail-backdrop {
        display: none !important;
    }
}


/* $MAIN (sections render straight into the parent's main.main —
   no extra wrapper; a nested <main> isn't valid HTML)
--------------------------------------------------------*/
main.main {
    background: var(--c-bg);
    color: var(--c-fg);
    overflow-x: clip;
    border-bottom: .1rem solid var(--c-25);
}
main.main > section {
    padding-block: 9.6rem;
}


/* $LEARN-BADGE — floating Learn the Game trigger (top-right on desktop,
   bottom-right on mobile). Sits under the rail/pops in the stack; the pop
   overlay covers it while the wizard is open.
--------------------------------------------------------*/
.spir-learn-badge {
    position: fixed;
    top: calc(2.4rem + var(--spir-notif-h));
    right: 2.4rem;
    z-index: 900;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: 1.6rem;
    padding: 1.6rem 3.2rem 1.6rem 2.4rem;
    border: 0;
    background: transparent;
    color: var(--c-w);
    text-align: left;
    cursor: pointer;
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
/* Slanted panel — same silhouette/veil language as .spir-btn and the arrows. */
.spir-learn-badge::before {
    content: '';
    position: absolute;
    inset: 0 .4rem;
    z-index: -1;
    background-color: color-mix(in srgb, var(--c-d) 72%, transparent);
    -webkit-backdrop-filter: blur(.6rem);
    backdrop-filter: blur(.6rem);
    border: .1rem solid color-mix(in srgb, var(--c-pri) 45%, transparent);
    -webkit-transform: skewX(-10deg);
        -ms-transform: skewX(-10deg);
            transform: skewX(-10deg);
    -webkit-transition: background-color var(--spir-dur-fast) var(--spir-ease),
                border-color var(--spir-dur-fast) var(--spir-ease);
    transition: background-color var(--spir-dur-fast) var(--spir-ease),
                border-color var(--spir-dur-fast) var(--spir-ease);
}
.spir-learn-badge:hover {
    -webkit-transform: translateY(-.2rem);
        -ms-transform: translateY(-.2rem);
            transform: translateY(-.2rem);
}
.spir-learn-badge:hover::before {
    background-color: var(--c-pri);
    border-color: var(--c-pri);
}
.spir-learn-badge:focus-visible {
    outline: .2rem solid var(--c-pri);
    outline-offset: .2rem;
}
.spir-learn-badge__icon {
    font-size: 2.4rem;
    color: var(--c-pri);
    -webkit-animation: spir-badge-pulse 3s var(--spir-ease) infinite;
            animation: spir-badge-pulse 3s var(--spir-ease) infinite;
}
.spir-learn-badge:hover .spir-learn-badge__icon {
    color: var(--c-w);
    -webkit-animation-play-state: paused;
            animation-play-state: paused;
}
@-webkit-keyframes spir-badge-pulse {
    0%, 100% { -webkit-transform: scale(1); transform: scale(1); }
    50%      { -webkit-transform: scale(1.15) rotate(18deg); transform: scale(1.15) rotate(18deg); }
}
@keyframes spir-badge-pulse {
    0%, 100% { -webkit-transform: scale(1); transform: scale(1); }
    50%      { -webkit-transform: scale(1.15) rotate(18deg); transform: scale(1.15) rotate(18deg); }
}
.spir-learn-badge__copy {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    gap: .2rem;
}
.spir-learn-badge__eyebrow {
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .22em;
    text-transform: uppercase;
    color: var(--c-pri);
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-learn-badge:hover .spir-learn-badge__eyebrow {
    color: var(--c-d);
}
.spir-learn-badge__label {
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: 2rem;
    line-height: 1;
    letter-spacing: .04em;
    text-transform: uppercase;
}
@media only screen and (max-width: 1024px) {
    .spir-learn-badge {
        position: absolute;
        top: calc(9.6rem + var(--spir-notif-h));
        bottom: auto;
        right: 1.6rem;
        padding: 1.6rem 2.4rem;
    }
    .spir-learn-badge__label {
        font-size: 1.8rem;
    }
}
@media (prefers-reduced-motion: reduce) {
    .spir-learn-badge__icon {
        -webkit-animation: none;
                animation: none;
    }
}


/* $HERO
--------------------------------------------------------*/
.spir-hero {
    position: relative;
    /* Shrink by the sticky notif so bar + hero still fill one viewport and
       the news ticker stays on-screen at first paint */
    min-height: calc(100svh - var(--spir-notif-h));
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
    padding: 0 !important;
    isolation: isolate;
}
.spir-hero__media,
.spir-hero__media .vim--bg {
    position: absolute;
    inset: 0;
    z-index: -2;
}
.spir-hero__media .vim--bg {
    background-size: cover;
    background-position: center;
}
.spir-hero__media .vim__iframe {
    position: absolute;
    top: 50%;
    left: 50%;
    width: max(100vw, 177.78svh);
    height: max(100svh, 56.25vw);
    -webkit-transform: translate(-50%, -50%);
        -ms-transform: translate(-50%, -50%);
            transform: translate(-50%, -50%);
    opacity: 0;
    -webkit-transition: opacity 1.2s var(--spir-ease);
    transition: opacity 1.2s var(--spir-ease);
    pointer-events: none;
}
.spir-hero__scrim {
    position: absolute;
    inset: 0;
    z-index: -1;
    background:
        linear-gradient(180deg, color-mix(in srgb, var(--c-d) 55%, transparent) 0%, transparent 30%),
        linear-gradient(0deg, var(--c-d) 4%, color-mix(in srgb, var(--c-d) 72%, transparent) 45%, transparent 80%),
        radial-gradient(90% 70% at 85% 15%, color-mix(in srgb, var(--c-pri) 18%, transparent) 0%, transparent 60%);
}
.spir-hero__inner {
    width: var(--w-lg);
    margin: 0 auto;
    padding-block: 4.8rem 6.4rem;
}
/* Vertical micro-type — design accent running down the hero's right edge */
/* Bottom-right star field — static, sitting just above the ticker (bottom
   offset ~= ticker height), dissolving up and left into the scrim
   (z: above media/scrim, below hero content). */
.spir-hero__stars {
    right: 0;
    bottom: 5.6rem;
    width: min(41.6rem, 50%);
    height: 28.8rem;
    z-index: -1;
}
/* Location marker + scroll cue — a real link down to #next-match; the line
   after the text runs a pulse traveling downward into an arrowhead. Anchors
   the hero's bottom-right, opposite the learn badge up top. */
.spir-hero__vert {
    position: absolute;
    right: 3.2rem;
    bottom: 11.2rem;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: 1.6rem;
    -webkit-writing-mode: vertical-rl;
        -ms-writing-mode: tb-rl;
            writing-mode: vertical-rl;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .34em;
    text-transform: uppercase;
    white-space: nowrap;
    color: color-mix(in srgb, var(--c-w) 55%, transparent);
    text-decoration: none;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-hero__vert:hover {
    color: var(--c-w);
}
.spir-hero__vert:focus-visible {
    outline: .2rem solid var(--c-pri);
    outline-offset: .4rem;
}
.spir-hero__vert::after {
    content: '';
    width: .2rem;
    height: 8rem;
    /* pulse segment travels top-to-bottom, off-canvas at both ends of the
       loop (same seamless-wrap trick as the star sheen) */
    background-image: linear-gradient(180deg,
        transparent 33%,
        var(--c-pri) 50%,
        transparent 67%);
    background-size: 100% 300%;
    background-position: 0 100%;
    -webkit-animation: spir-scroll-cue 2.4s linear infinite;
            animation: spir-scroll-cue 2.4s linear infinite;
}
/* Arrowhead — two stems closing the line into a downward point. */
.spir-hero__vert::before {
    content: '';
    position: absolute;
    bottom: .2rem;
    left: 50%;
    width: .8rem;
    height: .8rem;
    border-right: .2rem solid var(--c-pri);
    border-bottom: .2rem solid var(--c-pri);
    -webkit-transform: translateX(-50%) rotate(45deg);
        -ms-transform: translateX(-50%) rotate(45deg);
            transform: translateX(-50%) rotate(45deg);
}
@-webkit-keyframes spir-scroll-cue {
    from { background-position: 0 100%; }
    to   { background-position: 0 0; }
}
@keyframes spir-scroll-cue {
    from { background-position: 0 100%; }
    to   { background-position: 0 0; }
}
@media (prefers-reduced-motion: reduce) {
    .spir-hero__vert::after {
        -webkit-animation: none;
                animation: none;
        background-image: linear-gradient(180deg, var(--c-pri), transparent);
        background-size: 100% 100%;
    }
}
.spir-hero__crest {
    width: 4rem;
    height: 4rem;
}
.spir-hero__title {
    margin: 0;
    line-height: .92;
    text-transform: uppercase;
    color: var(--c-w);
}
.spir-hero__title-line {
    display: block;
    font-size: var(--spir-fs-hero);
    letter-spacing: -.015em;
}
.spir-hero__title-line--sm {
    font-size: calc(var(--spir-fs-hero) * .34);
    color: var(--c-pri);
    letter-spacing: .04em;
}
.spir-hero__lead {
    max-width: 56rem;
    margin: 1.6rem 0 3.2rem;
    font-size: var(--spir-fs-lead);
    line-height: 1.55;
    color: color-mix(in srgb, var(--c-w) 82%, transparent);
}
.spir-hero__ctas {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
}
.spir-hero__cta-date {
    color: var(--c-pri);
}


/* $TICKER
--------------------------------------------------------*/
.spir-ticker {
    overflow: hidden;
    border-top: .1rem solid var(--c-25);
    background: color-mix(in srgb, var(--c-d) 85%, transparent);
    -webkit-backdrop-filter: blur(.8rem);
    backdrop-filter: blur(.8rem);
    padding-block: 1.6rem;
}
.spir-ticker__track {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    width: -webkit-max-content;
    width: -moz-max-content;
    width: max-content;
    /* Fallback duration — the ticker JS module overrides it based on
       track width so the crawl speed stays constant (60px/s). */
    -webkit-animation: spir-ticker 72s linear infinite;
            animation: spir-ticker 72s linear infinite;
}
/* News ticker: freeze the crawl while the cursor is over it so headlines
   can be clicked. */
.spir-ticker:hover .spir-ticker__track {
    -webkit-animation-play-state: paused;
            animation-play-state: paused;
}
.spir-ticker__seg {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    gap: 3.2rem;
    padding-right: 3.2rem;
    white-space: nowrap;
    font-size: 1.4rem;
    font-weight: 800;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--c-w);
}
a.spir-ticker__item {
    color: inherit;
    text-decoration: none;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
a.spir-ticker__item:hover {
    color: var(--c-pri);
}
.spir-ticker__ext {
    margin-left: .4rem;
    font-size: 1rem;
    /* Muted like the news-card source badge — orange here clashed with the
       spinning ball separators */
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
}
.spir-ticker__seg em {
    font-style: normal;
    color: var(--c-pri);
}
.spir-ticker__seg em .fa-futbol {
    display: inline-block;
    -webkit-animation: spir-ball-spin 4s linear infinite;
            animation: spir-ball-spin 4s linear infinite;
}
@-webkit-keyframes spir-ball-spin {
    to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}
@keyframes spir-ball-spin {
    to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
    .spir-ticker__seg em .fa-futbol {
        -webkit-animation: none;
                animation: none;
    }
}
@-webkit-keyframes spir-ticker {
    to { -webkit-transform: translateX(-50%); transform: translateX(-50%); }
}
@keyframes spir-ticker {
    to { -webkit-transform: translateX(-50%); transform: translateX(-50%); }
}


/* $ADS
--------------------------------------------------------*/
.spir-ad {
    width: var(--w-md);
    margin: 4rem auto 0;
}
/* Hero ad sits between sections — needs its own bottom margin,
   tucked up under the ticker. */
.spir-ad[data-placement="homepage-hero"] {
    margin-top: 2.4rem;
    margin-bottom: 4rem;
}
/* Banner creatives are 1600x200 — pin the ratio so nothing upstream
   stretches them. */
.spir-ad img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 1600 / 200;
    -o-object-fit: cover;
       object-fit: cover;
    border: .1rem solid var(--c-25);
}
.spir-ad__placeholder {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    gap: .8rem;
    min-height: 12rem;
    border: .1rem dashed var(--c-25);
    background: var(--c-05);
}
.spir-ad__tag {
    font-size: 1.6rem;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
}
.spir-ad__hint {
    font-size: 1.2rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: color-mix(in srgb, var(--c-fg) 35%, var(--c-bg));
}


/* $NEXT-MATCH
--------------------------------------------------------*/
.spir-next__inner {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr 4.8rem auto;
    grid-template-columns: 1fr auto;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: 4.8rem;
}
.spir-next__title {
    margin: 0 0 .8rem;
    font-size: clamp(4rem, 6vw, 7.2rem);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-next__vs {
    color: var(--c-pri);
}
.spir-next__meta {
    margin: 0 0 2.4rem;
    font-size: 1.6rem;
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}
.spir-count {
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr .8rem 1fr .8rem 1fr .8rem 1fr;
    grid-template-columns: repeat(4, 1fr);
    gap: .8rem;
}
.spir-count__cell {
    min-width: 10rem;
    padding: 1.6rem .8rem;
    text-align: center;
    background: var(--c-bg);
    border: .1rem solid var(--c-25);
    border-top: .3rem solid var(--c-pri);
}
.spir-count__num {
    display: block;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: clamp(3.2rem, 4vw, 5.2rem);
    line-height: 1;
    font-variant-numeric: tabular-nums;
}
.spir-count__label {
    display: block;
    margin-top: .8rem;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: color-mix(in srgb, var(--c-fg) 50%, var(--c-bg));
}


/* $SWIPERS (horizontal carousels — Swiper ships with the parent)
--------------------------------------------------------*/
.spir-swiper {
    position: relative;
    width: var(--w-xl);
    margin: 0 auto;
}
.spir-swiper .swiper {
    overflow: visible; /* slides peek past the content edge; main.main clips the page */
}
.spir-swiper .swiper-slide {
    height: auto;
}
/* Arrows — re-cut the parent's round chrome into the Spirits slant
   (same angle as .spir-btn). Icon counter-skews so it stays square. */
.swiper-arr {
    width: 4.8rem;
    height: 4.8rem;
    border-radius: 0;
    background-color: var(--spir-veil);
    -webkit-backdrop-filter: blur(.6rem);
    backdrop-filter: blur(.6rem);
    -webkit-transform: translateY(-50%) skewX(-10deg);
        -ms-transform: translateY(-50%) skewX(-10deg);
            transform: translateY(-50%) skewX(-10deg);
}
.swiper-arr:focus-visible {
    outline: .2rem solid var(--c-pri);
    outline-offset: .2rem;
}
/* Disabled: stay visible (parent hides via opacity 0), just dim icon + border. */
.swiper-arr.swiper-button-disabled {
    opacity: 1;
    pointer-events: none;
    border-color: var(--c-25);
}
.swiper-arr.swiper-button-disabled .swiper-arr__arrow-icon {
    fill: var(--c-25);
}
.swiper-arr__arrow-icon {
    width: 2rem;
    -webkit-transform: skewX(10deg);
        -ms-transform: skewX(10deg);
            transform: skewX(10deg);
}


/* $SCHEDULE
--------------------------------------------------------*/
/* Full schedule page — stacked fixtures (not the homepage swiper). */
.spir-sched--list .spir-sched__list {
    width: var(--w-lg);
    margin: 0 auto;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    gap: 1.6rem;
}
.spir-sched--list .spir-fixture {
    width: 100%;
}
.spir-fixture {
    position: relative;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    width: min(44rem, 86vw);
    background: var(--c-05);
    border: .1rem solid var(--c-25);
    text-decoration: none;
    color: inherit;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-fixture:hover {
    border-color: var(--c-pri);
    -webkit-transform: translateY(-.4rem);
        -ms-transform: translateY(-.4rem);
            transform: translateY(-.4rem);
}
/* Main row: calendar chip | matchup | opponent crest */
.spir-fixture__main {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    gap: 1.6rem;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
    padding: 2.4rem;
}
/* Date as a tear-off calendar page: month strip up top, big day below */
.spir-fixture__cal {
    margin: 0;
    -ms-flex-negative: 0;
        flex-shrink: 0;
    width: 7.2rem;
    text-align: center;
    text-transform: uppercase;
    border: .1rem solid var(--c-25);
    background: var(--c-bg);
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease);
}
.spir-fixture:hover .spir-fixture__cal {
    border-color: var(--c-pri);
}
.spir-fixture__month {
    display: block;
    padding: .2rem 0;
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .2em;
    text-indent: .2em; /* optically recenter the tracked caps */
    background: var(--c-pri);
    color: var(--c-w);
}
.spir-fixture__day {
    display: block;
    padding-top: .4rem;
    font-family: var(--spir-ff-block); /* Blackhawk — numeric accent */
    font-size: 3.6rem;
    line-height: 1;
}
.spir-fixture__dow {
    display: block;
    padding-bottom: .4rem;
    font-size: 1rem;
    font-weight: 600;
    letter-spacing: .2em;
    text-indent: .2em;
    color: color-mix(in srgb, var(--c-fg) 50%, var(--c-bg));
}
.spir-fixture__body {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
    min-width: 0;
}
.spir-fixture__vs {
    margin: 0 0 .8rem;
    font-size: 2rem;
    letter-spacing: .01em;
    text-transform: uppercase;
}
.spir-fixture__meta {
    margin: 0;
    font-size: 1.4rem;
    color: color-mix(in srgb, var(--c-fg) 60%, var(--c-bg));
}
.spir-fixture__promo {
    margin: .8rem 0 0;
    font-size: 1.2rem;
    font-weight: 600;
    color: var(--c-qua);
    text-transform: uppercase;
    letter-spacing: .08em;
}
/* Opponent crest — right side of the card */
.spir-fixture__crest {
    -ms-flex-negative: 0;
        flex-shrink: 0;
    display: -ms-grid;
    display: grid;
    place-items: center;
    width: 7.2rem;
    height: 7.2rem;
}
.spir-fixture__crest-img {
    max-width: 100%;
    max-height: 100%;
    -o-object-fit: contain;
       object-fit: contain;
    -webkit-filter: grayscale(.2);
            filter: grayscale(.2);
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease), -webkit-filter var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease), -webkit-filter var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), filter var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), filter var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease), -webkit-filter var(--spir-dur-fast) var(--spir-ease);
}
.spir-fixture:hover .spir-fixture__crest-img {
    -webkit-transform: scale(1.08);
        -ms-transform: scale(1.08);
            transform: scale(1.08);
    -webkit-filter: grayscale(0);
            filter: grayscale(0);
}
/* Ticket strip along the bottom */
.spir-fixture__foot {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    padding: 1.6rem 2.4rem;
    border-top: .1rem solid var(--c-25);
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease);
}
.spir-fixture:hover .spir-fixture__foot {
    border-color: var(--c-pri);
    background: color-mix(in srgb, var(--c-pri) 10%, transparent);
}
.spir-fixture__cta {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--c-pri);
}
.spir-fixture__cta .fa-ticket {
    font-size: 1.4rem;
    -webkit-transform: rotate(-24deg);
        -ms-transform: rotate(-24deg);
            transform: rotate(-24deg);
}
.spir-fixture__cta-arrow {
    color: var(--c-pri);
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-fixture:hover .spir-fixture__cta-arrow {
    -webkit-transform: translateX(.4rem);
        -ms-transform: translateX(.4rem);
            transform: translateX(.4rem);
}
.spir-fixture__badge {
    position: absolute;
    top: 0;
    right: 0;
    padding: .8rem 1.6rem;
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .14em;
    text-transform: uppercase;
    background: var(--c-10);
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}
.spir-fixture--home .spir-fixture__badge {
    background: var(--c-pri);
    color: var(--c-w);
}
.spir-schedule-pending {
    width: 100%;
}
.spir-schedule-pending--list {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    gap: 1.6rem;
}
.spir-schedule-pending--list .spir-fixture {
    width: 100%;
}
.spir-fixture--ghost {
    pointer-events: none;
    opacity: .58;
}
.spir-fixture--ghost:hover {
    border-color: var(--c-25);
    -webkit-transform: none;
        -ms-transform: none;
            transform: none;
}
.spir-fixture--ghost .spir-fixture__cal {
    color: transparent;
}
.spir-fixture--ghost .spir-fixture__month {
    background: var(--c-25);
}
.spir-fixture--ghost .spir-fixture__crest {
    font-size: 3.2rem;
    color: var(--c-25);
}
.spir-fixture__skeleton {
    display: block;
    height: 1.2rem;
    background: -webkit-gradient(linear, left top, right top, from(var(--c-10)), color-stop(50%, var(--c-25)), to(var(--c-10)));
    background: linear-gradient(90deg, var(--c-10), var(--c-25) 50%, var(--c-10));
    background-size: 200% 100%;
    -webkit-animation: spir-skeleton 1.8s ease-in-out infinite;
            animation: spir-skeleton 1.8s ease-in-out infinite;
}
.spir-fixture__skeleton--title {
    width: 72%;
    height: 2rem;
    margin-bottom: 1.2rem;
}
.spir-fixture__skeleton--meta {
    width: 48%;
}
@-webkit-keyframes spir-skeleton {
    to { background-position: -200% 0; }
}
@keyframes spir-skeleton {
    to { background-position: -200% 0; }
}
@media (prefers-reduced-motion: reduce) {
    .spir-fixture__skeleton {
        -webkit-animation: none;
                animation: none;
    }
}


/* $CAL (calendar subscribe dropdown — schedule section header)
--------------------------------------------------------*/
.spir-cal {
    position: relative;
    display: inline-block;
}
.spir-cal__toggle {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    height: 4.8rem;
    padding: 0 1.6rem;
    background: transparent;
    border: .1rem solid var(--c-25);
    color: var(--c-fg);
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .12em;
    text-transform: uppercase;
    cursor: pointer;
    -webkit-transform: skewX(-10deg);
        -ms-transform: skewX(-10deg);
            transform: skewX(-10deg); /* match the swiper arrow silhouette */
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease);
}
.spir-cal__toggle > * {
    -webkit-transform: skewX(10deg);
        -ms-transform: skewX(10deg);
            transform: skewX(10deg);
}
.spir-cal__toggle:hover,
.spir-cal__toggle[aria-expanded="true"] {
    border-color: var(--c-pri);
    color: var(--c-pri);
}
.spir-cal__chev {
    font-size: 1rem;
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-cal__toggle[aria-expanded="true"] .spir-cal__chev {
    -webkit-transform: skewX(10deg) rotate(180deg);
        -ms-transform: skewX(10deg) rotate(180deg);
            transform: skewX(10deg) rotate(180deg);
}
.spir-cal__menu {
    position: absolute;
    top: calc(100% + 1.6rem);
    right: 0;
    z-index: 100;
    min-width: 26.4rem;
    padding: 1.6rem;
    background: color-mix(in srgb, var(--c-d) 85%, transparent);
    -webkit-backdrop-filter: saturate(160%) blur(1.6rem);
    backdrop-filter: saturate(160%) blur(1.6rem);
    border: .1rem solid var(--c-25);
    opacity: 0;
    visibility: hidden;
    -webkit-transform: translateY(1.6rem);
        -ms-transform: translateY(1.6rem);
            transform: translateY(1.6rem);
    -webkit-transition: opacity var(--spir-dur-fast) var(--spir-ease), visibility 0s linear var(--spir-dur-fast), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: opacity var(--spir-dur-fast) var(--spir-ease), visibility 0s linear var(--spir-dur-fast), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: opacity var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), visibility 0s linear var(--spir-dur-fast);
    transition: opacity var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), visibility 0s linear var(--spir-dur-fast), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
/* Hover bridge so the pointer can travel from button to menu */
.spir-cal__menu::after {
    content: '';
    position: absolute;
    top: -1.6rem;
    left: 0;
    width: 100%;
    height: 1.6rem;
}
.spir-cal__menu[aria-hidden="false"] {
    opacity: 1;
    visibility: visible;
    -webkit-transform: translateY(0);
        -ms-transform: translateY(0);
            transform: translateY(0);
    -webkit-transition-delay: 0s;
            transition-delay: 0s;
}
.spir-cal__notice {
    margin: 0 0 1.2rem;
    padding: 0 .8rem;
    font-size: 1.2rem;
    line-height: 1.45;
    color: color-mix(in srgb, var(--c-fg) 65%, var(--c-bg));
}
.spir-cal__pills {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    gap: .2rem;
    padding: .2rem;
    margin-bottom: .8rem;
    background: var(--c-10);
}
.spir-cal__pill {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
    padding: .8rem;
    background: none;
    border: none;
    color: var(--c-50);
    font-size: 1rem;
    font-weight: 800;
    line-height: 1;
    letter-spacing: .1em;
    text-align: center;
    text-transform: uppercase;
    cursor: pointer;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease);
}
.spir-cal__pill:hover {
    color: var(--c-fg);
}
.spir-cal__pill--active,
.spir-cal__pill--active:hover {
    background: var(--c-pri);
    color: var(--c-w);
}
.spir-cal__options {
    display: none;
}
.spir-cal__options--active {
    display: block;
}
.spir-cal__item {
    display: block;
    width: 100%;
    padding: .8rem;
    background: none;
    border: none;
    color: var(--c-fg);
    text-align: left;
    text-decoration: none;
    cursor: pointer;
    -webkit-transition: background var(--spir-dur-fast) var(--spir-ease);
    transition: background var(--spir-dur-fast) var(--spir-ease);
}
.spir-cal__item:hover,
.spir-cal__item:focus-visible {
    background: var(--c-05);
}
.spir-cal__item-name {
    display: block;
    font-size: 1.4rem;
    font-weight: 600;
    line-height: 1.2;
}
.spir-cal__item-hint {
    display: block;
    margin-top: .2rem;
    font-size: 1.2rem;
    line-height: 1.4;
    color: color-mix(in srgb, var(--c-fg) 50%, var(--c-bg));
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-cal__item--copied .spir-cal__item-hint {
    color: var(--c-pri);
}
@media only screen and (max-width: 768px) {
    .spir-cal__menu {
        right: auto;
        left: 0;
        width: min(30rem, calc(100vw - 3.2rem));
        min-width: 0;
    }
}


/* $ROSTER
--------------------------------------------------------*/
/* Full roster page — single responsive grid. */
.spir-roster__grid {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(22rem, 1fr));
    gap: 1.6rem;
}
.spir-roster--grid .spir-player {
    width: 100%;
}
.spir-player {
    position: relative;
    width: min(30rem, 74vw);
    aspect-ratio: 3 / 4;
    overflow: hidden;
    background: var(--c-05);
    border: .1rem solid var(--c-25);
}
.spir-player__media {
    margin: 0;
    position: absolute;
    inset: 0;
}
.spir-player__img {
    width: 100%;
    height: 100%;
    -o-object-fit: cover;
       object-fit: cover;
    -webkit-filter: saturate(.9) contrast(1.05);
            filter: saturate(.9) contrast(1.05);
    -webkit-transition: -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease);
}
.spir-player:hover .spir-player__img {
    -webkit-transform: scale(1.05);
        -ms-transform: scale(1.05);
            transform: scale(1.05);
}
.spir-player::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(0deg, var(--c-d) 0%, color-mix(in srgb, var(--c-d) 40%, transparent) 35%, transparent 65%);
}
.spir-player__num {
    position: absolute;
    top: .8rem;
    right: 1.6rem;
    z-index: 1;
    font-family: var(--spir-ff-block); /* Blackhawk — jersey number */
    font-size: 7.2rem;
    line-height: 1;
    color: var(--c-pri);
}
.spir-player__info {
    position: absolute;
    left: 1.6rem;
    right: 1.6rem;
    bottom: 1.6rem;
    z-index: 1;
}
.spir-player__name {
    margin: 0 0 .8rem;
    font-size: 2.4rem;
    line-height: 1;
    letter-spacing: 0;
    text-transform: uppercase;
    color: var(--c-w);
}
.spir-player__name-first {
    display: block;
}
/* Surname gets the jersey treatment — Blackhawk, title case. */
.spir-player__name-last {
    display: block;
    margin-top: .4rem;
    font-family: var(--spir-ff-block);
    font-weight: 400;
    font-size: 4.0rem;
    text-transform: none;
}
.spir-player__pos {
    margin: 0;
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--c-pri);
}


/* $LEAGUE
--------------------------------------------------------*/
.spir-league {
    overflow: hidden; /* clip the spirit video; isolation comes from .spir-band */
}
/* Spirit video ([vimeo] shortcode, bg mode) — black source + screen blend =
   only the white spirit shows over the section. Sits under the content.
   Blend goes on the iframe itself: Chrome ignores mix-blend-mode on an
   ancestor of a composited (cross-origin iframe) layer. */
.spir-league > .vim--bg {
    z-index: 0;
    pointer-events: none;
}
.spir-league > .vim--bg .vim__iframe {
    mix-blend-mode: screen;
}
.spir-league .spir-section-head,
.spir-league__grid {
    position: relative;
    z-index: 1;
}
.spir-league__grid {
    width: var(--w-lg);
    margin: 0 auto;
    padding: 0;
    list-style: none;
    display: -ms-grid;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
    gap: 1.6rem;
}
.spir-league__club {
    position: relative;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    gap: .8rem;
    padding: 2.4rem 1.6rem;
    text-align: center;
    text-decoration: none;
    color: var(--c-fg);
    background: var(--c-bg);
    border: .1rem solid var(--c-25);
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
/* Tiny external-link cue — fades into the top-right corner on hover. */
.spir-league__ext {
    position: absolute;
    top: .8rem;
    right: .8rem;
    font-size: 1rem;
    color: var(--c-pri);
    opacity: 0;
    -webkit-transition: opacity var(--spir-dur-fast) var(--spir-ease);
    transition: opacity var(--spir-dur-fast) var(--spir-ease);
}
.spir-league__club:hover .spir-league__ext {
    opacity: 1;
}
/* League card — the MASL block reads as the league, not another team:
   orange-washed panel with a stronger border. */
.spir-league__club--league {
    background:
        radial-gradient(90% 100% at 50% 0%, color-mix(in srgb, var(--c-pri) 16%, transparent) 0%, transparent 65%),
        var(--c-bg);
    border-color: color-mix(in srgb, var(--c-pri) 45%, transparent);
}
.spir-league__club:hover {
    border-color: var(--c-pri);
    -webkit-transform: translateY(-.4rem);
        -ms-transform: translateY(-.4rem);
            transform: translateY(-.4rem);
}
.spir-league__club--spirits {
    border-color: var(--c-pri);
    background: linear-gradient(180deg, color-mix(in srgb, var(--c-pri) 12%, var(--c-bg)) 0%, var(--c-bg) 100%);
}
.spir-league__logo {
    width: 7.2rem;
    height: 7.2rem;
    -o-object-fit: contain;
       object-fit: contain;
}
.spir-league__name {
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
}


/* $NEWS
--------------------------------------------------------*/
.spir-news__grid {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(28rem, 1fr));
    gap: 1.6rem;
}
.spir-news-card {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    text-decoration: none;
    color: var(--c-fg);
    background: var(--c-05);
    border: .1rem solid var(--c-25);
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-news-card:hover {
    border-color: var(--c-pri);
    -webkit-transform: translateY(-.4rem);
        -ms-transform: translateY(-.4rem);
            transform: translateY(-.4rem);
}
.spir-news-card__media {
    margin: 0;
    aspect-ratio: 16 / 9;
    overflow: hidden;
}
.spir-news-card__img {
    width: 100%;
    height: 100%;
    -o-object-fit: cover;
       object-fit: cover;
    -webkit-transition: -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease);
}
.spir-news-card:hover .spir-news-card__img {
    -webkit-transform: scale(1.04);
        -ms-transform: scale(1.04);
            transform: scale(1.04);
}
.spir-news-card__body {
    position: relative;
    padding: 1.6rem 1.6rem 2.4rem;
}
.spir-news-card__date {
    display: block;
    margin-bottom: .8rem;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--c-pri);
}
.spir-news-card__title {
    margin: 0;
    font-size: 1.8rem;
    font-weight: 800;
    line-height: 1.3;
}
/* Imported league stories — source badge next to the date. */
.spir-news-card__source {
    margin-left: .8rem;
    padding-left: .8rem;
    border-left: .1rem solid var(--c-25);
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
}
.spir-news-card__source .fa-arrow-up-right-from-square {
    font-size: 1rem;
}
.spir-news-card__arrow {
    position: absolute;
    right: 1.6rem;
    bottom: 1.6rem;
    color: var(--c-pri);
    font-size: 1.6rem;  /* FA glyph runs wider than the old text arrow */
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-news-card:hover .spir-news-card__arrow {
    -webkit-transform: translateX(.6rem);
        -ms-transform: translateX(.6rem);
            transform: translateX(.6rem);
}


/* $BLOG-ARCHIVE — index.php (news index, term/date archives, search).
   Cards reuse the .spir-news-card system; page one leads with a wide
   feature card. Corner starfield ties it back to the homepage blocks.
--------------------------------------------------------*/
.spir-arc {
    position: relative;
    isolation: isolate;
}
.spir-arc__head {
    width: var(--w-lg);
    margin: 0 auto 4rem;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr 2.4rem auto;
    grid-template-columns: 1fr auto;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: end;
    gap: .8rem 2.4rem;
}
.spir-arc__head .spir-eyebrow {
    -ms-grid-column: 1;
    grid-column: 1;
    margin: 0;
}
.spir-arc__title {
    -ms-grid-column: 1;
    grid-column: 1;
    margin: 0;
    font-size: var(--spir-fs-title);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-arc__grid {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(28rem, 1fr));
    gap: 1.6rem;
}
/* Lead story — spans the row, media beside copy */
.spir-news-card--feature {
    grid-column: 1 / -1;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 3fr 2fr;
    grid-template-columns: 3fr 2fr;
}
.spir-news-card--feature .spir-news-card__media {
    height: 100%;
    aspect-ratio: auto;
    min-height: 32rem;
}
.spir-news-card--feature .spir-news-card__body {
    -ms-flex-item-align: center;
        -ms-grid-row-align: center;
        align-self: center;
    padding: 3.2rem 3.2rem 4rem;
}
.spir-news-card--feature .spir-news-card__title {
    font-size: clamp(2.4rem, 2.6vw, 3.2rem);
    line-height: 1.15;
}
.spir-news-card__excerpt {
    margin: 1.6rem 0 0;
    color: color-mix(in srgb, var(--c-fg) 60%, var(--c-bg));
    font-size: 1.4rem;
    line-height: 1.6;
}
.spir-news-card--feature .spir-news-card__arrow {
    right: 3.2rem;
    bottom: 2.4rem;
}
/* Numbered pagination — square steppers, same language as the swiper arrows */
.spir-pager {
    margin-top: 4.8rem;
}
.spir-pager .nav-links {
    width: var(--w-lg);
    margin: 0 auto;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    gap: .8rem;
}
.spir-pager .page-numbers {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    min-width: 4.8rem;
    height: 4.8rem;
    border: .1rem solid var(--c-25);
    color: var(--c-fg);
    font-size: 1.4rem;
    font-weight: 800;
    text-decoration: none;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
}
.spir-pager a.page-numbers:hover {
    border-color: var(--c-pri);
    color: var(--c-pri);
}
.spir-pager .page-numbers.current {
    background: var(--c-pri);
    border-color: var(--c-pri);
    color: var(--c-w);
}
.spir-pager .page-numbers.dots {
    border: 0;
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
}
.spir-arc__empty {
    width: var(--w-lg);
    margin: 0 auto;
    padding-block: 6.4rem;
    text-align: center;
}
.spir-arc__empty-lede {
    margin: 0 0 2.4rem;
    font-size: var(--spir-fs-lead);
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}


/* $BLOG-SINGLE — single.php (local stories only; imported league posts
   redirect out). Display head over a bordered feature image, measured
   copy column, prev/next story cards.
--------------------------------------------------------*/
.spir-post {
    position: relative;
    isolation: isolate;
    padding-block: 9.6rem;
}
.spir-post__head {
    width: var(--w-md);
    margin: 0 auto 3.2rem;
}
.spir-post__cat {
    padding-left: .8rem;
    border-left: .1rem solid var(--c-25);
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
}
.spir-post__title {
    margin: 0;
    font-size: var(--spir-fs-title);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-post__media {
    width: var(--w-lg);
    margin: 0 auto 4.8rem;
    border: .1rem solid var(--c-25);
}
.spir-post__img {
    display: block;
    width: 100%;
    height: auto;
    max-height: 64rem;
    -o-object-fit: cover;
       object-fit: cover;
}
.spir-post__content {
    width: var(--w-md);
    margin: 0 auto;
    font-size: 1.6rem;
    line-height: 1.7;
}
.spir-post__content > * + * {
    margin-block: 2.4rem 0;
}
.spir-post__content h2,
.spir-post__content h3 {
    margin-block: 4rem 0;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    line-height: 1;
    text-transform: uppercase;
}
.spir-post__content h2 {
    font-size: clamp(2.4rem, 3.2vw, 3.6rem);
}
.spir-post__content h3 {
    font-size: clamp(2rem, 2.4vw, 2.8rem);
}
.spir-post__content a {
    color: var(--c-pri);
    text-decoration: underline;
    text-underline-offset: .3em;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-post__content a:hover {
    color: var(--c-qua);
}
.spir-post__content blockquote {
    margin-inline: 0;
    padding: 1.6rem 2.4rem;
    border-left: .4rem solid var(--c-pri);
    background: var(--c-05);
    font-style: italic;
}
.spir-post__content blockquote p {
    margin: 0;
}
.spir-post__content ul,
.spir-post__content ol {
    padding-left: 2.4rem;
}
.spir-post__content li {
    margin-block: .8rem;
}
.spir-post__content img {
    display: block;
    max-width: 100%;
    height: auto;
    border: .1rem solid var(--c-25);
}
.spir-post__content figcaption {
    margin-top: .8rem;
    font-size: 1.2rem;
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
}
.spir-post__foot {
    width: var(--w-md);
    margin: 6.4rem auto 0;
    padding-top: 3.2rem;
    border-top: .1rem solid var(--c-25);
}
.spir-post__nav {
    margin-top: 2.4rem;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr 1.6rem 1fr;
    grid-template-columns: repeat(2, 1fr);
    gap: 1.6rem;
}
.spir-post__nav-card {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    gap: .8rem;
    padding: 1.6rem 2.4rem;
    border: .1rem solid var(--c-25);
    text-decoration: none;
    color: var(--c-fg);
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-post__nav-card:hover {
    border-color: var(--c-pri);
    -webkit-transform: translateY(-.4rem);
        -ms-transform: translateY(-.4rem);
            transform: translateY(-.4rem);
}
.spir-post__nav-card--next {
    text-align: right;
}
/* A lone "next" card holds the right column */
.spir-post__nav-card--next:only-child {
    -ms-grid-column: 2;
    grid-column: 2;
}
.spir-post__nav-label {
    color: var(--c-pri);
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .14em;
    text-transform: uppercase;
}
.spir-post__nav-title {
    font-size: 1.6rem;
    font-weight: 600;
    line-height: 1.4;
}
@media only screen and (max-width: 1024px) {
    .spir-news-card--feature {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
    }
    .spir-news-card--feature .spir-news-card__media {
        aspect-ratio: 16 / 9;
        min-height: 0;
    }
    .spir-post__nav {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
    }
    .spir-post__nav-card--next:only-child {
        -ms-grid-column: 1;
        grid-column: 1;
    }
    .spir-post__nav-card--next {
        text-align: left;
    }
}


/* $TICKETS
--------------------------------------------------------*/
.spir-tickets__grid {
    width: var(--w-lg);
    margin: 0 auto 4rem;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr 1.6rem 1fr;
    grid-template-columns: repeat(2, 1fr);
    -ms-grid-rows: minmax(24rem, 1fr) 1.6rem minmax(24rem, 1fr);
    grid-template-rows: repeat(2, minmax(24rem, 1fr));
    gap: 1.6rem;
}
.spir-tickets__grid > *:nth-child(1) {
    -ms-grid-row: 1;
    -ms-grid-column: 1;
}
.spir-tickets__grid > *:nth-child(2) {
    -ms-grid-row: 1;
    -ms-grid-column: 3;
}
.spir-tickets__grid > *:nth-child(3) {
    -ms-grid-row: 3;
    -ms-grid-column: 1;
}
.spir-tickets__grid > *:nth-child(4) {
    -ms-grid-row: 3;
    -ms-grid-column: 3;
}
.spir-ticket-card {
    position: relative;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
    min-height: 24rem;
    padding: 3.2rem;
    text-decoration: none;
    isolation: isolate;
    overflow: hidden;
    border: .1rem solid var(--c-pri);
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-ticket-card:hover {
    -webkit-transform: translateY(-.4rem);
        -ms-transform: translateY(-.4rem);
            transform: translateY(-.4rem);
}
/* Photo on its own layer (under the scrim/burst pseudos) so it can zoom. */
.spir-ticket-card__bg {
    position: absolute;
    inset: 0;
    z-index: -2;
    background-size: cover;
    background-position: center;
    -webkit-transition: -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease);
}
.spir-ticket-card:hover .spir-ticket-card__bg {
    -webkit-transform: scale(1.04);
        -ms-transform: scale(1.04);
            transform: scale(1.04);
}
/* Base treatment: bottom scrim + faint orange corner burst. */
.spir-ticket-card::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    background-image:
        radial-gradient(70% 90% at 0% 0%, color-mix(in srgb, var(--c-pri) 12%, transparent) 0%, transparent 55%),
        linear-gradient(0deg, var(--c-d) 0%, color-mix(in srgb, var(--c-d) 45%, transparent) 50%, transparent 100%);
}
/* Hover heat rides its own layer — gradients can't interpolate, opacity can. */
.spir-ticket-card::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(0deg, color-mix(in srgb, var(--c-pri) 60%, var(--c-d)) 0%, color-mix(in srgb, var(--c-d) 40%, transparent) 65%, transparent 100%);
    opacity: 0;
    -webkit-transition: opacity var(--spir-dur) var(--spir-ease);
    transition: opacity var(--spir-dur) var(--spir-ease);
}
.spir-ticket-card:hover::after {
    opacity: 1;
}
.spir-ticket-card--feature {
    grid-row: 1 / -1;
}
.spir-ticket-card__title {
    margin: 0 0 1.6rem;
    font-size: clamp(2.8rem, 3.5vw, 4.4rem);
    line-height: .95;
    text-transform: uppercase;
    color: var(--c-w);
}
.spir-ticket-card__link {
    display: inline-block;
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--c-w);
    -webkit-transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease), -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-ticket-card:hover .spir-ticket-card__link {
    -webkit-transform: translateX(.4rem);
        -ms-transform: translateX(.4rem);
            transform: translateX(.4rem);
}

.spir-learn {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1.2fr 4.8rem 1fr;
    grid-template-columns: 1.2fr 1fr;
    gap: 4.8rem;
    padding: 4.8rem;
    background: var(--c-05);
    border: .1rem solid var(--c-25);
    border-left: .4rem solid var(--c-pri);
}
.spir-learn__title {
    margin: 0 0 .8rem;
    font-size: clamp(2.8rem, 3.2vw, 4rem);
    line-height: 1;
    text-transform: uppercase;
}
.spir-learn__text {
    margin: 0 0 2.4rem;
    font-size: 1.6rem;
    line-height: 1.6;
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}
.spir-learn__facts {
    margin: 0;
    padding: 0;
    list-style: none;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    gap: 1.6rem;
}
.spir-learn__fact {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: baseline;
        -ms-flex-align: baseline;
            align-items: baseline;
    gap: 1.6rem;
    padding-bottom: 1.6rem;
    border-bottom: .1rem solid var(--c-25);
    font-size: 1.4rem;
}
.spir-learn__fact strong {
    font-family: var(--spir-ff-block); /* Blackhawk — stat digits */
    font-weight: 400;
    font-size: 4rem;
    line-height: 1;
    color: var(--c-pri);
    min-width: 7.2rem;
}


/* $GALLERY / FANS
--------------------------------------------------------*/
/* Pinned intro (copy + newsletter) on the left; freemode masonry photo
   rail starts to its right and slides over the intro (z-index). Light band. */
.spir-gallery__inner {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: stretch;
        -ms-flex-align: stretch;
            align-items: stretch;
    gap: 3.2rem;
    width: var(--w-lg);
    margin-inline: auto;
}
.spir-gallery__intro {
    -webkit-box-flex: 0;
        -ms-flex: 0 0 min(44rem, 40%);
            flex: 0 0 min(44rem, 40%);
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    position: relative;
    z-index: 0;
    min-width: 0;
}
.spir-gallery__title {
    margin: 0 0 1.6rem;
    font-size: var(--spir-fs-title);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-gallery__text {
    margin: 0 0 2.4rem;
    color: color-mix(in srgb, var(--c-fg) 65%, var(--c-bg));
    font-size: 1.6rem;
    line-height: 1.5;
}
/* Compact GF density for the intro column — field edits happen in CMS */
.spir-gallery__form {
    width: 100%;
}
.spir-gallery__form .gform_wrapper.gravity-theme {
    margin: 0;
}
.spir-gallery__form .gform_wrapper.gravity-theme .gform_fields {
    grid-row-gap: 1.6rem;
}
.spir-gallery__form .gform_wrapper.gravity-theme .gform_footer,
.spir-gallery__form .gform_wrapper.gravity-theme .gform_page_footer {
    margin-top: 1.6rem;
    padding-top: 0;
}
.spir-gallery__swiper {
    -webkit-box-flex: 1;
        -ms-flex: 1 1 auto;
            flex: 1 1 auto;
    min-width: 0;
    position: relative;
    z-index: 1; /* photos slide over the intro card */
}
.spir-gallery__swiper .swiper {
    overflow: visible; /* frames escape the content box; main.main clips */
}
/* Prev/next overlaid on the photo rail — bottom-right of the first frame */
.spir-gallery__nav {
    position: absolute;
    right: 1.6rem;
    bottom: 1.6rem;
    z-index: 2;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    gap: .8rem;
    pointer-events: none;
}
.spir-gallery__nav .swiper-arr {
    position: static;
    -webkit-transform: skewX(-10deg);
        -ms-transform: skewX(-10deg);
            transform: skewX(-10deg);
    pointer-events: auto;
}
.spir-gallery__slide {
    display: -ms-grid;
    display: grid;
    gap: .8rem;
    width: 64.8rem;
    height: 64.8rem;
}
.spir-gallery__slide--quad {
    -ms-grid-columns: (1fr)[2];
    grid-template-columns: repeat(2, 1fr);
    -ms-grid-rows: (1fr)[2];
    grid-template-rows: repeat(2, 1fr);
}
.spir-gallery__slide--quad > *:nth-child(1) {
    -ms-grid-row: 1;
    -ms-grid-column: 1;
}
.spir-gallery__slide--quad > *:nth-child(2) {
    -ms-grid-row: 1;
    -ms-grid-column: 2;
}
.spir-gallery__slide--quad > *:nth-child(3) {
    -ms-grid-row: 2;
    -ms-grid-column: 1;
}
.spir-gallery__slide--quad > *:nth-child(4) {
    -ms-grid-row: 2;
    -ms-grid-column: 2;
}
.spir-gallery__slide--duo {
    width: 32rem;
    -ms-grid-rows: (1fr)[2];
    grid-template-rows: repeat(2, 1fr);
}
.spir-gallery__item {
    display: block;
    margin: 0;
    overflow: hidden;
    min-height: 0; /* let grid tracks size the frame, not the image */
}
.spir-gallery__img {
    width: 100%;
    height: 100%;
    -o-object-fit: cover;
       object-fit: cover;
    -webkit-filter: saturate(.95);
            filter: saturate(.95);
    -webkit-transition: -webkit-transform var(--spir-dur) var(--spir-ease), -webkit-filter var(--spir-dur) var(--spir-ease);
    transition: -webkit-transform var(--spir-dur) var(--spir-ease), -webkit-filter var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease), filter var(--spir-dur) var(--spir-ease);
    transition: transform var(--spir-dur) var(--spir-ease), filter var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease), -webkit-filter var(--spir-dur) var(--spir-ease);
}
.spir-gallery__item:hover .spir-gallery__img {
    -webkit-transform: scale(1.04);
        -ms-transform: scale(1.04);
            transform: scale(1.04);
    -webkit-filter: saturate(1.15);
            filter: saturate(1.15);
}


/* $PARTNERS (logo marquee — same mechanics as the Phantoms outro)
--------------------------------------------------------*/
.spir-partners__marquee {
    position: relative;
    width: var(--w-xl);
    margin-inline: auto;
    overflow: hidden;
    height: 9.6rem;
    mask-image: -webkit-gradient(linear, left top, right top, from(transparent), color-stop(15%, black), color-stop(85%, black), to(transparent));
    mask-image: linear-gradient(to right, transparent 0%, black 15%, black 85%, transparent 100%);
    -webkit-mask-image: -webkit-gradient(linear, left top, right top, from(transparent), color-stop(15%, black), color-stop(85%, black), to(transparent));
    -webkit-mask-image: linear-gradient(to right, transparent 0%, black 15%, black 85%, transparent 100%);
    --spir-partner-count: 8;
    --spir-partner-w: 19.2rem;
    --spir-partner-set-w: calc(var(--spir-partner-count) * var(--spir-partner-w));
}
.spir-partners__track {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    width: calc(var(--spir-partner-set-w) * 2);
    -webkit-animation: spir-marquee 40s linear infinite;
            animation: spir-marquee 40s linear infinite;
}
.spir-partners__set {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-negative: 0;
        flex-shrink: 0;
    width: var(--spir-partner-set-w);
}
.spir-partners__link {
    display: block;
    -ms-flex-negative: 0;
        flex-shrink: 0;
    opacity: .7;
    -webkit-transition: opacity var(--spir-dur-fast) var(--spir-ease);
    transition: opacity var(--spir-dur-fast) var(--spir-ease);
}
.spir-partners__link:hover {
    opacity: 1;
}
.spir-partners__logo {
    display: block;
    width: var(--spir-partner-w);
    height: 9.6rem;
    -o-object-fit: contain;
       object-fit: contain;
}
@-webkit-keyframes spir-marquee {
    from { -webkit-transform: translateX(0); transform: translateX(0); }
    to   { -webkit-transform: translateX(calc(-1 * var(--spir-partner-set-w))); transform: translateX(calc(-1 * var(--spir-partner-set-w))); }
}
@keyframes spir-marquee {
    from { -webkit-transform: translateX(0); transform: translateX(0); }
    to   { -webkit-transform: translateX(calc(-1 * var(--spir-partner-set-w))); transform: translateX(calc(-1 * var(--spir-partner-set-w))); }
}
@media (prefers-reduced-motion: reduce) {
    .spir-partners__track {
        -webkit-animation: none;
                animation: none;
    }
    .spir-partners__set:last-child {
        display: none;
    }
}

/* $POP (brand skin for the Apparatus pop module — every pop)
--------------------------------------------------------*/
.pop {
    z-index: 1100; /* above the rail (1000) and topbar (950) — pops are modal */
    background-color: color-mix(in srgb, var(--c-d) 72%, transparent);
}
/* Desktop: start the pop at the rail's right edge so the panel centers
   in the content area (the parent animates left: -100% → 0 / rail width). */
@media only screen and (min-width: 1025px) {
    .pop {
        width: calc(100% - var(--spir-rail-w));
    }
    .pop--active {
        left: var(--spir-rail-w);
    }
}
.pop__item {
    background: linear-gradient(160deg, color-mix(in srgb, var(--c-pri) 14%, var(--c-d)) 0%, var(--c-d) 44%);
    border: .1rem solid var(--c-25);
    border-top: .4rem solid var(--c-pri);
    border-radius: 0;
    overflow: hidden;
}
/* Corner star field (static) — no markup access inside parent-owned pops, so
   the directional fade rides in the background gradient and the star tile is
   the mask (single pseudo doing what .spir-starfield does with two layers). */
.pop__item::before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    width: 16rem;
    height: 16rem;
    background-image: linear-gradient(220deg, color-mix(in srgb, var(--c-w) 14%, transparent) 10%, transparent 55%);
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 28'%3E%3Cpolygon points='14,4 16.25,10.91 23.51,10.91 17.63,15.18 19.88,22.09 14,17.82 8.12,22.09 10.37,15.18 4.49,10.91 11.75,10.91'/%3E%3C/svg%3E");
    -webkit-mask-size: 1.6rem 1.6rem;
    -webkit-mask-repeat: repeat;
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 28'%3E%3Cpolygon points='14,4 16.25,10.91 23.51,10.91 17.63,15.18 19.88,22.09 14,17.82 8.12,22.09 10.37,15.18 4.49,10.91 11.75,10.91'/%3E%3C/svg%3E");
    mask-size: 1.6rem 1.6rem;
    mask-repeat: repeat;
    pointer-events: none;
}
.pop__close {
    width: 5.6rem;
    height: 5.6rem;
    -webkit-transition: background var(--spir-dur-fast) var(--spir-ease);
    transition: background var(--spir-dur-fast) var(--spir-ease);
}
.pop__close:hover {
    background: var(--c-pri);
}
.pop__close:focus-visible {
    outline: .2rem solid var(--c-pri);
    outline-offset: -.4rem;
}
.pop__close:hover .pop__close-icon {
    fill: var(--c-w);
}
.pop__close .pop__close-icon {
    width: 1.6rem;
    height: 1.6rem;
    -webkit-transition: fill var(--spir-dur-fast) var(--spir-ease);
    transition: fill var(--spir-dur-fast) var(--spir-ease);
}
.p-search__title {
    font-family: var(--spir-ff-head);
    font-weight: 400;
    text-transform: uppercase;
}


/* $LEARN-POP (Learn the Game wizard)
--------------------------------------------------------*/
.pop--learn .pop__item {
    width: min(92%, 76.8rem);
}
.spir-learnpop {
    padding: 4.8rem 4.8rem 4rem;
}
.spir-learnpop__head {
    margin-bottom: 3.2rem;
    padding-right: 5.6rem; /* clear the close button */
    max-height: 24rem;
    overflow: hidden;
    -webkit-transition: max-height var(--spir-dur) var(--spir-ease),
                opacity var(--spir-dur) var(--spir-ease),
                margin-bottom var(--spir-dur) var(--spir-ease);
    transition: max-height var(--spir-dur) var(--spir-ease),
                opacity var(--spir-dur) var(--spir-ease),
                margin-bottom var(--spir-dur) var(--spir-ease);
}
/* On the CTA slide the lesson chrome bows out */
.spir-learnpop--end .spir-learnpop__head {
    max-height: 0;
    margin-bottom: 0;
    opacity: 0;
}
.spir-learnpop__title {
    margin: 0;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: clamp(3.2rem, 4vw, 4.8rem);
    line-height: .95;
    text-transform: uppercase;
}
.spir-learnpop__bar {
    display: block;
    margin-top: 1.6rem;
    height: .2rem;
    background: var(--c-10);
}
.spir-learnpop__bar-fill {
    display: block;
    width: 0;
    height: 100%;
    background: var(--c-pri);
    -webkit-transition: width var(--spir-dur) var(--spir-ease);
    transition: width var(--spir-dur) var(--spir-ease);
}
.spir-learnpop .swiper {
    overflow: hidden;
}

/* Lesson slides */
.spir-lesson {
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: auto 2.4rem 1fr;
    grid-template-columns: auto 1fr;
    gap: 2.4rem;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: start;
}
.spir-lesson__num {
    font-family: var(--spir-ff-block);
    font-size: clamp(6.4rem, 8vw, 9.6rem);
    line-height: .8;
    color: var(--c-pri);
}
.spir-lesson__title {
    margin: 0 0 .8rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: 2.8rem;
    line-height: 1;
    text-transform: uppercase;
}
.spir-lesson__text {
    margin: 0;
    max-width: 56rem;
    color: color-mix(in srgb, var(--c-fg) 72%, var(--c-bg));
    font-size: 1.6rem;
    line-height: 1.6;
}
.spir-lesson__compare {
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr .8rem 1fr;
    grid-template-columns: 1fr 1fr;
    gap: .8rem;
    margin: 2.4rem 0 0;
}
.spir-lesson__cell {
    padding: 1.6rem;
    border: .1rem solid var(--c-25);
}
.spir-lesson__cell dt {
    margin-bottom: .4rem;
    color: color-mix(in srgb, var(--c-fg) 50%, var(--c-bg));
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
}
.spir-lesson__cell dd {
    margin: 0;
    font-size: 1.4rem;
    font-weight: 600;
    line-height: 1.4;
}
.spir-lesson__cell--in {
    border-color: var(--spir-edge);
    background: color-mix(in srgb, var(--c-pri) 10%, transparent);
}
.spir-lesson__cell--in dt {
    color: var(--c-pri);
}

/* Final CTA slide */
.spir-lesson--cta {
    display: block;
    text-align: center;
    padding: 2.4rem 0;
}
.spir-lesson--cta .spir-lesson__text {
    margin: 0 auto;
}
.spir-lesson__cta-title {
    margin: 0 0 1.6rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: clamp(3.2rem, 4vw, 4.8rem);
    line-height: .95;
    text-transform: uppercase;
}
.spir-lesson__cta-actions {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    margin-top: 3.2rem;
}

/* Controls — arrows are parent-styled; unpin them into the footer row */
.spir-learnpop__controls {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    margin-top: 3.2rem;
    padding-top: 2.4rem;
    border-top: .1rem solid var(--c-25);
}
.spir-learnpop__controls .swiper-arr {
    position: static;
    -webkit-transform: skewX(-10deg);
        -ms-transform: skewX(-10deg);
            transform: skewX(-10deg); /* keep the slant, drop the absolute centering */
}
.spir-learnpop__controls .swiper-arr--prev {
    margin-left: auto;
}
.spir-learnpop .swiper-pagination {
    position: static;
    width: auto;
    font-family: var(--spir-ff-block);
    font-size: 2.4rem;
    line-height: 1;
    color: color-mix(in srgb, var(--c-fg) 40%, var(--c-bg));
}
.spir-learnpop .swiper-pagination-current {
    color: var(--c-pri);
}

@media only screen and (max-width: 640px) {
    .spir-learnpop {
        padding: 3.2rem 2.4rem;
    }
    .spir-lesson {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
        gap: 1.6rem;
    }
    .spir-lesson__compare {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
    }
}


/* $FORMS (default form styles + Gravity Forms → Spirits skin)
--------------------------------------------------------*/
/* Buttons — every native/GF submit takes the .spir-btn silhouette */
.button,
input[type="submit"],
input[type="reset"],
input[type="button"] {
    padding: 1.6rem 3.2rem;
    background-color: var(--c-pri);
    color: var(--c-w);
    border: none;
    border-radius: 0;
    clip-path: polygon(.8rem 0, 100% 0, calc(100% - .8rem) 100%, 0 100%);
    font-family: var(--spir-ff-body);
    font-size: 1.4rem;
    font-weight: 800;
    letter-spacing: .12em;
    text-transform: uppercase;
    -webkit-transition: background-color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: background-color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: background-color var(--spir-dur-fast) var(--spir-ease),
                transform var(--spir-dur-fast) var(--spir-ease);
    transition: background-color var(--spir-dur-fast) var(--spir-ease),
                transform var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.button:hover,
input[type="submit"]:hover,
input[type="reset"]:hover,
input[type="button"]:hover {
    background-color: var(--c-ter);
    color: var(--c-w);
    -webkit-transform: translateY(-.2rem);
        -ms-transform: translateY(-.2rem);
            transform: translateY(-.2rem);
}
/* Parent variants — rectangle silhouettes, so borders survive */
.button--sec,
input[type="submit"].button--sec,
input[type="reset"].button--sec,
input[type="button"].button--sec {
    clip-path: none;
    background-color: var(--spir-veil);
    border: .2rem solid var(--c-25);
    color: var(--c-fg);
}
.button--sec:hover,
input[type="submit"].button--sec:hover {
    background-color: transparent;
    border-color: var(--c-pri);
    color: var(--c-pri);
    -webkit-transform: none;
        -ms-transform: none;
            transform: none;
}
.button--ter,
input[type="submit"].button--ter,
input[type="reset"].button--ter,
input[type="button"].button--ter {
    clip-path: none;
    background-color: transparent;
    color: var(--c-pri);
}

/* Default text controls (non-GF, e.g. password/comment forms) */
.app input[type="text"],
.app input[type="email"],
.app input[type="tel"],
.app input[type="url"],
.app input[type="search"],
.app input[type="password"],
.app input[type="number"],
.app select,
.app textarea {
    padding: 1.2rem 1.6rem;
    color: var(--c-fg);
    background-color: var(--c-05);
    border: .2rem solid var(--c-10);
    border-radius: 0;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease),
                background-color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease),
                background-color var(--spir-dur-fast) var(--spir-ease);
}
.app input:focus-visible,
.app select:focus-visible,
.app textarea:focus-visible {
    outline: none;
    border-color: var(--c-pri);
}
.app input::-webkit-input-placeholder, .app textarea::-webkit-input-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app input::-moz-placeholder, .app textarea::-moz-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app input:-ms-input-placeholder, .app textarea:-ms-input-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app input::-ms-input-placeholder, .app textarea::-ms-input-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app input::placeholder,
.app textarea::placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}

/* Search form — inherits the baseline field skin above */
.app .s-form {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-align: stretch;
        -ms-flex-align: stretch;
            align-items: stretch;
    gap: 1.6rem;
    width: 100%;
    max-width: 48rem;
}
.app .s-form .s-form__input {
    width: 100%;
}
.app .s-form .s-form__button {
    -ms-flex-item-align: center;
        -ms-grid-row-align: center;
        align-self: center;
}


/* $UTILITY — centered mastheads for 404 / search (not full inside-page heroes)
--------------------------------------------------------*/
.spir-util {
    text-align: center;
    /* Tighter than .spir-page-hero — these are recovery/tool pages */
    padding-block: 12.8rem 6.4rem;
}
main.main > section.spir-util {
    padding-block: 12.8rem 6.4rem;
}
.spir-util__inner {
    width: var(--w-lg);
    margin: 0 auto;
    max-width: 64rem;
}
.spir-util__code {
    margin: 0 0 .8rem;
    font-family: var(--spir-ff-block);
    font-weight: 400;
    font-size: clamp(8rem, 18vw, 14.4rem);
    line-height: .85;
    color: var(--c-pri);
    letter-spacing: .02em;
}
.spir-util__title {
    margin: 0 0 1.6rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: var(--spir-fs-page);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-util__lead {
    margin: 0 auto 3.2rem;
    max-width: 48rem;
    font-size: var(--spir-fs-lead);
    line-height: 1.45;
    color: color-mix(in srgb, var(--c-fg) 75%, var(--c-bg));
}
.spir-util__actions {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    gap: .8rem;
}
.spir-util .s-form,
.spir-search .s-form {
    margin-inline: auto;
}
.spir-util .spir-util__lead + .s-form {
    margin-top: 0; /* lead already carries the bottom air */
}
.spir-search__inner {
    width: var(--w-lg);
    margin: 0 auto;
}

/* Search results — list cards, no parent radius/shadow chrome */
.spir-search .s-results {
    margin-block: 4.8rem 0;
}
.spir-search .s-results__item {
    margin: 0 0 1.6rem;
}
.spir-search .s-results__item-link {
    display: block;
    padding: 2.4rem;
    border: .1rem solid var(--c-25);
    background: var(--c-05);
    color: var(--c-fg);
    text-decoration: none;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease),
                transform var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease),
                transform var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-search .s-results__item-link:hover {
    border-color: var(--c-pri);
    -webkit-transform: translateY(-.2rem);
        -ms-transform: translateY(-.2rem);
            transform: translateY(-.2rem);
}
.spir-search .s-results__title {
    margin: 0 0 .8rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: clamp(2rem, 2.4vw, 2.8rem);
    line-height: 1.1;
    text-transform: uppercase;
    color: var(--c-fg);
}
.spir-search .s-results__item-link:hover .s-results__title {
    color: var(--c-pri);
}
.spir-search .s-results__url {
    margin: 0 0 .8rem;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .04em;
    color: color-mix(in srgb, var(--c-fg) 45%, var(--c-bg));
    word-break: break-all;
}
.spir-search .s-results__description {
    margin: 0 0 1.6rem;
    font-size: 1.4rem;
    line-height: 1.55;
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}
.spir-search .s-results__meta {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    gap: .8rem 1.6rem;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--c-pri);
}
.spir-search .search-highlight {
    background: color-mix(in srgb, var(--c-pri) 35%, transparent);
    color: var(--c-fg);
    padding: 0 .2rem;
}
.spir-search .s-results-none {
    margin-block: 4.8rem 0;
    text-align: center;
}
.spir-search .s-results-none__lede {
    margin: 0 0 2.4rem;
    font-size: var(--spir-fs-lead);
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}
.spir-search .spir-pager {
    margin-top: 3.2rem;
}
.spir-search .spir-pager .nav-links {
    width: 100%;
}
@media only screen and (max-width: 1024px) {
    .spir-util,
    main.main > section.spir-util {
        padding-block: 9.6rem 4.8rem;
    }
}

/* Gravity Forms — remap the theme-framework tokens to Spirits */
.app .gform_wrapper.gravity-theme,
.app .gform_wrapper.gform-theme--framework {
    --gf-color-primary: var(--c-pri);
    --gf-color-in-ctrl: var(--c-05);
    --gf-color-in-ctrl-contrast: var(--c-fg);
    --gf-ctrl-bg-color: var(--c-05);
    --gf-ctrl-bg-color-hover: var(--c-05);
    --gf-ctrl-bg-color-focus: var(--c-05);
    --gf-ctrl-border-color: var(--c-10);
    --gf-ctrl-border-color-hover: var(--c-25);
    --gf-ctrl-border-color-focus: var(--c-pri);
    --gf-ctrl-radius: 0;
    --gf-ctrl-shadow: none;
    --gf-ctrl-outline-width-focus: 0;
    --gf-ctrl-font-family: var(--spir-ff-body);
    --gf-font-family-primary: var(--spir-ff-body);
    --gf-label-color: var(--c-fg);
    --gf-label-font-weight: 600;
}

/* Labels — eyebrow language */
.app .gform_wrapper.gravity-theme .gfield_label {
    font-size: 1.4rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    margin-bottom: .8rem;
}
.app .gform_wrapper.gravity-theme .gfield_required {
    color: var(--c-pri);
}
.app .gform_wrapper.gravity-theme .gfield_header_item,
.app .gform_wrapper.gravity-theme .ginput_complex label {
    font-size: 1.2rem;
    font-weight: 400;
    color: color-mix(in srgb, var(--c-fg) 55%, transparent);
}
.app .gform_wrapper.gravity-theme .gsection {
    border-bottom: .2rem solid var(--spir-edge);
}

/* Inputs */
.app .gform_wrapper.gravity-theme input[type=color],
.app .gform_wrapper.gravity-theme input[type=date],
.app .gform_wrapper.gravity-theme input[type=datetime-local],
.app .gform_wrapper.gravity-theme input[type=datetime],
.app .gform_wrapper.gravity-theme input[type=email],
.app .gform_wrapper.gravity-theme input[type=month],
.app .gform_wrapper.gravity-theme input[type=number],
.app .gform_wrapper.gravity-theme input[type=password],
.app .gform_wrapper.gravity-theme input[type=search],
.app .gform_wrapper.gravity-theme input[type=tel],
.app .gform_wrapper.gravity-theme input[type=text],
.app .gform_wrapper.gravity-theme input[type=time],
.app .gform_wrapper.gravity-theme input[type=url],
.app .gform_wrapper.gravity-theme input[type=week],
.app .gform_wrapper.gravity-theme select,
.app .gform_wrapper.gravity-theme textarea {
    font-family: var(--spir-ff-body);
    font-size: 1.6rem;
    color: var(--c-fg);
    background-color: var(--c-05);
    border: .2rem solid var(--c-10);
    border-radius: 0;
    -webkit-box-shadow: none;
            box-shadow: none;
    padding: 1.2rem 1.6rem;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease),
                background-color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease),
                background-color var(--spir-dur-fast) var(--spir-ease);
}
.app .gform_wrapper.gravity-theme textarea {
    resize: vertical;
}
.app .gform_wrapper.gravity-theme select {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%23FF6B35' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 1.6rem center;
    background-size: 1.2rem .8rem;
    padding-right: 4rem;
    -webkit-appearance: none;
       -moz-appearance: none;
            appearance: none;
}
.app .gform_wrapper.gravity-theme input::-webkit-input-placeholder, .app .gform_wrapper.gravity-theme textarea::-webkit-input-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app .gform_wrapper.gravity-theme input::-moz-placeholder, .app .gform_wrapper.gravity-theme textarea::-moz-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app .gform_wrapper.gravity-theme input:-ms-input-placeholder, .app .gform_wrapper.gravity-theme textarea:-ms-input-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app .gform_wrapper.gravity-theme input::-ms-input-placeholder, .app .gform_wrapper.gravity-theme textarea::-ms-input-placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app .gform_wrapper.gravity-theme input::placeholder,
.app .gform_wrapper.gravity-theme textarea::placeholder {
    color: color-mix(in srgb, var(--c-fg) 40%, transparent);
    opacity: 1;
}
.app .gform_wrapper.gravity-theme input:hover,
.app .gform_wrapper.gravity-theme select:hover,
.app .gform_wrapper.gravity-theme textarea:hover {
    border-color: var(--c-25);
}
.app .gform_wrapper.gravity-theme input:focus,
.app .gform_wrapper.gravity-theme select:focus,
.app .gform_wrapper.gravity-theme textarea:focus {
    outline: none;
    border-color: var(--c-pri);
    -webkit-box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--c-pri) 24%, transparent);
            box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--c-pri) 24%, transparent);
}
/* Date fields run icon-less but GF still sizes for a calendar icon */
.app .gform_wrapper.gravity-theme .ginput_container_date {
    display: block;
}
.app .gform_wrapper.gravity-theme .ginput_container_date input {
    width: 100%;
}

/* Choices — parent draws the boxes; brand the checked/focus states */
.app .gform_wrapper.gravity-theme .gfield-choice-input,
.app .gform_wrapper.gravity-theme .gfield-choice-input:hover,
.app .gform_wrapper.gravity-theme .gfield-choice-input:focus,
.app .gform_wrapper.gravity-theme .gfield-choice-input:checked {
    background: transparent;
    border: 0;
    -webkit-box-shadow: none;
            box-shadow: none;
    outline: none;
}
.app .gform_wrapper.gravity-theme .gfield-choice-input:focus-visible + label::after {
    border-color: var(--c-pri);
    -webkit-box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--c-pri) 24%, transparent);
            box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--c-pri) 24%, transparent);
}
/* Parent's icon-check/icon-radio ship with a placeholder blue fill —
   swap in brand-orange (#FF6B35) versions of the same glyphs */
.app .gform_wrapper.gravity-theme .gfield_checkbox .gfield-choice-input:checked + label::after {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M447.9 142.5l-23.2 22L181 395.3l-22 20.8-22-20.8L23.2 287.6 0 265.6l44-46.5 23.2 22L159 328 380.7 118l23.2-22 44 46.5z' fill='%23FF6B35'/%3E%3C/svg%3E");
}
.app .gform_wrapper.gravity-theme .gfield_radio .gfield-choice-input:checked + label::after {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z' fill='%23FF6B35'/%3E%3C/svg%3E");
}

/* Validation — Spirits red (--c-qui) instead of the parent's dotted gray */
.app .gform_wrapper.gravity-theme .gform_validation_errors {
    border: .1rem solid color-mix(in srgb, var(--c-qui) 55%, transparent);
    background: color-mix(in srgb, var(--c-qui) 12%, transparent);
}
.app .gform_wrapper.gravity-theme .gfield_error [aria-invalid=true] {
    border-color: var(--c-qui);
}
.app .gform_wrapper.gravity-theme .gfield_validation_message,
.app .gform_wrapper.gravity-theme .validation_message {
    border: .1rem solid color-mix(in srgb, var(--c-qui) 35%, transparent);
    background: color-mix(in srgb, var(--c-qui) 10%, transparent);
    color: color-mix(in srgb, var(--c-qui) 45%, var(--c-w));
}


/* $REVEAL
--------------------------------------------------------*/
[data-spir-reveal] {
    opacity: 0;
    -webkit-transform: translateY(2.4rem);
        -ms-transform: translateY(2.4rem);
            transform: translateY(2.4rem);
    -webkit-transition: opacity var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: opacity var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease);
    transition: opacity var(--spir-dur) var(--spir-ease), transform var(--spir-dur) var(--spir-ease);
    transition: opacity var(--spir-dur) var(--spir-ease), transform var(--spir-dur) var(--spir-ease), -webkit-transform var(--spir-dur) var(--spir-ease);
}
[data-spir-reveal].is-revealed {
    opacity: 1;
    -webkit-transform: none;
        -ms-transform: none;
            transform: none;
}
@media (prefers-reduced-motion: reduce) {
    [data-spir-reveal] {
        opacity: 1;
        -webkit-transform: none;
            -ms-transform: none;
                transform: none;
        -webkit-transition: none;
        transition: none;
    }
    .spir-ticker__track {
        -webkit-animation: none;
                animation: none;
    }
    .spir-hero__media .vim--bg {
        display: none;
    }
}


/* $RESPONSIVE
--------------------------------------------------------*/
@media only screen and (max-width: 768px) {
    main.main > section {
        padding-block: 6.4rem;
    }
    .spir-hero__vert {
        display: none;
    }
    .spir-next__inner {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
    }
    .spir-count__cell {
        min-width: 0;
        padding: 1.6rem .8rem;
    }
    .spir-section-head {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
    }
    .spir-section-more,
    .spir-section-nav {
        -ms-grid-column: 1;
        grid-column: 1;
        grid-row: auto;
    }
    .spir-tickets__grid {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
        -ms-grid-rows: none;
        grid-template-rows: none;
    }
    .spir-tickets__grid > *:nth-child(1) {
        -ms-grid-row: 1;
        -ms-grid-column: 1;
    }
    .spir-ticket-card--feature {
        grid-row: auto;
        min-height: 36rem;
    }
    .spir-learn {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
        padding: 3.2rem 2.4rem;
    }
    .spir-gallery__inner {
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
        gap: 3.2rem;
    }
    .spir-gallery__intro {
        -webkit-box-flex: 0;
            -ms-flex: none;
                flex: none;
        width: 100%;
    }
    .spir-gallery__slide {
        width: 48rem;
        height: 48rem;
    }
    .spir-gallery__slide--duo {
        width: 24rem;
    }
}


/* $PAGE-HERO — inside-page masthead (not the homepage 100svh hero).
   Same chrome on every inside page. Default (no --media) = light band
   surface. Add --media + media/scrim for photography. Always BR stars.
   First section after the hero is always .spir-band--dark; then alternate.
--------------------------------------------------------*/
.spir-page-hero {
    position: relative;
    isolation: isolate;
    /* Visible so hero CTAs (e.g. calendar subscribe) can drop over the next band */
    overflow: visible;
    z-index: 2;
    /* Extra top air; bottom matches section rhythm (9.6) */
    padding-block: 19.2rem 9.6rem;
    background:
        radial-gradient(70% 120% at 10% 0%, color-mix(in srgb, var(--c-pri) 14%, transparent) 0%, transparent 55%),
        var(--c-05);
}
main.main > section.spir-page-hero {
    padding-block: 19.2rem 9.6rem;
}
.spir-page-hero__media {
    display: none;
    position: absolute;
    inset: 0;
    z-index: -2;
    background-size: cover;
    background-position: center;
}
.spir-page-hero--media .spir-page-hero__media {
    display: block;
}
.spir-page-hero__scrim {
    display: none;
    position: absolute;
    inset: 0;
    z-index: -1;
    background:
        linear-gradient(105deg, color-mix(in srgb, var(--c-d) 88%, transparent) 0%, color-mix(in srgb, var(--c-d) 55%, transparent) 55%, color-mix(in srgb, var(--c-d) 72%, transparent) 100%),
        radial-gradient(70% 120% at 10% 0%, color-mix(in srgb, var(--c-pri) 22%, transparent) 0%, transparent 55%);
}
.spir-page-hero--media .spir-page-hero__scrim {
    display: block;
}
.spir-page-hero--media {
    background: var(--c-d);
}
.spir-page-hero__inner {
    position: relative;
    width: var(--w-lg);
    margin: 0 auto;
}
.spir-page-hero__title {
    margin: 0 0 1.6rem;
    font-size: var(--spir-fs-page);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-page-hero__lead {
    max-width: 56rem;
    margin: 0 0 3.2rem;
    font-size: var(--spir-fs-lead);
    line-height: 1.45;
    color: color-mix(in srgb, var(--c-fg) 75%, var(--c-bg));
}
/* No CTA row after the lead — drop the button-spacing bottom margin */
.spir-page-hero__lead:last-child {
    margin-bottom: 0;
}
.spir-page-hero__actions,
.spir-page-hero__jump {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
}


/* $PRIVACY — page-privacy.php ([pp] shortcode body)
--------------------------------------------------------*/
.spir-privacy__inner {
    width: var(--w-lg);
    margin: 0 auto;
    font-size: 1.6rem;
    line-height: 1.7;
}
.spir-privacy__inner .pix-privacy-policy > * + * {
    margin-block: 2.4rem 0;
}
.spir-privacy__inner h2,
.spir-privacy__inner h3 {
    margin-block: 4rem 0;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    line-height: 1;
    text-transform: uppercase;
}
.spir-privacy__inner h2 {
    font-size: clamp(2.4rem, 3.2vw, 3.6rem);
}
.spir-privacy__inner h3 {
    font-size: clamp(2rem, 2.4vw, 2.8rem);
}
.spir-privacy__inner a {
    color: var(--c-pri);
    text-decoration: underline;
    text-underline-offset: .3em;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-privacy__inner a:hover {
    color: var(--c-qua);
}


/* $EMBEDDED-FORM — shared Contact Us form on inside pages
--------------------------------------------------------*/
.spir-form-section {
    scroll-margin-top: calc(var(--spir-notif-h) + 2.4rem);
}
.spir-form-section__inner {
    width: var(--w-lg);
    margin: 0 auto;
}
.spir-form {
    width: min(76.8rem, 100%);
}
.spir-form-section__inner .spir-form {
    width: 100%;
}
.spir-form__head {
    margin-bottom: 3.2rem;
}
.spir-form__title {
    margin: 0 0 1.6rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: var(--spir-fs-title);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-form__text {
    max-width: 64rem;
    margin: 0;
    font-size: 1.6rem;
    line-height: 1.6;
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}
.spir-form .gform_wrapper.gravity-theme .gsection {
    margin-top: 1.6rem;
    padding: 2.4rem 0 1.6rem;
    border-top: .1rem solid var(--c-25);
    border-bottom: 0;
}
.spir-form .gform_wrapper.gravity-theme .gsection_title {
    margin: 0 0 .8rem;
    font-size: clamp(2rem, 2.4vw, 2.8rem);
    text-transform: uppercase;
}
.spir-form .gform_wrapper.gravity-theme .gsection_description {
    margin: 0;
    color: color-mix(in srgb, var(--c-fg) 65%, var(--c-bg));
}
.spir-form .gform_wrapper.gravity-theme .spir-gf-section--boundary {
    display: none;
}
.spir-form .gform_wrapper.gravity-theme .gform_footer {
    margin-top: 3.2rem;
    padding: 0;
}

/* $CONTACT — page-contact.php (embedded form + details sidebar)
--------------------------------------------------------*/
.spir-contact__inner {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: minmax(0, 2fr) 6.4rem minmax(24rem, 1fr);
    grid-template-columns: minmax(0, 2fr) minmax(24rem, 1fr);
    gap: 6.4rem;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: start;
}
.spir-contact .spir-form {
    width: 100%;
}
.spir-contact__sidebar {
    position: sticky;
    top: calc(var(--spir-notif-h) + 11.2rem);
    padding: 3.2rem;
    border: .1rem solid var(--c-25);
    border-top: .4rem solid var(--c-pri);
    background: var(--c-05);
}
.spir-contact__list {
    margin: 0;
    padding: 0;
    list-style: none;
}
.spir-contact__item + .spir-contact__item {
    margin-top: 3.2rem;
    padding-top: 3.2rem;
    border-top: .1rem solid var(--c-25);
}
.spir-contact__item .spir-eyebrow {
    margin-bottom: 1.6rem;
}
.spir-contact__value {
    margin: 0;
    display: block;
    font-size: clamp(1.8rem, 2vw, 2.4rem);
    font-weight: 600;
    line-height: 1.35;
    color: var(--c-fg);
    text-decoration: none;
}
a.spir-contact__value:hover {
    color: var(--c-pri);
}
.spir-contact__text {
    margin: 0 0 2.4rem;
    font-size: 1.6rem;
    line-height: 1.55;
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
}
.spir-contact__link {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    margin-top: 1.6rem;
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--c-pri);
    text-decoration: none;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-contact__link:hover {
    color: var(--c-qua);
}
@media only screen and (max-width: 1024px) {
    .spir-contact__inner {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
        gap: 4.8rem;
    }
    .spir-contact__sidebar {
        position: static;
    }
}
@media only screen and (max-width: 600px) {
    .spir-contact__sidebar {
        padding: 2.4rem;
    }
}


/* $COMING-SOON — placeholder body band for pages awaiting content
--------------------------------------------------------*/
.spir-coming__inner {
    width: var(--w-lg);
    margin: 0 auto;
    max-width: 56rem;
    text-align: center;
}
.spir-coming__title {
    margin: 0 0 1.6rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: var(--spir-fs-title);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-coming__text {
    margin: 0 0 3.2rem;
    font-size: var(--spir-fs-lead);
    line-height: 1.45;
    color: color-mix(in srgb, var(--c-fg) 75%, var(--c-bg));
}


/* $SEASON-TICKETS — page-season-tickets.php
--------------------------------------------------------*/
.spir-stix-cta__inner {
    width: var(--w-lg);
    margin: 0 auto;
}
.spir-stix-pricing__grid {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 2fr 3.2rem 1fr;
    grid-template-columns: 2fr 1fr;
    gap: 3.2rem;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: start; /* required so sticky chart has room to travel */
}
.spir-stix-chart {
    margin: 0;
}
/* Utility seating-chart page — same --w-lg column as other insides */
.spir-seat-chart__figure {
    width: var(--w-lg);
    margin: 0 auto;
}
/* Pricing only — tracks while the table scrolls; clears notif + learn badge */
.spir-stix-pricing__grid .spir-stix-chart {
    position: sticky;
    top: calc(var(--spir-notif-h) + 11.2rem);
}
.spir-stix-chart__link {
    position: relative;
    display: block;
    border: .1rem solid var(--c-25);
    overflow: hidden;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease);
}
.spir-stix-chart__link:hover {
    border-color: var(--c-pri);
}
.spir-stix-chart__img {
    display: block;
    width: 100%;
    height: auto;
}
.spir-stix-chart__zoom {
    position: absolute;
    right: 0;
    bottom: 0;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    width: 4rem;
    height: 4rem;
    background: color-mix(in srgb, var(--c-d) 80%, transparent);
    border: .1rem solid var(--c-25);
    border-right: 0;
    border-bottom: 0;
    color: var(--c-fg);
    font-size: 1.6rem;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
}
.spir-stix-chart__link:hover .spir-stix-chart__zoom {
    border-color: var(--c-pri);
    color: var(--c-pri);
}
.spir-stix-table-wrap {
    min-width: 0;
    overflow-x: auto;
}
.spir-stix-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 1.4rem;
    line-height: 1.3;
}
.spir-stix-table thead th {
    padding: 1.2rem 1.6rem;
    background: var(--c-pri);
    color: var(--c-d);
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: .1em;
    text-transform: uppercase;
    text-align: left;
}
.spir-stix-table thead th:not(:first-child),
.spir-stix-table tbody td {
    text-align: center;
}
.spir-stix-table tbody th,
.spir-stix-table tbody td {
    padding: 1.2rem 1.6rem;
    border-bottom: .1rem solid var(--c-25);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
}
.spir-stix-table tbody th {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: 1.2rem;
    font-weight: 700;
    text-align: left;
}
.spir-stix-table tbody tr:nth-child(odd) {
    background: color-mix(in srgb, var(--c-w) 4%, transparent);
}
.spir-stix-table tbody tr:nth-child(even) {
    background: color-mix(in srgb, var(--c-w) 8%, transparent);
}
.spir-stix-table tbody td {
    border-left: .1rem solid color-mix(in srgb, var(--c-w) 18%, transparent);
    color: color-mix(in srgb, var(--c-fg) 85%, var(--c-bg));
}
.spir-stix-swatch {
    -webkit-box-flex: 0;
        -ms-flex: 0 0 1.2rem;
            flex: 0 0 1.2rem;
    width: 1.2rem;
    height: 1.2rem;
    border-radius: 50%;
    background: var(--stix-swatch);
    -webkit-box-shadow: 0 0 0 .1rem color-mix(in srgb, var(--c-w) 20%, transparent);
            box-shadow: 0 0 0 .1rem color-mix(in srgb, var(--c-w) 20%, transparent);
}
.spir-stix-table__note {
    margin: 1.6rem 0 0;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: color-mix(in srgb, var(--c-fg) 55%, var(--c-bg));
    text-align: right;
}
.spir-stix-benefits__grid {
    width: var(--w-lg);
    margin: 0 auto;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr 4.8rem 1fr;
    grid-template-columns: 1fr 1fr;
    gap: 4.8rem;
}
.spir-stix-benefits__heading {
    margin: 0 0 2.4rem;
    color: var(--c-pri);
    font-size: 1.4rem;
    font-weight: 800;
    letter-spacing: .1em;
    text-transform: uppercase;
    line-height: 1.35;
}
.spir-stix-rail {
    margin: 0;
    padding: 0 0 0 2.4rem;
    list-style: none;
    border-left: .1rem solid var(--c-25);
}
.spir-stix-rail__item {
    position: relative;
    padding: 1.2rem 0 1.2rem 1.6rem;
    font-size: 1.6rem;
    line-height: 1.4;
}
.spir-stix-rail__item::before {
    content: '';
    position: absolute;
    left: -2.4rem;
    top: 50%;
    width: 1.6rem;
    height: .1rem;
    background: var(--c-25);
}
.spir-stix-tier + .spir-stix-tier {
    margin-top: 3.2rem;
}
.spir-stix-tier__label {
    margin: 0 0 1.6rem;
    font-size: 1.8rem;
    font-weight: 800;
    letter-spacing: .08em;
    text-transform: uppercase;
}
.spir-stix-checks {
    margin: 0;
    padding: 0;
    list-style: none;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    gap: 1.2rem;
}
.spir-stix-checks__item {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: flex-start;
    gap: 1.2rem;
    font-size: 1.6rem;
    line-height: 1.4;
}
.spir-stix-checks__item .fa-check {
    margin-top: .2rem;
    color: var(--c-pri);
    font-size: 1.4rem;
}
.spir-stix-cta {
    text-align: center;
}
.spir-stix-cta__title {
    margin: 0 0 1.6rem;
    font-size: clamp(2.8rem, 4vw, 4.8rem);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
}
.spir-stix-cta__text {
    margin: 0 0 3.2rem;
    font-size: 1.6rem;
    color: color-mix(in srgb, var(--c-fg) 65%, var(--c-bg));
}
@media only screen and (max-width: 1024px) {
    .spir-page-hero,
    main.main > section.spir-page-hero {
        padding-block: 12.8rem 6.4rem; /* top still airier; bottom = mobile section pad */
    }
    .spir-stix-pricing__grid,
    .spir-stix-benefits__grid {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
        gap: 3.2rem;
    }
    .spir-stix-chart {
        position: static; /* no sticky pin in single-column */
    }
    .spir-stix-table {
        font-size: 1.2rem;
    }
    .spir-stix-table thead th,
    .spir-stix-table tbody th,
    .spir-stix-table tbody td {
        padding: .8rem;
    }
}


/* $FOOTER
--------------------------------------------------------*/
.spir-ftr {
    position: relative;
    padding-block: 9.6rem 4.8rem;
    background: var(--c-d);
    overflow: hidden;
    isolation: isolate;
}
/* Orange burst behind the watermark — lives on ::after so it paints over
   the map + veil (same z as the veil, but pseudo-elements render after
   child elements) while the watermark (z -1) still ghosts above it. */
.spir-ftr::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -2;
    pointer-events: none;
    background: radial-gradient(80% 100% at 50% 100%, color-mix(in srgb, var(--c-pri) 8%, transparent) 0%, transparent 60%);
}
/* Mapbox background — full-bleed behind everything (z -3), retinted to the
   brand's near-black by scripts.js `footMap`. The veil (z -2) melts it into
   solid black before the link deck so the columns read on pure c-d; the
   watermark (z -1) ghosts over both. */
.spir-ftr__map {
    position: absolute;
    inset: 0;
    z-index: -3;
}
.spir-ftr__map .mapboxgl-canvas:focus {
    outline: none;
}
/* Attribution chrome — required by Mapbox TOS; mute it into the dark */
.spir-ftr__map .mapboxgl-ctrl-bottom-right,
.spir-ftr__map .mapboxgl-ctrl-attrib,
.spir-ftr__map .mapboxgl-ctrl-attrib.mapboxgl-compact,
.spir-ftr__map .mapboxgl-ctrl-attrib-button {
    background: transparent !important;
    background-color: transparent !important;
    -webkit-box-shadow: none !important;
            box-shadow: none !important;
}
.spir-ftr__map .mapboxgl-ctrl-attrib {
    color: var(--c-25);
    font-size: 1rem;
}
.spir-ftr__map .mapboxgl-ctrl-attrib a {
    color: var(--c-50);
}
.spir-ftr__map .mapboxgl-ctrl-logo {
    opacity: .3;
}
.spir-ftr__map-veil {
    position: absolute;
    inset: 0;
    z-index: -2;
    pointer-events: none;
    background: linear-gradient(180deg,
        color-mix(in srgb, var(--c-d) 35%, transparent) 0%,
        color-mix(in srgb, var(--c-d) 55%, transparent) 32%,
        var(--c-d) 64%);
}
/* Pulsing brand pin on PPL Center (marker element built in footMap JS) */
.spir-map-marker {
    position: relative;
    width: 2rem;
    height: 2rem;
}
.spir-map-marker__dot {
    position: absolute;
    inset: .4rem;
    border-radius: 50%;
    background: var(--c-pri);
    -webkit-box-shadow: 0 0 1.6rem color-mix(in srgb, var(--c-pri) 70%, transparent);
            box-shadow: 0 0 1.6rem color-mix(in srgb, var(--c-pri) 70%, transparent);
}
.spir-map-marker__pulse {
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: color-mix(in srgb, var(--c-pri) 40%, transparent);
    -webkit-animation: spir-map-pulse 2.6s ease-out infinite;
            animation: spir-map-pulse 2.6s ease-out infinite;
}
.spir-map-marker__pulse--delayed {
    -webkit-animation-delay: 1.3s;
            animation-delay: 1.3s;
}
@-webkit-keyframes spir-map-pulse {
    0%   { -webkit-transform: scale(1); transform: scale(1); opacity: 1; }
    100% { -webkit-transform: scale(5); transform: scale(5); opacity: 0; }
}
@keyframes spir-map-pulse {
    0%   { -webkit-transform: scale(1); transform: scale(1); opacity: 1; }
    100% { -webkit-transform: scale(5); transform: scale(5); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
    .spir-map-marker__pulse {
        -webkit-animation: none;
                animation: none;
        opacity: 0;
    }
}

.spir-ftr__watermark {
    position: absolute;
    left: 50%;
    bottom: -.18em;
    z-index: -1;
    -webkit-transform: translateX(-50%);
        -ms-transform: translateX(-50%);
            transform: translateX(-50%);
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: clamp(16rem, 30vw, 44rem);
    line-height: 1;
    text-transform: uppercase;
    white-space: nowrap;
    color: color-mix(in srgb, var(--c-w) 3%, transparent);
    pointer-events: none;
    -webkit-user-select: none;
       -moz-user-select: none;
        -ms-user-select: none;
            user-select: none;
}

/* CTA band — copy + buttons left, venue/contact card right (over the map) */
.spir-ftr__cta {
    width: var(--w-lg);
    margin: 0 auto 6.4rem;
    padding-bottom: 6.4rem;
    border-bottom: .1rem solid var(--c-25);
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1fr 4.8rem auto;
    grid-template-columns: 1fr auto;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: 4.8rem;
}
.spir-ftr__cta-title {
    margin: 0 0 .8rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: clamp(3.6rem, 5vw, 6.4rem);
    line-height: .95;
    letter-spacing: -.01em;
    text-transform: uppercase;
    color: var(--c-w);
}
.spir-ftr__cta-text {
    margin: 0;
    font-size: 1.6rem;
    color: color-mix(in srgb, var(--c-fg) 65%, var(--c-bg));
}
.spir-ftr__cta-actions {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    margin-top: 3.2rem;
}
/* Venue + contact card — frosted so the map ghosts through behind it */
.spir-ftr__venue {
    width: 32rem;
    padding: 3.2rem;
    background: color-mix(in srgb, var(--c-d) 70%, transparent);
    -webkit-backdrop-filter: saturate(160%) blur(1.6rem);
    backdrop-filter: saturate(160%) blur(1.6rem);
    border: .1rem solid var(--c-25);
    border-top: .4rem solid var(--c-pri);
}
.spir-ftr__venue-name {
    margin: 0 0 .8rem;
    font-family: var(--spir-ff-head);
    font-weight: 400;
    font-size: 3.2rem;
    line-height: 1;
    text-transform: uppercase;
    color: var(--c-w);
}
.spir-ftr__venue-addr {
    margin: 0 0 1.6rem;
    font-style: normal;
    font-size: 1.4rem;
    line-height: 1.6;
    color: color-mix(in srgb, var(--c-fg) 65%, var(--c-bg));
}
.spir-ftr__venue-links {
    margin: 0;
    padding: 0;
    list-style: none;
    display: -ms-grid;
    display: grid;
    gap: .8rem;
}
.spir-ftr .spir-ftr__venue-link {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    gap: .8rem;
    font-size: 1.4rem;
    font-weight: 600;
    color: var(--c-fg);
    text-decoration: none;
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-ftr .spir-ftr__venue-link:hover {
    color: var(--c-pri);
}
.spir-ftr__venue-link i {
    width: 1.6rem;
    text-align: center;
    color: var(--c-pri);
}
/* Parent .ftr a applies dotted underlines — strip them from our elements
   (colophon links keep the parent treatment). */
.spir-ftr .spir-btn,
.spir-ftr .spir-ftr__social-link,
.spir-ftr .spir-ftr__link {
    text-decoration: none;
}
/* Parent .ftr a (0,1,1) also sets its own transition (underline color only),
   beating our single-class rules — redeclare ours at higher specificity so
   footer links animate like everywhere else. */
.spir-ftr .spir-btn {
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease),
                color var(--spir-dur-fast) var(--spir-ease);
    transition: transform var(--spir-dur-fast) var(--spir-ease),
                color var(--spir-dur-fast) var(--spir-ease),
                -webkit-transform var(--spir-dur-fast) var(--spir-ease);
}
.spir-ftr .spir-ftr__social-link {
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
}
.spir-ftr .spir-ftr__link {
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}

/* Link deck */
.spir-ftr__deck {
    width: var(--w-lg);
    margin: 0 auto 8rem;
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: 1.4fr 4.8rem 1fr 4.8rem 1fr 4.8rem 1fr;
    grid-template-columns: 1.4fr repeat(3, 1fr);
    gap: 4.8rem;
}
.spir-ftr__club-line {
    margin: 0 0 2.4rem;
    max-width: 28rem;
    font-size: 1.4rem;
    line-height: 1.6;
    color: color-mix(in srgb, var(--c-fg) 60%, var(--c-bg));
}
.spir-ftr__social {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    gap: .8rem;
}
.spir-ftr__social-link {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    width: 4rem;
    height: 4rem;
    border: .1rem solid var(--c-25);
    font-size: 1.6rem;
    color: color-mix(in srgb, var(--c-fg) 70%, var(--c-bg));
    text-decoration: none;
    -webkit-transition: border-color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
    transition: border-color var(--spir-dur-fast) var(--spir-ease), background var(--spir-dur-fast) var(--spir-ease), color var(--spir-dur-fast) var(--spir-ease);
}
.spir-ftr__social-link:hover {
    border-color: var(--c-pri);
    background: var(--c-pri);
    color: var(--c-w);
}
.spir-ftr__col-title {
    margin: 0 0 1.6rem;
    font-size: 1.2rem;
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--c-pri);
}
.spir-ftr__list {
    margin: 0;
    padding: 0;
    list-style: none;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    gap: 1.6rem;
}
.spir-ftr__link {
    font-size: 1.4rem;
    color: color-mix(in srgb, var(--c-fg) 75%, var(--c-bg));
    -webkit-transition: color var(--spir-dur-fast) var(--spir-ease);
    transition: color var(--spir-dur-fast) var(--spir-ease);
}
.spir-ftr__link:hover {
    color: var(--c-pri);
}
/* Colophon sits on the parent's .ftr__inner styles — just add a divider */
.spir-ftr .ftr__inner {
    padding-top: 3.2rem;
    border-top: .1rem solid var(--c-25);
}

@media only screen and (max-width: 768px) {
    .spir-ftr {
        padding-block: 6.4rem 3.2rem;
    }
    .spir-ftr__cta {
        -ms-grid-columns: 1fr;
        grid-template-columns: 1fr;
        margin-bottom: 4.8rem;
        padding-bottom: 4.8rem;
    }
    .spir-ftr__venue {
        width: 100%;
    }
    .spir-ftr__deck {
        -ms-grid-columns: 1fr 3.2rem 1fr;
        grid-template-columns: repeat(2, 1fr);
        gap: 3.2rem;
        margin-bottom: 6.4rem;
    }
    .spir-ftr__club {
        grid-column: 1 / -1;
    }
    .spir-ftr .ftr__colophon {
        -webkit-box-orient: vertical;
        -webkit-box-direction: normal;
            -ms-flex-direction: column;
                flex-direction: column;
        -webkit-box-align: start;
            -ms-flex-align: start;
                align-items: flex-start;
        gap: 1.6rem;
    }
}