/*
 * UPTimePress cosmetic layer: colors, type, spacing, radii and shadows, all read from the design
 * tokens defined in uptimepress-base.css. A theme can restyle by setting tokens, by overriding
 * these rules (enqueue its stylesheet with 'uptimepress' as a dependency so it loads after this
 * one), or by dropping this file entirely (`uptimepress_enqueue_theme_css` filter). See
 * readme.txt, "Theming".
 *
 * Card text rules are scoped `.uptimepress-panel .uptimepress-card ...`: three classes beat
 * Salient's heading rules (`body h4, .row .col h4`, two classes and an element), which are sized
 * for full-width page headlines.
 */

.uptimepress-panel {
    margin-bottom: var(--uptimepress-panel-spacing);
    font-family: var(--uptimepress-font);
}

.uptimepress-heading {
    margin-bottom: 0.75em;
}

/* ---- Card ----------------------------------------------------------------------------------- */

.uptimepress-card-image {
    background: var(--uptimepress-image-bg);
}

.uptimepress-badge {
    background: var(--uptimepress-badge-bg);
    color: var(--uptimepress-badge-text);
    font-size: var(--uptimepress-badge-size);
    font-weight: 600;
    letter-spacing: 0.03em;
    padding: 3px 9px;
    border-radius: var(--uptimepress-radius);
}

.uptimepress-daybadge {
    color: var(--uptimepress-badge-text);
    font-size: var(--uptimepress-daybadge-size);
    font-weight: 700;
    line-height: 1.15;
    padding: 4px 7px;
    border-radius: var(--uptimepress-radius);
}

.uptimepress-daybadge--sun { background-color: var(--uptimepress-day-sun); }
.uptimepress-daybadge--mon { background-color: var(--uptimepress-day-mon); }
.uptimepress-daybadge--tue { background-color: var(--uptimepress-day-tue); }
.uptimepress-daybadge--wed { background-color: var(--uptimepress-day-wed); }
.uptimepress-daybadge--thu { background-color: var(--uptimepress-day-thu); }
.uptimepress-daybadge--fri { background-color: var(--uptimepress-day-fri); }
.uptimepress-daybadge--sat { background-color: var(--uptimepress-day-sat); }

/* Explicit background + text color: the section a panel is placed in is often a dark theme
 * background (e.g. the red banding around the show panel), and the card needs to read as its own
 * panel regardless of what it's sitting on. */
.uptimepress-card-body {
    padding: var(--uptimepress-card-padding);
    background: var(--uptimepress-card-bg);
    color: var(--uptimepress-text);
}

.uptimepress-card-cta {
    padding-top: 8px;
}

.uptimepress-panel .uptimepress-card .uptimepress-card-title {
    margin: 0 0 4px;
    font-size: var(--uptimepress-title-size);
    line-height: var(--uptimepress-title-line-height);
    font-weight: var(--uptimepress-title-weight);
    color: var(--uptimepress-text);
}

/* line-height explicitly set — without it, these inherit whatever the theme sets on a generic
 * div (commonly 1.5-1.8), which makes the fixed card body's text budget non-deterministic. */
.uptimepress-panel .uptimepress-card .uptimepress-card-date,
.uptimepress-panel .uptimepress-card .uptimepress-card-venue,
.uptimepress-panel .uptimepress-card .uptimepress-card-schedule,
.uptimepress-panel .uptimepress-card .uptimepress-card-teacher {
    font-size: var(--uptimepress-meta-size);
    line-height: var(--uptimepress-meta-line-height);
    color: var(--uptimepress-text);
    opacity: var(--uptimepress-meta-opacity);
    margin: 0 0 4px;
}

.uptimepress-panel .uptimepress-card .uptimepress-card-summary,
.uptimepress-panel .uptimepress-card .uptimepress-card-prereq {
    font-size: var(--uptimepress-summary-size);
    line-height: var(--uptimepress-summary-line-height);
    color: var(--uptimepress-text);
    margin: 6px 0;
}

/* "+N more dates" under a deduped row's date line: a secondary hint, deliberately muted. */
.uptimepress-panel .uptimepress-card .uptimepress-card-more-dates {
    font-size: var(--uptimepress-small-size);
    color: var(--uptimepress-text);
    opacity: var(--uptimepress-muted-opacity);
    margin: 0 0 4px;
}

/* Small pill, matching the website preview's tile CTA (WebsitePublishingPane.jsx's TileCard) —
 * deliberately not Salient's own `nectar-button` (too large for the card's fixed CTA row). */
.uptimepress-panel .uptimepress-card .uptimepress-ticket-button {
    font-size: var(--uptimepress-button-size);
    font-weight: var(--uptimepress-button-weight);
    letter-spacing: 0.03em;
    text-transform: uppercase;
    background: var(--uptimepress-accent);
    color: var(--uptimepress-accent-text);
    padding: var(--uptimepress-button-padding);
    border-radius: var(--uptimepress-button-radius);
    text-decoration: none;
    line-height: 1.4;
    transition: background-color 0.15s ease;
}

.uptimepress-panel .uptimepress-card .uptimepress-ticket-button:hover {
    background: var(--uptimepress-accent-hover);
}

.uptimepress-panel .uptimepress-card .uptimepress-ticket-button.uptimepress-waitlist,
.uptimepress-panel .uptimepress-card .uptimepress-ticket-button.uptimepress-waitlist-link {
    background: var(--uptimepress-waitlist-bg);
    opacity: 0.8;
}

/* The fallback show and class pages' ticket buttons: the card button's look, not its size. */
.uptimepress-event .uptimepress-ticket-button {
    display: inline-block;
    font-weight: var(--uptimepress-button-weight);
    letter-spacing: 0.03em;
    text-transform: uppercase;
    background: var(--uptimepress-accent);
    color: var(--uptimepress-accent-text);
    padding: 8px 16px;
    border-radius: var(--uptimepress-button-radius);
    text-decoration: none;
}

.uptimepress-event .uptimepress-ticket-button:hover {
    background: var(--uptimepress-accent-hover);
}

.uptimepress-event .uptimepress-ticket-button.uptimepress-waitlist,
.uptimepress-event .uptimepress-ticket-button.uptimepress-waitlist-link {
    background: var(--uptimepress-waitlist-bg);
}

.uptimepress-event .uptimepress-ticket-button.uptimepress-closed,
.uptimepress-event .uptimepress-ticket-button.uptimepress-closed:hover {
    background: var(--uptimepress-closed-bg);
    color: var(--uptimepress-closed-text);
}

/* Registration or sales closed: inactive, not a button. */
.uptimepress-panel .uptimepress-card .uptimepress-ticket-button.uptimepress-closed,
.uptimepress-panel .uptimepress-card .uptimepress-ticket-button.uptimepress-closed:hover {
    background: var(--uptimepress-closed-bg);
    color: var(--uptimepress-closed-text);
}

/* Clickable-card affordance: a subtle lift on hover (and focus, in uptimepress-base.css) makes it
 * clear the whole card, not just the ticket button, is interactive. */
.uptimepress-card[data-uptimepress-card] {
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.uptimepress-card[data-uptimepress-card]:hover {
    transform: translateY(var(--uptimepress-card-hover-lift));
    box-shadow: var(--uptimepress-card-hover-shadow);
    outline: none;
}

/* ---- Panel messages ------------------------------------------------------------------------- */

.uptimepress-error {
    color: var(--uptimepress-error-text);
    font-size: var(--uptimepress-notice-size);
    padding: 8px 12px;
    background: var(--uptimepress-error-bg);
    border-radius: var(--uptimepress-radius);
}

.uptimepress-empty {
    opacity: 0.6;
    font-style: italic;
}

.uptimepress-stale-notice {
    font-size: var(--uptimepress-small-size);
    opacity: var(--uptimepress-muted-opacity);
    margin-top: 8px;
}

/* ---- Overlay and modal ---------------------------------------------------------------------- */

.uptimepress-overlay {
    background: var(--uptimepress-overlay-bg);
}

.uptimepress-modal {
    background: var(--uptimepress-modal-bg);
    color: var(--uptimepress-text);
    font-family: var(--uptimepress-font);
    border-radius: var(--uptimepress-modal-radius);
    box-shadow: var(--uptimepress-modal-shadow);
}

.uptimepress-modal-close {
    border: none;
    border-radius: 50%;
    background: var(--uptimepress-modal-close-bg);
    color: #fff;
    font-size: 20px;
    line-height: 1;
}

.uptimepress-modal-close:hover {
    background: var(--uptimepress-modal-close-bg-hover);
}

.uptimepress-modal-image {
    background: var(--uptimepress-image-bg);
}

.uptimepress-modal-body {
    padding: 24px 28px 28px;
}

.uptimepress-modal .uptimepress-modal-title {
    margin: 0 0 10px;
    font-size: var(--uptimepress-modal-title-size);
    line-height: 1.25;
    font-weight: 700;
    color: var(--uptimepress-text);
}

.uptimepress-modal .uptimepress-modal-meta {
    font-size: var(--uptimepress-modal-meta-size);
    line-height: 1.4;
    color: var(--uptimepress-text);
    opacity: var(--uptimepress-meta-opacity);
    margin: 0 0 6px;
}

.uptimepress-modal .uptimepress-modal-description {
    font-size: var(--uptimepress-modal-text-size);
    line-height: 1.6;
    color: var(--uptimepress-text);
    margin: 16px 0;
    white-space: pre-line;
}

.uptimepress-modal-cta-row {
    margin-top: 20px;
}

.uptimepress-modal .uptimepress-modal-cta {
    font-size: var(--uptimepress-modal-cta-size);
    font-weight: 700;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    background: var(--uptimepress-accent);
    color: var(--uptimepress-accent-text);
    padding: var(--uptimepress-modal-cta-padding);
    border-radius: var(--uptimepress-modal-cta-radius);
    text-decoration: none;
    line-height: 1.4;
    transition: background-color 0.15s ease;
}

.uptimepress-modal .uptimepress-modal-cta:hover {
    background: var(--uptimepress-accent-hover);
}

.uptimepress-modal .uptimepress-modal-cta.uptimepress-waitlist {
    background: var(--uptimepress-waitlist-bg);
    opacity: 0.8;
}

.uptimepress-modal .uptimepress-modal-cta.uptimepress-closed,
.uptimepress-modal .uptimepress-modal-cta.uptimepress-closed:hover {
    background: var(--uptimepress-closed-bg);
    color: var(--uptimepress-closed-text);
}

@media (max-width: 690px) {
    .uptimepress-modal {
        border-radius: 0;
    }

    .uptimepress-modal .uptimepress-modal-title {
        font-size: var(--uptimepress-modal-title-size-mobile);
    }
}
