/*
 * Shared editorial data-page system for FCT rankings, projections, and
 * transaction-impact pages.
 */

.ffn-data-page {
    position: relative;
    z-index: 1;
}

.ffn-data-page .ffn-pilot-shell {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

.ffn-data-page .ffn-pilot-hero {
    align-items: stretch;
    margin-bottom: 0;
}

.ffn-data-page .ffn-pilot-hero-main,
.ffn-data-page .ffn-pilot-hero-side,
.ffn-data-card,
.ffn-data-table-card,
.ffn-data-control-card,
.ffn-data-summary-card {
    border-radius: var(--ffn-ed-radius-card);
    border: 1px solid var(--ffn-ed-border-strong);
    background: var(--ffn-ed-surface);
    box-shadow: var(--ffn-ed-shadow-card);
}

.ffn-data-page .ffn-pilot-hero-main {
    padding: clamp(1.8rem, 4vw, 3rem);
}

.ffn-data-page .ffn-pilot-hero-side {
    padding: 1.5rem;
}

.ffn-data-title {
    font-size: clamp(2.8rem, 6.8vw, 5.8rem);
}

.ffn-data-hero-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.55rem;
    align-items: center;
    justify-content: flex-start;
}

.ffn-data-hero-actions .ffn-pilot-button {
    min-width: 0;
    min-height: var(--ffn-action-height, 2.9rem);
    padding: 0 var(--ffn-action-padding-x, 1rem);
    text-align: center;
    line-height: 1.2;
    white-space: nowrap;
    font-size: var(--ffn-action-font-size, 0.78rem);
}

/* Hero navigation link buttons (cross-page nav in hero) */
.ffn-hero-nav {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0.55rem;
    margin-top: 1.25rem;
}

.ffn-hero-nav-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    min-height: var(--ffn-action-height, 2.9rem);
    padding: 0 var(--ffn-action-padding-x, 1rem);
    border-radius: var(--ffn-ed-radius-pill, 999px);
    border: 1px solid var(--ffn-ed-border, rgba(7, 16, 31, 0.08));
    background: #ffffff;
    color: var(--ffn-ed-text-muted, #42516c);
    font-family: var(--ffn-ed-font-sans, var(--font-body));
    font-size: var(--ffn-action-font-size, 0.78rem);
    font-weight: var(--ffn-action-font-weight, 700);
    letter-spacing: var(--ffn-action-letter-spacing, 0.08em);
    line-height: 1.2;
    text-transform: uppercase;
    text-decoration: none;
    white-space: nowrap;
    box-shadow: none;
    transition: transform 0.2s ease, border-color 0.2s ease, background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;
}

.ffn-hero-nav-btn:hover {
    transform: translateY(-2px);
    border-color: rgba(0, 87, 255, 0.22);
    background: #f8fafc;
    color: var(--ffn-ed-text, #07101f);
    box-shadow: none;
}

.ffn-hero-nav-btn--primary {
    border-color: transparent;
    background: var(--ffn-ed-accent, #0057ff);
    color: #fff;
    box-shadow: 0 18px 48px rgba(0, 87, 255, 0.22);
}

.ffn-hero-nav-btn--primary:hover {
    background: #0047d5;
    color: #fff;
    box-shadow: 0 18px 48px rgba(0, 87, 255, 0.22);
}

.ffn-hero-nav-btn svg {
    width: 15px;
    height: 15px;
    flex-shrink: 0;
}

.ffn-hero-nav-btn .ext-icon {
    width: 12px;
    height: 12px;
    opacity: 0.55;
}

.ffn-data-hero-note {
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    margin-top: 1.3rem;
    padding: 0.65rem 0.9rem;
    border-radius: 1rem;
    background: var(--ffn-ed-surface);
    border: 1px solid rgba(7, 16, 31, 0.08);
    color: var(--ffn-ed-text-muted);
    font-size: 0.9rem;
    line-height: 1.5;
}

.ffn-data-hero-note strong {
    color: var(--ffn-ed-text);
}

.ffn-data-side-stack {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.ffn-data-side-note {
    padding: 1rem 1.05rem;
    border-radius: 1.1rem;
    border: 1px solid var(--ffn-ed-border);
    background: var(--ffn-ed-surface);
}

.ffn-data-side-note span {
    display: block;
    margin-bottom: 0.35rem;
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.ffn-data-side-note strong {
    display: block;
    color: var(--ffn-ed-text);
    font-size: 1rem;
    font-weight: 800;
    letter-spacing: -0.03em;
}

.ffn-data-side-note p {
    margin: 0.45rem 0 0;
    color: var(--ffn-ed-text-muted);
    font-size: 0.92rem;
    line-height: 1.55;
}

.ffn-data-summary-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.8rem;
}

.ffn-data-summary-card,
.summary-card,
.stat-card {
    padding: 0.9rem 1rem;
}

.ffn-data-summary-card span:first-child,
.summary-card .sc-label,
.stat-card .stat-label {
    display: block;
    margin-bottom: 0.3rem;
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.ffn-data-summary-card strong,
.summary-card .sc-value,
.stat-card .stat-value {
    display: block;
    color: var(--ffn-ed-text);
    font-size: clamp(1.1rem, 1.8vw, 1.7rem);
    font-weight: 900;
    letter-spacing: -0.05em;
    line-height: 1;
}

.ffn-data-summary-card p,
.summary-card .sc-sub,
.stat-card .stat-sub {
    margin: 0.3rem 0 0;
    color: var(--ffn-ed-text-muted);
    font-size: 0.8rem;
    line-height: 1.35;
}

.ffn-data-control-card {
    padding: 1.5rem;
}

.control-row {
    display: flex;
    align-items: flex-start;
    gap: 1rem;
    margin-bottom: 1rem;
}

.control-row > :not(.control-label) {
    min-width: 0;
}

.control-row:last-child {
    margin-bottom: 0;
}

.control-label {
    min-width: 6.2rem;
    padding-top: 0.65rem;
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.segment-strip,
.pill-strip {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
    align-items: center;
    width: 100%;
}

.ffn-toggle,
.segment-btn,
.pill-btn,
.toggle-btn,
.filter-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--ffn-action-height, 2.9rem);
    padding: 0 var(--ffn-action-padding-x, 1rem);
    border-radius: var(--ffn-ed-radius-pill, 999px);
    border: 1px solid var(--ffn-ed-border, rgba(7, 16, 31, 0.08));
    background: #ffffff;
    color: var(--ffn-ed-text-muted, #42516c);
    font-family: var(--ffn-ed-font-sans, var(--font-body));
    font-size: var(--ffn-action-font-size, 0.78rem);
    font-weight: var(--ffn-action-font-weight, 700);
    letter-spacing: var(--ffn-action-letter-spacing, 0.08em);
    line-height: 1.2;
    text-transform: uppercase;
    cursor: pointer;
    transition: var(--btn-transition);
}

.ffn-toggle:hover,
.segment-btn:hover,
.pill-btn:hover,
.toggle-btn:hover,
.filter-btn:hover {
    transform: translateY(-1px);
    border-color: rgba(0, 87, 255, 0.22);
    color: var(--ffn-ed-text, #07101f);
    background: var(--ffn-ed-surface-muted);
}

.ffn-toggle.active,
.segment-btn.active,
.pill-btn.active,
.toggle-btn.active,
.filter-btn.active {
    color: #ffffff;
    background: linear-gradient(135deg, #0057ff, #1b6fff);
    border-color: transparent;
    box-shadow: 0 18px 36px rgba(0, 87, 255, 0.18);
}

.ffn-toggle:disabled,
.segment-btn:disabled,
.pill-btn:disabled,
.toggle-btn:disabled,
.filter-btn:disabled {
    opacity: 0.55;
    cursor: default;
    transform: none;
    box-shadow: none;
}

.ffn-toggle:disabled:hover,
.segment-btn:disabled:hover,
.pill-btn:disabled:hover,
.toggle-btn:disabled:hover,
.filter-btn:disabled:hover {
    transform: none;
    border-color: rgba(7, 16, 31, 0.1);
    color: var(--ffn-ed-text-muted, #42516c);
    background: var(--ffn-ed-surface-muted);
}

.ffn-toggle.is-compact,
.filter-btn {
    min-height: var(--ffn-action-height, 2.9rem);
    padding: 0 0.95rem;
}

.search-wrap {
    flex: 1 1 auto;
    min-width: 0;
    position: relative;
    width: 100%;
}

.search-icon {
    position: absolute;
    top: 50%;
    left: 1rem;
    width: 1rem;
    height: 1rem;
    transform: translateY(-50%);
    color: var(--ffn-ed-text-soft);
    pointer-events: none;
}

.search-input {
    box-sizing: border-box;
    display: block;
    max-width: 100%;
    width: 100%;
    min-height: 3rem;
    padding: 0.9rem 1rem 0.9rem 2.85rem;
    border-radius: 1rem;
    border: 1px solid rgba(7, 16, 31, 0.1);
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.98rem;
    font-weight: 600;
    outline: none;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}

.search-input::placeholder {
    color: var(--ffn-ed-text-soft);
    font-weight: 500;
}

.search-input:focus {
    border-color: rgba(0, 87, 255, 0.28);
    background: var(--ffn-ed-surface);
    box-shadow: 0 0 0 0.25rem rgba(0, 87, 255, 0.08);
}

.ffn-data-select {
    width: 100%;
    min-height: 3rem;
    padding: 0.9rem 2.8rem 0.9rem 1rem;
    border-radius: 1rem;
    border: 1px solid rgba(7, 16, 31, 0.1);
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.98rem;
    font-weight: 600;
    appearance: none;
    outline: none;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}

.ffn-data-select:focus {
    border-color: rgba(0, 87, 255, 0.28);
    background: var(--ffn-ed-surface);
    box-shadow: 0 0 0 0.25rem rgba(0, 87, 255, 0.08);
}

.ffn-data-input {
    width: 100%;
    min-height: 3rem;
    padding: 0.9rem 1rem;
    border-radius: 1rem;
    border: 1px solid rgba(7, 16, 31, 0.1);
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.98rem;
    font-weight: 600;
    outline: none;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}

.ffn-data-input:focus {
    border-color: rgba(0, 87, 255, 0.28);
    background: var(--ffn-ed-surface);
    box-shadow: 0 0 0 0.25rem rgba(0, 87, 255, 0.08);
}

.ffn-data-select-wrap {
    position: relative;
    width: 100%;
}

.ffn-data-select-wrap::after {
    content: "";
    position: absolute;
    top: 50%;
    right: 1rem;
    width: 0.65rem;
    height: 0.65rem;
    border-right: 2px solid var(--ffn-ed-text-soft);
    border-bottom: 2px solid var(--ffn-ed-text-soft);
    transform: translateY(-70%) rotate(45deg);
    pointer-events: none;
}

.ffn-data-inline-meta {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 0.75rem;
    margin-top: 1rem;
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
}

.ffn-data-inline-meta strong {
    color: var(--ffn-ed-text);
}

.ffn-data-table-card {
    padding: 1.15rem;
}

.ffn-data-notice-banner {
    padding: 1rem 1.1rem;
    border-radius: 1rem;
    border: 1px solid rgba(0, 87, 255, 0.14);
    background: linear-gradient(135deg, rgba(239, 246, 255, 0.92), rgba(219, 234, 254, 0.7));
    color: #1e3a8a;
    font-size: 0.95rem;
    font-weight: 600;
    line-height: 1.55;
}

.ffn-data-notice-banner strong {
    color: #102b6a;
}

.ffn-data-table-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.9rem;
}

.ffn-data-table-head strong {
    display: block;
    color: var(--ffn-ed-text);
    font-size: 1rem;
    font-weight: 800;
    letter-spacing: -0.03em;
}

.ffn-data-table-head span,
.proj-player-count,
.ffn-board-count,
.results-info {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
}

.proj-player-count,
.results-info {
    margin-bottom: 0.9rem;
}

.ffn-page-headline {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.55rem 1.25rem;
    margin: 0.25rem 0 1.2rem;
    padding: 0;
    background: transparent;
    border: none;
    box-shadow: none;
}

.ffn-page-headline-text {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    flex: 1 1 26rem;
    min-width: 0;
}

.ffn-page-headline-title {
    margin: 0;
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-sans);
    font-size: clamp(2.4rem, 5vw, 4rem);
    font-weight: 900;
    line-height: 0.9;
    letter-spacing: -0.05em;
    text-transform: uppercase;
}

.ffn-page-headline-sub {
    margin: 0;
    max-width: 42rem;
    color: var(--ffn-ed-text-muted);
    font-size: 0.95rem;
    font-weight: 500;
    line-height: 1.5;
}

.ffn-title-nerd {
    width: clamp(6.6rem, 12.5vw, 10rem);
    aspect-ratio: 1;
    flex: 0 0 auto;
    object-fit: contain;
    filter: drop-shadow(0 16px 24px rgba(7, 16, 31, 0.12));
}

.ffn-title-nerd-cluster {
    display: flex;
    align-items: flex-start;
    justify-content: flex-end;
    gap: clamp(0.25rem, 1vw, 0.7rem);
    flex: 0 1 auto;
    min-width: min(100%, 14rem);
}

.ffn-title-nerd-cluster .ffn-title-nerd {
    width: clamp(6.6rem, 12.5vw, 10rem);
}

.ffn-title-nerd-cluster .ffn-title-nerd:nth-child(even) {
    transform: translateY(0.35rem);
}

.ffn-page-nerd-cluster {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.65rem;
}

.ffn-page-nerd-cluster img,
.ffn-panel-nerd {
    width: clamp(4.5rem, 8.75vw, 6.5rem);
    aspect-ratio: 4 / 5;
    flex: 0 0 auto;
    object-fit: contain;
    pointer-events: none;
    filter: drop-shadow(0 12px 18px rgba(7, 16, 31, 0.1));
}

.ffn-page-nerd-cluster img:nth-child(even) {
    transform: translateY(0.25rem);
}

.ac-nerd-cluster {
    justify-content: flex-end;
    margin: -0.35rem 0 1rem;
}

.ac-panel-nerd,
.dy-panel-nerd {
    display: block;
    margin: 0.75rem 0 0 auto;
}

.dc-nerd-cluster {
    justify-content: flex-end;
    margin-left: auto;
}

.dc-nerd-cluster img {
    width: clamp(3.9rem, 7.5vw, 5.75rem);
}

.ffn-title-nerd[loading="lazy"],
.ffn-page-nerd-cluster img[loading="lazy"],
.ffn-panel-nerd[loading="lazy"] {
    opacity: 1;
}

.ffn-page-headline-nav {
    margin-top: 0;
}

@media (max-width: 768px) {
    .ffn-title-nerd {
        width: 6rem;
        margin-left: auto;
    }

    .ffn-title-nerd-cluster {
        margin-left: auto;
        min-width: 0;
    }

    .ffn-page-headline-nav {
        display: none;
    }

    .ac-nerd-cluster,
    .dc-nerd-cluster {
        justify-content: flex-start;
        margin-left: 0;
    }
}

@media (max-width: 560px) {
    .ffn-title-nerd {
        display: block;
        width: 4.2rem;
        margin-left: 0;
    }

    .ffn-title-nerd-cluster {
        width: 100%;
        justify-content: flex-start;
        gap: 0.3rem;
    }

    .ffn-page-nerd-cluster img,
    .ffn-panel-nerd {
        width: 4.1rem;
    }
}

.ffn-data-page--minimal .pill-strip {
    flex-wrap: wrap;
}

.ffn-data-page--minimal .ffn-data-control-card {
    border: none;
    background: transparent;
    box-shadow: none;
    border-top: 1px solid var(--ffn-ed-border);
    border-bottom: 1px solid var(--ffn-ed-border);
    border-radius: 0;
    padding: 0.4rem 0;
}

.ffn-data-page--minimal .ffn-data-control-card .control-row {
    align-items: center;
    gap: 1.1rem;
    margin: 0;
    padding: 0.7rem 0;
    border-top: 1px solid var(--ffn-ed-border);
}

.ffn-data-page--minimal .ffn-data-control-card .control-row:first-child {
    border-top: none;
}

.ffn-data-page--minimal .ffn-data-control-card .control-label {
    padding-top: 0;
    align-self: center;
}

@media (max-width: 768px) {
    .ffn-data-page--minimal .ffn-data-control-card .control-row {
        align-items: flex-start;
        gap: 0.55rem;
    }
}

.ffn-data-page--rankings .ffn-data-control-card .control-row,
.ffn-data-page--projections .ffn-data-control-card .control-row {
    display: grid;
    grid-template-columns: 5.4rem minmax(0, 1fr);
    gap: 0.85rem;
    padding: 0.62rem 0;
}

.ffn-data-page--rankings .ffn-data-control-card .control-label,
.ffn-data-page--projections .ffn-data-control-card .control-label {
    color: var(--ffn-ed-text-soft);
    font-size: 0.66rem;
    letter-spacing: 0.12em;
}

.ffn-data-page--rankings .segment-strip,
.ffn-data-page--projections .segment-strip {
    display: inline-grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0;
    width: min(100%, 27rem);
    padding: 0.24rem;
    border: 1px solid rgba(7, 16, 31, 0.08);
    border-radius: 999px;
    background: var(--ffn-ed-surface);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.72);
}

.ffn-data-page--rankings .segment-strip .ffn-toggle,
.ffn-data-page--projections .segment-strip .ffn-toggle {
    min-height: var(--ffn-action-height, 2.9rem);
    padding: 0 var(--ffn-action-padding-x, 1rem);
    border: 0;
    border-radius: 999px;
    background: transparent;
    box-shadow: none;
    color: var(--ffn-ed-text-muted);
    font-size: var(--ffn-action-font-size, 0.78rem);
    letter-spacing: var(--ffn-action-letter-spacing, 0.08em);
    text-transform: uppercase;
    white-space: nowrap;
}

.ffn-data-page--rankings .pill-strip,
.ffn-data-page--projections .pill-strip {
    gap: 0.38rem;
}

.ffn-data-page--rankings .pill-strip .ffn-toggle,
.ffn-data-page--projections .pill-strip .ffn-toggle {
    min-height: var(--ffn-action-height, 2.9rem);
    padding: 0 var(--ffn-action-padding-x, 1rem);
    border-radius: var(--ffn-ed-radius-pill, 999px);
    border-color: rgba(7, 16, 31, 0.08);
    background: var(--ffn-ed-surface);
    box-shadow: none;
    color: var(--ffn-ed-text-muted);
    font-size: var(--ffn-action-font-size, 0.78rem);
    letter-spacing: var(--ffn-action-letter-spacing, 0.08em);
    text-transform: uppercase;
}

.ffn-data-page--rankings .segment-strip .ffn-toggle:hover,
.ffn-data-page--rankings .pill-strip .ffn-toggle:hover,
.ffn-data-page--projections .segment-strip .ffn-toggle:hover,
.ffn-data-page--projections .pill-strip .ffn-toggle:hover {
    transform: none;
    border-color: rgba(0, 87, 255, 0.18);
    background: var(--ffn-ed-surface-muted);
    color: var(--ffn-ed-text);
}

.ffn-data-page--rankings .segment-strip .ffn-toggle.active,
.ffn-data-page--rankings .pill-strip .ffn-toggle.active,
.ffn-data-page--projections .segment-strip .ffn-toggle.active,
.ffn-data-page--projections .pill-strip .ffn-toggle.active {
    border-color: transparent;
    background: #0057ff;
    color: #ffffff;
    box-shadow: 0 8px 20px rgba(0, 87, 255, 0.18);
}

html[data-theme="dark"] .ffn-data-page--rankings .segment-strip,
html[data-theme="dark"] .ffn-data-page--projections .segment-strip {
    border-color: rgba(255, 255, 255, 0.1);
    background: rgba(7, 16, 31, 0.62);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
}

html[data-theme="dark"] .ffn-data-page--rankings .segment-strip .ffn-toggle,
html[data-theme="dark"] .ffn-data-page--rankings .pill-strip .ffn-toggle,
html[data-theme="dark"] .ffn-data-page--projections .segment-strip .ffn-toggle,
html[data-theme="dark"] .ffn-data-page--projections .pill-strip .ffn-toggle {
    border-color: rgba(255, 255, 255, 0.08);
    background: transparent;
    color: var(--ffn-ed-text-muted);
}

html[data-theme="dark"] .ffn-data-page--rankings .pill-strip .ffn-toggle,
html[data-theme="dark"] .ffn-data-page--projections .pill-strip .ffn-toggle {
    background: rgba(11, 22, 37, 0.72);
}

html[data-theme="dark"] .ffn-data-page--rankings .segment-strip .ffn-toggle:hover,
html[data-theme="dark"] .ffn-data-page--rankings .pill-strip .ffn-toggle:hover,
html[data-theme="dark"] .ffn-data-page--projections .segment-strip .ffn-toggle:hover,
html[data-theme="dark"] .ffn-data-page--projections .pill-strip .ffn-toggle:hover {
    border-color: rgba(99, 180, 255, 0.28);
    background: rgba(16, 30, 49, 0.96);
    color: var(--ffn-ed-text);
}

html[data-theme="dark"] .ffn-data-page--rankings .segment-strip .ffn-toggle.active,
html[data-theme="dark"] .ffn-data-page--rankings .pill-strip .ffn-toggle.active,
html[data-theme="dark"] .ffn-data-page--projections .segment-strip .ffn-toggle.active,
html[data-theme="dark"] .ffn-data-page--projections .pill-strip .ffn-toggle.active {
    background: #63b4ff;
    color: #041019;
    box-shadow: 0 8px 20px rgba(99, 180, 255, 0.18);
}

@media (max-width: 768px) {
    .ffn-data-page--rankings .ffn-data-control-card .control-row,
    .ffn-data-page--projections .ffn-data-control-card .control-row {
        grid-template-columns: 1fr;
        gap: 0.42rem;
    }

    .ffn-data-page--rankings .segment-strip,
    .ffn-data-page--projections .segment-strip {
        width: 100%;
    }

    .ffn-data-page--rankings .ffn-data-control-card .control-row:nth-child(2) .pill-strip,
    .ffn-data-page--projections .ffn-data-control-card .control-row:nth-child(2) .pill-strip {
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 0.36rem;
    }

    .ffn-data-page--rankings .ffn-data-control-card .control-row:nth-child(2) .pill-strip .ffn-toggle,
    .ffn-data-page--projections .ffn-data-control-card .control-row:nth-child(2) .pill-strip .ffn-toggle {
        width: 100%;
        min-width: 0;
        padding: 0 0.35rem;
    }
}

/* Unified projection board: stats + filters + table share one visual rhythm */
.ffn-data-page--minimal .ffn-pilot-section {
    margin-top: 0;
}

.ffn-data-page--minimal .ffn-stat-strip {
    margin-bottom: 0;
}

.ffn-data-page--minimal .ffn-data-control-card {
    border-top: none;
    border-radius: 0;
}

.ffn-data-page--minimal .ffn-data-table-card {
    border: none;
    background: transparent;
    box-shadow: none;
    border-radius: 0;
    padding: 0;
}

.ffn-data-page--rankings .ffn-pilot-shell,
.ffn-data-page--projections .ffn-pilot-shell,
.ffn-data-page--transactions .ffn-pilot-shell,
.ffn-data-page--injuries .ffn-pilot-shell,
.ffn-data-page--coaches .ffn-pilot-shell,
.ffn-tool-page--news .ffn-pilot-shell,
.ffn-data-page--schedule .ffn-pilot-shell,
.ffn-data-page--byes .ffn-pilot-shell,
.ffn-data-page--weather .ffn-pilot-shell,
.ffn-data-page--odds .ffn-pilot-shell,
.ffn-tool-page--academy .ffn-pilot-shell,
.ffn-tool-page--dynasty .ffn-pilot-shell,
.ffn-tool-page--depth .ffn-pilot-shell {
    gap: clamp(0.65rem, 1.2vw, 0.9rem);
}

.ffn-data-page--rankings .ffn-page-headline,
.ffn-data-page--projections .ffn-page-headline,
.ffn-data-page--transactions .ffn-page-headline,
.ffn-data-page--injuries .ffn-page-headline,
.ffn-data-page--coaches .ffn-page-headline,
.ffn-tool-page--news .ffn-page-headline,
.ffn-data-page--schedule .ffn-page-headline,
.ffn-data-page--byes .ffn-page-headline,
.ffn-data-page--weather .ffn-page-headline,
.ffn-data-page--odds .ffn-page-headline,
.ffn-tool-page--academy .ffn-page-headline,
.ffn-tool-page--dynasty .ffn-page-headline,
.ffn-tool-page--depth .ffn-page-headline {
    align-items: center;
    margin-bottom: 0;
}

.ffn-data-page--rankings .ffn-page-headline-text,
.ffn-data-page--projections .ffn-page-headline-text,
.ffn-data-page--transactions .ffn-page-headline-text,
.ffn-data-page--injuries .ffn-page-headline-text,
.ffn-data-page--coaches .ffn-page-headline-text,
.ffn-tool-page--news .ffn-page-headline-text,
.ffn-data-page--schedule .ffn-page-headline-text,
.ffn-data-page--byes .ffn-page-headline-text,
.ffn-data-page--weather .ffn-page-headline-text,
.ffn-data-page--odds .ffn-page-headline-text,
.ffn-tool-page--academy .ffn-page-headline-text,
.ffn-tool-page--dynasty .ffn-page-headline-text,
.ffn-tool-page--depth .ffn-page-headline-text {
    gap: 0.25rem;
}

.ffn-data-page--transactions .ffn-pilot-section,
.ffn-data-page--injuries .ffn-pilot-section,
.ffn-data-page--coaches .ffn-pilot-section,
.ffn-tool-page--news .ffn-pilot-section,
.ffn-data-page--schedule .ffn-pilot-section,
.ffn-data-page--byes .ffn-pilot-section,
.ffn-data-page--weather .ffn-pilot-section,
.ffn-data-page--odds .ffn-pilot-section,
.ffn-tool-page--dynasty .ffn-pilot-section {
    margin-top: 0;
}

.ffn-tool-page--academy .ac-track-shell {
    padding-top: 0;
}

.ffn-tool-page--depth#depth-chart-main {
    padding-top: 0 !important;
}

.ffn-tool-page--depth .dc-shell {
    margin-top: 0;
}

.ffn-data-page--minimal .ffn-board-toolbar {
    margin: 0;
    padding: 0.9rem 0;
    border-bottom: 1px solid var(--ffn-ed-border);
}

.ffn-data-page--minimal .proj-table-wrap,
.ffn-data-page--minimal .rankings-table-wrap {
    padding-top: 0.5rem;
}

.ffn-stat-strip {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    align-items: stretch;
    margin: 0;
    padding: 0.4rem 0;
    border-top: 1px solid var(--ffn-ed-border);
    border-bottom: 1px solid var(--ffn-ed-border);
    background: transparent;
}

.ffn-stat-strip-item {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    padding: 0.7rem 1.1rem;
    min-width: 0;
    border-left: 1px solid var(--ffn-ed-border);
}

.ffn-stat-strip-item:first-child {
    border-left: none;
    padding-left: 0;
}

.ffn-stat-strip-label {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.66rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.ffn-stat-strip-value {
    color: var(--ffn-ed-text);
    font-size: clamp(1.4rem, 2.4vw, 1.9rem);
    font-weight: 900;
    line-height: 1;
    letter-spacing: -0.03em;
}

.ffn-stat-strip-sub {
    color: var(--ffn-ed-text-muted);
    font-size: 0.78rem;
    font-weight: 500;
    line-height: 1.3;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 768px) {
    .ffn-stat-strip {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .ffn-stat-strip-item {
        padding: 0.7rem 0.85rem;
    }
    .ffn-stat-strip-item:first-child,
    .ffn-stat-strip-item:nth-child(3) {
        border-left: none;
        padding-left: 0;
    }
    .ffn-stat-strip-item:nth-child(3),
    .ffn-stat-strip-item:nth-child(4) {
        border-top: 1px solid var(--ffn-ed-border);
        margin-top: 0.4rem;
        padding-top: 0.9rem;
    }
}

@media (max-width: 768px) {
    .ffn-data-page--minimal .pill-strip {
        flex-wrap: wrap;
        overflow-x: visible;
    }
}

.ffn-board-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.9rem;
    margin-bottom: 0.9rem;
}

.ffn-board-toolbar .proj-player-count,
.ffn-board-toolbar .results-info,
.ffn-board-toolbar .ffn-board-count {
    margin-bottom: 0;
    flex-shrink: 0;
}

.ffn-board-actions {
    display: inline-flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.65rem;
    min-width: 0;
}

.ffn-copy-ai-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.42rem;
    min-height: var(--ffn-action-height, 2.9rem);
    padding: 0 var(--ffn-action-padding-x, 1rem);
    border: 1px solid rgba(7, 16, 31, 0.11);
    border-radius: 999px;
    background: #ffffff;
    color: var(--ffn-ed-text-muted);
    font-family: var(--ffn-ed-font-sans);
    font-size: var(--ffn-action-font-size, 0.78rem);
    font-weight: var(--ffn-action-font-weight, 700);
    letter-spacing: var(--ffn-action-letter-spacing, 0.08em);
    line-height: 1.2;
    text-transform: uppercase;
    white-space: nowrap;
    cursor: pointer;
    box-shadow: none;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}

.ffn-copy-ai-btn svg {
    width: 0.88rem;
    height: 0.88rem;
    flex: 0 0 auto;
    fill: none;
    stroke: currentColor;
    stroke-width: 2.2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.ffn-copy-ai-btn:hover,
.ffn-copy-ai-btn:focus-visible {
    border-color: rgba(0, 87, 255, 0.28);
    background: #f8fafc;
    color: var(--ffn-ed-text);
    transform: translateY(-2px);
    outline: none;
}

.ffn-copy-ai-btn.is-copied {
    border-color: rgba(15, 118, 110, 0.24);
    background: rgba(20, 184, 166, 0.12);
    color: #0f766e;
}

html[data-theme="dark"] .ffn-copy-ai-btn {
    border-color: rgba(255, 255, 255, 0.1);
    background: rgba(11, 22, 37, 0.78);
    color: var(--ffn-ed-text);
}

html[data-theme="dark"] .ffn-copy-ai-btn:hover,
html[data-theme="dark"] .ffn-copy-ai-btn:focus-visible {
    border-color: rgba(99, 180, 255, 0.32);
    background: rgba(16, 30, 49, 0.96);
    color: #63b4ff;
}

html[data-theme="dark"] .ffn-copy-ai-btn.is-copied {
    border-color: rgba(45, 212, 191, 0.28);
    background: rgba(20, 184, 166, 0.16);
    color: #5eead4;
}

.ffn-board-search {
    position: relative;
    flex: 1 1 auto;
    min-width: 0;
    max-width: 22rem;
}

.ffn-board-search-icon {
    position: absolute;
    top: 50%;
    left: 0.75rem;
    width: 0.95rem;
    height: 0.95rem;
    transform: translateY(-50%);
    color: var(--ffn-ed-text-soft);
    pointer-events: none;
}

.ffn-board-search-input {
    box-sizing: border-box;
    width: 100%;
    height: 2.25rem;
    padding: 0 0.75rem 0 2.1rem;
    border-radius: 999px;
    border: 1px solid rgba(7, 16, 31, 0.1);
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.85rem;
    font-weight: 500;
    outline: none;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}

.ffn-board-search-input::placeholder {
    color: var(--ffn-ed-text-soft);
    font-weight: 500;
}

.ffn-board-search-input:focus {
    border-color: rgba(0, 87, 255, 0.32);
    background: var(--ffn-ed-surface);
    box-shadow: 0 0 0 0.22rem rgba(0, 87, 255, 0.1);
}

@media (max-width: 640px) {
    .ffn-board-toolbar {
        flex-direction: column;
        align-items: stretch;
        gap: 0.55rem;
    }
    .ffn-board-search {
        max-width: none;
    }
    .ffn-board-actions {
        width: 100%;
        justify-content: space-between;
    }
    .ffn-copy-ai-btn {
        min-width: 8rem;
    }
}

.ffn-data-page--schedule .ffn-page-headline-title,
.ffn-data-page--byes .ffn-page-headline-title {
    font-size: 3.1rem;
    line-height: 1;
    letter-spacing: 0;
}

.ffn-data-page--schedule .ffn-page-headline-sub,
.ffn-data-page--byes .ffn-page-headline-sub {
    max-width: 50rem;
    font-size: 1.06rem;
    line-height: 1.55;
}

.ffn-data-page--schedule .ffn-title-nerd,
.ffn-data-page--byes .ffn-title-nerd {
    width: 8.4rem;
}

.ffn-data-page--schedule .schedule-control-card {
    padding: 0.75rem 0 0.8rem;
}

.ffn-data-page--schedule .schedule-control-grid {
    display: grid;
    grid-template-columns:
        minmax(14.5rem, 1.15fr)
        minmax(19rem, 1.2fr)
        minmax(7.5rem, 0.75fr)
        minmax(10rem, 0.9fr)
        minmax(10.5rem, 0.95fr)
        minmax(8rem, 0.65fr);
    gap: 0.65rem 0.75rem;
    align-items: end;
}

.ffn-data-page--schedule .schedule-control-grid .control-row {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.35rem;
    min-width: 0;
    margin: 0;
    padding: 0;
    border-top: none;
}

.ffn-data-page--schedule .schedule-control-grid .control-label {
    min-width: 0;
    padding: 0;
    color: var(--ffn-ed-text-soft);
    font-size: 0.75rem;
    letter-spacing: 0;
}

.ffn-data-page--schedule .schedule-control-grid .segment-strip {
    flex-wrap: nowrap;
    gap: 0.45rem;
    overflow-x: auto;
    padding-bottom: 0;
    scrollbar-width: none;
}

.ffn-data-page--schedule .schedule-control-grid .segment-strip::-webkit-scrollbar {
    display: none;
}

.ffn-data-page--schedule .schedule-control-grid .ffn-toggle,
.ffn-data-page--schedule .schedule-control-grid .ffn-data-select,
.ffn-data-page--schedule .schedule-control-grid .schedule-bye-link,
.ffn-data-page--schedule .schedule-search-input {
    min-height: 2.45rem;
    height: 2.45rem;
    border-radius: 0.5rem;
    font-size: 0.96rem;
    font-weight: 700;
    line-height: 1.2;
}

.ffn-data-page--schedule .schedule-control-grid .ffn-data-select,
.ffn-data-page--schedule .schedule-search-input,
.ffn-data-page--schedule .schedule-bye-link {
    box-sizing: border-box;
    width: 100%;
}

.ffn-data-page--schedule .schedule-control-grid .ffn-toggle {
    flex: 1 1 0;
    min-width: max-content;
    padding: 0 0.75rem;
    white-space: nowrap;
}

.ffn-data-page--schedule .schedule-control-grid .ffn-data-select {
    display: block;
    padding: 0 2.35rem 0 0.75rem;
}

.ffn-data-page--schedule .schedule-bye-link {
    min-width: 0;
    text-decoration: none;
    white-space: nowrap;
}

.ffn-data-page--schedule .schedule-tool-links {
    display: flex;
    flex-wrap: nowrap;
    gap: 0.45rem;
    min-width: 0;
}

.ffn-data-page--schedule .schedule-tool-links a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 1 1 0;
    min-width: max-content;
    min-height: 2.45rem;
    border-radius: 0.5rem;
    background: rgba(0, 87, 255, 0.1);
    color: #003fba;
    font-size: 0.96rem;
    font-weight: 900;
    text-decoration: none;
}

.ffn-data-page--schedule .schedule-board-search {
    width: 100%;
    max-width: none;
}

.ffn-data-page--schedule .schedule-search-input {
    padding-left: 2.1rem;
    padding-top: 0;
    padding-bottom: 0;
}

.ffn-data-page--schedule .schedule-control-card .ffn-data-notice-banner {
    margin-top: 0.75rem;
    padding: 0.75rem 0.85rem;
    border-radius: 0.5rem;
    font-size: 1rem;
}

.ffn-data-page--schedule .schedule-control-card .ffn-data-inline-meta {
    margin-top: 0.55rem;
    font-size: 0.76rem;
    letter-spacing: 0;
}

.ffn-data-page--byes .bye-control-card {
    padding: 0.75rem 0 0.8rem;
}

.ffn-data-page--byes .bye-control-grid {
    display: grid;
    grid-template-columns: minmax(16rem, 1fr) minmax(14rem, 0.75fr);
    gap: 0.65rem 0.75rem;
    align-items: end;
}

.ffn-data-page--byes .bye-control-grid .control-row {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.35rem;
    min-width: 0;
    margin: 0;
    padding: 0;
    border-top: none;
}

.ffn-data-page--byes .bye-control-grid .control-label {
    min-width: 0;
    padding: 0;
    color: var(--ffn-ed-text-soft);
    font-size: 0.75rem;
    letter-spacing: 0;
}

.ffn-data-page--byes .bye-board-search {
    width: 100%;
    max-width: none;
}

.ffn-data-page--byes .bye-search-input {
    min-height: 2.45rem;
    height: 2.45rem;
    border-radius: 0.5rem;
    padding-left: 2.1rem;
    font-size: 0.96rem;
    font-weight: 700;
}

.ffn-data-page--byes .bye-page-links {
    display: flex;
    flex-wrap: nowrap;
    gap: 0.45rem;
    min-width: 0;
}

.ffn-data-page--byes .bye-page-links a {
    flex: 1 1 0;
    min-width: max-content;
    min-height: 2.45rem;
    border-radius: 0.5rem;
    font-size: 0.96rem;
}

@media (max-width: 1480px) {
    .ffn-data-page--schedule .schedule-control-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

@media (max-width: 760px) {
    .ffn-data-page--schedule .ffn-page-headline-title,
    .ffn-data-page--byes .ffn-page-headline-title {
        font-size: 2.6rem;
    }

    .ffn-data-page--schedule .ffn-title-nerd,
    .ffn-data-page--byes .ffn-title-nerd {
        width: 5.4rem;
    }

    .ffn-data-page--schedule .schedule-control-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .ffn-data-page--schedule .schedule-search-row {
        grid-column: 1 / -1;
    }

    .ffn-data-page--byes .bye-control-grid {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 560px) {
    .ffn-data-page--schedule .ffn-page-headline-title,
    .ffn-data-page--byes .ffn-page-headline-title {
        font-size: 2.25rem;
    }

    .ffn-data-page--schedule .ffn-page-headline-sub,
    .ffn-data-page--byes .ffn-page-headline-sub {
        font-size: 1rem;
    }

    .ffn-data-page--schedule .schedule-control-grid {
        grid-template-columns: 1fr;
    }
}

.rankings-table-wrap,
.proj-table-wrap,
.contracts-table-wrap {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
    scrollbar-color: rgba(7, 16, 31, 0.18) transparent;
}

.ffn-board-method-note {
    margin: 0.1rem 0 0.8rem;
    color: #64748b;
    font-size: 0.78rem;
    line-height: 1.45;
}

.ffn-board-method-note strong {
    color: #334155;
}

.rankings-table-wrap::-webkit-scrollbar,
.proj-table-wrap::-webkit-scrollbar,
.contracts-table-wrap::-webkit-scrollbar {
    height: 0.45rem;
}

.rankings-table-wrap::-webkit-scrollbar-thumb,
.proj-table-wrap::-webkit-scrollbar-thumb,
.contracts-table-wrap::-webkit-scrollbar-thumb {
    background: rgba(7, 16, 31, 0.18);
    border-radius: 999px;
}

.rankings-table,
.proj-table,
.contracts-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    background: var(--ffn-ed-surface);
    border: 1px solid var(--ffn-ed-border);
    border-radius: 1rem;
    overflow: hidden;
    font-variant-numeric: tabular-nums;
    /* Light header shared by every board; dark theme redefines it. */
    --ffn-table-head: #f4f7fc;
    --ffn-table-row-hover: rgba(0, 87, 255, 0.045);
}

.rankings-table,
.proj-table {
    min-width: 760px;
}

.ffn-data-page--projections .proj-table {
    min-width: 1160px;
    table-layout: fixed;
}

.ffn-data-page--projections .proj-table th,
.ffn-data-page--projections .proj-table td {
    box-sizing: border-box;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
}

.ffn-data-page--projections .proj-table th {
    font-size: 0.64rem;
    letter-spacing: 0.06em;
}

.ffn-data-page--projections .proj-table td {
    font-size: 0.9rem;
}

.ffn-data-page--projections .proj-table th:nth-child(2),
.ffn-data-page--projections .proj-table .player-name-cell {
    width: 190px;
    min-width: 190px;
}

.ffn-data-page--projections .proj-table .player-name-cell {
    overflow-wrap: break-word;
    word-break: normal;
}

.contracts-table {
    min-width: 1160px;
}

.rankings-table th,
.proj-table th,
.contracts-table th {
    position: sticky;
    top: 0;
    z-index: 2;
    padding: 0.8rem 0.85rem;
    background: var(--ffn-table-head);
    border-bottom: 1px solid var(--ffn-ed-border-strong);
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.66rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    white-space: nowrap;
    text-align: left;
}

.rankings-table th[data-sort],
.proj-table th[data-sort],
.contracts-table th[data-sort] {
    cursor: pointer;
    transition: color 0.18s ease;
}

.rankings-table th[data-sort]:hover,
.proj-table th[data-sort]:hover,
.contracts-table th[data-sort]:hover,
.rankings-table th.sort-active,
.proj-table th.sort-active,
.contracts-table th.sort-active {
    color: var(--ffn-ed-accent);
}

.rankings-table td,
.proj-table td,
.contracts-table td {
    padding: 0.72rem 0.85rem;
    border-bottom: 1px solid var(--ffn-ed-border);
    color: var(--ffn-ed-text-muted);
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.92rem;
    line-height: 1.35;
    background: transparent;
    vertical-align: middle;
    overflow-wrap: anywhere;
}

.rankings-table tbody tr:last-child td,
.proj-table tbody tr:last-child td,
.contracts-table tbody tr:last-child td {
    border-bottom: 0;
}

/* Data bar under the key number (set --bar: 0..1 on the cell); grows from the right, where the number sits. */
td.ffn-cell-bar {
    background-image: linear-gradient(to left, rgba(0, 87, 255, 0.42) calc(var(--bar, 0) * 100%), rgba(7, 16, 31, 0.06) 0) !important;
    background-repeat: no-repeat;
    background-size: calc(100% - 1.7rem) 3px;
    background-position: right 0.85rem bottom 0.38rem;
}

html[data-theme="dark"] td.ffn-cell-bar {
    background-image: linear-gradient(to left, rgba(99, 180, 255, 0.55) calc(var(--bar, 0) * 100%), rgba(148, 168, 198, 0.1) 0) !important;
}

.player-row {
    cursor: pointer;
    outline: none;
    transition: box-shadow 0.18s ease;
}

.player-row td {
    transition: background-color 0.18s ease, color 0.18s ease;
}

.rankings-table tbody tr:hover td,
.proj-table tbody tr:hover td,
.contracts-table tbody tr:hover td,
.player-row:focus-visible td {
    background-color: var(--ffn-table-row-hover);
}

/* Team identity: thin team-color edge on the first cell plus a team-colored name. */
.player-row.has-team-tint td:first-child {
    box-shadow: inset 3px 0 0 var(--ffn-row-team-color);
}

.player-row:not(.has-team-tint):hover td:first-child,
.player-row:not(.has-team-tint):focus-visible td:first-child {
    box-shadow: inset 3px 0 0 var(--ffn-ed-accent);
}

.player-row:hover .player-name-cell {
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 0.2em;
}

.player-row:focus-visible {
    box-shadow: inset 0 0 0 2px rgba(0, 87, 255, 0.16);
}

.player-name-cell {
    color: var(--ffn-ed-text) !important;
    font-weight: 700 !important;
}

.has-team-tint .player-name-cell {
    color: var(--ffn-team-ink, var(--ffn-ed-text)) !important;
}

.player-name {
    text-align: left !important;
    color: var(--ffn-ed-text);
    font-weight: 700;
}

.player-name a {
    color: inherit;
    text-decoration: none;
}

/* ---- Rankings table professional styles ---- */

.rankings-table {
    font-variant-numeric: tabular-nums;
}

.rankings-table th.sort-active {
    border-bottom: 2px solid rgba(56, 182, 255, 0.5);
}

/* Rank cell */
.rank-cell {
    font-family: var(--ffn-ed-font-mono) !important;
    font-size: 0.82rem !important;
    font-weight: 900 !important;
    letter-spacing: -0.02em;
    text-align: center !important;
    color: var(--ffn-ed-text) !important;
    min-width: 2.8rem;
}

.rank-cell--elite {
    color: #b45309 !important;
}

/* Position badge */
.pos-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.5rem;
    padding: 0.18rem 0.5rem;
    border-radius: 0.38rem;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.7rem;
    font-weight: 800;
    letter-spacing: 0.06em;
}

.pos-badge--qb   { background: var(--brand-pos-qb-bg); color: var(--brand-pos-qb-text); }
.pos-badge--rb   { background: var(--brand-pos-rb-bg); color: var(--brand-pos-rb-text); }
.pos-badge--wr   { background: var(--brand-pos-wr-bg); color: var(--brand-pos-wr-text); }
.pos-badge--te   { background: var(--brand-pos-te-bg); color: var(--brand-pos-te-text); }
.pos-badge--k    { background: var(--brand-pos-k-bg);  color: var(--brand-pos-k-text); }
.pos-badge--dst,
.pos-badge--def  { background: #eef2ff; color: #4338ca; }
.pos-badge--flex { background: #fdf2f8; color: #be185d; }

/* Team badge */
.team-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.6rem;
    padding: 0.18rem 0.5rem;
    border-radius: 0.38rem;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.7rem;
    font-weight: 800;
    letter-spacing: 0.04em;
    background: var(--ffn-team-badge-color, var(--ffn-row-team-color, #6B7280));
    color: var(--ffn-team-badge-contrast, var(--ffn-row-team-contrast, #fff));
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}

/* Data cell (numeric columns) */
.data-cell {
    font-family: var(--ffn-ed-font-mono) !important;
    font-size: 0.82rem !important;
    font-variant-numeric: tabular-nums;
}

.data-cell--primary {
    color: var(--ffn-ed-text) !important;
    font-weight: 700 !important;
}

.data-cell--positive {
    color: #16a34a !important;
    font-weight: 600 !important;
}

.data-cell--negative {
    color: #dc2626 !important;
    font-weight: 600 !important;
}

/* Value pill */
.value-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 3.2rem;
    padding: 0.2rem 0.55rem;
    border-radius: 999px;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

.value-pill--value { background: #dcfce7; color: #166534; }
.value-pill--buy   { background: #f0fdf4; color: #15803d; border: 1px solid rgba(34, 197, 94, 0.2); }
.value-pill--fair  { background: #f1f5f9; color: #556377; }
.value-pill--risk  { background: #fff7ed; color: #c2410c; border: 1px solid rgba(249, 115, 22, 0.15); }
.value-pill--avoid { background: #fef2f2; color: #991b1b; border: 1px solid rgba(239, 68, 68, 0.12); }

/* Confidence pill */
.conf-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 3.2rem;
    padding: 0.2rem 0.55rem;
    border-radius: 999px;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

.conf-pill--high   { background: rgba(20, 184, 166, 0.12); color: #0f766e; }
.conf-pill--medium { background: rgba(251, 191, 36, 0.12); color: #92400e; }
.conf-pill--low    { background: rgba(248, 113, 113, 0.12); color: #991b1b; }

/* Sort arrow */
.sort-arrow {
    display: inline-block;
    margin-left: 0.25rem;
    font-size: 0.6rem;
    vertical-align: middle;
    opacity: 0.75;
}

.player-name a:hover {
    text-decoration: underline;
}

.team-cell {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.25rem;
    min-height: 1.5rem;
    padding: 0 0.5rem;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 0.04em;
}

.value-standard {
    color: var(--ffn-ed-text-muted);
}

.value-solid {
    background: #dbeafe;
    color: #1d4ed8;
    font-weight: 700;
}

.value-premium {
    background: #fef3c7;
    color: #92400e;
    font-weight: 700;
}

.value-elite {
    background: #dcfce7;
    color: #166534;
    font-weight: 800;
}

.loading-message,
.error-message {
    padding: 1.6rem;
    border-radius: 1.2rem;
    border: 1px solid rgba(7, 16, 31, 0.08);
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text-muted);
    font-size: 0.96rem;
    font-weight: 600;
    text-align: center;
}

.error-message {
    color: #b91c1c;
}

.ffn-data-page--injuries .hidden {
    display: none !important;
}

.ffn-data-page--injuries #teamList {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.ffn-data-page--injuries #teamList > div {
    border-radius: 1.35rem;
    border: 1px solid var(--ffn-ed-border-strong);
    background: var(--ffn-ed-surface);
    box-shadow: var(--ffn-ed-shadow-card);
    overflow: hidden;
}

.ffn-data-page--injuries .ffn-accordion {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1rem 1.2rem;
    background: transparent;
    color: var(--ffn-ed-text);
    border: none;
    border-left: 6px solid transparent;
    font: inherit;
    cursor: pointer;
    transition: background 0.18s ease;
}

.ffn-data-page--injuries .ffn-accordion:hover {
    background: rgba(0, 87, 255, 0.035);
}

.ffn-data-page--injuries .ffn-accordion .team-name {
    font-size: 1rem;
    font-weight: 800;
    letter-spacing: -0.03em;
}

.ffn-data-page--injuries .ffn-accordion__stack {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.2rem;
    min-width: 0;
}

.ffn-data-page--injuries .ffn-accordion__meta {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.ffn-data-page--injuries .ffn-accordion__cluster {
    display: inline-flex;
    align-items: center;
    gap: 0.7rem;
    flex-shrink: 0;
}

.ffn-data-page--injuries .ffn-accordion__count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.9rem;
    min-height: 1.9rem;
    padding: 0 0.5rem;
    border-radius: 999px;
    background: rgba(0, 87, 255, 0.1);
    color: var(--ffn-ed-accent);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.78rem;
    font-weight: 800;
    letter-spacing: 0.04em;
}

.ffn-data-page--injuries .expand-icon {
    color: var(--ffn-ed-text-soft);
    font-size: 0.95rem;
    font-weight: 800;
}

.ffn-data-page--injuries .team-updates-panel {
    background: var(--ffn-ed-surface);
}

.ffn-data-page--injuries .p-4.border-b.border-gray-200 {
    padding: 1rem 1.2rem;
    border-top: 1px solid rgba(7, 16, 31, 0.06);
}

.ffn-data-page--injuries .p-4.border-b.border-gray-200:last-child {
    border-bottom: none;
}

.ffn-data-page--injuries .font-bold.text-lg.mb-2 {
    margin: 0 0 0.5rem;
    color: var(--ffn-ed-text);
    font-size: 1rem;
    font-weight: 800;
    letter-spacing: -0.03em;
}

.ffn-data-page--injuries .injury-entry-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
}

.ffn-data-page--injuries .injury-entry-badges {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 0.4rem;
}

.ffn-data-page--injuries .injury-entry-summary {
    margin-top: 0.55rem;
}

.ffn-data-page--injuries .mb-1 {
    margin: 0.35rem 0 0;
    color: var(--ffn-ed-text-muted);
    font-size: 0.92rem;
    line-height: 1.5;
}

.ffn-data-page--injuries .font-semibold {
    color: var(--ffn-ed-text);
    font-weight: 700;
}

.ffn-data-page--injuries .text-blue-600.underline {
    color: var(--ffn-ed-accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
}

.ffn-data-page--coaches .coaches-container {
    display: flex;
    flex-direction: column;
    gap: 2rem;
}

.ffn-data-page--coaches .conference-section {
    display: flex;
    flex-direction: column;
    gap: 1.4rem;
}

.ffn-data-page--coaches .conference-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
}

.ffn-data-page--coaches .conference-title {
    margin: 0;
    color: var(--ffn-ed-text);
    font-size: 1.2rem;
    font-weight: 900;
    letter-spacing: -0.04em;
}

.ffn-data-page--coaches .conference-header::after {
    content: "";
    flex: 1;
    height: 1px;
    background: rgba(7, 16, 31, 0.1);
}

.ffn-data-page--coaches .division-container {
    display: flex;
    flex-direction: column;
    gap: 0.9rem;
}

.ffn-data-page--coaches .division-header {
    display: flex;
    align-items: center;
    gap: 0.65rem;
}

.ffn-data-page--coaches .division-header::before {
    content: "";
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    background: var(--ffn-ed-accent);
    box-shadow: 0 0 0 0.18rem rgba(0, 87, 255, 0.12);
}

.ffn-data-page--coaches .division-title {
    margin: 0;
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.74rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.ffn-data-page--coaches .teams-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
    gap: 1rem;
}

.ffn-data-page--coaches .team-card {
    border-radius: 1.25rem;
    border: 1px solid rgba(7, 16, 31, 0.08);
    background: var(--ffn-ed-surface);
    padding: 1.2rem;
    box-shadow: 0 18px 44px rgba(7, 16, 31, 0.08);
    transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
}

.ffn-data-page--coaches .team-card:hover {
    transform: translateY(-1px);
    border-color: rgba(0, 87, 255, 0.14);
    box-shadow: 0 22px 48px rgba(7, 16, 31, 0.1);
}

.ffn-data-page--coaches .team-name {
    margin: 0 0 1rem;
    padding-bottom: 0.8rem;
    border-bottom: 1px solid rgba(7, 16, 31, 0.06);
    color: var(--ffn-ed-text);
    font-size: 1rem;
    font-weight: 900;
    letter-spacing: -0.03em;
}

.ffn-data-page--coaches .coach-info {
    margin-bottom: 0.95rem;
    padding: 0.82rem 0.9rem 0.88rem;
    border-radius: 1rem;
    border: 1px solid rgba(7, 16, 31, 0.06);
    border-left: 4px solid transparent;
    background: var(--ffn-ed-surface);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.42);
}

.ffn-data-page--coaches .coach-info:last-child {
    margin-bottom: 0;
}

.ffn-data-page--coaches .coach-info.hc {
    border-left-color: #0c1d39;
    background: linear-gradient(135deg, rgba(238, 243, 252, 0.94), rgba(246, 249, 255, 0.74));
}

.ffn-data-page--coaches .coach-info.oc {
    border-left-color: #0057ff;
    background: linear-gradient(135deg, rgba(234, 243, 255, 0.96), rgba(245, 250, 255, 0.72));
}

.ffn-data-page--coaches .coach-info.dc {
    border-left-color: #94a3b8;
    background: var(--ffn-ed-surface);
}

.ffn-data-page--coaches .coach-role {
    margin-bottom: 0.3rem;
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.ffn-data-page--coaches .coach-name {
    color: var(--ffn-ed-text);
    font-size: 0.96rem;
    font-weight: 700;
    line-height: 1.45;
    word-break: break-word;
}

.ffn-data-page--coaches .coach-note,
.ffn-data-page--coaches .coach-date,
.ffn-data-page--coaches .no-coach {
    display: block;
    margin-top: 0.3rem;
    color: var(--ffn-ed-text-muted);
    font-size: 0.84rem;
    line-height: 1.45;
}

.ffn-data-page--coaches .no-coach {
    font-style: italic;
}

.ffn-data-page--schedule .schedule-container,
.ffn-data-page--weather #games-container {
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
}

.ffn-data-page--schedule .week-section {
    padding: 1rem 0 1.1rem;
    border-top: 1px solid rgba(7, 16, 31, 0.1);
    background: transparent;
    box-shadow: none;
}

.ffn-data-page--schedule .week-section:first-child {
    padding-top: 0;
    border-top: none;
}

.ffn-data-page--schedule .week-header {
    margin: 0 0 0.85rem;
    padding-bottom: 0.65rem;
    border-bottom: 1px solid rgba(7, 16, 31, 0.08);
    color: var(--ffn-ed-text);
    font-size: 1.55rem;
    font-weight: 900;
    letter-spacing: 0;
}

.ffn-data-page--schedule .game-day-group + .game-day-group {
    margin-top: 1rem;
}

.ffn-data-page--schedule .day-header {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    margin: 0 0 0.65rem;
    color: var(--ffn-ed-text);
    font-size: 0.95rem;
    font-weight: 800;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--schedule .game-card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1.05rem;
    padding: 1.05rem 1.15rem;
    border-radius: 0.5rem;
    border: 1px solid rgba(7, 16, 31, 0.08);
    background: var(--ffn-ed-surface);
    transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}

.ffn-data-page--schedule .game-card + .game-card {
    margin-top: 0.65rem;
}

.ffn-data-page--schedule .game-card:hover {
    transform: translateY(-1px);
    border-color: rgba(0, 87, 255, 0.16);
    box-shadow: 0 14px 30px rgba(0, 87, 255, 0.08);
}

.ffn-data-page--schedule .game-info,
.ffn-data-page--schedule .teams-wrapper {
    display: flex;
    align-items: center;
    gap: 0.9rem;
}

.ffn-data-page--schedule .game-info {
    flex: 1;
    min-width: 0;
}

.ffn-data-page--schedule .game-date {
    min-width: 10.75rem;
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.92rem;
    font-weight: 800;
    letter-spacing: 0;
}

.ffn-data-page--schedule .game-time {
    margin-top: 0.2rem;
    color: var(--ffn-ed-text-soft);
    font-size: 0.8rem;
    letter-spacing: 0;
}

.ffn-data-page--schedule .teams-wrapper {
    flex: 1;
    min-width: 0;
}

.ffn-data-page--schedule .team-box {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3.2rem;
    height: 3.2rem;
    border-radius: 0.5rem;
    box-shadow: 0 10px 22px rgba(7, 16, 31, 0.14);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.94rem;
    font-weight: 800;
}

.ffn-data-page--schedule .at-symbol {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.9rem;
    font-weight: 700;
}

.ffn-data-page--schedule .full-team-names,
.ffn-data-page--schedule .short-team-names {
    color: var(--ffn-ed-text);
    font-size: 1.08rem;
    font-weight: 800;
    letter-spacing: 0;
}

.ffn-data-page--schedule .full-team-names {
    min-width: 0;
}

.ffn-data-page--schedule .short-team-names {
    display: none;
}

.ffn-data-page--schedule .primetime-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.9rem;
    padding: 0 0.7rem;
    border-radius: 999px;
    background: linear-gradient(135deg, #f59e0b, #fbbf24);
    color: #ffffff;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--schedule .game-info {
    flex-wrap: wrap;
}

.ffn-data-page--schedule .schedule-game-meta {
    display: flex;
    flex: 1 1 100%;
    flex-wrap: wrap;
    gap: 0.5rem;
    min-width: 0;
    padding-left: 11.65rem;
}

.ffn-data-page--schedule .schedule-game-meta span {
    display: inline-flex;
    align-items: center;
    min-height: 1.75rem;
    padding: 0 0.6rem;
    border-radius: 0.6rem;
    background: rgba(7, 16, 31, 0.06);
    color: var(--ffn-ed-text-soft);
    font-size: 0.82rem;
    font-weight: 700;
    line-height: 1.2;
}

.ffn-data-page--schedule .schedule-game-badges {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 0.5rem;
}

.ffn-data-page--schedule .schedule-game-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.9rem;
    padding: 0 0.7rem;
    border-radius: 999px;
    background: rgba(0, 87, 255, 0.1);
    color: #003fba;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--schedule .schedule-bye-note {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.85rem;
    margin: 0 0 0.8rem;
    padding: 0.75rem 0.85rem;
    border-radius: 0.5rem;
    border: 1px solid rgba(0, 87, 255, 0.12);
    background: rgba(0, 87, 255, 0.06);
    color: var(--ffn-ed-text);
}

.ffn-data-page--schedule .schedule-bye-note strong {
    white-space: nowrap;
    font-size: 0.9rem;
    font-weight: 900;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--schedule .schedule-bye-teams {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 0.35rem;
}

.ffn-data-page--schedule .schedule-bye-teams span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.4rem;
    min-height: 1.7rem;
    padding: 0 0.45rem;
    border-radius: 999px;
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.78rem;
    font-weight: 900;
}

.ffn-data-page--schedule .schedule-inline-link {
    color: #0057ff;
    font-weight: 900;
    text-decoration: none;
}

.ffn-data-page--byes .bye-page-links a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 0.9rem;
    background: rgba(0, 87, 255, 0.1);
    color: #003fba;
    font-weight: 900;
    text-decoration: none;
}

.ffn-data-page--byes .bye-weeks-container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
    gap: 0.75rem;
}

.ffn-data-page--byes .bye-week-card {
    padding: 0.95rem;
    border-radius: 0.5rem;
    border: 1px solid rgba(7, 16, 31, 0.08);
    background: var(--ffn-ed-surface);
    box-shadow: 0 12px 26px rgba(7, 16, 31, 0.06);
}

.ffn-data-page--byes .bye-week-card-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.9rem;
}

.ffn-data-page--byes .bye-week-card-head strong {
    color: var(--ffn-ed-text);
    font-size: 1.15rem;
    font-weight: 900;
    letter-spacing: 0;
}

.ffn-data-page--byes .bye-week-card-head span {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.78rem;
    font-weight: 800;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--byes .bye-team-grid {
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
}

.ffn-data-page--byes .bye-team-chip {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    min-width: 0;
    padding: 0.6rem;
    border-radius: 0.5rem;
    border: 1px solid rgba(7, 16, 31, 0.1);
    background: var(--ffn-ed-surface);
}

.ffn-data-page--byes .bye-team-abbrev {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    min-width: 3.2rem;
    min-height: 2.45rem;
    border-radius: 0.5rem;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.94rem;
    font-weight: 900;
}

.ffn-data-page--byes .bye-team-name {
    min-width: 0;
    color: var(--ffn-ed-text);
    font-size: 1.02rem;
    font-weight: 800;
    line-height: 1.25;
}

.ffn-data-page--matchups .ffn-pilot-shell {
    gap: 0.85rem;
}

.ffn-data-page--matchups .ffn-page-headline {
    align-items: center;
    margin-bottom: 0;
}

.ffn-data-page--matchups .ffn-page-headline-text {
    gap: 0.25rem;
}

.ffn-data-page--matchups .ffn-page-headline-title {
    font-size: 3.1rem;
    line-height: 1;
    letter-spacing: 0;
}

.ffn-data-page--matchups .ffn-page-headline-sub {
    max-width: 55rem;
    font-size: 1.06rem;
    line-height: 1.55;
}

.ffn-data-page--matchups .ffn-title-nerd {
    width: 8.4rem;
}

.ffn-data-page--matchups .ffn-pilot-section {
    margin-top: 0;
}

.ffn-data-page--matchups .matchup-control-card {
    padding: 0.75rem 0 0.8rem;
}

.ffn-data-page--matchups .matchup-control-grid {
    display: grid;
    grid-template-columns:
        minmax(8rem, 0.6fr)
        minmax(13rem, 0.95fr)
        minmax(13.5rem, 1fr)
        minmax(8rem, 0.6fr)
        minmax(13rem, 0.85fr);
    gap: 0.65rem 0.75rem;
    align-items: end;
}

.ffn-data-page--matchups .matchup-control-grid .control-row {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.35rem;
    min-width: 0;
    margin: 0;
    padding: 0;
    border-top: none;
}

.ffn-data-page--matchups .matchup-control-grid .control-label {
    min-width: 0;
    padding: 0;
    color: var(--ffn-ed-text-soft);
    font-size: 0.75rem;
    letter-spacing: 0;
}

.ffn-data-page--matchups .matchup-control-grid .ffn-data-select,
.ffn-data-page--matchups .matchup-tool-links a {
    box-sizing: border-box;
    width: 100%;
    min-height: 2.45rem;
    height: 2.45rem;
    border-radius: 0.5rem;
    font-size: 0.96rem;
    font-weight: 700;
    line-height: 1.2;
}

.ffn-data-page--matchups .matchup-control-grid .ffn-data-select {
    display: block;
    padding: 0 2.35rem 0 0.75rem;
}

.ffn-data-page--matchups .matchup-tool-links {
    display: flex;
    flex-wrap: nowrap;
    gap: 0.45rem;
    min-width: 0;
}

.ffn-data-page--matchups .matchup-tool-links a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 1 1 0;
    min-width: max-content;
    padding: 0 0.9rem;
    background: rgba(0, 87, 255, 0.1);
    color: #003fba;
    font-weight: 900;
    text-decoration: none;
}

.ffn-data-page--matchups .matchup-leader-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.8rem;
}

.ffn-data-page--matchups .matchup-list-card,
.ffn-data-page--matchups .matchup-team-panel {
    min-width: 0;
    padding: 0.95rem;
    border-radius: 0.5rem;
    border: 1px solid var(--ffn-ed-border);
    background: var(--ffn-ed-surface-strong);
    box-shadow: 0 12px 26px rgba(7, 16, 31, 0.06);
}

.ffn-data-page--matchups .matchup-card-head,
.ffn-data-page--matchups .matchup-panel-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.8rem;
}

.ffn-data-page--matchups .matchup-card-head strong,
.ffn-data-page--matchups .matchup-panel-head strong {
    color: var(--ffn-ed-text);
    font-size: 1.12rem;
    font-weight: 900;
    letter-spacing: 0;
}

.ffn-data-page--matchups .matchup-card-head span {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.78rem;
    font-weight: 800;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--matchups .matchup-list {
    display: flex;
    flex-direction: column;
    gap: 0.55rem;
}

.ffn-data-page--matchups .matchup-row {
    display: grid;
    grid-template-columns: 3.4rem minmax(0, 1fr) auto;
    gap: 0.65rem;
    align-items: center;
    min-width: 0;
    padding: 0.65rem;
    border-radius: 0.5rem;
    border: 1px solid var(--ffn-ed-border);
    background: var(--ffn-ed-surface);
}

.ffn-data-page--matchups .matchup-row.is-selected,
.ffn-data-page--matchups .matchup-table tr.is-selected td {
    background: rgba(0, 87, 255, 0.07);
}

.ffn-data-page--matchups .matchup-rank-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 2.35rem;
    border-radius: 0.5rem;
    background: rgba(7, 16, 31, 0.07);
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.92rem;
    font-weight: 900;
}

.ffn-data-page--matchups .matchup-team-cell {
    display: inline-flex;
    align-items: center;
    gap: 0.65rem;
    min-width: 0;
}

.ffn-data-page--matchups .matchup-team-cell.is-compact {
    gap: 0.45rem;
}

.ffn-data-page--matchups .matchup-team-swatch {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    min-width: 3.1rem;
    min-height: 2.25rem;
    border-radius: 0.5rem;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.88rem;
    font-weight: 900;
}

.ffn-data-page--matchups .matchup-team-name {
    min-width: 0;
    overflow: hidden;
    color: var(--ffn-ed-text);
    font-size: 0.98rem;
    font-weight: 800;
    line-height: 1.25;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ffn-data-page--matchups .matchup-row-details {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.5rem;
}

.ffn-data-page--matchups .matchup-row-details strong,
.ffn-data-page--matchups .score-cell {
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-weight: 900;
}

.ffn-data-page--matchups .matchup-grade-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.8rem;
    padding: 0 0.6rem;
    border-radius: 999px;
    background: rgba(0, 87, 255, 0.1);
    color: #003fba;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0;
    text-transform: uppercase;
    white-space: nowrap;
}

.ffn-data-page--matchups .matchup-grade-pill[data-grade="good"],
.ffn-data-page--matchups .matchup-game-chip[data-grade="good"] {
    background: rgba(4, 120, 87, 0.12);
    color: #047857;
}

.ffn-data-page--matchups .matchup-grade-pill[data-grade="bad"],
.ffn-data-page--matchups .matchup-game-chip[data-grade="bad"] {
    background: rgba(190, 24, 93, 0.12);
    color: #be185d;
}

.ffn-data-page--matchups .matchup-table-wrap {
    overflow-x: auto;
    border-radius: 0.5rem;
    border: 1px solid var(--ffn-ed-border);
    background: var(--ffn-ed-surface-strong);
    box-shadow: 0 12px 26px rgba(7, 16, 31, 0.05);
}

.ffn-data-page--matchups .matchup-table {
    width: 100%;
    min-width: 760px;
    border-collapse: collapse;
}

.ffn-data-page--matchups .matchup-table th,
.ffn-data-page--matchups .matchup-table td {
    padding: 0.78rem 0.85rem;
    border-bottom: 1px solid var(--ffn-ed-border);
    color: var(--ffn-ed-text);
    font-size: 0.9rem;
    line-height: 1.35;
    text-align: left;
    vertical-align: middle;
}

.ffn-data-page--matchups .matchup-table th {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.74rem;
    font-weight: 900;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--matchups .matchup-table tr:last-child td {
    border-bottom: none;
}

.ffn-data-page--matchups .rank-cell {
    width: 4.25rem;
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-weight: 900;
}

.ffn-data-page--matchups .games-cell {
    max-width: 22rem;
    color: var(--ffn-ed-text-muted);
    font-size: 0.86rem;
}

.ffn-data-page--matchups .matchup-panel-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.75rem;
}

.ffn-data-page--matchups .matchup-panel-metrics {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.45rem;
    margin-bottom: 0.8rem;
}

.ffn-data-page--matchups .matchup-panel-metric {
    min-width: 0;
    padding: 0.55rem;
    border-radius: 0.5rem;
    background: rgba(7, 16, 31, 0.06);
}

.ffn-data-page--matchups .matchup-panel-metric span {
    display: block;
    margin-bottom: 0.2rem;
    color: var(--ffn-ed-text-soft);
    font-size: 0.72rem;
    font-weight: 800;
}

.ffn-data-page--matchups .matchup-panel-metric strong {
    display: block;
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-size: 1.05rem;
    font-weight: 900;
}

.ffn-data-page--matchups .matchup-panel-lists {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.55rem;
}

.ffn-data-page--matchups .matchup-game-stack {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    min-width: 0;
}

.ffn-data-page--matchups .matchup-game-stack > strong {
    color: var(--ffn-ed-text-soft);
    font-size: 0.75rem;
    font-weight: 900;
    letter-spacing: 0;
    text-transform: uppercase;
}

.ffn-data-page--matchups .matchup-game-chip {
    display: inline-flex;
    align-items: center;
    min-height: 1.8rem;
    padding: 0 0.55rem;
    border-radius: 999px;
    background: rgba(0, 87, 255, 0.1);
    color: #003fba;
    font-size: 0.78rem;
    font-weight: 900;
    line-height: 1.2;
    white-space: nowrap;
}

@media (max-width: 1180px) {
    .ffn-data-page--matchups .matchup-control-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .ffn-data-page--matchups .matchup-panel-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 860px) {
    .ffn-data-page--matchups .matchup-leader-grid {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 760px) {
    .ffn-data-page--matchups .ffn-page-headline-title {
        font-size: 2.6rem;
    }

    .ffn-data-page--matchups .ffn-title-nerd {
        width: 5.4rem;
    }

    .ffn-data-page--matchups .matchup-control-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .ffn-data-page--matchups .matchup-tools-row {
        grid-column: 1 / -1;
    }
}

@media (max-width: 620px) {
    .ffn-data-page--matchups .ffn-page-headline-title {
        font-size: 2.25rem;
    }

    .ffn-data-page--matchups .ffn-page-headline-sub {
        font-size: 1rem;
    }

    .ffn-data-page--matchups .matchup-control-grid,
    .ffn-data-page--matchups .matchup-panel-grid,
    .ffn-data-page--matchups .matchup-panel-lists {
        grid-template-columns: 1fr;
    }

    .ffn-data-page--matchups .matchup-row {
        grid-template-columns: 3.2rem minmax(0, 1fr);
    }

    .ffn-data-page--matchups .matchup-row-details {
        grid-column: 1 / -1;
        justify-content: flex-start;
    }
}

.ffn-data-page--weather .content-container {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

.ffn-data-page--weather .weather-card,
.ffn-data-page--weather .info-card {
    border-radius: 1.35rem;
    border: 1px solid rgba(7, 16, 31, 0.08);
    background: var(--ffn-ed-surface);
    box-shadow: 0 18px 44px rgba(7, 16, 31, 0.08);
    overflow: hidden;
}

.ffn-data-page--weather .weather-card {
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.ffn-data-page--weather .weather-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 22px 50px rgba(7, 16, 31, 0.12);
}

.ffn-data-page--weather .team-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 4.75rem;
    min-height: 3rem;
    padding: 0 1rem;
    border-radius: 0.9rem;
    border: 2px solid rgba(255, 255, 255, 0.24);
    box-shadow: 0 10px 26px rgba(7, 16, 31, 0.16);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.98rem;
    font-weight: 800;
    letter-spacing: 0.04em;
}

.ffn-data-page--weather .weather-card-bar,
.ffn-data-page--weather .bye-card-bar {
    display: flex;
    width: 100%;
    height: 0.35rem;
}

.ffn-data-page--weather .weather-card-bar span,
.ffn-data-page--weather .bye-card-bar span {
    flex: 1;
}

.ffn-data-page--weather .weather-card-body,
.ffn-data-page--weather .bye-card-body {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    padding: 1.35rem 1.2rem;
}

.ffn-data-page--weather .weather-matchup {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 1rem;
    flex-wrap: wrap;
}

.ffn-data-page--weather .weather-versus {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.35rem;
    height: 2.35rem;
    border-radius: 999px;
    background: linear-gradient(135deg, #0d2240, #0f67ff);
    color: #ffffff;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.9rem;
    font-weight: 800;
    box-shadow: 0 10px 24px rgba(7, 16, 31, 0.18);
}

.ffn-data-page--weather .weather-stadium {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    align-items: center;
    padding: 0.95rem 1rem;
    border-radius: 1rem;
    background: var(--ffn-ed-surface);
    border: 1px solid rgba(7, 16, 31, 0.08);
    text-align: center;
}

.ffn-data-page--weather .weather-stadium-line {
    color: var(--ffn-ed-text);
    font-size: 0.95rem;
    font-weight: 800;
    letter-spacing: -0.02em;
}

.ffn-data-page--weather .weather-stadium-meta {
    color: var(--ffn-ed-text-muted);
    font-size: 0.84rem;
    font-weight: 600;
}

.ffn-data-page--weather .weather-game-outlook {
    padding: 1rem;
    border-radius: 1rem;
    border: 1px solid rgba(14, 116, 144, 0.16);
    background: linear-gradient(135deg, rgba(240, 249, 255, 0.96), rgba(224, 242, 254, 0.88));
}

.ffn-data-page--weather .weather-game-outlook-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
}

.ffn-data-page--weather .weather-game-outlook-head strong {
    color: var(--ffn-ed-text);
    font-size: 1rem;
    font-weight: 800;
    letter-spacing: -0.03em;
}

.ffn-data-page--weather .weather-impact-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.9rem;
    padding: 0 0.8rem;
    border-radius: 999px;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.67rem;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.ffn-data-page--weather .weather-impact-badge--high {
    background: rgba(254, 226, 226, 0.96);
    color: #991b1b;
}

.ffn-data-page--weather .weather-impact-badge--watch {
    background: rgba(254, 243, 199, 0.96);
    color: #92400e;
}

.ffn-data-page--weather .weather-impact-badge--clear {
    background: rgba(220, 252, 231, 0.96);
    color: #166534;
}

.ffn-data-page--weather .weather-game-outlook-meta,
.ffn-data-page--weather .weather-game-outlook-stats,
.ffn-data-page--weather .weather-game-outlook-reasons {
    display: flex;
    flex-wrap: wrap;
    gap: 0.45rem;
    margin-top: 0.75rem;
}

.ffn-data-page--weather .weather-game-pill,
.ffn-data-page--weather .weather-game-reason {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.85rem;
    padding: 0 0.75rem;
    border-radius: 999px;
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text-soft);
    font-size: 0.72rem;
    font-weight: 700;
}

.ffn-data-page--weather .weather-game-outlook-note {
    margin: 0.8rem 0 0;
    color: var(--ffn-ed-text-muted);
    font-size: 0.9rem;
    line-height: 1.6;
}

.ffn-data-page--weather .weather-range-note {
    padding: 1rem;
    border-radius: 1rem;
    border: 1px solid rgba(148, 163, 184, 0.22);
    background: var(--ffn-ed-surface);
}

.ffn-data-page--weather .weather-range-note strong {
    display: block;
    color: var(--ffn-ed-text);
    font-size: 0.98rem;
    font-weight: 800;
    letter-spacing: -0.03em;
}

.ffn-data-page--weather .weather-range-note p {
    margin: 0.55rem 0 0;
    color: var(--ffn-ed-text-muted);
    font-size: 0.88rem;
    line-height: 1.6;
}

.ffn-data-page--weather .weather-forecast {
    padding: 1rem;
    border-radius: 1rem;
    border: 1px solid rgba(59, 130, 246, 0.16);
    background: linear-gradient(135deg, rgba(239, 246, 255, 0.95), rgba(224, 231, 255, 0.88));
}

.ffn-data-page--weather .weather-forecast-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.85rem;
}

.ffn-data-page--weather .weather-forecast-head strong {
    color: var(--ffn-ed-text);
    font-size: 1rem;
    font-weight: 800;
    letter-spacing: -0.03em;
}

.ffn-data-page--weather .weather-source-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.9rem;
    padding: 0 0.8rem;
    border-radius: 999px;
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.67rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.ffn-data-page--weather .weather-forecast-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(104px, 1fr));
    gap: 0.55rem;
}

.ffn-data-page--weather .weather-icon-lg {
    width: 2.35rem;
    height: 2.35rem;
}

.ffn-data-page--weather .forecast-day {
    padding: 0.9rem 0.55rem;
    border-radius: 0.9rem;
    background: var(--ffn-ed-surface);
    border: 1px solid transparent;
    transition: transform 0.18s ease, box-shadow 0.18s ease;
    text-align: center;
}

.ffn-data-page--weather .forecast-day:hover {
    transform: translateY(-2px);
    box-shadow: 0 10px 20px rgba(0, 87, 255, 0.12);
}

.ffn-data-page--weather .forecast-day-name {
    color: var(--ffn-ed-text);
    font-size: 0.8rem;
    font-weight: 800;
    margin-bottom: 0.15rem;
}

.ffn-data-page--weather .forecast-day-date {
    color: var(--ffn-ed-text-soft);
    font-size: 0.68rem;
    font-weight: 700;
    margin-bottom: 0.5rem;
}

.ffn-data-page--weather .forecast-day-tag {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.45rem;
    margin-bottom: 0.45rem;
    padding: 0 0.55rem;
    border-radius: 999px;
    background: rgba(15, 103, 255, 0.12);
    color: #0f67ff;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.63rem;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.ffn-data-page--weather .forecast-day--game {
    border-color: rgba(15, 103, 255, 0.25);
    box-shadow: 0 12px 26px rgba(15, 103, 255, 0.1);
}

.ffn-data-page--weather .forecast-day-temp {
    margin-top: 0.6rem;
    color: var(--ffn-ed-text);
    font-size: 1.1rem;
    font-weight: 900;
    letter-spacing: -0.04em;
}

.ffn-data-page--weather .forecast-day-low {
    color: var(--ffn-ed-text-soft);
    font-size: 0.79rem;
    font-weight: 700;
}

.ffn-data-page--weather .forecast-day-meta {
    margin-top: 0.55rem;
    padding-top: 0.5rem;
    border-top: 1px solid rgba(7, 16, 31, 0.08);
}

.ffn-data-page--weather .forecast-day-meta-row {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.3rem;
    color: var(--ffn-ed-text-muted);
    font-size: 0.69rem;
    font-weight: 700;
}

.ffn-data-page--weather .forecast-day-meta-row + .forecast-day-meta-row {
    margin-top: 0.2rem;
}

.ffn-data-page--weather .dome-badge {
    background: linear-gradient(135deg, #d1fae5, #bbf7d0);
    color: #065f46;
    border: 1px solid rgba(16, 185, 129, 0.24);
    border-radius: 1rem;
    padding: 1.35rem 1rem;
    text-align: center;
}

.ffn-data-page--weather .info-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1.2rem 1.35rem;
    cursor: pointer;
}

.ffn-data-page--weather .info-card-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.36s ease;
}

.ffn-data-page--weather .info-card-content.expanded {
    max-height: 220rem;
}

.ffn-data-page--weather .info-card-inner {
    padding: 0 1.35rem 1.35rem;
}

.ffn-data-page--weather .weather-note-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1rem;
    margin-bottom: 1.35rem;
}

.ffn-data-page--weather .weather-note-card {
    padding: 1rem;
    border-radius: 1rem;
    border-left: 3px solid #3b82f6;
    background: linear-gradient(135deg, rgba(239, 246, 255, 0.92), rgba(224, 242, 254, 0.76));
}

.ffn-data-page--weather .weather-note-card strong {
    display: block;
    margin-bottom: 0.3rem;
    color: var(--ffn-ed-text);
    font-size: 0.94rem;
    font-weight: 800;
}

.ffn-data-page--weather .weather-note-card p {
    margin: 0;
    color: var(--ffn-ed-text-muted);
    font-size: 0.83rem;
    line-height: 1.5;
}

.ffn-data-page--weather .weather-data-missing {
    padding: 1rem;
    border-radius: 1rem;
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text-muted);
    font-size: 0.9rem;
    font-weight: 600;
    text-align: center;
}

.ffn-data-page--weather .bye-card-body {
    align-items: center;
    text-align: center;
}

.ffn-data-page--weather .bye-card-body strong {
    color: var(--ffn-ed-text);
    font-size: 1.25rem;
    font-weight: 900;
    letter-spacing: -0.04em;
}

.ffn-data-page--weather .bye-card-body p {
    margin: 0;
    color: var(--ffn-ed-text-muted);
    font-size: 0.9rem;
    line-height: 1.55;
}

.ffn-data-page--weather .bye-card-badges {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.75rem;
}

.ffn-data-page--weather .chevron-icon {
    transition: transform 0.24s ease;
}

.ffn-data-page--weather .chevron-icon.rotated {
    transform: rotate(180deg);
}

.loading-state,
.no-results {
    padding: 3rem 1.5rem !important;
    text-align: center;
    color: var(--ffn-ed-text-muted);
    font-size: 0.98rem;
    font-weight: 600;
}

.loading-spinner {
    display: inline-block;
    width: 2rem;
    height: 2rem;
    border: 3px solid rgba(7, 16, 31, 0.12);
    border-top-color: var(--ffn-ed-accent);
    border-radius: 50%;
    animation: ffn-data-spin 0.8s linear infinite;
}

@keyframes ffn-data-spin {
    to {
        transform: rotate(360deg);
    }
}

.proj-bar-wrap {
    width: 100%;
    height: 0.62rem;
    border-radius: 999px;
    background: rgba(7, 16, 31, 0.08);
    overflow: hidden;
}

.proj-bar-fill {
    height: 100%;
    border-radius: inherit;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
}

.proj-stat-header,
.proj-stat-number {
    overflow-wrap: normal;
    white-space: nowrap;
}

.proj-points-cell {
    color: var(--ffn-ed-text) !important;
}

.proj-stat-number {
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.82rem;
    font-variant-numeric: tabular-nums;
    font-weight: 800;
    letter-spacing: 0;
}

.proj-stat-number.is-empty {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-sans);
    font-weight: 700;
}

.tier-badge,
.badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.6rem;
    padding: 0 0.65rem;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 0.04em;
}

.ffn-data-page--projections .tier-badge {
    box-sizing: border-box;
    max-width: 100%;
    min-height: 1.35rem;
    padding: 0 0.42rem;
    font-size: 0.62rem;
    letter-spacing: 0.01em;
    line-height: 1;
    white-space: nowrap;
}

.badge-official {
    background: #dcfce7;
    color: #166534;
}

.badge-reported {
    background: #dbeafe;
    color: #1d4ed8;
}

.badge-pending {
    background: #fef3c7;
    color: #92400e;
}

.badge-extension {
    background: #ede9fe;
    color: #6d28d9;
}

.badge-confidence-high {
    background: #dcfce7;
    color: #166534;
}

.badge-confidence-medium {
    background: #fef3c7;
    color: #92400e;
}

.badge-confidence-low {
    background: #fee2e2;
    color: #b91c1c;
}

.pos-qb {
    color: #ef4444;
}

.pos-rb {
    color: #2563eb;
}

.pos-wr {
    color: #059669;
}

.pos-te {
    color: #d97706;
}

.pos-k {
    color: #7c3aed;
}

.pos-def {
    color: #4338ca;
}

.pc-card {
    position: fixed;
    left: 1rem;
    top: 5rem;
    z-index: 70;
    width: min(24rem, calc(100vw - 2rem));
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 1rem;
    background:
        radial-gradient(circle at 0 0, rgba(var(--pc-team-rgb, 107, 114, 128), 0.34), transparent 13rem),
        linear-gradient(145deg, rgba(8, 16, 31, 0.97), rgba(14, 31, 57, 0.99));
    color: #f8fbff;
    box-shadow: 0 30px 80px rgba(7, 16, 31, 0.28);
    opacity: 0;
    transform: translateY(0.4rem) scale(0.98);
    pointer-events: none;
    transition: opacity 0.18s ease, transform 0.18s ease;
}

.pc-card.pc-visible {
    opacity: 1;
    transform: translateY(0) scale(1);
    pointer-events: auto;
}

.pc-accent,
.pc-sheet-accent {
    height: 0.36rem;
    width: 100%;
    border-radius: 1rem 1rem 0 0;
}

.pc-body,
.pc-sheet-body {
    padding: 1.1rem 1.15rem 0.85rem;
}

.pc-name {
    color: #ffffff;
    font-size: 1.25rem;
    font-weight: 900;
    letter-spacing: 0;
    line-height: 1.05;
}

.pc-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.45rem;
    margin: 0.7rem 0 0.9rem;
}

.pc-pos-badge,
.pc-team-badge,
.pc-value-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.5rem;
    padding: 0 0.6rem;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.pc-value-pill[hidden],
.pc-footer[hidden],
.pc-sheet-footer[hidden] {
    display: none !important;
}

.pc-sub {
    color: rgba(226, 236, 255, 0.68);
    font-size: 0.82rem;
    font-weight: 600;
}

.pc-bio {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.36rem;
    margin: -0.2rem 0 0.82rem;
    color: rgba(208, 217, 234, 0.76);
    font-size: 0.72rem;
    font-weight: 650;
    line-height: 1.35;
}

.pc-bio-dot::before {
    content: "\00B7";
    color: #8ea7d3;
}

.pc-stats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.65rem;
}

.pc-stat {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    min-width: 0;
    padding: 0.68rem 0.74rem;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 0.72rem;
    background: rgba(255, 255, 255, 0.06);
}

.pc-stat-label {
    color: #9fb2d5;
    font-size: 0.66rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.pc-stat-value {
    color: #ffffff;
    font-size: 0.96rem;
    font-weight: 800;
    letter-spacing: 0;
    line-height: 1.15;
    overflow-wrap: anywhere;
}

.pc-footer,
.pc-sheet-footer {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 0.8rem;
    padding: 0 1.15rem 1.15rem;
}

.pc-cta,
.pc-sheet-cta {
    display: none !important;
}

.pc-cta {
    color: #bfdbfe;
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.pc-backdrop {
    position: fixed;
    inset: 0;
    z-index: 68;
    display: none;
    background: rgba(7, 16, 31, 0.5);
    opacity: 0;
    transition: opacity 0.2s ease;
}

.pc-backdrop.pc-show {
    opacity: 1;
}

.pc-sheet {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 69;
    display: none;
    border-radius: 1rem 1rem 0 0;
    background:
        radial-gradient(circle at 0 0, rgba(var(--pc-team-rgb, 107, 114, 128), 0.32), transparent 14rem),
        linear-gradient(145deg, rgba(8, 16, 31, 0.98), rgba(14, 31, 57, 0.98));
    color: #f8fbff;
    transform: translateY(104%);
    transition: transform 0.24s ease;
    box-shadow: 0 -22px 60px rgba(7, 16, 31, 0.34);
}

.pc-sheet.pc-show {
    transform: translateY(0);
}

.pc-sheet-handle {
    width: 3rem;
    height: 0.3rem;
    margin: 0.7rem auto 0;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.18);
}

.pc-sheet-footer {
    flex-wrap: wrap;
}

.pc-sheet-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 2.8rem;
    padding: 0 1rem;
    border: none;
    border-radius: 999px;
    background: linear-gradient(135deg, #0057ff, #1b6fff);
    color: #ffffff;
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.86rem;
    font-weight: 800;
    letter-spacing: 0.02em;
    cursor: pointer;
}

.pc-cta,
.pc-sheet-cta {
    display: none !important;
}

#back-to-top {
    position: fixed;
    right: 1.35rem;
    bottom: 1.35rem;
    z-index: 66;
    display: none;
    align-items: center;
    justify-content: center;
    width: 3rem;
    height: 3rem;
    border: none;
    border-radius: 50%;
    background: linear-gradient(135deg, #0057ff, #1b6fff);
    color: #ffffff;
    box-shadow: 0 20px 44px rgba(0, 87, 255, 0.24);
    cursor: pointer;
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}

#back-to-top:hover {
    transform: translateY(-2px);
    box-shadow: 0 24px 48px rgba(0, 87, 255, 0.28);
}

@media (max-width: 1180px) {
    .ffn-data-summary-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 1024px) {
    .ffn-data-page .ffn-pilot-hero {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 768px) {
    .ffn-hero-nav {
        flex-direction: column;
        gap: 0.4rem;
        width: fit-content;
    }

    .ffn-hero-nav-btn {
        min-height: var(--ffn-action-mobile-height, 44px);
        padding: 0 var(--ffn-action-padding-x, 1rem);
        font-size: var(--ffn-action-small-font-size, 0.72rem);
        gap: 0.4rem;
    }

    .ffn-hero-nav-btn svg {
        width: 13px;
        height: 13px;
    }

    .ffn-hero-nav-btn .ext-icon {
        width: 11px;
        height: 11px;
    }

    .ffn-data-hero-actions {
        gap: 0.45rem;
    }

    .ffn-data-hero-actions .ffn-pilot-button {
        min-height: 2.4rem;
        padding: 0.5rem 1rem;
        font-size: 0.78rem;
    }

    .ffn-data-summary-grid {
        grid-template-columns: 1fr;
    }

    .ffn-data-control-card,
    .ffn-data-table-card {
        padding: 1rem;
    }

    .ffn-data-table-card {
        position: relative;
    }

    .ffn-data-table-card::after {
        content: '';
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        width: 24px;
        background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.9));
        pointer-events: none;
        z-index: 4;
        border-radius: 0 var(--ffn-ed-radius-card, 1.6rem) var(--ffn-ed-radius-card, 1.6rem) 0;
    }

    .control-row {
        flex-direction: column;
        gap: 0.65rem;
    }

    .control-label {
        min-width: 0;
        padding-top: 0;
    }

    .segment-strip,
    .pill-strip {
        flex-wrap: nowrap;
        overflow-x: auto;
        padding-bottom: 0.1rem;
        scrollbar-width: none;
    }

    .segment-strip::-webkit-scrollbar,
    .pill-strip::-webkit-scrollbar {
        display: none;
    }

    .ffn-toggle,
    .segment-btn,
    .pill-btn,
    .toggle-btn,
    .filter-btn {
        flex: 0 0 auto;
        min-height: 2.6rem;
        padding: 0 0.9rem;
        font-size: 0.8rem;
    }

    .search-input {
        font-size: 1rem;
    }

    .rankings-table th,
    .proj-table th,
    .contracts-table th {
        padding: 0.8rem 0.65rem;
        font-size: 0.66rem;
    }

    .rankings-table td,
    .proj-table td,
    .contracts-table td {
        padding: 0.85rem 0.65rem;
        font-size: 0.86rem;
    }

    .rankings-table th:first-child,
    .rankings-table td:first-child,
    .proj-table th:first-child,
    .proj-table td:first-child,
    .contracts-table th:first-child,
    .contracts-table td:first-child {
        position: sticky;
        left: 0;
        z-index: 3;
    }

    .rankings-table td:first-child,
    .proj-table td:first-child,
    .contracts-table td:first-child {
        background: var(--ffn-ed-surface);
    }

    .player-row:nth-child(even) td:first-child {
        background: rgba(237, 241, 248, 0.96);
    }

    .player-row:hover td:first-child,
    .player-row:focus-visible td:first-child {
        background: rgba(230, 240, 255, 0.96);
    }

    .pc-card {
        display: none !important;
    }

    .pc-sheet .pc-name {
        font-size: 1.15rem;
    }

    .pc-sheet .pc-stats {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .ffn-data-page--coaches .teams-grid {
        grid-template-columns: 1fr;
    }

    .ffn-data-page--injuries .injury-entry-head {
        flex-direction: column;
    }

    .ffn-data-page--injuries .injury-entry-badges {
        justify-content: flex-start;
    }

    .ffn-data-page--schedule .game-card,
    .ffn-data-page--schedule .game-info {
        flex-direction: column;
        align-items: flex-start;
    }

    .ffn-data-page--schedule .teams-wrapper {
        flex-wrap: wrap;
        align-items: center;
    }

    .ffn-data-page--schedule .game-date {
        min-width: 0;
    }

    .ffn-data-page--schedule .schedule-game-meta {
        padding-left: 0;
    }

    .ffn-data-page--schedule .schedule-game-badges {
        justify-content: flex-start;
    }

    .ffn-data-page--schedule .schedule-bye-note {
        flex-direction: column;
        align-items: flex-start;
    }

    .ffn-data-page--schedule .schedule-bye-teams {
        justify-content: flex-start;
    }

    .ffn-data-page--schedule .full-team-names {
        flex-basis: 100%;
    }

    .ffn-data-page--weather .team-badge {
        min-width: 4rem;
        min-height: 2.75rem;
        font-size: 0.9rem;
    }

    .ffn-data-page--weather .weather-forecast-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .ffn-data-page--weather .weather-note-grid {
        grid-template-columns: 1fr;
    }

    .ffn-data-page--weather .weather-card-body,
    .ffn-data-page--weather .bye-card-body {
        padding: 1.1rem;
    }
}

@media (max-width: 520px) {
    .ffn-hero-nav-btn {
        padding: 0 0.85rem;
        font-size: var(--ffn-action-small-font-size, 0.72rem);
    }

    .ffn-data-hero-actions {
        gap: 0.4rem;
    }

    .ffn-data-hero-actions .ffn-pilot-button {
        padding: 0.45rem 0.85rem;
        font-size: 0.75rem;
    }
}

@media (max-width: 1180px) {
    .ffn-data-page--transactions .ffn-data-table-card::after {
        display: none;
    }

    .ffn-data-page--transactions .contracts-table-wrap {
        overflow-x: visible;
    }

    .ffn-data-page--transactions .contracts-table {
        min-width: 0;
        display: block;
        background: transparent;
        box-shadow: none;
    }

    .ffn-data-page--transactions .contracts-table thead {
        display: none;
    }

    .ffn-data-page--transactions .contracts-table tbody {
        display: grid;
        gap: 1rem;
    }

    .ffn-data-page--transactions .contracts-table tbody tr {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 0.85rem 0.9rem;
        padding: 1rem;
        border: 1px solid var(--ffn-ed-border);
        border-radius: 1.1rem;
        background: var(--ffn-ed-surface-strong);
        box-shadow: var(--ffn-ed-shadow-soft);
    }

    .ffn-data-page--transactions .contracts-table tbody tr:not(.player-row) {
        display: block;
    }

    .ffn-data-page--transactions .contracts-table td {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        gap: 0.28rem;
        min-width: 0;
        padding: 0;
        border-bottom: none;
        background: transparent !important;
        font-size: 0.9rem;
        line-height: 1.45;
        text-align: left !important;
        box-shadow: none !important;
    }

    .ffn-data-page--transactions .contracts-table td::before {
        content: attr(data-label);
        color: var(--ffn-ed-text-soft);
        font-family: var(--ffn-ed-font-mono);
        font-size: 0.66rem;
        font-weight: 700;
        letter-spacing: 0.08em;
        line-height: 1.2;
        text-transform: uppercase;
    }

    .ffn-data-page--transactions .contracts-table .contracts-cell--player,
    .ffn-data-page--transactions .contracts-table .contracts-cell--summary,
    .ffn-data-page--transactions .contracts-table .contracts-cell--impact,
    .ffn-data-page--transactions .contracts-table .contracts-cell--source {
        grid-column: 1 / -1;
    }

    .ffn-data-page--transactions .contracts-table .contracts-cell--player {
        padding-bottom: 0.25rem;
        border-bottom: 1px solid var(--ffn-ed-border);
        color: var(--ffn-ed-text) !important;
        font-size: 1.02rem;
        font-weight: 800 !important;
    }

    .ffn-data-page--transactions .contracts-table .contracts-cell--player::before {
        margin-bottom: 0.05rem;
    }

    .ffn-data-page--transactions .contracts-table .contracts-cell--status,
    .ffn-data-page--transactions .contracts-table .contracts-cell--confidence {
        justify-content: flex-start;
    }

    .ffn-data-page--transactions .contracts-table .contracts-cell--position span,
    .ffn-data-page--transactions .contracts-table .contracts-cell--status .badge,
    .ffn-data-page--transactions .contracts-table .contracts-cell--confidence .badge {
        align-self: flex-start;
    }

    .ffn-data-page--transactions .contracts-table .contracts-cell--source a {
        line-height: 1.4;
        overflow-wrap: anywhere;
    }

    .ffn-data-page--transactions .player-row:nth-child(even) td,
    .ffn-data-page--transactions .player-row:hover td,
    .ffn-data-page--transactions .player-row:focus-visible td,
    .ffn-data-page--transactions .player-row:hover td:first-child,
    .ffn-data-page--transactions .player-row:focus-visible td:first-child,
    .ffn-data-page--transactions .contracts-table td:first-child {
        background: transparent !important;
    }

    .ffn-data-page--transactions .contracts-table th:first-child,
    .ffn-data-page--transactions .contracts-table td:first-child {
        position: static;
        left: auto;
        z-index: auto;
    }

    .ffn-data-page--transactions .loading-state,
    .ffn-data-page--transactions .no-results {
        padding: 1.4rem 1rem !important;
        text-align: center !important;
        align-items: center !important;
    }
}

@media (min-width: 769px) {
    .pc-backdrop,
    .pc-sheet {
        display: none !important;
    }
}

@media (prefers-reduced-motion: reduce) {
    .ffn-toggle,
    .segment-btn,
    .pill-btn,
    .toggle-btn,
    .player-row,
    .pc-card,
    .pc-backdrop,
    .pc-sheet,
    #back-to-top {
        transition: none !important;
    }
}

@media (max-width: 640px) {
    .ffn-data-table-card::after {
        display: none !important;
    }

    .rankings-table-wrap.has-mobile-card-view,
    .proj-table-wrap.has-mobile-card-view {
        overflow-x: visible;
        padding-bottom: 0;
    }

    .rankings-table-wrap.has-mobile-card-view > table,
    .proj-table-wrap.has-mobile-card-view > table {
        display: none !important;
    }

    .ffn-toggle,
    .segment-btn,
    .pill-btn,
    .toggle-btn,
    .filter-btn,
    .ffn-board-search-input {
        min-width: 44px;
        min-height: 44px;
        font-size: 1rem;
    }

    .ffn-data-page--rankings .segment-strip,
    .ffn-data-page--rankings .pill-strip,
    .ffn-data-page--projections .segment-strip,
    .ffn-data-page--projections .pill-strip {
        flex-wrap: wrap;
        overflow-x: visible;
    }
}

/* Keep the projection board readable after the base fixed-width table rules. */
@media (max-width: 768px) {
    .ffn-data-page--projections .proj-table {
        min-width: 600px;
    }

    .ffn-data-page--projections .proj-stat-header,
    .ffn-data-page--projections .proj-stat-number,
    .ffn-data-page--projections .proj-secondary-column {
        display: none;
    }
}

/* Bye weeks: cards size to their teams, and the next upcoming bye week is flagged. */
.ffn-data-page--byes .bye-weeks-container {
    align-items: start;
}

.ffn-data-page--byes .bye-week-card.is-next {
    border-color: var(--ffn-ed-accent);
    box-shadow: 0 0 0 2px var(--ffn-ed-accent-soft);
}

.ffn-data-page--byes .bye-week-card.is-next .bye-week-card-head strong::after {
    content: "Next bye";
    margin-left: 0.5rem;
    padding: 0.1rem 0.45rem;
    border-radius: var(--ffn-ed-radius-pill);
    background: var(--ffn-ed-accent);
    color: var(--ffn-ed-bg);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.62rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    vertical-align: middle;
}

/* ---- Data tables v2 details (2026-09-25 PM) ---- */

/* Projection tiers: one pill style, tinted per tier, readable in both themes. */
.tier-badge--elite   { background: #dcfce7; color: #166534; }
.tier-badge--starter { background: #dbeafe; color: #1e40af; }
.tier-badge--flex    { background: #fef3c7; color: #92400e; }
.tier-badge--bench   { background: #f1f5f9; color: #475569; }
.tier-badge--deep    { background: #fef2f2; color: #991b1b; }
html[data-theme="dark"] .tier-badge--elite   { background: rgba(52, 211, 153, 0.16); color: #6ee7b7; }
html[data-theme="dark"] .tier-badge--starter { background: rgba(96, 165, 250, 0.18); color: #93c5fd; }
html[data-theme="dark"] .tier-badge--flex    { background: rgba(251, 191, 36, 0.16); color: #fcd34d; }
html[data-theme="dark"] .tier-badge--bench   { background: rgba(148, 168, 198, 0.14); color: #c2d0e6; }
html[data-theme="dark"] .tier-badge--deep    { background: rgba(248, 113, 113, 0.14); color: #fca5a5; }

/* Passing / rushing / receiving groups read as blocks. */
.proj-table .proj-stat-group-start {
    border-left: 1px solid var(--ffn-ed-border);
}

/* Navy team chips disappear on the dark surface without an edge. */
html[data-theme="dark"] .team-badge {
    box-shadow: inset 0 0 0 1px rgba(243, 247, 255, 0.16);
}

/* Missing stats recede instead of reading as data. */
.rankings-table td.is-empty,
.proj-table td.is-empty {
    color: var(--ffn-ed-text-soft);
    opacity: 0.6;
}

/* Weekly data pages (start/sit, waiver wire, DST, injury report): decorated by editorial-shell.js. */
.ffn-data-page table.rankings-table[data-fo-decorated] th.is-num,
.ffn-data-page table.rankings-table[data-fo-decorated] td.is-num {
    text-align: right;
}

table[data-fo-decorated] td.is-flagged {
    color: #b45309;
    font-weight: 700;
}

html[data-theme="dark"] table[data-fo-decorated] td.is-flagged {
    color: #fbbf24;
}

table[data-fo-decorated] td.is-rank {
    font-family: var(--ffn-ed-font-mono);
    font-weight: 800;
    color: var(--ffn-ed-text);
}

table[data-fo-decorated] td .value-pill {
    text-transform: capitalize;
}

main[data-fo-week] .ffn-pilot-shell > p a {
    color: var(--ffn-ed-accent);
    font-weight: 600;
    text-decoration: none;
}

main[data-fo-week] .ffn-pilot-shell > p a:hover {
    text-decoration: underline;
}

/* Phone cards keep the team-colored player name. */
.ffn-mobile-table-card.has-team-tint .ffn-mobile-table-title > strong {
    color: var(--ffn-team-ink, var(--ffn-ed-text));
}

/* Transactions: hide a status/confidence column when every shown row has the same value (set by the page script). */
#transactions-table.hide-status-col th[data-sort="status"],
#transactions-table.hide-status-col .contracts-cell--status,
#transactions-table.hide-confidence-col th[data-sort="confidence"],
#transactions-table.hide-confidence-col .contracts-cell--confidence {
    display: none;
}

@media (min-width: 769px) {
    .ffn-data-page--transactions .contracts-table th,
    .ffn-data-page--transactions .contracts-table td {
        padding-right: 0.6rem;
        padding-left: 0.6rem;
    }
}

/* Team index: team-colored edge and name on each team card. */
.ffn-player-directory-card[data-team] {
    border-left: 4px solid var(--ffn-row-team-color);
}

/* These cards are dark in both themes, so use the lifted team color. */
.ffn-player-directory-card[data-team] strong {
    color: var(--ffn-team-ink-on-dark, #fff);
}

/* ---- Data page heads (2026-09-25 PM2) ----
   One pattern above every board: headline, stat strip, "01 //" controls card, notes, "02 //" board.
   Selectors start at main.ffn-data-page so they settle the older page-specific variants
   (--minimal lined rows, projections' segmented container, schedule grids). */

/* Controls card: white card, labeled rows split by hairlines. */
main.ffn-data-page .ffn-data-control-card {
    padding: 0.3rem 1.25rem;
    border: 1px solid var(--ffn-ed-border);
    border-radius: 1rem;
    background: var(--ffn-ed-surface);
    box-shadow: none;
}

main.ffn-data-page .ffn-data-control-card > .control-row {
    display: flex;
    align-items: center;
    gap: 1rem;
    margin: 0;
    padding: 0.75rem 0;
    border-top: 1px solid var(--ffn-ed-border);
}

main.ffn-data-page .ffn-data-control-card > .control-row:first-child {
    border-top: 0;
}

main.ffn-data-page .ffn-data-control-card .control-label {
    align-self: flex-start;
    padding-top: 0;
    color: var(--ffn-ed-text-soft);
    font-size: 0.66rem;
    text-align: left;
}

main.ffn-data-page .ffn-data-control-card > .control-row > .control-label {
    flex: 0 0 6.25rem;
    min-width: 6.25rem;
    align-self: center;
}

/* One toggle style everywhere: outline pills, accent when active, no lift or glow. */
main.ffn-data-page .ffn-data-control-card .segment-strip,
main.ffn-data-page .ffn-data-control-card .pill-strip {
    display: flex;
    flex: 1 1 auto;
    flex-wrap: wrap;
    gap: 0.4rem;
    width: auto;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
}

main.ffn-data-page .ffn-data-control-card .ffn-toggle,
main.ffn-data-page .ffn-data-control-card .schedule-tool-links a,
main.ffn-data-page .ffn-data-control-card .matchup-tool-links a,
main.ffn-data-page .ffn-data-control-card .bye-page-links a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 0;
    min-height: 2.25rem;
    height: auto;
    padding: 0 0.95rem;
    border: 1px solid var(--ffn-ed-border-strong);
    border-radius: 999px;
    background: var(--ffn-ed-surface);
    box-shadow: none;
    color: var(--ffn-ed-text-muted);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-decoration: none;
    text-transform: uppercase;
    transform: none;
}

main.ffn-data-page .ffn-data-control-card .ffn-toggle:hover,
main.ffn-data-page .ffn-data-control-card .schedule-tool-links a:hover,
main.ffn-data-page .ffn-data-control-card .matchup-tool-links a:hover,
main.ffn-data-page .ffn-data-control-card .bye-page-links a:hover {
    border-color: var(--ffn-ed-accent);
    color: var(--ffn-ed-accent);
    transform: none;
}

main.ffn-data-page .ffn-data-control-card .ffn-toggle {
    flex: 0 0 auto;
    width: auto;
}

main.ffn-data-page .ffn-data-control-card .ffn-toggle.active {
    border-color: var(--ffn-ed-accent);
    background: var(--ffn-ed-accent);
    box-shadow: none;
    color: #fff;
}

/* Card footer: tips, sources and policy lines read as small sentence-case text, not mono caps. */
main.ffn-data-page .ffn-data-control-card .ffn-data-inline-meta,
main.ffn-data-page .ffn-data-control-card .ffn-data-notice-banner,
main.ffn-data-page .ffn-data-card-note {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 0.35rem 1.5rem;
    margin: 0;
    padding: 0.75rem 0;
    border-top: 1px solid var(--ffn-ed-border);
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.84rem;
    font-weight: 500;
    letter-spacing: 0;
    line-height: 1.5;
    text-transform: none;
}

main.ffn-data-page .ffn-data-card-note {
    display: block;
}

main.ffn-data-page .ffn-data-card-note[hidden] {
    display: none;
}

main.ffn-data-page .ffn-data-control-card .ffn-data-inline-meta strong,
main.ffn-data-page .ffn-data-card-note strong {
    color: var(--ffn-ed-text);
    font-weight: 700;
}

main.ffn-data-page .ffn-data-card-note a,
main.ffn-data-page .ffn-data-control-card .ffn-data-inline-meta a {
    color: var(--ffn-ed-accent);
    font-weight: 600;
    text-decoration: none;
}

main.ffn-data-page .ffn-data-card-note a:hover {
    text-decoration: underline;
}

/* Notes outside cards (status banners, "lines context", weekly fallback): one quiet callout style. */
main.ffn-data-page .ffn-data-notice-banner,
main.ffn-data-page .ffn-season-banner,
main.ffn-data-page .ffn-pilot-page-note {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 1rem;
    margin: 0;
    padding: 0.75rem 1rem;
    border: 1px solid var(--ffn-ed-border);
    border-left: 3px solid var(--ffn-ed-accent);
    border-radius: 0.75rem;
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text-muted);
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.9rem;
    font-weight: 500;
    letter-spacing: 0;
    line-height: 1.5;
    text-transform: none;
}

main.ffn-data-page .ffn-pilot-page-note::before {
    display: none;
}

main.ffn-data-page .ffn-data-notice-banner strong,
main.ffn-data-page .ffn-season-banner strong {
    color: var(--ffn-ed-text);
}

main.ffn-data-page .ffn-season-banner nav {
    margin-left: auto;
}

main.ffn-data-page .ffn-season-banner .ffn-pilot-button {
    min-height: 2.25rem;
    padding: 0 0.95rem;
    font-size: 0.68rem;
}

main.ffn-data-page .ffn-pilot-page-note a {
    color: var(--ffn-ed-accent);
    font-weight: 600;
    text-decoration: none;
}

html[data-theme="dark"] main.ffn-data-page .ffn-data-notice-banner,
html[data-theme="dark"] main.ffn-data-page .ffn-season-banner {
    border-color: var(--ffn-ed-border);
    border-left-color: var(--ffn-ed-accent);
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text-muted);
}

html[data-theme="dark"] main.ffn-data-page .ffn-data-notice-banner strong {
    color: var(--ffn-ed-text);
}

/* Space between the stat strip, section heads and cards matches the card pages. */
main.ffn-data-page .ffn-pilot-shell > .ffn-pilot-section {
    margin-top: 2rem;
}

@media (max-width: 640px) {
    main.ffn-data-page .ffn-data-control-card {
        padding: 0.2rem 1rem;
    }

    main.ffn-data-page .ffn-data-control-card > .control-row {
        flex-direction: column;
        align-items: stretch;
        gap: 0.5rem;
    }

    main.ffn-data-page .ffn-data-control-card > .control-row > .control-label {
        flex: 0 0 auto;
        min-width: 0;
        align-self: flex-start;
    }
}

/* A notice inside a controls card reads as a card note, not a nested box. */
main.ffn-data-page .ffn-data-control-card .ffn-data-notice-banner,
html[data-theme="dark"] main.ffn-data-page .ffn-data-control-card .ffn-data-notice-banner {
    display: block;
    border: 0;
    border-top: 1px solid var(--ffn-ed-border);
    border-radius: 0;
    background: none;
    padding: 0.75rem 0;
    color: var(--ffn-ed-text-soft);
    font-size: 0.84rem;
}

main.ffn-data-page .ffn-data-notice-banner,
main.ffn-data-page .ffn-pilot-page-note {
    display: block;
}

/* Table captions (result counts, caps) in sentence case like the card notes. */
main.ffn-data-page .results-info,
main.ffn-data-page .proj-player-count {
    font-family: var(--ffn-ed-font-sans);
    font-size: 0.84rem;
    font-weight: 500;
    letter-spacing: 0;
    text-transform: none;
}

main.ffn-data-page .results-info {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem 1rem;
}

/* Weekly data pages (decorateWeeklyDataHead in editorial-shell.js). */
main[data-fo-week] .ffn-fo-head nav[aria-label="Weekly data"] {
    margin: 0;
}

main[data-fo-week] .ffn-fo-notes p {
    margin: 0;
}

main[data-fo-week] .ffn-fo-notes p + p {
    margin-top: 0.2rem;
}

/* Board titles read like the numbered section heads on the other data pages. */
main[data-fo-week] .ffn-pilot-shell > .ffn-pilot-section:not(.ffn-fo-head) > h2 {
    margin: 2rem 0 1rem;
    padding-bottom: 0.75rem;
    border-bottom: 1px solid var(--ffn-ed-border);
    color: var(--ffn-ed-text);
    font-family: var(--ffn-ed-font-mono);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.4;
    text-transform: uppercase;
}

main.ffn-fo-numbered .ffn-pilot-shell {
    counter-reset: ffn-fo-section 1;
}

main.ffn-fo-numbered .ffn-pilot-shell > .ffn-pilot-section:not(.ffn-fo-head) > h2::before {
    counter-increment: ffn-fo-section;
    content: counter(ffn-fo-section, decimal-leading-zero) " // ";
}

/* Callouts that sit above a board keep a gap before it. */
main.ffn-data-page .ffn-pilot-section > :is(.ffn-pilot-page-note, .ffn-season-banner, .ffn-data-notice-banner):not(:last-child) {
    margin-bottom: 1rem;
}

/* Linked player names keep their team color. */
.ffn-data-page .rankings-table .has-team-tint .player-name-cell > a:not([class]) {
    color: inherit;
}

/* ---- Title band (2026-09-25 PM3) ----
   Data and tool pages open like the homepage and About hero: blue-dot pill eyebrow, big title ending in the
   homepage's gradient period, roomy lead, then the summary as white rounded cards (the homepage panel look). */
main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline {
    align-items: center;
    margin: 0.5rem 0 1.75rem;
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline-text {
    gap: 0;
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline .ffn-pilot-eyebrow,
main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline .ffn-page-headline-text > .eyebrow {
    display: inline-flex;
    align-items: center;
    align-self: flex-start;
    gap: 0.55rem;
    margin: 0 0 1.1rem;
    padding: 0.45rem 0.75rem;
    border: 1px solid var(--ffn-ed-border);
    border-radius: var(--ffn-ed-radius-pill);
    background: var(--ffn-ed-surface);
    color: var(--ffn-ed-text-muted);
    font: 700 0.7rem/1.2 var(--ffn-ed-font-mono);
    letter-spacing: 0.14em;
    text-transform: uppercase;
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline .ffn-page-headline-text > .eyebrow::before {
    content: "";
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    background: var(--ffn-ed-accent);
    box-shadow: 0 0 0 0.2rem rgba(0, 87, 255, 0.14);
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline-title {
    font-size: clamp(2.8rem, 6vw, 5.2rem);
    line-height: 0.9;
    letter-spacing: -0.055em;
}

/* The homepage's blue period ("Nerds.") closes every page title. */
main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline-title::after {
    content: ".";
    color: #0b74d1;
}

@supports ((background-clip: text) or (-webkit-background-clip: text)) {
    main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline-title::after {
        background: linear-gradient(110deg, #2563eb, #4f46e5);
        background-clip: text;
        -webkit-background-clip: text;
        color: transparent;
        -webkit-text-fill-color: transparent;
    }

    html[data-theme="dark"] main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline-title::after {
        background: linear-gradient(110deg, #60a5fa, #818cf8);
        background-clip: text;
        -webkit-background-clip: text;
    }
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline-sub {
    max-width: 46rem;
    margin: 1.1rem 0 0;
    color: var(--ffn-ed-text-muted);
    font-size: 1.08rem;
    line-height: 1.7;
}

/* Summary: four white rounded cards instead of a ruled table. */
main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.9rem;
    padding: 0;
    border: 0;
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-item,
main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-item:first-child {
    gap: 0.35rem;
    padding: 1.1rem 1.25rem;
    border: 1px solid var(--ffn-ed-border);
    border-radius: 1.25rem;
    background: var(--ffn-ed-surface);
    box-shadow: var(--ffn-ed-shadow-soft);
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-label {
    font-size: 0.64rem;
    letter-spacing: 0.14em;
}

main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-value {
    margin-top: 0.15rem;
    overflow: hidden;
    font-size: clamp(1.5rem, 2.3vw, 2rem);
    text-overflow: ellipsis;
    white-space: nowrap;
}

html[data-theme="dark"] main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-item {
    border-color: var(--ffn-ed-border);
    background: var(--ffn-ed-surface);
    box-shadow: none;
}

@media (max-width: 768px) {
    main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 0.6rem;
    }

    main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-item,
    main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-item:first-child,
    main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-item:nth-child(n+3) {
        margin-top: 0;
        padding: 0.9rem 1rem;
        border: 1px solid var(--ffn-ed-border);
        border-radius: 1rem;
    }

    main:is(.ffn-data-page, .ffn-tool-page) .ffn-page-headline-sub {
        font-size: 1rem;
    }

    main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-value {
        font-size: 1.35rem;
        line-height: 1.05;
        white-space: normal;
    }
}

/* ---- Board look (2026-09-26) ----
   The /rankings redesign carried to every public data and tool page: no title nerd, a tighter
   head-to-board rhythm, compact stat cards, and the homepage endzone as the footer. Admin sandbox
   pages keep their look. The selector beats body[data-ffn-shell] .ffn-pilot-page and the title band. */
body[data-ffn-shell="editorial"] main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) {
    padding-top: 2.25rem;
    padding-bottom: 0;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-page-field {
    bottom: 0;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) :is(.ffn-title-nerd, .ffn-title-nerd-cluster, .dk-title-nerd) {
    display: none;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-pilot-breadcrumbs {
    margin-bottom: 0.9rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-page-headline {
    margin: 0 0 1.1rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-page-headline .ffn-pilot-eyebrow {
    margin-bottom: 0.8rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-page-headline-sub {
    margin-top: 0.7rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-pilot-shell > .ffn-pilot-section {
    margin-top: 1.5rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-pilot-section-head {
    margin-bottom: 0.7rem;
    padding-bottom: 0.6rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-pilot-section > .ffn-season-banner:not(:last-child) {
    margin-bottom: 0.7rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-stat-strip {
    gap: 0.7rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-stat-strip-item,
main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-stat-strip-item:first-child {
    padding: 0.85rem 1rem 0.9rem;
    border-radius: 1rem;
}

main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) > .ffn-pilot-section:has(> .ffn-pilot-section-panel > .ffn-pilot-link-grid) {
    margin-top: 2.5rem;
}

@media (max-width: 720px) {
    body[data-ffn-shell="editorial"] main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) {
        padding-top: 1.5rem;
    }

    main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page) .ffn-stat-strip {
        gap: 0.55rem;
    }
}

/* Endzone footer: the homepage paint (.ffn-home-endzone in editorial-pilot.css) on the page-level
   #footer, so generated pages get it too. Same paint in both themes, so tokens are pinned. */
body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer {
    --ffn-ed-text: #f3f7ff;
    --ffn-ed-text-muted: #c9d6ec;
    --ffn-ed-text-soft: #93a7c9;
    --ffn-ed-border: rgba(243, 247, 255, 0.16);
    --ffn-ed-border-strong: rgba(243, 247, 255, 0.26);
    --ffn-ed-surface: #0b1a33;
    --ffn-ed-surface-strong: #0c1c38;
    --ffn-ed-accent: #2f7bff;
    position: relative;
    z-index: 1;
    margin-top: 3rem;
    padding: clamp(1.8rem, 4vw, 2.6rem) clamp(1.1rem, 4vw, 3rem);
    border-top: 4px solid rgba(243, 247, 255, 0.92);
    border-bottom: 4px solid rgba(243, 247, 255, 0.8);
    background:
        repeating-linear-gradient(-45deg, rgba(243, 247, 255, 0.032) 0 26px, rgba(243, 247, 255, 0) 26px 52px),
        radial-gradient(ellipse 80% 70% at 50% 0%, rgba(47, 123, 255, 0.26), transparent 62%),
        linear-gradient(178deg, #0c2247 0%, #0a1c3b 58%, #071228 100%);
    box-shadow:
        inset 0 3px 16px -4px rgba(243, 247, 255, 0.22),
        inset 0 30px 70px -40px rgba(2, 8, 20, 0.75),
        inset 0 -26px 60px -40px rgba(2, 8, 20, 0.65);
}

/* Corner pylons: the front pair on the goal line, the back pair on the end line */
body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer::before,
body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer::after {
    content: "";
    position: absolute;
    left: 8px;
    right: 8px;
    height: 26px;
    background:
        linear-gradient(180deg, #ffa04d 0%, #f4610f 70%, #d9530c 100%) left / 10px 100% no-repeat,
        linear-gradient(180deg, #ffa04d 0%, #f4610f 70%, #d9530c 100%) right / 10px 100% no-repeat;
    pointer-events: none;
}

body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer::before { top: -15px; }
body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer::after { bottom: -15px; }

body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer {
    max-width: 1080px;
    margin-top: 0;
    padding: 0;
}

body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-inner {
    padding: 1.4rem 1.6rem 1.5rem;
    gap: 1.4rem 2rem;
    border: 1px solid var(--ffn-ed-border);
    border-radius: 1rem;
    background: var(--ffn-ed-surface);
    box-shadow: 0 18px 44px -22px rgba(2, 8, 20, 0.8);
}

body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-heading { margin-bottom: 0.55rem; }
body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-copy { font-size: 0.85rem; line-height: 1.55; }
body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-list { gap: 0.4rem; }
body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-list a { font-size: 0.82rem; }

body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-inner > section:nth-child(3) .ffn-ed-footer-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 1.1rem;
}

body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-legal {
    margin-top: 1rem;
    color: var(--ffn-ed-text-soft);
    font-size: 0.7rem;
}

body:has(> main:is(.ffn-data-page, .ffn-tool-page):not(.admin-sandbox-page)) > #footer .ffn-ed-footer-list a:is(:hover, :focus-visible) {
    color: #ffffff;
}

/* ---- UI/UX sweep (2026-09-26 AM) ----
   Sitewide pass: light/dark contrast, phone layout and tap-target fixes found by the
   46-page sweep (proof ~/runtime/ffn-uiux-sweep-20260926/). */

/* Stat strip notes wrap on phones instead of ending in an ellipsis ("Results through Wee..."). */
main:is(.ffn-data-page, .ffn-tool-page) .ffn-stat-strip-sub {
    overflow: visible;
    text-overflow: clip;
    white-space: normal;
}

/* Phone cards: fields flow in compact rows (three across when they fit) and the last row stretches,
   so there are no empty half-cells and a start/sit card is about a third shorter. */
@media (max-width: 640px) {
    .ffn-mobile-table-card {
        gap: 0.5rem;
        padding: 0.7rem;
    }
    .ffn-mobile-table-grid {
        display: flex;
        flex-wrap: wrap;
        gap: 0.35rem;
    }
    .ffn-mobile-table-grid > .ffn-mobile-table-field {
        flex: 1 1 6.2rem;
        min-height: 0;
        padding: 0.4rem 0.5rem;
    }
    .ffn-mobile-table-grid > .ffn-mobile-table-field strong {
        font-size: 0.84rem;
    }
    .ffn-mobile-table-card-head.has-no-rank {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* Position text colors: AA on white, lifted on navy. */
.pos-qb { color: #dc2626; }
.pos-rb { color: #1d4ed8; }
.pos-wr { color: #047857; }
.pos-te { color: #b45309; }
html[data-theme="dark"] .pos-qb { color: #f87171; }
html[data-theme="dark"] .pos-rb { color: #93c5fd; }
html[data-theme="dark"] .pos-wr { color: #6ee7b7; }
html[data-theme="dark"] .pos-te { color: #fcd34d; }
html[data-theme="dark"] .pos-k { color: #c4b5fd; }
html[data-theme="dark"] .pos-def { color: #a5b4fc; }

/* Matchup intelligence: dark-mode pills and schedule chips (light inks sat under 2:1 on navy). */
html[data-theme="dark"] .ffn-data-page--matchups .matchup-grade-pill,
html[data-theme="dark"] .ffn-data-page--matchups .matchup-game-chip {
    background: rgba(99, 180, 255, 0.14);
    color: #93c5fd;
}
html[data-theme="dark"] .ffn-data-page--matchups .matchup-grade-pill[data-grade="good"],
html[data-theme="dark"] .ffn-data-page--matchups .matchup-game-chip[data-grade="good"] {
    background: rgba(52, 211, 153, 0.14);
    color: #6ee7b7;
}
html[data-theme="dark"] .ffn-data-page--matchups .matchup-grade-pill[data-grade="bad"],
html[data-theme="dark"] .ffn-data-page--matchups .matchup-game-chip[data-grade="bad"] {
    background: rgba(244, 114, 182, 0.14);
    color: #f9a8d4;
}

/* Team index cards follow the theme (they were navy in light mode too). */
.ffn-player-directory-card[data-team] {
    border-top: 1px solid var(--ffn-ed-border);
    border-right: 1px solid var(--ffn-ed-border);
    border-bottom: 1px solid var(--ffn-ed-border);
    background: var(--ffn-ed-surface);
    box-shadow: var(--ffn-ed-shadow-soft);
}
.ffn-player-directory-card[data-team]:hover {
    background: var(--ffn-ed-surface);
    border-top-color: var(--ffn-ed-accent);
    border-right-color: var(--ffn-ed-accent);
    border-bottom-color: var(--ffn-ed-accent);
}
.ffn-player-directory-card[data-team] strong {
    color: var(--ffn-team-ink, var(--ffn-ed-text));
}
.ffn-player-directory-card[data-team] p {
    color: var(--ffn-ed-text-muted);
}
.ffn-player-directory-card[data-team] span {
    color: var(--ffn-ed-text-soft);
    font-family: var(--ffn-ed-font-mono);
    font-weight: 700;
    letter-spacing: 0.06em;
}
html[data-theme="dark"] .ffn-player-directory-card[data-team] strong {
    color: var(--ffn-team-ink-on-dark, var(--ffn-ed-text));
}

/* Tap targets on phones: coach names, news source links, draft kit resource links. */
@media (max-width: 768px) {
    .coach-trigger {
        display: inline-flex;
        align-items: center;
        min-height: 1.75rem;
    }
    .ffn-tool-page--news .news-wire-actions a,
    .ffn-tool-page--news .news-wire-status a {
        display: inline-flex;
        align-items: center;
        min-height: 2.75rem;
        padding: 0 0.35rem;
    }
    .resource-item a {
        min-height: 2.75rem;
    }
}

/* News wire paging button */
.news-wire-more {
    display: flex;
    margin: 1.25rem auto 0.5rem;
}

/* Injuries: team rows read left-aligned when a long name wraps; the count already appears in the
   "N reviewed updates" line, so the extra count pill is dropped; recovery source links use the site link color. */
.ffn-data-page--injuries .ffn-accordion {
    text-align: left;
}
.ffn-data-page--injuries .ffn-accordion__count {
    display: none;
}
.ffn-data-page--injuries #injuryReferenceList a {
    color: var(--ffn-ed-accent);
    text-underline-offset: 0.2em;
}

/* Neutral grade pill keeps a visible edge on pale table cells. */
.value-pill--fair {
    box-shadow: inset 0 0 0 1px rgba(85, 99, 119, 0.22);
}

/* Injury status severity in Front Office tables (is-flagged stays amber). */
table[data-fo-decorated] td.is-cleared { color: #047857; font-weight: 700; }
table[data-fo-decorated] td.is-out { color: #b91c1c; font-weight: 700; }
html[data-theme="dark"] table[data-fo-decorated] td.is-cleared { color: #6ee7b7; }
html[data-theme="dark"] table[data-fo-decorated] td.is-out { color: #fca5a5; }

/* Hidden notices stay hidden: banner display rules were beating the [hidden] attribute and left an
   empty rounded strip with a blue edge on /coaches (and other pages when no notice is due). */
main:is(.ffn-data-page, .ffn-tool-page) [hidden],
main:is(.ffn-data-page, .ffn-tool-page) :is(.ffn-data-notice-banner, .ffn-season-banner, .ffn-pilot-page-note)[hidden] {
    display: none !important;
}

/* Tabular numerals widen Inter's hyphen, so names and notes read "Depth - chart" / "Smith - Njigba".
   Keep tabular figures on number cells only. */
:is(.contracts-table, .rankings-table) :is(.player-name-cell, .contracts-cell:not(.data-cell)),
:is(.contracts-table, .rankings-table) td:not(.data-cell):not(.is-num):not(.is-rank):not(.rank-cell) {
    font-variant-numeric: normal;
}

/* Matchup intelligence tables on phones: each team becomes a stacked row (rank, team, grade on top,
   then labeled score and games) instead of a 760px table showing only Rank and Team. */
@media (max-width: 640px) {
    .ffn-data-page--matchups .matchup-table-wrap {
        overflow-x: visible;
    }
    .ffn-data-page--matchups .matchup-table {
        min-width: 0;
    }
    .ffn-data-page--matchups .matchup-table thead {
        display: none;
    }
    .ffn-data-page--matchups .matchup-table,
    .ffn-data-page--matchups .matchup-table tbody {
        display: block;
    }
    .ffn-data-page--matchups .matchup-table tr {
        display: grid;
        grid-template-columns: 2.6rem minmax(0, 1fr) auto;
        align-items: center;
        gap: 0.4rem 0.6rem;
        padding: 0.75rem 0.85rem;
        border-bottom: 1px solid var(--ffn-ed-border);
    }
    .ffn-data-page--matchups .matchup-table tr:last-child {
        border-bottom: 0;
    }
    .ffn-data-page--matchups .matchup-table td {
        display: block;
        width: auto;
        max-width: none;
        padding: 0;
        border: 0;
    }
    .ffn-data-page--matchups .matchup-table td[colspan],
    .ffn-data-page--matchups .matchup-table td:nth-child(n + 4) {
        grid-column: 1 / -1;
    }
    #matchupRankingBody td:nth-child(n + 4)::before,
    #matchupWeekBody td:nth-child(n + 5)::before,
    #matchupWeekBody td:nth-child(3)::before {
        margin-right: 0.45rem;
        color: var(--ffn-ed-text-soft);
        font-family: var(--ffn-ed-font-mono);
        font-size: 0.66rem;
        font-weight: 800;
        letter-spacing: 0.08em;
        text-transform: uppercase;
    }
    .ffn-data-page--matchups .matchup-table td:nth-child(2) {
        min-width: 0;
        overflow: hidden;
    }
    .ffn-data-page--matchups .matchup-table .matchup-team-cell {
        min-width: 0;
        max-width: 100%;
    }
    #matchupRankingBody td:nth-child(4)::before { content: "Score"; }
    #matchupRankingBody td:nth-child(5)::before { content: "Best"; }
    #matchupRankingBody td:nth-child(6)::before { content: "Tough"; }
    /* Weekly table: rank, team, grade on top; opponent, score, context below. */
    #matchupWeekBody td:nth-child(3) { grid-column: 1 / -1; grid-row: 2; }
    #matchupWeekBody td:nth-child(4) { grid-column: 3; grid-row: 1; }
    #matchupWeekBody td:nth-child(3)::before { content: "Opponent"; }
    #matchupWeekBody td:nth-child(5)::before { content: "Score"; }
    #matchupWeekBody td:nth-child(6)::before { content: "Context"; }
}

/* Weather on phones: the 7-day forecast is one swipeable row (it wrapped 3+3+1), and the
   forecast heading sits above its source badge instead of squeezing beside it. */
@media (max-width: 640px) {
    .ffn-data-page--weather .weather-forecast-grid {
        display: flex;
        gap: 0.5rem;
        overflow-x: auto;
        scroll-snap-type: x proximity;
        scrollbar-width: none;
        padding-bottom: 0.25rem;
        -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 2rem), transparent);
        mask-image: linear-gradient(90deg, #000 calc(100% - 2rem), transparent);
    }
    .ffn-data-page--weather .weather-forecast-grid::-webkit-scrollbar {
        display: none;
    }
    .ffn-data-page--weather .weather-forecast-grid > .forecast-day {
        flex: 0 0 6.2rem;
        scroll-snap-align: start;
    }
    .ffn-data-page--weather .weather-forecast-head {
        flex-direction: column;
        align-items: flex-start;
        gap: 0.4rem;
    }
}

/* Bye weeks: cards flow in columns so short weeks don't leave holes and the last week isn't
   stranded alone on its own row; the next-bye outline stays visible in dark mode. */
@media (min-width: 641px) {
    .ffn-data-page--byes .bye-weeks-container {
        display: block;
        columns: 18rem;
        column-gap: 0.75rem;
    }
    .ffn-data-page--byes .bye-weeks-container > .bye-week-card {
        break-inside: avoid;
        margin-bottom: 0.75rem;
    }
}
html[data-theme="dark"] .ffn-data-page--byes .bye-week-card.is-next {
    border-color: var(--ffn-ed-accent);
    box-shadow: 0 0 0 2px rgba(99, 180, 255, 0.28);
}

/* Schedule on phones: venue and line details read as plain text lines, not pills whose text wraps
   inside a rounded shape. */
@media (max-width: 640px) {
    .ffn-data-page--schedule .schedule-game-meta {
        gap: 0.2rem 0.75rem;
    }
    .ffn-data-page--schedule .schedule-game-meta span {
        min-height: 0;
        padding: 0;
        background: none;
        font-size: 0.78rem;
    }
}

/* DST phone cards: full team name beside the team chip. */
.ffn-mobile-table-title .ffn-mobile-team-name {
    margin-left: 0.35rem;
    vertical-align: middle;
}

/* Coaches on phones: role and name share one row, so each team card is about half as tall. */
@media (max-width: 640px) {
    .ffn-data-page--coaches .coach-info {
        display: grid;
        grid-template-columns: minmax(0, 1fr) auto;
        align-items: center;
        column-gap: 0.75rem;
        margin-bottom: 0.45rem;
        padding: 0.5rem 0.75rem;
    }
    .ffn-data-page--coaches .coach-info > :not(.coach-role):not(.coach-name) {
        grid-column: 1 / -1;
    }
    .ffn-data-page--coaches .coach-info .coach-name {
        order: -1;
    }
}
