/* ═══════════════════════════════════════════════
   Stadium patch — Tournaments screen (loaded after app.css)
   Calendar aligned on /stadium/tournoi/: month groups, surface
   dot + mono dates cards, ink frames + eyebrows on detail,
   VIP locks (padlock + light blur + ink-on-ball pill CTA).
   ═══════════════════════════════════════════════ */

/* ── Mono eyebrow (Stadium label, clay accent, optional brackets) ── */
.tour-eyebrow {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
}
.tour-eyebrow--brackets {
    color: var(--clay);
}
.tour-eyebrow--brackets::before { content: '[ '; opacity: 0.55; }
.tour-eyebrow--brackets::after { content: ' ]'; opacity: 0.55; }

/* ── Page header: two-tone display title + lede ── */
.tcal-head {
    align-items: flex-end;
    margin-bottom: 26px;
}
.tcal-head-main { min-width: 0; }
/* Beat app.css `.tournament-page-head .page-title` (sport-display uppercase) */
.tournament-page-head .page-title.tcal-title {
    margin: 14px 0 0;
    font-family: var(--font-display);
    font-size: clamp(2.1rem, 7vw, 3.4rem);
    font-weight: 700;
    letter-spacing: -0.035em;
    line-height: 0.97;
    text-transform: none;
}
.tcal-title-2 { color: var(--text3); }
.tcal-lede {
    margin-top: 14px;
    max-width: 560px;
}

/* Count capsule (label top-left, mono value bottom-right) */
.tournament-count-card.tcal-count-capsule {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    min-width: 118px;
    min-height: 96px;
    padding: 14px 16px 12px;
    border-radius: 24px;
    background: var(--input-bg);
    border: 1px solid var(--line);
    text-align: left;
}
.tcal-count-capsule small {
    order: 1;
    margin: 0;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.09em;
    color: var(--text3);
}
.tcal-count-capsule span {
    order: 2;
    align-self: flex-end;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 2rem;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--text);
}

/* ── Toolbar: 2px ink top rule, surface legend + live badge ── */
.tcal-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    flex-wrap: wrap;
    margin: 6px 0 16px;
    padding: 14px 0;
    border-top: 2px solid var(--text);
    border-bottom: 1px solid var(--line);
}
.tcal-legend {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}
.tcal-legend-item {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-family: var(--font-mono);
    font-size: 10.4px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text2);
}

/* Surface dot: 10px square, surface color (Stadium signature) */
.tcal-dot {
    flex: 0 0 10px;
    display: inline-block;
    width: 10px;
    height: 10px;
    background: var(--text3);
}
.tcal-dot--hard { background: var(--hard); }
.tcal-dot--clay { background: var(--clay); }
.tcal-dot--grass { background: var(--grass); }

/* Live pill: ink-on-ball, immutable */
.tcal-live {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    flex: 0 0 auto;
    padding: 5px 12px;
    border-radius: 99px;
    background: var(--ball);
    color: var(--text-on-ball);
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.tcal-live--badge { padding: 7px 16px; }
.tcal-live-pulse {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--grass);
    animation: tcal-blink 1.6s ease-in-out infinite;
}
@keyframes tcal-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.35; }
}

/* ── Month groups ── */
.tournament-grid.tcal-grid {
    display: block;
}
.tcal-month { margin-top: 30px; }
.tcal-month:first-child { margin-top: 0; }
.tcal-month-head {
    display: flex;
    align-items: baseline;
    gap: 14px;
    margin-bottom: 12px;
}
.tcal-month-title {
    margin: 0;
    font-family: var(--font-display);
    font-size: clamp(1.2rem, 2.6vw, 1.55rem);
    font-weight: 700;
    letter-spacing: -0.03em;
    line-height: 1;
    color: var(--text);
    white-space: nowrap;
}
.tcal-month-count {
    font-family: var(--font-mono);
    font-size: 10.4px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.tcal-month-line {
    flex: 1;
    height: 1px;
    background: var(--line);
    align-self: center;
}
.tcal-month-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(310px, 1fr));
    gap: 10px;
}

/* ── Card: dot + name + mono dates, no image, sharp frame ── */
.tournament-card.tcal-card {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 15px 16px 13px;
    background: var(--input-bg);
    border: 1px solid var(--line);
    border-radius: 0;
    overflow: visible;
    transition: border-color 0.25s ease, box-shadow 0.3s ease, transform 0.22s cubic-bezier(0.34, 1.3, 0.5, 1), opacity 0.25s ease;
}
/* Surface identity vars: the sweep, ring and shadow all read these */
.tcal-card--hard { --tcal-surface: var(--hard); --tcal-surface-rgb: var(--hard-rgb); }
.tcal-card--clay { --tcal-surface: var(--clay); --tcal-surface-rgb: var(--clay-rgb); }
.tcal-card--grass { --tcal-surface: var(--grass); --tcal-surface-rgb: var(--grass-rgb); }

/* ── Signature hover: chalk line sweep ──
   An SVG rect (pathLength=100) traces the card frame clockwise from the
   top-left corner, like a court line being chalked, in the surface color.
   Combined with a discreet lift + theme-plumbed shadow. */
.tcal-sweep {
    position: absolute;
    inset: -1px;            /* sit exactly on the 1px border */
    width: calc(100% + 2px);
    height: calc(100% + 2px);
    pointer-events: none;
    z-index: 1;
    overflow: visible;
}
.tcal-sweep-rect {
    x: 1px;
    y: 1px;
    width: calc(100% - 2px);
    height: calc(100% - 2px);
    fill: none;
    stroke: var(--tcal-surface, var(--text));
    stroke-width: 2;
    stroke-dasharray: 100;
    stroke-dashoffset: 100;  /* hidden: nothing drawn yet */
    transition: stroke-dashoffset 0.55s cubic-bezier(0.65, 0, 0.35, 1);
}
.tournament-card.tcal-card:hover,
.tournament-card.tcal-card:focus-within {
    border-color: var(--line);
    transform: translateY(-3px);
    box-shadow:
        0 18px 32px -22px rgba(var(--shadow-rgb), 0.5),
        0 6px 20px -12px rgba(var(--tcal-surface-rgb, var(--shadow-rgb)), 0.35);
}
.tournament-card.tcal-card:hover .tcal-sweep-rect,
.tournament-card.tcal-card:focus-within .tcal-sweep-rect {
    stroke-dashoffset: 0;    /* line fully chalked around the frame */
}
/* Echo: the surface dot pulses one ring in the same color */
.tournament-card.tcal-card:hover .tcal-row > .tcal-dot,
.tournament-card.tcal-card:focus-within .tcal-row > .tcal-dot {
    animation: tcal-dot-ring 0.9s ease-out 1;
}
@keyframes tcal-dot-ring {
    0% { box-shadow: 0 0 0 0 rgba(var(--tcal-surface-rgb, var(--shadow-rgb)), 0.45); }
    100% { box-shadow: 0 0 0 9px rgba(var(--tcal-surface-rgb, var(--shadow-rgb)), 0); }
}
/* Micro: arrow of the open pill nudges along the sweep direction */
.tcal-open-arrow { display: inline-block; transition: transform 0.25s ease 0.15s; }
.tournament-card.tcal-card:hover .tcal-open-arrow,
.tournament-card.tcal-card:focus-within .tcal-open-arrow { transform: translateX(3px); }

.tcal-card.status-past { opacity: 0.62; }
.tcal-card.status-past:hover,
.tcal-card.status-past:focus-within { opacity: 1; }

.tcal-row {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}
.tcal-id {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.tcal-name {
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: 650;
    letter-spacing: -0.01em;
    line-height: 1.2;
    color: var(--text);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.tcal-dates {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
    line-height: 1.45;
    /* stadium-overrides.css (older aggregate) truncates with nowrap+ellipsis:
       let dates + place wrap instead of cutting the city off */
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    transition: color 0.25s ease;
}
/* Dates pick up the surface color while the line chalks itself */
.tournament-card.tcal-card:hover .tcal-dates,
.tournament-card.tcal-card:focus-within .tcal-dates {
    color: var(--tcal-surface, var(--text2));
}
.tcal-cat {
    flex: 0 0 auto;
    padding: 5px 12px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text2);
    white-space: nowrap;
}
.tcal-caption {
    min-height: 0;
    margin: 0;
    font-size: 12.5px;
    line-height: 1.5;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.tcal-card .tournament-card-tags { margin-top: 0; }

/* Signal chips: mono counters, padlock when VIP-locked */
.tcal-sigrow {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    margin-top: auto;    /* pin stat row + actions to the bottom: rows align across the grid */
    padding-top: 11px;
    border-top: 1px solid var(--line);
}
.tcal-sig {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 9px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    background: var(--control-bg);
    font-family: var(--font-mono);
    font-size: 9.6px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
    font-variant-numeric: tabular-nums;
}
.tcal-sig strong {
    font-size: 11.5px;
    font-weight: 700;
    color: var(--text2);
}
.tcal-sig.has-active {
    border-color: var(--text);
    color: var(--text2);
}
.tcal-sig.has-active strong { color: var(--text); }
.tcal-sig--locked { color: var(--text3); }
.tcal-sig--locked .tour-lock-ic { opacity: 0.8; }
.tcal-sig--stat {
    border-color: transparent;
    background: transparent;
    padding-left: 2px;
    padding-right: 2px;
}
.tcal-sig--stat.kpi-positive { color: var(--success); }
.tcal-sig--stat.kpi-negative { color: var(--error); }

/* Actions: outline ink pill (invert on hover) + mono link */
.tcal-actions {
    margin-top: 2px;
    align-items: center;
}
.tcal-open {
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 36px;
    padding: 0 16px;
    border: 1px solid var(--text);
    border-radius: 99px;
    background: transparent;
    color: var(--text);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    transition: background-color 0.16s ease, color 0.16s ease, transform 0.16s ease;
}
.tcal-open:hover {
    background: var(--text);
    color: var(--input-bg);
}
.tcal-open-arrow { font-family: var(--font-mono); }

/* ── Ghost pill (secondary action): ink outline, invert on hover ──
   Replaces legacy .btn-secondary / .btn-detail on the calendar card,
   the detail hero actions, the analysis follow button and the back
   button. Same grammar as .tcal-open, sized to sit beside it. */
.tcal-ghost-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 36px;
    padding: 0 16px;
    border: 1px solid var(--text);
    border-radius: 99px;
    background: transparent;
    color: var(--text);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    white-space: nowrap;
    transition: background-color 0.16s ease, color 0.16s ease, border-color 0.16s ease, transform 0.16s ease;
}
.tcal-ghost-pill::after { content: none; }
.tcal-ghost-pill:hover {
    background: var(--text);
    border-color: var(--text);
    color: var(--input-bg);
}
.tcal-ghost-pill:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px var(--focus-ring);
}
.tcal-ghost-pill:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
/* On the calendar card actions row: share the width with .tcal-open */
.tcal-actions .tcal-ghost-pill { flex: 1; }
/* In the detail hero actions: let the three pills wrap and breathe */
.tournament-detail-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.tournament-detail-actions .tcal-ghost-pill { flex: 1 1 auto; }
/* Back-button chevron lives in its own span (info kept, not literal text) */
.tcal-back-chevron {
    display: inline-block;
    font-family: var(--font-mono);
    transition: transform 0.16s ease;
}
.tournament-back-btn.tcal-ghost-pill {
    align-self: flex-start;
    flex: 0 0 auto;
    margin-bottom: 18px;
}
.tournament-back-btn.tcal-ghost-pill:hover .tcal-back-chevron { transform: translateX(-3px); }
/* Follow button inside the odds table: full-width pill, smaller mono */
.analysis-follow-btn.tcal-ghost-pill {
    width: 100%;
    min-height: 30px;
    padding: 0 9px;
    font-size: 0.52rem;
    letter-spacing: 0.06em;
    white-space: normal;
    line-height: 1.1;
}
.analysis-follow-btn.tcal-ghost-pill.is-followed {
    background: var(--ball);
    border-color: var(--ball);
    color: var(--text-on-ball);
}

/* ── Calendar status tabs: pills (mono), active = ink filled ──
   Replaces legacy .period-btn; mirrors the picks-screen pill grammar. */
.tournament-tabs .tcal-tab {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    min-height: 38px;
    padding: 0 14px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    background: transparent;
    color: var(--text2);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    transition: border-color 0.16s ease, background-color 0.16s ease, color 0.16s ease;
}
.tournament-tabs .tcal-tab::after { content: none; }
.tournament-tabs .tcal-tab:hover {
    border-color: var(--text3);
    color: var(--text);
}
.tournament-tabs .tcal-tab.active {
    background: var(--text);
    border-color: var(--text);
    color: var(--input-bg);
}
.tournament-tabs .tcal-tab:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px var(--focus-ring);
}
.tournament-tabs .tcal-tab .tournament-tab-count {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
}
.tournament-tabs .tcal-tab.active .tournament-tab-count {
    border-color: var(--input-bg);
    background: transparent;
    color: var(--input-bg);
}

/* Empty state */
.tcal-empty {
    padding: 36px 18px;
    border: 1px dashed var(--control-border);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    text-align: center;
    color: var(--text3);
}

/* ── Detail hero: ink frame body, dot + mono dates ── */
.tournament-detail-body {
    border: 2px solid var(--text);
    border-radius: 0;
    background: var(--input-bg);
}
.tournament-detail-image {
    border-radius: 0;
    border-color: var(--line);
}
.tour-detail-eyebrow-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}
/* Beat app.css `.tournament-detail-body .page-title` (sport-display uppercase) */
.tournament-detail-body .page-title.tour-detail-title {
    font-family: var(--font-display);
    font-size: clamp(1.9rem, 5vw, 2.8rem);
    font-weight: 700;
    letter-spacing: -0.03em;
    line-height: 0.98;
    text-transform: none;
}
.tour-detail-dates {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: 11px;
    letter-spacing: 0.08em;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
}

/* ── Sections as ink frames with eyebrow head bars ── */
.tournament-section.tour-frame {
    border: 2px solid var(--text);
    border-radius: 0;
    background: var(--input-bg);
    margin-bottom: 22px;
    overflow: hidden;
}
.tour-frame .tournament-section-head.tour-frame-head {
    margin: 0;
    padding: 12px 16px;
    border: 0;
    border-bottom: 1px solid var(--text);
    border-radius: 0;
    background: var(--bg2);
}
.tour-frame-head-copy { min-width: 0; }
.tour-frame-head-copy .tour-eyebrow { display: block; color: var(--text); }
.tour-frame-head-copy p {
    margin: 4px 0 0;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    line-height: 1.4;
    text-transform: none;
}
/* Section count: ink-on-ball pill */
.tour-frame .tournament-section-count {
    min-width: 30px;
    min-height: 24px;
    padding: 0 11px;
    border: 0;
    border-radius: 99px;
    background: var(--ball);
    color: var(--text-on-ball);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}
.tour-frame-body {
    padding: 14px 16px 16px;
}
.tour-frame-body > .pick-card { margin-bottom: 10px; }
.tour-frame-body > .pick-card:last-child { margin-bottom: 0; }
.tour-frame-body .tournament-profile-section {
    border-bottom: 0;
    padding-bottom: 0;
    margin-bottom: 0;
}

/* ── Summary KPI capsules (label top-left, mono value bottom-right) ── */
.tournament-detail-kpis .kpi-card.tour-kpi {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 14px;
    min-height: 104px;
    padding: 14px 16px 12px;
    border-radius: 24px;
    background: var(--bg2);
}
.tour-kpi::before { display: none; }
.tour-kpi:hover {
    border-color: var(--line);
    box-shadow: none;
}
.tour-kpi-label {
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text3);
    line-height: 1.35;
}
.tour-kpi-value {
    margin-top: auto;
    align-self: flex-end;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: clamp(1.45rem, 4.5vw, 1.85rem);
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1;
    color: var(--text);
}
.tour-kpi-value.kpi-positive { color: var(--success); }
.tour-kpi-value.kpi-negative { color: var(--error); }
.tour-kpi-value .tour-lock-ic {
    width: 18px;
    height: 18px;
    color: var(--text3);
}

/* ── VIP locked panel: light blur skeleton + padlock + pill CTA ── */
.tour-locked {
    position: relative;
    min-height: 196px;
}
.tour-locked--compact { min-height: 150px; }
.tour-locked-skeleton {
    display: flex;
    flex-direction: column;
    gap: 10px;
    filter: blur(3px);
    opacity: 0.75;
    pointer-events: none;
    user-select: none;
}
.tour-locked-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 14px;
    border: 1px solid var(--line);
    background: var(--bg2);
}
.tour-locked-bar {
    display: block;
    height: 11px;
    border-radius: 6px;
    background: rgba(var(--ink-rgb), 0.10);
}
.tour-locked-bar--dot {
    width: 10px;
    height: 10px;
    flex: 0 0 10px;
    border-radius: 0;
    background: rgba(var(--ink-rgb), 0.16);
}
.tour-locked-bar--lg { flex: 1 1 auto; }
.tour-locked-bar--sm { flex: 0 0 52px; }
.tour-locked-overlay {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
    background: linear-gradient(180deg, var(--lock-veil-0) 0%, var(--lock-veil-1) 62%);
}
.tour-locked-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 9px;
    text-align: center;
    max-width: 340px;
}
.tour-locked-lock {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border: 1.5px solid var(--text);
    border-radius: 50%;
    color: var(--text);
    background: var(--input-bg);
}
.tour-locked-lock .tour-lock-ic { width: 14px; height: 14px; }
.tour-locked-title {
    font-family: var(--font-display);
    font-size: 1rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--text);
}
.tour-locked-text {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--text2);
}
/* CTA stays the global ink-on-ball pill; just kill any cream glow */
.tour-locked-cta { min-width: 170px; }
.tour-locked-cta:hover {
    box-shadow: inset 0 1px 0 var(--sheen-edge);
    transform: none;
}

/* ── Mobile (PWA mobile-first) ── */
@media (max-width: 640px) {
    .tcal-head { flex-direction: column; align-items: flex-start; gap: 14px; }
    .tournament-count-card.tcal-count-capsule {
        flex-direction: row;
        align-items: center;
        min-height: 0;
        width: 100%;
        padding: 10px 16px;
    }
    .tcal-count-capsule span { align-self: center; font-size: 1.45rem; }
    .tcal-month-grid { grid-template-columns: 1fr; }
    .tcal-row { flex-wrap: wrap; }
    .tcal-id { flex-basis: calc(100% - 22px); }
    .tcal-cat { margin-left: 22px; }
    .tour-frame-body { padding: 12px 12px 14px; }
}

@media (prefers-reduced-motion: reduce) {
    .tcal-live-pulse { animation: none; }
    .tournament-card.tcal-card,
    .tcal-open,
    .tcal-sweep-rect,
    .tcal-open-arrow,
    .tcal-dates { transition: none; }
    /* Static fallback: the full surface frame appears instantly, no motion */
    .tournament-card.tcal-card:hover,
    .tournament-card.tcal-card:focus-within { transform: none; }
    .tournament-card.tcal-card:hover .tcal-row > .tcal-dot,
    .tournament-card.tcal-card:focus-within .tcal-row > .tcal-dot { animation: none; }
    .tournament-card.tcal-card:hover .tcal-open-arrow,
    .tournament-card.tcal-card:focus-within .tcal-open-arrow { transform: none; }
}
