/*
 * Cross-theme contrast guard.
 *
 * Seasonal and admin-selected themes may change the shared --relaxed-* tokens
 * to a dark palette, while many feature pages still contain intentionally
 * light cards. Keep those functional surfaces readable without changing their
 * markup or overriding status badges/alerts.
 */

body.site-app {
    --front-readable-surface: rgba(255, 253, 249, 0.97);
    --front-readable-surface-soft: rgba(246, 249, 252, 0.98);
    --front-readable-text: #203449;
    --front-readable-muted: #52697d;
    --front-readable-border: rgba(185, 199, 212, 0.72);
    --front-readable-shadow: 0 18px 42px rgba(20, 43, 64, 0.16);
}

/*
 * Functional pages were authored with light content cards. Restore that
 * contract after an optional dark theme stylesheet has been loaded.
 */
body.site-app:not(.home-premium-page) :is(
    .hero-panel,
    .quote-card,
    .rule-card,
    .photo-highlight,
    .photo-category-list,
    .guild-calendar-card,
    .guild-feature-card,
    .ig-feed-card,
    .home-announcement-card,
    .mainland-news-card,
    .official-news-card,
    .relaxed-video-card,
    .video-category-wrapper,
    .home-filter-bar,
    .bounty-card,
    .bounty-item,
    .lottery-hero,
    .lottery-event-card,
    .lottery-history-card,
    .history-intro-card,
    .history-card,
    .modal-content,
    .offcanvas,
    .list-group-item,
    .card:not(.bg-dark):not([class*="text-bg-"])
) {
    color: var(--front-readable-text) !important;
    border-color: var(--front-readable-border) !important;
    background: var(--front-readable-surface) !important;
    box-shadow: var(--front-readable-shadow);
}

body.site-app:not(.home-premium-page) :is(.bg-white, .bg-light, .bg-light-subtle) {
    --relaxed-text: var(--front-readable-text);
    --relaxed-muted: var(--front-readable-muted);
    --bs-body-color: var(--front-readable-text);
    --bs-secondary-color: var(--front-readable-muted);
    color: var(--front-readable-text) !important;
}

/*
 * Feature pages also define their own light cards after this stylesheet is
 * loaded. Do not replace those page-specific backgrounds; only restore the
 * dark foreground contract that a seasonal dark theme can no longer provide.
 */
body.site-app:not(.home-premium-page) :is(
    .feedback-card,
    .relationship-card,
    .relationship-hero,
    .relationship-radial-card,
    .relationship-radial-wrap,
    .relationship-radial-center,
    .relationship-radial-node,
    .dragon-tiger-role-hero,
    .dragon-tiger-role-card,
    .dragon-tiger-card,
    .dragon-tiger-registration-timeline-row,
    .gameplay-hero,
    .gameplay-card,
    .gameplay-detail-card,
    .gameplay-related-item,
    .guild-members-hero,
    .guild-members-search,
    .guild-member-card,
    .member-show-info,
    .officer-intro-hero,
    .officer-intro-card,
    .officer-intro-role-check,
    .officer-intro-participant,
    .officer-intro-club-filter,
    .officer-intro-demand-participant,
    .officer-intro-club-pane,
    .officer-intro-selected-teammate,
    .support-panel,
    .mbti-compat-shell,
    .mbti-compat-hint,
    .mbti-compat-detail-card,
    .mbti-compat-ranking-card,
    .tournament-overview-panel,
    .entry-image-editor-left,
    .entry-image-editor-right,
    .entry-image-editor-choice,
    .entry-image-editor-hint,
    .entry-image-editor-panel,
    .member-media-card,
    .member-upload-file-item,
    .member-notification-hero,
    .member-notification-card,
    .member-notification-item,
    .member-showcase-card,
    .member-record-hero,
    .member-record-card,
    .member-record-stat,
    .member-task-item,
    .member-reward-hero,
    .member-reward-card,
    .member-reward-item,
    .lottery-result-box
) {
    --relaxed-text: var(--front-readable-text);
    --relaxed-muted: var(--front-readable-muted);
    --bs-body-color: var(--front-readable-text);
    --bs-secondary-color: var(--front-readable-muted);
    color: var(--front-readable-text) !important;
}

body.site-app:not(.home-premium-page) :is(
    .feedback-card,
    .relationship-card,
    .relationship-hero,
    .relationship-radial-card,
    .relationship-radial-wrap,
    .relationship-radial-center,
    .relationship-radial-node,
    .dragon-tiger-role-hero,
    .dragon-tiger-role-card,
    .dragon-tiger-card,
    .dragon-tiger-registration-timeline-row,
    .gameplay-hero,
    .gameplay-card,
    .gameplay-detail-card,
    .gameplay-related-item,
    .guild-members-hero,
    .guild-members-search,
    .guild-member-card,
    .member-show-info,
    .officer-intro-hero,
    .officer-intro-card,
    .officer-intro-role-check,
    .officer-intro-participant,
    .officer-intro-club-filter,
    .officer-intro-demand-participant,
    .officer-intro-club-pane,
    .officer-intro-selected-teammate,
    .support-panel,
    .mbti-compat-shell,
    .mbti-compat-hint,
    .mbti-compat-detail-card,
    .mbti-compat-ranking-card,
    .tournament-overview-panel,
    .entry-image-editor-left,
    .entry-image-editor-right,
    .entry-image-editor-choice,
    .entry-image-editor-hint,
    .entry-image-editor-panel,
    .member-media-card,
    .member-upload-file-item,
    .member-notification-hero,
    .member-notification-card,
    .member-notification-item,
    .member-showcase-card,
    .member-record-hero,
    .member-record-card,
    .member-record-stat,
    .member-task-item,
    .member-reward-hero,
    .member-reward-card,
    .member-reward-item,
    .lottery-result-box,
    .bg-white,
    .bg-light,
    .bg-light-subtle
) :is(
    h1,
    h2,
    h3,
    h4,
    h5,
    h6,
    .card-title,
    .form-label
) {
    color: var(--front-readable-text) !important;
}

body.site-app:not(.home-premium-page) :is(
    .feedback-card,
    .relationship-card,
    .relationship-hero,
    .relationship-radial-card,
    .relationship-radial-wrap,
    .relationship-radial-center,
    .relationship-radial-node,
    .dragon-tiger-role-hero,
    .dragon-tiger-role-card,
    .dragon-tiger-card,
    .dragon-tiger-registration-timeline-row,
    .gameplay-hero,
    .gameplay-card,
    .gameplay-detail-card,
    .gameplay-related-item,
    .guild-members-hero,
    .guild-members-search,
    .guild-member-card,
    .member-show-info,
    .officer-intro-hero,
    .officer-intro-card,
    .officer-intro-role-check,
    .officer-intro-participant,
    .officer-intro-club-filter,
    .officer-intro-demand-participant,
    .officer-intro-club-pane,
    .officer-intro-selected-teammate,
    .support-panel,
    .mbti-compat-shell,
    .mbti-compat-hint,
    .mbti-compat-detail-card,
    .mbti-compat-ranking-card,
    .tournament-overview-panel,
    .entry-image-editor-left,
    .entry-image-editor-right,
    .entry-image-editor-choice,
    .entry-image-editor-hint,
    .entry-image-editor-panel,
    .member-media-card,
    .member-upload-file-item,
    .member-notification-hero,
    .member-notification-card,
    .member-notification-item,
    .member-showcase-card,
    .member-record-hero,
    .member-record-card,
    .member-record-stat,
    .member-task-item,
    .member-reward-hero,
    .member-reward-card,
    .member-reward-item,
    .lottery-result-box,
    .bg-white,
    .bg-light,
    .bg-light-subtle
) :is(
    .text-muted,
    .text-secondary,
    .card-text,
    .form-text
) {
    color: var(--front-readable-muted) !important;
    opacity: 1 !important;
}

body.site-app:not(.home-premium-page) :is(
    .hero-panel,
    .quote-card,
    .rule-card,
    .photo-highlight,
    .photo-category-list,
    .guild-calendar-card,
    .guild-feature-card,
    .ig-feed-card,
    .home-announcement-card,
    .mainland-news-card,
    .official-news-card,
    .relaxed-video-card,
    .video-category-wrapper,
    .home-filter-bar,
    .bounty-card,
    .bounty-item,
    .lottery-hero,
    .lottery-event-card,
    .lottery-history-card,
    .history-intro-card,
    .history-card,
    .modal-content,
    .offcanvas,
    .list-group-item,
    .card:not(.bg-dark):not([class*="text-bg-"])
) :is(
    h1,
    h2,
    h3,
    h4,
    h5,
    h6,
    .card-title,
    .rule-title,
    .quote-text,
    .lottery-event-title,
    .history-title,
    .bounty-profession-name,
    .modal-title,
    .offcanvas-title
) {
    color: var(--front-readable-text) !important;
}

body.site-app:not(.home-premium-page) :is(
    .hero-panel,
    .quote-card,
    .rule-card,
    .photo-highlight,
    .photo-category-list,
    .guild-calendar-card,
    .guild-feature-card,
    .ig-feed-card,
    .home-announcement-card,
    .mainland-news-card,
    .official-news-card,
    .relaxed-video-card,
    .video-category-wrapper,
    .home-filter-bar,
    .bounty-card,
    .bounty-item,
    .lottery-hero,
    .lottery-event-card,
    .lottery-history-card,
    .history-intro-card,
    .history-card,
    .modal-content,
    .offcanvas,
    .list-group-item,
    .card:not(.bg-dark):not([class*="text-bg-"])
) :is(
    .text-muted,
    .text-secondary,
    .card-text,
    .rule-text,
    .page-lead,
    .form-label,
    .form-text,
    .bounty-meta,
    .history-note,
    .history-time,
    .history-summary,
    .lottery-meta
) {
    color: var(--front-readable-muted) !important;
    opacity: 1 !important;
}

/* Light controls remain legible inside restored light cards. */
body.site-app:not(.home-premium-page) :is(
    .form-control,
    .form-select,
    textarea,
    select
) {
    color: var(--front-readable-text) !important;
    border-color: #aebdca !important;
    background-color: var(--front-readable-surface-soft) !important;
}

body.site-app:not(.home-premium-page) :is(
    .form-control,
    .form-select,
    textarea,
    select
)::placeholder {
    color: #667d91 !important;
    opacity: 1;
}

body.site-app:not(.home-premium-page) :is(
    .form-control,
    .form-select,
    textarea,
    select
):focus {
    color: #172b3e !important;
    border-color: #6f8ca5 !important;
    background-color: #ffffff !important;
    box-shadow: 0 0 0 0.22rem rgba(84, 119, 148, 0.18);
}

body.site-app:not(.home-premium-page) :is(
    .form-control:disabled,
    .form-select:disabled,
    textarea:disabled,
    select:disabled
) {
    color: #65798b !important;
    background-color: #e7edf2 !important;
}

/* Keep data grids readable even when a theme changes Bootstrap table tokens. */
body.site-app:not(.home-premium-page) :is(
    .bounty-card,
    .lottery-event-card,
    .lottery-history-card,
    .history-card,
    .feedback-card,
    .relationship-card,
    .dragon-tiger-role-card,
    .dragon-tiger-card,
    .gameplay-card,
    .gameplay-detail-card,
    .guild-members-search,
    .guild-member-card,
    .member-show-info,
    .officer-intro-card,
    .support-panel,
    .mbti-compat-shell,
    .mbti-compat-detail-card,
    .mbti-compat-ranking-card,
    .tournament-overview-panel,
    .member-media-card,
    .member-notification-card,
    .member-showcase-card,
    .member-record-card,
    .member-reward-card,
    .lottery-result-box,
    .modal-content,
    .card:not(.bg-dark):not([class*="text-bg-"])
) .table {
    --bs-table-color: var(--front-readable-text);
    --bs-table-bg: transparent;
    --bs-table-striped-color: var(--front-readable-text);
    --bs-table-striped-bg: rgba(74, 104, 130, 0.06);
    --bs-table-hover-color: #152b3e;
    --bs-table-hover-bg: rgba(74, 104, 130, 0.1);
    color: var(--front-readable-text) !important;
}

/* Gold primary buttons need dark copy to pass contrast on both themes. */
body.site-app:not(.home-premium-page) .btn-relaxed-primary {
    color: #1d3042 !important;
    border-color: #cfaa59 !important;
    background: linear-gradient(135deg, #f4dfaa 0%, #dfbd72 100%) !important;
}

body.site-app:not(.home-premium-page) .btn-relaxed-primary:hover,
body.site-app:not(.home-premium-page) .btn-relaxed-primary:focus-visible {
    color: #13283a !important;
    border-color: #b88f3f !important;
    background: linear-gradient(135deg, #faeac0 0%, #e7c77f 100%) !important;
}

/*
 * Homepage premium skin intentionally stays dark. Only repair legacy light-card
 * copy that otherwise inherits brown/orange colors from the default theme.
 */
.home-premium-page .guild-day-event .guild-day-title {
    color: #172b3e !important;
}

.home-premium-page .section-kicker {
    color: #ffd1a8 !important;
}

.home-premium-page .ig-feed-badge {
    color: #ffffff !important;
    background-color: rgba(5, 12, 25, 0.86) !important;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.54);
}

.home-premium-page :is(
    .home-announcement-pagination,
    .mainland-news-section .relaxed-pagination,
    #home-official-news .relaxed-pagination,
    .js-official-pagination
) .page-item.active .page-link {
    color: #17283a !important;
}

/*
 * Non-home mobile menus use a light flyout, while the seasonal navbar skin
 * supplies pale desktop link colors later in front-relaxed.css. Re-establish
 * the light-surface foreground contract inside the collapsed menu.
 */
@media (max-width: 991.98px) {
    body.site-app:not(.home-premium-page) .relaxed-navbar .navbar-collapse {
        color: var(--front-readable-text) !important;
        border-color: var(--front-readable-border) !important;
        background: rgba(255, 253, 249, 0.99) !important;
    }

    body.site-app:not(.home-premium-page) .relaxed-navbar .navbar-collapse .nav-link {
        color: #2c4054 !important;
        text-shadow: none !important;
    }

    body.site-app:not(.home-premium-page) .relaxed-navbar .navbar-collapse .nav-link:hover,
    body.site-app:not(.home-premium-page) .relaxed-navbar .navbar-collapse .nav-link:focus,
    body.site-app:not(.home-premium-page) .relaxed-navbar .navbar-collapse .nav-link.active {
        color: #684816 !important;
        background: rgba(222, 187, 111, 0.22) !important;
    }

    body.site-app:not(.home-premium-page) .relaxed-navbar .navbar-collapse .dropdown-menu {
        border-color: var(--front-readable-border) !important;
        background: #fffdf9 !important;
    }

    body.site-app:not(.home-premium-page) .relaxed-navbar .navbar-collapse .dropdown-item {
        color: #2c4054 !important;
    }
}

@media (max-width: 767.98px) {
    body.site-app:not(.home-premium-page) :is(
        .hero-panel,
        .quote-card,
        .rule-card,
        .photo-highlight,
        .photo-category-list,
        .guild-calendar-card,
        .guild-feature-card,
        .ig-feed-card,
        .home-announcement-card,
        .mainland-news-card,
        .official-news-card,
        .relaxed-video-card,
        .video-category-wrapper,
        .home-filter-bar,
        .bounty-card,
        .bounty-item,
        .lottery-hero,
        .lottery-event-card,
        .lottery-history-card,
        .history-intro-card,
        .history-card,
        .modal-content,
        .offcanvas,
        .list-group-item,
        .card:not(.bg-dark):not([class*="text-bg-"])
    ) {
        box-shadow: 0 12px 28px rgba(20, 43, 64, 0.13);
    }
}
