/**
 * AIPressRoom Events Calendar — stylesheet
 *
 * Scope: every selector is prefixed with `body .aipr-events-calendar` (or
 * the page-specific wrapper) and most declarations carry !important. Both
 * are necessary, not defensive: the Bimber theme styles bare element
 * selectors, and a direct rule beats an inherited one no matter how
 * specific the inherited one is.
 *
 * The one rule that must never be broken: NO `display: … !important` on
 * anything JavaScript toggles. The filter engine sets display with
 * setProperty(…, 'important') and an equally-important stylesheet rule
 * would win over it on the wrong side.
 */

/* ========== FONT ========== */
/* Self-hosted rather than loaded from Google Fonts. Two reasons, in order:
   Google's font host is unreachable from mainland China, which is a stated
   part of this calendar's readership; and the page already carries ~50
   theme scripts, so one fewer third-party origin is worth having. Variable
   woff2, latin + latin-ext only.

   One face, not two. 3.0 set every figure in JetBrains Mono; 3.1 drops it.
   Of nine event listing pages measured on 2026-09-13 (Luma, TechCrunch,
   Axios, The Information, dev.events, confs.tech, Cerebral Valley,
   Bloomberg Live, YC) not one sets its metadata in a monospace, Inter's
   `tabular-nums` aligns a date column just as well, and the second face
   cost 40KB and a preload of its own. */

@font-face {
    font-family: 'AIPR Inter';
    font-style: normal;
    font-display: swap;
    font-weight: 100 900;
    src: url('../fonts/inter-latin-wght-normal.woff2') format('woff2-variations');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
        U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
        U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: 'AIPR Inter';
    font-style: normal;
    font-display: swap;
    font-weight: 100 900;
    src: url('../fonts/inter-latin-ext-wght-normal.woff2') format('woff2-variations');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF,
        U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020,
        U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}


/* ========== TOKENS ========== */
/* Defined on :root, not on the calendar wrapper, because the subscribe menu
   is re-parented to <body> (it has to be: Bimber transforms the page wrapper
   on mobile, which breaks position:fixed for any descendant). The --aipr-
   prefix keeps that safe. */

:root {
    --aipr-ink: #16151C;
    --aipr-ink-2: #45424F;
    --aipr-muted: #6E6A7B;

    --aipr-surface: #FFFFFF;
    --aipr-surface-2: #FAFAFB;
    --aipr-line: #E7E5EC;
    --aipr-line-2: #D3D0DC;

    /* One accent, spent on one thing: the current state.

       #6c5ce7 since 3.1, not the old #4B0082: the hub locked the site-wide
       purple to this value on 2026-09-12 and named this calendar as the
       side that migrates. 4.9:1 on white, so label text on it passes AA. */
    --aipr-accent: #6c5ce7;
    --aipr-accent-hover: #5747d0;
    --aipr-accent-soft: #EFEDFC;

    /* Semantic, and separate from the accent. Both darkened from the
       original brand values so label text passes AA on its own tint. */
    --aipr-gold: #8A5A08;
    --aipr-gold-rule: #C08A2A;
    --aipr-gold-soft: #FFFCF5;
    --aipr-green: #17614E;
    --aipr-green-rule: #2ECC71;
    --aipr-green-soft: #F4FBF8;
    --aipr-live: #A8261C;
    --aipr-live-soft: #FCF0EE;

    --aipr-sans: 'AIPR Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;

    /* Grid for one event row: date, name, location, type. Date leads
       because a calendar is scanned by date, and a column of monospaced
       dates is what makes the page read as a timetable rather than a list
       of links. */
    --aipr-row-grid: 140px minmax(0, 1fr) 230px 128px;

    /* Where an expanded panel's text starts: date column + grid gap + row
       padding, so the description sits under the event name rather than
       under the dateline. */
    --aipr-panel-indent: 170px;
}

/* ========== BASE ========== */

/* Both pages, one set of rules.
   `:is(a, b)` takes the specificity of its most specific argument, and both
   arguments here are a single class — so every selector below keeps exactly
   the specificity it had when it named only the calendar, and nothing in the
   calendar's cascade shifts. This is how the submit page gets the container,
   masthead, buttons and chips rather than a second copy of their values:
   3.1.2 shipped 32 hex literals and 49 token references in the submit
   section against 7 and 246 in the calendar's, which is what made one page
   look like a different website. */
body :is(.aipr-events-calendar, .aipr-ec-submit-page) {
    /* 1264px is the site-ui container. The top bar and this page share a
       left edge once that plugin is live; 1120 did not line up with it. */
    max-width: 1264px !important;
    /* Not optional. Bimber's #page is `display:flex; flex-direction:column`
       from 1025px up, and a flex item with auto cross-axis margins is sized
       to its content rather than stretched — so without this the calendar
       was as wide as its widest visible row: full width with 88 rows on
       screen, 675px with the six of "This week". */
    width: 100% !important;
    min-width: 0 !important;
    /* The `*` rule below covers descendants only; the wrapper needs its own,
       or width:100% plus 48px of padding overflows the viewport by 48px. */
    box-sizing: border-box !important;
    margin: 0 auto !important;
    padding: 32px 24px 96px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 16px !important;
    line-height: 1.6 !important;
    color: var(--aipr-ink) !important;
    -webkit-font-smoothing: antialiased !important;
    font-feature-settings: 'cv05' 1, 'ss03' 1 !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) *,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) *::before,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) *::after {
    box-sizing: border-box !important;
}

/* Bimber styles bare `button` — a 4px radius on every one, and a drop
   shadow on :hover. The plugin overrode background and border but never
   those two, so the horizon items and the Date heading grew a white
   floating pill under the cursor and the accent underline's ends turned
   round. Cancel both once, here, rather than per component. */
body :is(.aipr-events-calendar, .aipr-ec-submit-page) button,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) button:hover,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) button:focus,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) button:active {
    box-shadow: none !important;
    text-shadow: none !important;
    text-transform: none !important;
    letter-spacing: normal !important;
    min-height: 0 !important;
    z-index: auto !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item,
body .aipr-events-calendar .aipr-ec-sort-btn {
    border-radius: 0 !important;
}

/* Every `display` in this file carries !important to survive the theme,
   which also beats the user-agent rule behind the `hidden` attribute — so
   `el.hidden = true` silently does nothing. Restore it once, here, rather
   than reaching for a class wherever something needs hiding.

   The attribute selector is repeated deliberately. `body .aipr-events-calendar
   [hidden]` and `body .aipr-events-calendar .aipr-ec-badge` have identical
   specificity, so with both !important the later rule in the file wins and
   a hidden badge stays visible — which is exactly what happened to the Live
   badge. Doubling the attribute raises specificity without depending on
   this block staying at the bottom of the file. */
body :is(.aipr-events-calendar, .aipr-ec-submit-page) [hidden][hidden],
body .aipr-ec-subscribe-menu [hidden][hidden],
body .aipr-ec-filter-pop[hidden][hidden] {
    display: none !important;
}

/* Bimber styles label/button/input/h1 directly, and a direct rule beats an
   inherited font-family however deep the inheritance. */
body :is(.aipr-events-calendar, .aipr-ec-submit-page) h1,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) h2,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) p,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) a,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) span,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) div,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) label,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) button,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) input,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) select,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) textarea,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) li {
    font-family: var(--aipr-sans) !important;
}

/* Digits that sit in a column must not dance as they change. */
body .aipr-events-calendar .aipr-ec-num {
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-feature-settings: 'tnum' 1 !important;
}

/* ========== PREVIEW BANNER ========== */

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-preview-banner {
    background: #FFF8E1 !important;
    border: 1px solid #F0D48A !important;
    border-radius: 6px !important;
    padding: 10px 14px !important;
    margin-bottom: 24px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 12px !important;
    letter-spacing: 0.02em !important;
    color: #6B5300 !important;
}

/* ========== MASTHEAD ========== */
/* The old header spent 87% of a 900px desktop viewport explaining the page
   before the first event appeared: title, two paragraphs, slogan, updated
   line, toolbar, then five rows of filter pills. This one states what the
   page is once and gets out of the way. */

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-masthead {
    display: flex !important;
    align-items: flex-start !important;
    justify-content: space-between !important;
    gap: 28px !important;
    padding-bottom: 22px !important;
    border-bottom: 1px solid var(--aipr-line) !important;
    margin-bottom: 20px !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-masthead-text {
    min-width: 0 !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-title {
    margin: 0 0 10px !important;
    font-size: 38px !important;
    font-weight: 650 !important;
    line-height: 1.15 !important;
    letter-spacing: -0.024em !important;
    color: var(--aipr-ink) !important;
    text-align: left !important;
    text-wrap: balance !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-lead {
    margin: 0 !important;
    /* Wide enough that the sentence sits on one line at desktop widths:
       a second line here pushes every listing down by its full leading. */
    max-width: 78ch !important;
    font-size: 18px !important;
    line-height: 1.5 !important;
    color: var(--aipr-ink-2) !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-masthead-actions {
    display: flex !important;
    align-items: center !important;
    gap: 10px !important;
    flex: 0 0 auto !important;
    padding-top: 6px !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-btn {
    display: inline-flex !important;
    align-items: center !important;
    height: 42px !important;
    padding: 0 18px !important;
    font-size: 15px !important;
    font-weight: 500 !important;
    line-height: 1 !important;
    border-radius: 8px !important;
    border: 1px solid var(--aipr-line-2) !important;
    background: var(--aipr-surface) !important;
    color: var(--aipr-ink) !important;
    text-decoration: none !important;
    cursor: pointer !important;
    white-space: nowrap !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-btn:hover {
    border-color: var(--aipr-ink) !important;
    color: var(--aipr-ink) !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-btn-solid {
    background: var(--aipr-accent) !important;
    border-color: var(--aipr-accent) !important;
    color: #fff !important;
    font-weight: 600 !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-btn-solid:hover {
    background: var(--aipr-accent-hover) !important;
    border-color: var(--aipr-accent-hover) !important;
    color: #fff !important;
}

/* Standing facts about the calendar, in the data face. "Added this week"
   is here because it is the one number that says the page is maintained,
   and it is also what the weekly digest is selling. */
body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-meta {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: baseline !important;
    gap: 6px 22px !important;
    margin: 0 0 18px !important;
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 14.5px !important;
    line-height: 1.5 !important;
    color: var(--aipr-muted) !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-meta strong {
    font-weight: 600 !important;
    color: var(--aipr-ink) !important;
}

/* ========== COMMAND BAR ========== */
/* One input where five rows of pills used to be. It takes a keyword today
   and a sentence once the interpreter is wired in; the chips underneath
   show what it understood, and stay removable either way. */

body .aipr-events-calendar .aipr-ec-command {
    position: relative !important;
    display: flex !important;
    align-items: center !important;
    gap: 10px !important;
    height: 54px !important;
    padding: 0 16px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 12px !important;
    background: var(--aipr-surface) !important;
    transition: border-color 0.12s ease !important;
}

body .aipr-events-calendar .aipr-ec-command.is-focused,
body .aipr-events-calendar .aipr-ec-command:focus-within {
    border-color: var(--aipr-accent) !important;
    box-shadow: 0 0 0 3px var(--aipr-accent-soft) !important;
}

body .aipr-events-calendar .aipr-ec-command-icon {
    flex: 0 0 auto !important;
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-search {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    height: 100% !important;
    padding: 0 !important;
    border: none !important;
    outline: none !important;
    background: transparent !important;
    box-shadow: none !important;
    font-size: 17px !important;
    line-height: 1.4 !important;
    color: var(--aipr-ink) !important;
}

/* The ring for the search box is drawn on the box (`.aipr-ec-command:focus-within`),
   never on the input inside it. 3.1.0 added the box ring but left the input in
   the shared :focus-visible list above, so both drew. */
body .aipr-events-calendar .aipr-ec-search:focus,
body .aipr-events-calendar .aipr-ec-search:focus-visible {
    outline: none !important;
    box-shadow: none !important;
    border: none !important;
}

body .aipr-events-calendar .aipr-ec-search::placeholder {
    color: var(--aipr-muted) !important;
    opacity: 1 !important;
}

body .aipr-events-calendar .aipr-ec-command-hint {
    flex: 0 0 auto !important;
    font-family: var(--aipr-sans) !important;
    font-size: 12.5px !important;
    line-height: 1 !important;
    padding: 3px 7px !important;
    border: 1px solid var(--aipr-line) !important;
    border-radius: 5px !important;
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-command-spinner {
    flex: 0 0 auto !important;
    width: 14px !important;
    height: 14px !important;
    border: 2px solid var(--aipr-line-2) !important;
    border-top-color: var(--aipr-accent) !important;
    border-radius: 50% !important;
    animation: aipr-ec-spin 0.7s linear infinite !important;
}

@keyframes aipr-ec-spin {
    to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
    body .aipr-events-calendar .aipr-ec-command-spinner {
        animation-duration: 2s !important;
    }
}

body .aipr-events-calendar .aipr-ec-command-clear {
    flex: 0 0 auto !important;
    width: 24px !important;
    height: 24px !important;
    padding: 0 !important;
    border: none !important;
    border-radius: 50% !important;
    background: var(--aipr-line) !important;
    color: var(--aipr-ink-2) !important;
    font-size: 15px !important;
    line-height: 1 !important;
    cursor: pointer !important;
}

body .aipr-events-calendar .aipr-ec-command-clear:hover {
    background: var(--aipr-line-2) !important;
}

/* ========== CHIP ROW ========== */

/* The chips are built by calendar.js, and on this site the script runs
   after the load event (Cloudflare Rocket Loader), so the row arrived
   empty and then grew by one chip height, pushing everything under it
   down 34px on first paint — the first half of the 0.37 desktop CLS
   measured 2026-09-28. The row now holds that height from the start. The
   page shows at least three chips at every width (a facet page locks one
   axis); if they wrap to a second line on a very narrow phone, that line
   still arrives late, as before. */
body .aipr-events-calendar .aipr-ec-chiprow {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    gap: 8px !important;
    margin: 12px 0 0 !important;
    min-height: 34px !important;
}

body .aipr-events-calendar .aipr-ec-chiprow-label {
    font-family: var(--aipr-sans) !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
    margin-right: 2px !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-chip {
    display: inline-flex !important;
    align-items: center !important;
    gap: 6px !important;
    height: 34px !important;
    padding: 0 14px !important;
    font-size: 14.5px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    /* A chip is a <button> on the calendar, where the reset near the top of
       this file cancels Bimber's uppercase. On the submit page it is a
       <label>, which that reset does not reach, so the component says it. */
    text-transform: none !important;
    letter-spacing: normal !important;
    color: var(--aipr-ink-2) !important;
    background: var(--aipr-surface) !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 999px !important;
    cursor: pointer !important;
    white-space: nowrap !important;
}

body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-chip:hover {
    border-color: var(--aipr-ink) !important;
    color: var(--aipr-ink) !important;
}

/* Active is the only thing the accent is spent on. */
body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-chip.is-on {
    color: var(--aipr-accent) !important;
    border-color: var(--aipr-accent) !important;
    background: var(--aipr-accent-soft) !important;
    font-weight: 500 !important;
}

body .aipr-events-calendar .aipr-ec-chip-caret {
    font-size: 9px !important;
    color: var(--aipr-muted) !important;
    line-height: 1 !important;
}

body .aipr-events-calendar .aipr-ec-chip.is-on .aipr-ec-chip-caret {
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-chip-clear {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 15px !important;
    height: 15px !important;
    margin-right: -3px !important;
    padding: 0 !important;
    border: none !important;
    border-radius: 50% !important;
    background: transparent !important;
    color: var(--aipr-accent) !important;
    font-size: 13px !important;
    line-height: 1 !important;
    cursor: pointer !important;
}

body .aipr-events-calendar .aipr-ec-chip-clear:hover {
    background: rgba(75, 0, 130, 0.12) !important;
}

/* Filter popover. Portaled to <body> and positioned by JS, for the same
   reason as the subscribe menu: Bimber's mobile off-canvas wrapper carries
   a transform, and a transformed ancestor turns position:fixed into
   ancestor-relative positioning. */
body .aipr-ec-filter-pop {
    position: fixed !important;
    z-index: 9999 !important;
    min-width: 216px !important;
    max-height: 340px !important;
    overflow-y: auto !important;
    padding: 5px !important;
    font-family: var(--aipr-sans) !important;
    background: var(--aipr-surface) !important;
    border: 1px solid var(--aipr-line) !important;
    border-radius: 9px !important;
    box-shadow: 0 8px 28px rgba(20, 18, 30, 0.13) !important;
}

body .aipr-ec-filter-pop .aipr-ec-pop-item {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 14px !important;
    width: 100% !important;
    padding: 9px 11px !important;
    border: none !important;
    border-radius: 6px !important;
    background: transparent !important;
    font-family: inherit !important;
    font-size: 14.5px !important;
    line-height: 1.3 !important;
    color: var(--aipr-ink-2) !important;
    text-align: left !important;
    cursor: pointer !important;
}

body .aipr-ec-filter-pop .aipr-ec-pop-item:hover {
    background: var(--aipr-surface-2) !important;
    color: var(--aipr-ink) !important;
}

body .aipr-ec-filter-pop .aipr-ec-pop-item.is-on {
    color: var(--aipr-accent) !important;
    font-weight: 600 !important;
}

body .aipr-ec-filter-pop .aipr-ec-pop-item.is-empty {
    color: var(--aipr-muted) !important;
    opacity: 0.55 !important;
    cursor: default !important;
}

/* The count is the point: you know what a choice costs before making it. */
body .aipr-ec-filter-pop .aipr-ec-pop-count {
    flex: 0 0 auto !important;
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 13px !important;
    color: var(--aipr-muted) !important;
}

/* ========== TIMELINE STRIP ========== */
/* Replaces the old DATE pill row. A calendar with no expression of "now"
   is the product gap, not a styling one: this row is where the page says
   what is happening, what is imminent, and what is merely scheduled. */

body .aipr-events-calendar .aipr-ec-horizon {
    display: flex !important;
    align-items: center !important;
    gap: 20px !important;
    margin: 16px 0 0 !important;
    border-top: 1px solid var(--aipr-line) !important;
    border-bottom: 1px solid var(--aipr-line) !important;
}

/* The horizons scroll inside their own box rather than the whole row, so
   the Hide past toggle at the end stays reachable at any width. Scrolling
   the row itself pushed it off a phone screen entirely. */
body .aipr-events-calendar .aipr-ec-horizon-items {
    display: flex !important;
    flex: 1 1 auto !important;
    min-width: 0 !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch !important;
    scrollbar-width: none !important;
}

body .aipr-events-calendar .aipr-ec-horizon-items::-webkit-scrollbar {
    display: none !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item {
    display: flex !important;
    align-items: baseline !important;
    gap: 7px !important;
    padding: 12px 0 11px !important;
    margin-right: 28px !important;
    border: none !important;
    border-bottom: 2px solid transparent !important;
    background: transparent !important;
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 14.5px !important;
    line-height: 1.4 !important;
    color: var(--aipr-muted) !important;
    cursor: pointer !important;
    white-space: nowrap !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item:hover {
    color: var(--aipr-ink) !important;
    background: transparent !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item .aipr-ec-horizon-label {
    font-weight: 500 !important;
    color: inherit !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item .aipr-ec-horizon-count {
    font-size: 15px !important;
    font-weight: 600 !important;
    font-variant-numeric: tabular-nums !important;
    color: var(--aipr-ink) !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item.is-on {
    color: var(--aipr-accent) !important;
    border-bottom-color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item.is-on .aipr-ec-horizon-count,
body .aipr-events-calendar .aipr-ec-horizon-item.is-on .aipr-ec-horizon-label {
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-horizon-item.is-zero {
    opacity: 0.45 !important;
}

/* A live dot on the "Now" item, so the one genuinely time-sensitive state
   on the page is visible without reading. */
body .aipr-events-calendar .aipr-ec-horizon-dot {
    display: inline-block !important;
    width: 7px !important;
    height: 7px !important;
    border-radius: 50% !important;
    background: var(--aipr-live) !important;
    margin-right: 3px !important;
    box-shadow: 0 0 0 3px var(--aipr-live-soft) !important;
    animation: aipr-ec-livepulse 1.8s ease-in-out infinite !important;
}

@keyframes aipr-ec-livepulse {
    0%, 100% { box-shadow: 0 0 0 3px var(--aipr-live-soft); }
    50%      { box-shadow: 0 0 0 5px var(--aipr-live-soft); }
}

@media (prefers-reduced-motion: reduce) {
    body .aipr-events-calendar .aipr-ec-horizon-dot {
        animation: none !important;
    }
}

body .aipr-events-calendar .aipr-ec-horizon-item.is-zero .aipr-ec-horizon-dot {
    background: var(--aipr-line-2) !important;
}

/* Hide-past lives at the end of the horizon row: it is the same axis. */
body .aipr-events-calendar .aipr-ec-toggle-wrap {
    display: inline-flex !important;
    align-items: center !important;
    gap: 8px !important;
    padding: 11px 0 !important;
    margin: 0 !important;
    cursor: pointer !important;
    font-family: var(--aipr-sans) !important;
    font-size: 14.5px !important;
    letter-spacing: 0.01em !important;
    color: var(--aipr-muted) !important;
    white-space: nowrap !important;
}

body .aipr-events-calendar .aipr-ec-toggle-input {
    position: absolute !important;
    opacity: 0 !important;
    width: 1px !important;
    height: 1px !important;
    margin: 0 !important;
    pointer-events: none !important;
}

body .aipr-events-calendar .aipr-ec-toggle-slider {
    position: relative !important;
    width: 34px !important;
    height: 19px !important;
    border-radius: 999px !important;
    background: var(--aipr-line-2) !important;
    transition: background 0.15s ease !important;
    flex: 0 0 auto !important;
}

body .aipr-events-calendar .aipr-ec-toggle-slider::after {
    content: '' !important;
    position: absolute !important;
    top: 2px !important;
    left: 2px !important;
    width: 15px !important;
    height: 15px !important;
    border-radius: 50% !important;
    background: #fff !important;
    transition: transform 0.15s ease !important;
}

body .aipr-events-calendar .aipr-ec-toggle-input:checked + .aipr-ec-toggle-slider {
    background: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-toggle-input:checked + .aipr-ec-toggle-slider::after {
    transform: translateX(15px) !important;
}

body .aipr-events-calendar .aipr-ec-toggle-text {
    color: inherit !important;
}

/* The five pill rows are kept in the DOM, hidden on desktop: they are the
   source the mobile filter sheet clones, and the state the chips write
   back to. Not `display:none !important` — the mobile media query has to
   be able to bring them back. */
body .aipr-events-calendar .aipr-ec-filters {
    display: none;
}

/* ========== TIMELINE ========== */
/* One slot per month across the whole range the calendar covers, not one
   bar per month that happens to hold something.

   3.0 drew only populated months and hid the rest, so a year whose
   listings cluster in three months rendered as a short clump on the left
   with the rest of the row empty — and the further ahead the calendar
   looked, the emptier it got. Fixed slots make the row read as a year: a
   bar where there is something, a hairline baseline where there is not,
   stretched across the full container width.

   Bar heights are square-root scaled, and they track the subject filters
   (region, topic, format, type, search) but NOT the time filters. The
   horizon row above already says what the time window is; a strip that
   emptied itself to match would stop being a map of the year at the exact
   moment a reader narrowed the view. Past months stay on the line at a
   lower weight and remain clickable — that click is the archive's front
   door, and it turns Hide past off on the way. */

body .aipr-events-calendar .aipr-ec-density {
    display: flex !important;
    align-items: flex-end !important;
    width: 100% !important;
    gap: 32px !important;
    overflow-x: auto !important;
    padding: 16px 0 0 !important;
    margin: 0 !important;
    -webkit-overflow-scrolling: touch !important;
    scrollbar-width: none !important;
}

body .aipr-events-calendar .aipr-ec-density::-webkit-scrollbar {
    display: none !important;
}

/* Each year takes width in proportion to the months it shows, so a
   12-month year and a 5-month year sit at the same monthly pitch. */
body .aipr-events-calendar .aipr-ec-density-year {
    flex: var(--aipr-slots, 12) 1 0 !important;
    min-width: 0 !important;
}

body .aipr-events-calendar .aipr-ec-density-year-label {
    display: block !important;
    margin: 0 0 8px !important;
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 12.5px !important;
    font-weight: 600 !important;
    letter-spacing: 0.04em !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-events-calendar .aipr-ec-density-months {
    display: flex !important;
    align-items: flex-end !important;
    width: 100% !important;
    gap: 5px !important;
}

body .aipr-events-calendar .aipr-ec-density-month {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: flex-end !important;
    flex: 1 1 0 !important;
    min-width: 24px !important;
    max-width: 76px !important;
    gap: 7px !important;
    padding: 0 !important;
    border: none !important;
    background: transparent !important;
    text-decoration: none !important;
    cursor: pointer !important;
}

body .aipr-events-calendar .aipr-ec-density-track {
    display: flex !important;
    align-items: flex-end !important;
    width: 100% !important;
    height: 34px !important;
}

body .aipr-events-calendar .aipr-ec-density-bar {
    display: block !important;
    width: 100% !important;
    min-height: 4px !important;
    height: var(--aipr-bar-h, 6%) !important;
    border-radius: 3px 3px 0 0 !important;
    background: var(--aipr-line-2) !important;
    transition: height 0.18s ease, background 0.12s ease !important;
}

body .aipr-events-calendar .aipr-ec-density-month:hover .aipr-ec-density-bar {
    background: var(--aipr-ink-2) !important;
}

body .aipr-events-calendar .aipr-ec-density-month.is-current .aipr-ec-density-bar {
    background: var(--aipr-accent) !important;
}

/* A month already past: on the line, at a quarter of the weight. */
body .aipr-events-calendar .aipr-ec-density-month.is-past .aipr-ec-density-bar {
    background: var(--aipr-line) !important;
}

body .aipr-events-calendar .aipr-ec-density-month.is-past:hover .aipr-ec-density-bar {
    background: var(--aipr-line-2) !important;
}

/* A month with nothing in it keeps the baseline continuous, so the row
   still reads as one year rather than as scattered bars. */
body .aipr-events-calendar .aipr-ec-density-month.is-empty {
    cursor: default !important;
}

body .aipr-events-calendar .aipr-ec-density-month.is-empty .aipr-ec-density-bar,
body .aipr-events-calendar .aipr-ec-density-month.is-empty:hover .aipr-ec-density-bar {
    height: 3px !important;
    min-height: 3px !important;
    border-radius: 0 !important;
    background: var(--aipr-line) !important;
}

body .aipr-events-calendar .aipr-ec-density-label {
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 12.5px !important;
    font-weight: 500 !important;
    line-height: 1 !important;
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-density-month.is-current .aipr-ec-density-label {
    color: var(--aipr-accent) !important;
    font-weight: 600 !important;
}

/* #D3D0DC measured 1.9:1 on white — these are 11px labels, so they need
   4.5:1, and a month a reader cannot read is not a quieter month, it is a
   broken one. The past/empty distinction moves entirely onto the bar, which
   is the element that encodes the count anyway. */
body .aipr-events-calendar .aipr-ec-density-month.is-past .aipr-ec-density-label,
body .aipr-events-calendar .aipr-ec-density-month.is-empty .aipr-ec-density-label {
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-density-month:hover .aipr-ec-density-label {
    color: var(--aipr-ink) !important;
}

body .aipr-events-calendar .aipr-ec-density-month.is-empty:hover .aipr-ec-density-label {
    color: var(--aipr-muted) !important;
}

@media (prefers-reduced-motion: reduce) {
    body .aipr-events-calendar .aipr-ec-density-bar {
        transition: none !important;
    }
}

/* The row the timeline sits in. Until 3.1 it also carried an Advertise
   link and a second Submit event link at its right end; both are gone.
   Advertise sold advertising to readers who were already reading, and
   Submit event was the third copy of a control the masthead already has. */
body .aipr-events-calendar .aipr-ec-striprow {
    border-bottom: 1px solid var(--aipr-line) !important;
    padding-bottom: 14px !important;
    margin-bottom: 6px !important;
}

/* ========== FEATURED STRIP ========== */
/* Paid placements, pinned above the chronological river for their 30-day
   window. The river below stays strictly in date order: a paid row is
   never inserted into a month it does not belong to. */

body .aipr-events-calendar .aipr-ec-featured-strip {
    border: 1px solid var(--aipr-line) !important;
    border-left: 3px solid var(--aipr-gold-rule) !important;
    border-radius: 0 8px 8px 0 !important;
    background: var(--aipr-gold-soft) !important;
    padding: 10px 14px 6px !important;
    margin: 0 0 16px !important;
}

body .aipr-events-calendar .aipr-ec-featured-strip-label {
    font-family: var(--aipr-sans) !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-gold) !important;
    margin-bottom: 2px !important;
}

body .aipr-events-calendar .aipr-ec-featured-item {
    display: flex !important;
    align-items: baseline !important;
    gap: 12px !important;
    padding: 5px 0 !important;
    text-decoration: none !important;
    border-bottom: 1px solid rgba(192, 138, 42, 0.16) !important;
}

body .aipr-events-calendar .aipr-ec-featured-item:last-child {
    border-bottom: 0 !important;
}

body .aipr-events-calendar .aipr-ec-featured-name {
    font-size: 16.5px !important;
    font-weight: 600 !important;
    color: var(--aipr-ink) !important;
    letter-spacing: -0.005em !important;
}

body .aipr-events-calendar .aipr-ec-featured-item:hover .aipr-ec-featured-name {
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-featured-meta {
    flex: 1 1 auto !important;
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 14px !important;
    color: var(--aipr-muted) !important;
}

/* ========== BADGES ========== */
/* Outlined, not filled. A solid colour block beside a headline is the
   visual grammar of an ad network; a hairline label is the grammar of a
   newsroom. Both colours are dark enough to pass AA as text on white and
   on their own tint. */

body .aipr-events-calendar .aipr-ec-badge {
    display: inline-block !important;
    margin-left: 9px !important;
    padding: 1px 7px !important;
    border-radius: 3px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 11px !important;
    font-weight: 600 !important;
    letter-spacing: 0.05em !important;
    text-transform: uppercase !important;
    line-height: 1.6 !important;
    vertical-align: 3px !important;
    white-space: nowrap !important;
}

body .aipr-events-calendar .aipr-ec-badge-sponsored {
    color: var(--aipr-gold) !important;
    border: 1px solid var(--aipr-gold-rule) !important;
    background: var(--aipr-gold-soft) !important;
}

body .aipr-events-calendar .aipr-ec-badge-pick {
    color: var(--aipr-green) !important;
    border: 1px solid var(--aipr-green-rule) !important;
    background: var(--aipr-green-soft) !important;
}

body .aipr-events-calendar .aipr-ec-badge-live {
    color: var(--aipr-live) !important;
    border: 1px solid var(--aipr-live) !important;
    background: var(--aipr-live-soft) !important;
}

body .aipr-events-calendar .aipr-ec-discount-flag {
    display: inline-block !important;
    margin-left: 9px !important;
    padding: 1px 6px !important;
    border-radius: 3px !important;
    border: 1px solid var(--aipr-line-2) !important;
    background: var(--aipr-surface-2) !important;
    font-family: var(--aipr-sans) !important;
    font-size: 11px !important;
    font-weight: 600 !important;
    letter-spacing: 0.05em !important;
    text-transform: uppercase !important;
    line-height: 1.6 !important;
    vertical-align: 3px !important;
    color: var(--aipr-muted) !important;
    white-space: nowrap !important;
}

/* ========== TABLE HEADER ========== */

body .aipr-events-calendar .aipr-ec-table-header {
    display: grid !important;
    grid-template-columns: var(--aipr-row-grid) !important;
    gap: 18px !important;
    padding: 4px 12px 10px !important;
    border-bottom: 1px solid var(--aipr-line-2) !important;
    font-family: var(--aipr-sans) !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    letter-spacing: 0.07em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-sort-btn {
    display: inline-flex !important;
    align-items: center !important;
    gap: 4px !important;
    padding: 0 !important;
    border: none !important;
    background: transparent !important;
    font-family: var(--aipr-sans) !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    letter-spacing: 0.07em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
    cursor: pointer !important;
}

body .aipr-events-calendar .aipr-ec-sort-btn:hover {
    color: var(--aipr-ink) !important;
}

body .aipr-events-calendar .aipr-ec-sort-arrow {
    font-size: 12px !important;
    line-height: 1 !important;
}

/* ========== TODAY MARKER ========== */

body .aipr-events-calendar .aipr-ec-today {
    display: flex !important;
    align-items: center !important;
    gap: 12px !important;
    padding: 10px 12px 8px !important;
}

body .aipr-events-calendar .aipr-ec-today-label {
    flex: 0 0 auto !important;
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-today-rule {
    flex: 1 1 auto !important;
    height: 1px !important;
    background: var(--aipr-accent) !important;
    opacity: 0.35 !important;
}

/* ========== MONTH GROUPS ========== */

body .aipr-events-calendar .aipr-ec-month-header {
    margin: 0 !important;
    padding: 30px 12px 8px !important;
    border: 0 !important;
    background: transparent !important;
    font-family: var(--aipr-sans) !important;
    font-size: 15px !important;
    font-weight: 600 !important;
    letter-spacing: 0 !important;
    line-height: 1.3 !important;
    text-transform: none !important;
    color: var(--aipr-ink) !important;
    scroll-margin-top: 90px !important;
}

/* The fact line under each month heading. Quiet: it is orientation, not a
   headline, and it sits between an h2 and the first row of a dense table. */
body .aipr-events-calendar .aipr-ec-month-stats {
    margin: 0 0 10px !important;
    /* 12px to match the month heading above it; anything else and the two
       lines start at different x. */
    padding: 0 12px !important;
    font-size: 13px !important;
    font-weight: 500 !important;
    line-height: 1.5 !important;
    color: var(--aipr-muted) !important;
    font-variant-numeric: tabular-nums !important;
}

/* Skip layout and paint for month groups that are off screen. The
   calendar is heading for 300 listings; this is what keeps scrolling and
   every filter change cheap on a phone.

   Two things depend on it being done carefully, both handled in
   calendar.js: a panel inside a skipped subtree measures scrollHeight 0
   (toggleExpand falls back), and jump links can land short while the
   groups above them are still being sized (the jump re-runs on the next
   frame).

   The estimate is built here from two counts the template writes per group
   (rows that will show, and how many of them are sponsored and so arrive
   open), because what a row costs depends on the width. Fitted on the live
   dataset, 2026-09-28: heading + stats line ~87px and a row ~57px at
   1350px; ~70 / ~62 between 861 and 1100 (names wrap); ~80 / ~82 on a
   phone. An open sponsored panel adds ~320 / ~360 / ~510. Until 3.5.8 the
   template wrote one pixel figure (44 + 61 per row, every row including
   finished ones), which put the current month at 1325px against a real
   431px. `auto` keeps the real size once a group has been rendered. */
body .aipr-events-calendar .aipr-ec-month-group {
    scroll-margin-top: 80px !important;
    content-visibility: auto !important;
    contain-intrinsic-size: auto calc(87px + var(--aipr-group-rows, 8) * 57px + var(--aipr-group-open, 0) * 320px) !important;
}

@media (max-width: 1100px) and (min-width: 861px) {
    body .aipr-events-calendar .aipr-ec-month-group {
        contain-intrinsic-size: auto calc(70px + var(--aipr-group-rows, 8) * 62px + var(--aipr-group-open, 0) * 360px) !important;
    }
}

@media (max-width: 860px) {
    body .aipr-events-calendar .aipr-ec-month-group {
        contain-intrinsic-size: auto calc(80px + var(--aipr-group-rows, 8) * 82px + var(--aipr-group-open, 0) * 510px) !important;
    }
}

/* ========== EVENT ROW ========== */

body .aipr-events-calendar .aipr-ec-event-row {
    display: grid !important;
    grid-template-columns: var(--aipr-row-grid) !important;
    gap: 18px !important;
    align-items: baseline !important;
    padding: 16px 12px !important;
    border-bottom: 1px solid var(--aipr-line) !important;
    cursor: pointer !important;
    position: relative !important;
    scroll-margin-top: 90px !important;
    transition: background 0.1s ease !important;
}

body .aipr-events-calendar .aipr-ec-event-row:hover {
    background: var(--aipr-surface-2) !important;
}

/* A row that has already finished arrives hidden, because Hide past is on
   when the page opens and the script (which runs late here, see the chip
   row) would otherwise hide it after first paint and pull every row under
   it up the screen. Only a first-paint state: the script sets every row's
   display inline, with !important, on its first pass, and an inline
   !important declaration outranks this one, so Hide past off and deep
   links to a past event show the row exactly as before. */
body .aipr-events-calendar .aipr-ec-event-row.is-past {
    display: none !important;
}

body .aipr-events-calendar .aipr-ec-event-date {
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 15px !important;
    font-weight: 500 !important;
    line-height: 1.45 !important;
    color: var(--aipr-ink-2) !important;
    white-space: nowrap !important;
}

body .aipr-events-calendar .aipr-ec-event-name {
    min-width: 0 !important;
    font-size: 18px !important;
    font-weight: 600 !important;
    line-height: 1.35 !important;
    letter-spacing: -0.012em !important;
}

body .aipr-events-calendar .aipr-ec-event-link {
    color: var(--aipr-ink) !important;
    text-decoration: none !important;
}

body .aipr-events-calendar .aipr-ec-event-link:hover {
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-event-location {
    font-size: 15px !important;
    line-height: 1.45 !important;
    color: var(--aipr-ink-2) !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
}

body .aipr-events-calendar .aipr-ec-event-type {
    font-family: var(--aipr-sans) !important;
    font-size: 14px !important;
    line-height: 1.5 !important;
    color: var(--aipr-muted) !important;
    white-space: nowrap !important;
}

body .aipr-events-calendar .aipr-ec-event-row.is-cancelled .aipr-ec-event-link {
    text-decoration: line-through !important;
    color: var(--aipr-muted) !important;
}

/* Accent rows.
   Rule, learned twice (2.19.3 / 2.19.4): never pair a coloured side border
   with a bottom border on the same box. Adjacent borders share a mitred
   corner, so a 1px bottom border cuts a visible wedge out of a 3px
   border-left — even a transparent one. The divider is drawn as an inset
   shadow instead, which is clipped to the padding box and therefore starts
   where the accent bar ends. */
body .aipr-events-calendar .aipr-ec-event-row.is-sponsored,
body .aipr-events-calendar .aipr-ec-event-row.is-pick {
    border-bottom: 0 !important;
    padding-bottom: 14px !important;
    padding-left: 15px !important;
    box-shadow: inset 0 -1px 0 var(--aipr-line) !important;
}

body .aipr-events-calendar .aipr-ec-event-row.is-sponsored {
    border-left: 3px solid var(--aipr-gold-rule) !important;
    background: var(--aipr-gold-soft) !important;
}

body .aipr-events-calendar .aipr-ec-event-row.is-pick {
    border-left: 3px solid var(--aipr-green-rule) !important;
    background: var(--aipr-green-soft) !important;
}

/* A sponsored row and its panel are one continuous unit (2.16.1): no
   divider between them, one background, one unbroken gold bar. */
body .aipr-events-calendar .aipr-ec-event-row.is-sponsored.expanded {
    box-shadow: none !important;
}

body .aipr-events-calendar .aipr-ec-event-row.is-sponsored:hover,
body .aipr-events-calendar .aipr-ec-event-row.is-sponsored.expanded {
    background: var(--aipr-gold-soft) !important;
}

body .aipr-events-calendar .aipr-ec-event-row.is-pick:hover {
    background: var(--aipr-green-soft) !important;
}

body .aipr-events-calendar .aipr-ec-row-expand-icon {
    position: absolute !important;
    right: 14px !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    font-size: 18px !important;
    line-height: 1 !important;
    color: var(--aipr-muted) !important;
    opacity: 0 !important;
    transition: opacity 0.1s ease !important;
    pointer-events: none !important;
}

body .aipr-events-calendar .aipr-ec-event-row:hover .aipr-ec-row-expand-icon,
body .aipr-events-calendar .aipr-ec-event-row.expanded .aipr-ec-row-expand-icon {
    opacity: 1 !important;
}

/* From 3.5.10 the + is a real <button> (.aipr-ec-row-toggle) — the row used
   to be role="button" with the name link inside it. It keeps the icon's
   class, so position, size, colour, fade and pointer-events all come from
   the rule above; this only takes back what a browser or theme gives a bare
   button, so it renders exactly as the span it replaced. Nothing here may
   set font-size, line-height, opacity or position. */
body .aipr-events-calendar .aipr-ec-row-toggle,
body .aipr-events-calendar .aipr-ec-row-toggle:hover,
body .aipr-events-calendar .aipr-ec-row-toggle:focus,
body .aipr-events-calendar .aipr-ec-row-toggle:active {
    -webkit-appearance: none !important;
    appearance: none !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: none !important;
    width: auto !important;
    height: auto !important;
    min-width: 0 !important;
    color: var(--aipr-muted) !important;
    font-weight: inherit !important;
    font-style: inherit !important;
    letter-spacing: inherit !important;
    cursor: pointer !important;
}

/* ========== EXPAND PANEL ========== */
/* NOTE: no max-height !important here — JS owns that property. */

body .aipr-events-calendar .aipr-ec-expand-panel {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.22s ease;
    background: var(--aipr-surface-2) !important;
    border-left: 0 !important;
    border-bottom: 0 !important;
    box-shadow: inset 0 -1px 0 var(--aipr-line) !important;
}

/* The open row shares the panel's ground, and loses the divider between
   them so the two read as one block. */
body .aipr-events-calendar .aipr-ec-event-row.expanded:not(.is-sponsored):not(.is-pick) {
    background: var(--aipr-surface-2) !important;
    border-bottom-color: transparent !important;
}

body .aipr-events-calendar .aipr-ec-expand-panel.aipr-ec-panel-open {
    max-height: none;
}

@media (prefers-reduced-motion: reduce) {
    body .aipr-events-calendar .aipr-ec-expand-panel {
        transition: none;
    }
}

body .aipr-events-calendar .aipr-ec-expand-panel[data-accent="sponsored"] {
    border-left: 3px solid var(--aipr-gold-rule) !important;
    background: var(--aipr-gold-soft) !important;
    box-shadow: none !important;
}

body .aipr-events-calendar .aipr-ec-expand-panel[data-accent="pick"] {
    border-left: 3px solid var(--aipr-green-rule) !important;
    background: var(--aipr-green-soft) !important;
}

body .aipr-events-calendar .aipr-ec-expand-inner {
    padding: 6px 14px 24px var(--aipr-panel-indent) !important;
}

/* Accent panels carry a 3px bar, so their content starts 3px later. */
body .aipr-events-calendar .aipr-ec-expand-panel[data-accent] .aipr-ec-expand-inner {
    padding-left: calc(var(--aipr-panel-indent) - 3px) !important;
}

body .aipr-events-calendar .aipr-ec-expand-desc {
    margin: 0 0 14px !important;
    max-width: 72ch !important;
    font-size: 15.5px !important;
    line-height: 1.6 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-events-calendar .aipr-ec-expand-details {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 8px 32px !important;
    margin: 0 0 12px !important;
}

body .aipr-events-calendar .aipr-ec-detail-label {
    display: block !important;
    font-family: var(--aipr-sans) !important;
    font-size: 11.5px !important;
    font-weight: 600 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
    margin-bottom: 2px !important;
}

body .aipr-events-calendar .aipr-ec-detail-value {
    font-size: 15px !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-events-calendar .aipr-ec-expand-tags {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 8px !important;
    margin: 0 0 18px !important;
}

body .aipr-events-calendar .aipr-ec-tag {
    display: inline-block !important;
    padding: 4px 12px !important;
    margin: 0 !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 999px !important;
    background: var(--aipr-surface) !important;
    font-size: 13.5px !important;
    font-weight: 500 !important;
    line-height: 1.4 !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
    color: var(--aipr-ink-2) !important;
    cursor: pointer !important;
}

body .aipr-events-calendar .aipr-ec-tag:hover {
    border-color: var(--aipr-accent) !important;
    background: var(--aipr-surface) !important;
    color: var(--aipr-accent) !important;
}

/* ========== RELATED COVERAGE ========== */
/* Populated by the related-coverage endpoint. Empty and hidden until it
   answers, so a slow or unavailable lookup costs the panel nothing. */

body .aipr-events-calendar .aipr-ec-related {
    margin: 0 0 14px !important;
    padding-top: 12px !important;
    border-top: 1px solid var(--aipr-line) !important;
}

body .aipr-events-calendar .aipr-ec-related-label {
    font-family: var(--aipr-sans) !important;
    font-size: 11.5px !important;
    font-weight: 600 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
    margin-bottom: 6px !important;
}

body .aipr-events-calendar .aipr-ec-related-item {
    display: block !important;
    padding: 4px 0 !important;
    font-size: 15px !important;
    line-height: 1.45 !important;
    color: var(--aipr-ink-2) !important;
    text-decoration: none !important;
}

body .aipr-events-calendar .aipr-ec-related-item:hover {
    color: var(--aipr-accent) !important;
    text-decoration: underline !important;
}

body .aipr-events-calendar .aipr-ec-related-date {
    font-family: var(--aipr-sans) !important;
    font-variant-numeric: tabular-nums !important;
    font-size: 13px !important;
    color: var(--aipr-muted) !important;
    margin-left: 8px !important;
}

/* ========== DISCOUNT ========== */

body .aipr-events-calendar .aipr-ec-discount-row {
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
    margin: 0 0 14px !important;
    font-size: 14.5px !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-events-calendar .aipr-ec-discount-label {
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-discount-code {
    font-family: var(--aipr-sans) !important;
    font-size: 14px !important;
    font-weight: 600 !important;
    letter-spacing: 0.04em !important;
    padding: 2px 8px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 4px !important;
    background: var(--aipr-surface) !important;
    color: var(--aipr-ink) !important;
}

body .aipr-events-calendar .aipr-ec-discount-copy {
    padding: 3px 9px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 4px !important;
    background: var(--aipr-surface) !important;
    font-family: var(--aipr-sans) !important;
    font-size: 13px !important;
    color: var(--aipr-ink-2) !important;
    cursor: pointer !important;
}

body .aipr-events-calendar .aipr-ec-discount-copy:hover {
    border-color: var(--aipr-ink) !important;
}

/* ========== PANEL ACTIONS ========== */

body .aipr-events-calendar .aipr-ec-expand-actions {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 12px !important;
}

body .aipr-events-calendar .aipr-ec-visit-link {
    font-size: 15px !important;
    font-weight: 600 !important;
    color: var(--aipr-ink) !important;
    text-decoration: none !important;
}

body .aipr-events-calendar .aipr-ec-visit-link:hover {
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-cal-btns {
    display: flex !important;
    gap: 6px !important;
}

body .aipr-events-calendar .aipr-ec-cal-btn {
    display: inline-flex !important;
    align-items: center !important;
    gap: 5px !important;
    padding: 7px 12px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 7px !important;
    background: var(--aipr-surface) !important;
    font-size: 13.5px !important;
    color: var(--aipr-ink-2) !important;
    text-decoration: none !important;
}

body .aipr-events-calendar .aipr-ec-cal-btn:hover {
    border-color: var(--aipr-ink) !important;
    color: var(--aipr-ink) !important;
}

/* ========== FOCUS VISIBILITY ========== */
/* Keyboard operation of the rows is pointless without a visible focus
   state. Scoped to :focus-visible so mouse users never see a ring. */

body .aipr-events-calendar .aipr-ec-row-toggle:focus-visible,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-chip:focus-visible,
body .aipr-ec-submit-page .aipr-ec-chip:focus-within,
body .aipr-ec-submit-page .aipr-ec-tier:focus-within,
body .aipr-ec-submit-page .aipr-ec-back:focus-visible,
body .aipr-ec-submit-page .aipr-ec-copy button:focus-visible,
body .aipr-events-calendar .aipr-ec-horizon-item:focus-visible,
body .aipr-events-calendar .aipr-ec-density-month:focus-visible,
body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-btn:focus-visible,
body .aipr-events-calendar .aipr-ec-pill:focus-visible,
body .aipr-events-calendar .aipr-ec-tag:focus-visible,
body .aipr-events-calendar .aipr-ec-cal-btn:focus-visible,
body .aipr-events-calendar .aipr-ec-visit-link:focus-visible,
body .aipr-events-calendar .aipr-ec-featured-item:focus-visible,
body .aipr-events-calendar .aipr-ec-event-link:focus-visible,
body .aipr-ec-filter-pop .aipr-ec-pop-item:focus-visible,
body .aipr-ec-subscribe-menu .aipr-ec-submenu-item:focus-visible {
    outline: 2px solid var(--aipr-accent) !important;
    outline-offset: 2px !important;
}

body .aipr-events-calendar .aipr-ec-toggle-input:focus-visible + .aipr-ec-toggle-slider {
    outline: 2px solid var(--aipr-accent) !important;
    outline-offset: 2px !important;
}

/* The row's + button (3.5.10) is a glyph at the row's right edge, invisible
   until hover. Keyboard focus on it draws the ring round the whole row, as
   the focusable row did before — the row is what the button opens. Kept out
   of the list above: :has() is unforgiving, and one unsupported selector
   would drop every ring in that list. Without :has() the ring stays on the
   button and the glyph is shown, so focus is never invisible. */
@supports not selector(:has(*)) {
    body .aipr-events-calendar .aipr-ec-row-toggle:focus-visible {
        opacity: 1 !important;
    }
}

@supports selector(:has(*)) {
    body .aipr-events-calendar .aipr-ec-event-row:has(> .aipr-ec-row-toggle:focus-visible) {
        outline: 2px solid var(--aipr-accent) !important;
        outline-offset: 2px !important;
    }

    body .aipr-events-calendar .aipr-ec-row-toggle:focus-visible {
        outline: none !important;
    }
}

/* ========== PILL BUTTONS (mobile sheet + empty state) ========== */

body .aipr-events-calendar .aipr-ec-pill {
    padding: 7px 13px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 999px !important;
    background: var(--aipr-surface) !important;
    font-family: var(--aipr-sans) !important;
    font-size: 14.5px !important;
    line-height: 1.3 !important;
    color: var(--aipr-ink-2) !important;
    cursor: pointer !important;
    text-decoration: none !important;
}

body .aipr-events-calendar .aipr-ec-pill:hover {
    border-color: var(--aipr-ink) !important;
    color: var(--aipr-ink) !important;
}

body .aipr-events-calendar .aipr-ec-pill.active {
    background: var(--aipr-accent) !important;
    border-color: var(--aipr-accent) !important;
    color: #fff !important;
    font-weight: 500 !important;
}

body .aipr-events-calendar .aipr-ec-filter-row {
    display: flex !important;
    align-items: baseline !important;
    gap: 10px !important;
    margin-bottom: 12px !important;
    flex-wrap: wrap !important;
}

body .aipr-events-calendar .aipr-ec-filter-label {
    flex: 0 0 auto !important;
    width: 64px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 10.5px !important;
    font-weight: 500 !important;
    letter-spacing: 0.08em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-filter-pills {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 6px !important;
    flex: 1 1 auto !important;
}

/* ========== EMPTY STATE ========== */

body .aipr-events-calendar .aipr-ec-empty-state {
    display: none;
    padding: 56px 12px !important;
    text-align: center !important;
}

body .aipr-events-calendar .aipr-ec-empty-state p {
    margin: 0 0 18px !important;
    font-size: 17px !important;
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-empty-actions {
    display: flex !important;
    justify-content: center !important;
    gap: 10px !important;
    flex-wrap: wrap !important;
}

body .aipr-events-calendar .aipr-ec-empty-default {
    padding: 56px 12px !important;
    text-align: center !important;
    color: var(--aipr-muted) !important;
}

/* ========== ABOUT + QUESTIONS ========== */
/* Prose under the listings. The page carried about thirty words of its own
   before this, and no heading below the H1, so a crawler met two hundred
   event names and nothing that said what the page is or who keeps it. It
   sits below the list on purpose: the first screen is still listings. Every
   figure in it is counted from the rendered set at render time, so it
   cannot go stale the way a hand-written "200+" does. */

/* Browse row: the seven facet pages, and the way back to all of them.
   Sits above About, at the foot of the list — navigation between related
   views, not a control, so it costs no first-screen space. */
body .aipr-events-calendar .aipr-ec-browse {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 8px !important;
    margin: 56px 0 0 !important;
    padding: 20px 12px 0 !important;
    border-top: 1px solid var(--aipr-line) !important;
}

body .aipr-events-calendar .aipr-ec-browse-item {
    display: inline-block !important;
    padding: 6px 12px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 6px !important;
    background: var(--aipr-surface) !important;
    font-family: var(--aipr-sans) !important;
    font-size: 14px !important;
    font-weight: 500 !important;
    line-height: 1.4 !important;
    color: var(--aipr-ink-2) !important;
    text-decoration: none !important;
}

body .aipr-events-calendar a.aipr-ec-browse-item:hover {
    border-color: var(--aipr-accent) !important;
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-browse-item.is-current {
    border-color: var(--aipr-accent) !important;
    background: var(--aipr-accent-soft) !important;
    color: var(--aipr-accent) !important;
    font-weight: 600 !important;
}

/* The way back to the whole calendar, above the H1 on a facet page. */
body .aipr-events-calendar .aipr-ec-facet-back {
    display: inline-block !important;
    margin: 0 0 10px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 14px !important;
    font-weight: 500 !important;
    color: var(--aipr-muted) !important;
    text-decoration: none !important;
}

body .aipr-events-calendar .aipr-ec-facet-back:hover {
    color: var(--aipr-accent) !important;
}

body .aipr-events-calendar .aipr-ec-about {
    max-width: 72ch !important;
    margin: 64px 0 0 !important;
    padding: 36px 12px 0 !important;
    border-top: 1px solid var(--aipr-line) !important;
}

body .aipr-events-calendar .aipr-ec-about-byline {
    margin: 20px 0 0 !important;
    padding-top: 14px !important;
    border-top: 1px solid var(--aipr-line) !important;
    font-size: 14px !important;
    color: var(--aipr-muted) !important;
}

body .aipr-events-calendar .aipr-ec-about h2 {
    margin: 0 0 12px !important;
    padding: 0 !important;
    border: 0 !important;
    font-family: var(--aipr-sans) !important;
    font-size: 22px !important;
    font-weight: 600 !important;
    letter-spacing: -0.015em !important;
    line-height: 1.3 !important;
    text-transform: none !important;
    color: var(--aipr-ink) !important;
}

body .aipr-events-calendar .aipr-ec-about p + h2 {
    margin-top: 36px !important;
}

body .aipr-events-calendar .aipr-ec-about h3 {
    margin: 22px 0 6px !important;
    padding: 0 !important;
    font-family: var(--aipr-sans) !important;
    font-size: 16.5px !important;
    font-weight: 600 !important;
    line-height: 1.35 !important;
    color: var(--aipr-ink) !important;
}

body .aipr-events-calendar .aipr-ec-about p {
    margin: 0 0 12px !important;
    font-size: 16px !important;
    line-height: 1.65 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-events-calendar .aipr-ec-about a {
    color: var(--aipr-accent) !important;
    text-decoration: underline !important;
    text-underline-offset: 3px !important;
}

body .aipr-events-calendar .aipr-ec-about strong {
    font-weight: 600 !important;
    color: var(--aipr-ink) !important;
}

/* ========== SEARCH HIGHLIGHT ========== */

body .aipr-events-calendar .aipr-ec-highlight {
    background: #FFF2B8 !important;
    border-radius: 2px !important;
    padding: 0 1px !important;
    color: inherit !important;
}

/* ========== MOBILE ========== */
/* One structure at every width: the same command bar, the same chips, the
   same horizon row. The previous design kept a separate phone toolbar and a
   bottom filter sheet, which meant two filter UIs to keep in step; the chip
   popovers are portaled and fixed-positioned, so they work on a phone as
   they do on a desktop. */

@media (max-width: 860px) {
    body :is(.aipr-events-calendar, .aipr-ec-submit-page) {
        padding: 24px 16px 72px !important;
    }

    /* Bimber's mobile header sits flush against the content; the desktop
       header has its own spacing. */
    body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-title {
        margin-top: 16px !important;
        font-size: 30px !important;
    }

    body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-masthead {
        flex-direction: column !important;
        gap: 16px !important;
    }

    body .aipr-events-calendar .aipr-ec-masthead-actions {
        width: 100% !important;
        padding-top: 0 !important;
    }

    body .aipr-events-calendar .aipr-ec-masthead-actions .aipr-ec-btn {
        flex: 1 1 0 !important;
        justify-content: center !important;
        height: 42px !important;
    }

    body :is(.aipr-events-calendar, .aipr-ec-submit-page) .aipr-ec-lead {
        font-size: 16.5px !important;
    }

    body .aipr-events-calendar .aipr-ec-command {
        height: 50px !important;
    }

    body .aipr-events-calendar .aipr-ec-command-hint {
        display: none !important;
    }

    body .aipr-events-calendar .aipr-ec-horizon {
        flex-wrap: wrap !important;
        gap: 0 !important;
    }

    body .aipr-events-calendar .aipr-ec-horizon-items {
        flex: 1 1 100% !important;
    }

    body .aipr-events-calendar .aipr-ec-horizon-item {
        margin-right: 22px !important;
        padding: 12px 0 10px !important;
    }

    body .aipr-events-calendar .aipr-ec-toggle-wrap {
        flex: 1 1 100% !important;
        margin: 0 !important;
        padding: 2px 0 12px !important;
    }

    /* Fixed pitch rather than stretched slots: twelve months across a
       390px screen would be 27px each with no room for a label. */
    body .aipr-events-calendar .aipr-ec-density {
        gap: 24px !important;
    }

    body .aipr-events-calendar .aipr-ec-density-year {
        flex: 0 0 auto !important;
    }

    body .aipr-events-calendar .aipr-ec-density-months {
        width: auto !important;
    }

    body .aipr-events-calendar .aipr-ec-density-month {
        flex: 0 0 28px !important;
        min-width: 28px !important;
    }

    body .aipr-events-calendar .aipr-ec-striprow {
        padding-bottom: 10px !important;
    }

    /* The column head collapses to its one interactive part. */
    body .aipr-events-calendar .aipr-ec-table-header {
        grid-template-columns: 1fr !important;
        padding-bottom: 6px !important;
    }

    body .aipr-events-calendar .aipr-ec-table-header > span {
        display: none !important;
    }

    /* A row becomes two lines: the name, then everything else in the data
       face. Four columns are unreadable below about 700px. */
    body .aipr-events-calendar .aipr-ec-event-row {
        grid-template-columns: minmax(0, 1fr) !important;
        gap: 5px !important;
        padding: 14px 32px 14px 12px !important;
    }

    body .aipr-events-calendar .aipr-ec-event-row.is-sponsored,
    body .aipr-events-calendar .aipr-ec-event-row.is-pick {
        padding-left: 15px !important;
    }

    body .aipr-events-calendar .aipr-ec-event-name {
        order: 1 !important;
        font-size: 17px !important;
    }

    body .aipr-events-calendar .aipr-ec-event-date {
        order: 2 !important;
        font-size: 14.5px !important;
        font-weight: 400 !important;
        white-space: normal !important;
    }

    body .aipr-events-calendar .aipr-ec-event-location,
    body .aipr-events-calendar .aipr-ec-event-type {
        display: none !important;
    }

    /* The date cell carries location and type on a phone — one metadata
       line under the name, rendered by the template, not by script. */
    body .aipr-events-calendar .aipr-ec-event-mobilemeta {
        display: inline !important;
        color: var(--aipr-muted) !important;
    }

    body .aipr-events-calendar .aipr-ec-expand-inner,
    body .aipr-events-calendar .aipr-ec-expand-panel[data-accent] .aipr-ec-expand-inner {
        padding: 4px 14px 22px 12px !important;
    }

    body .aipr-events-calendar .aipr-ec-about {
        margin-top: 48px !important;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    body .aipr-events-calendar .aipr-ec-row-expand-icon {
        right: 10px !important;
        top: 15px !important;
        transform: none !important;
        opacity: 1 !important;
    }

    body .aipr-events-calendar .aipr-ec-featured-item {
        flex-wrap: wrap !important;
        gap: 2px 10px !important;
    }

    body .aipr-events-calendar .aipr-ec-featured-name {
        flex: 1 1 100% !important;
        order: 1 !important;
    }

    body .aipr-events-calendar .aipr-ec-featured-meta {
        order: 2 !important;
        flex: 0 1 auto !important;
    }

    body .aipr-events-calendar .aipr-ec-featured-item .aipr-ec-badge {
        order: 3 !important;
        margin-left: 0 !important;
    }

    body .aipr-events-calendar .aipr-ec-expand-actions {
        flex-direction: column !important;
        align-items: flex-start !important;
    }
}

@media (min-width: 861px) {
    body .aipr-events-calendar .aipr-ec-event-mobilemeta {
        display: none !important;
    }
}

/* ========== SUBSCRIBE MENU ========== */
/* Fixed-position and JS-anchored, re-parented to <body> at init.
   position:fixed is viewport-relative only while no ancestor carries a
   transform, and Bimber's mobile off-canvas menu transforms the page
   wrapper — which is why this rendered correctly in a narrowed desktop
   window and broken on an actual phone (2.14.7). The positioning scheme
   has to be declared here rather than applied late by the positioning
   code, or the first measurement happens while the menu is still a
   full-width static block child of body (2.15.3). */

body .aipr-ec-subscribe-menu {
    position: fixed !important;
    z-index: 9999 !important;
    min-width: 268px !important;
    max-width: calc(100vw - 16px) !important;
    padding: 6px !important;
    font-family: var(--aipr-sans) !important;
    background: var(--aipr-surface) !important;
    border: 1px solid var(--aipr-line) !important;
    border-radius: 10px !important;
    box-shadow: 0 10px 32px rgba(20, 18, 30, 0.15) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-heading {
    padding: 8px 10px 2px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 10px !important;
    font-weight: 500 !important;
    letter-spacing: 0.09em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-note {
    padding: 0 10px 8px !important;
    font-size: 12px !important;
    line-height: 1.45 !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-item {
    display: block !important;
    width: 100% !important;
    padding: 9px 11px !important;
    border: none !important;
    border-radius: 6px !important;
    background: transparent !important;
    font-family: inherit !important;
    font-size: 14.5px !important;
    color: var(--aipr-ink-2) !important;
    text-align: left !important;
    text-decoration: none !important;
    cursor: pointer !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-item:hover {
    background: var(--aipr-surface-2) !important;
    color: var(--aipr-accent) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-copy {
    font-size: 13px !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-email {
    margin-top: 6px !important;
    padding-bottom: 4px !important;
    border-top: 1px solid var(--aipr-line) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-emailrow {
    display: flex !important;
    gap: 6px !important;
    padding: 4px 10px 2px !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-input {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    height: 36px !important;
    padding: 0 10px !important;
    font-family: inherit !important;
    font-size: 13.5px !important;
    color: var(--aipr-ink) !important;
    background: var(--aipr-surface) !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 7px !important;
    box-shadow: none !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-input:focus {
    outline: none !important;
    border-color: var(--aipr-accent) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-submit {
    flex: 0 0 auto !important;
    height: 36px !important;
    padding: 0 13px !important;
    border: none !important;
    border-radius: 7px !important;
    background: var(--aipr-accent) !important;
    font-family: inherit !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    color: #fff !important;
    cursor: pointer !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-submit:hover {
    background: var(--aipr-accent-hover) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-submit:disabled {
    background: #9B8AA8 !important;
    cursor: default !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-status {
    padding: 6px 10px 2px !important;
    font-size: 12px !important;
    line-height: 1.45 !important;
    color: var(--aipr-green) !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-status.is-error {
    color: #9C3B1F !important;
}

body .aipr-ec-subscribe-menu .aipr-ec-submenu-privacy {
    padding: 4px 10px 6px !important;
    font-size: 11px !important;
    line-height: 1.45 !important;
    color: var(--aipr-muted) !important;
}

/* ========== NEWSLETTER CONFIRMATION PAGE ========== */

body .aipr-ec-confirm-page {
    max-width: 640px !important;
    margin: 0 auto !important;
    padding: 56px 20px 90px !important;
    font-family: var(--aipr-sans) !important;
}

body .aipr-ec-confirm-card {
    padding: 34px 32px 32px !important;
    border: 1px solid var(--aipr-line) !important;
    border-top: 3px solid var(--aipr-accent) !important;
    border-radius: 10px !important;
    background: var(--aipr-surface) !important;
}

body .aipr-ec-confirm-card.is-error {
    border-top-color: #9C3B1F !important;
}

body .aipr-ec-confirm-eyebrow {
    margin: 0 0 10px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 10.5px !important;
    font-weight: 500 !important;
    letter-spacing: 0.09em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-confirm-title {
    margin: 0 0 14px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 28px !important;
    font-weight: 600 !important;
    line-height: 1.2 !important;
    letter-spacing: -0.018em !important;
    color: var(--aipr-ink) !important;
}

body .aipr-ec-confirm-lead {
    margin: 0 0 12px !important;
    font-size: 16px !important;
    line-height: 1.6 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-ec-confirm-note {
    margin: 0 0 24px !important;
    font-size: 13.5px !important;
    line-height: 1.6 !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-confirm-action {
    display: inline-block !important;
    padding: 12px 20px !important;
    border-radius: 7px !important;
    background: var(--aipr-accent) !important;
    font-size: 14px !important;
    font-weight: 600 !important;
    color: #fff !important;
    text-decoration: none !important;
}

body .aipr-ec-confirm-action:hover {
    background: var(--aipr-accent-hover) !important;
    color: #fff !important;
}


/* ========== SUBMIT PAGE ========== */
/* Everything above this line is shared with the calendar through
   `:is(.aipr-events-calendar, .aipr-ec-submit-page)`: the container, the
   masthead, the buttons, the chips, the badges, the focus ring. What follows
   is only what a form needs and a listings page does not — and it spends no
   colour of its own: every value here is a var(--aipr-…).

   Two rules this section depends on:

   - Bimber styles bare `label`, `button`, `input` and `select` directly, and
     a direct rule beats an inherited one however deep the inheritance runs.
     So every component below states its own font-size, weight, line-height,
     text-transform and background. 3.1.2's tier cards were <label>s that
     said none of that, and the theme rendered all six of their bullets bold.
   - The preview in the aside is real calendar markup inside a nested
     `.aipr-events-calendar` wrapper, so it inherits the row, badge and strip
     rules verbatim. `.aipr-ec-embed` below only cancels the container. */


/* --- Layout ------------------------------------------------------------ */

body .aipr-ec-submit-page .aipr-ec-form {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) 392px !important;
    column-gap: 72px !important;
    align-items: start !important;
}

/* The form's own columns stop at a readable measure; the page container
   stays as wide as the calendar's so the two share a left edge. */
body .aipr-ec-submit-page .aipr-ec-block {
    grid-column: 1 !important;
    min-width: 0 !important;
    max-width: 720px !important;
}

body .aipr-ec-submit-page .aipr-ec-aside {
    grid-column: 2 !important;
    grid-row: 1 / span 3 !important;
    align-self: start !important;
    position: sticky !important;
    top: 24px !important;
}

body .aipr-ec-submit-page .aipr-ec-back {
    display: inline-block !important;
    margin: 0 0 14px !important;
    font-size: 14.5px !important;
    font-weight: 500 !important;
    line-height: 1.4 !important;
    text-transform: none !important;
    letter-spacing: normal !important;
    color: var(--aipr-muted) !important;
    text-decoration: none !important;
}

body .aipr-ec-submit-page .aipr-ec-back:hover {
    color: var(--aipr-accent) !important;
}


/* --- Section headings -------------------------------------------------- */
/* The calendar's column-header grammar: 12px, 600, wide tracking, a rule
   underneath. Not the 13/700 #767676 the form used to carry. */

body .aipr-ec-submit-page .aipr-ec-section {
    display: flex !important;
    align-items: baseline !important;
    justify-content: space-between !important;
    gap: 16px !important;
    margin: 40px 0 20px !important;
    padding: 0 0 10px !important;
    border-bottom: 1px solid var(--aipr-line) !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    line-height: 1.4 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-submit-page .aipr-ec-block:first-of-type .aipr-ec-section {
    margin-top: 26px !important;
}

body .aipr-ec-submit-page .aipr-ec-section small {
    font-size: 12px !important;
    font-weight: 400 !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
    color: var(--aipr-muted) !important;
    white-space: nowrap !important;
}


/* --- Fields ------------------------------------------------------------ */

body .aipr-ec-submit-page .aipr-ec-field {
    margin: 0 0 20px !important;
    min-width: 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-pair {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 20px 24px !important;
    margin: 0 0 20px !important;
}

body .aipr-ec-submit-page .aipr-ec-pair .aipr-ec-field {
    margin: 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-label {
    display: flex !important;
    align-items: baseline !important;
    gap: 8px !important;
    margin: 0 0 7px !important;
    font-size: 14.5px !important;
    font-weight: 600 !important;
    line-height: 1.4 !important;
    letter-spacing: normal !important;
    text-transform: none !important;
    color: var(--aipr-ink) !important;
}

body .aipr-ec-submit-page .aipr-ec-req {
    color: var(--aipr-muted) !important;
    font-weight: 400 !important;
}

body .aipr-ec-submit-page .aipr-ec-opt {
    font-size: 13.5px !important;
    font-weight: 400 !important;
    color: var(--aipr-muted) !important;
}

/* Counters sit at the far end of the label rather than under the control:
   the reader is looking at the label when they start typing. */
body .aipr-ec-submit-page .aipr-ec-count {
    margin-left: auto !important;
    font-size: 13px !important;
    font-weight: 400 !important;
    font-variant-numeric: tabular-nums !important;
    color: var(--aipr-muted) !important;
    white-space: nowrap !important;
}

body .aipr-ec-submit-page .aipr-ec-count.is-warn {
    color: var(--aipr-gold) !important;
}

body .aipr-ec-submit-page .aipr-ec-count.is-full {
    color: var(--aipr-accent) !important;
    font-weight: 500 !important;
}

body .aipr-ec-submit-page .aipr-ec-help {
    margin: 7px 0 0 !important;
    font-size: 13.5px !important;
    font-weight: 400 !important;
    line-height: 1.55 !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-submit-page .aipr-ec-help a {
    color: var(--aipr-accent) !important;
    text-decoration: none !important;
}

body .aipr-ec-submit-page .aipr-ec-help a:hover {
    text-decoration: underline !important;
}

/* 42px is the calendar button's height, so a control and a button standing
   side by side share a baseline and an edge. */
body .aipr-ec-submit-page .aipr-ec-input,
body .aipr-ec-submit-page .aipr-ec-select,
body .aipr-ec-submit-page .aipr-ec-textarea {
    display: block !important;
    width: 100% !important;
    height: 42px !important;
    margin: 0 !important;
    padding: 0 12px !important;
    font-size: 15px !important;
    font-weight: 400 !important;
    line-height: 40px !important;
    letter-spacing: normal !important;
    text-transform: none !important;
    color: var(--aipr-ink) !important;
    background: var(--aipr-surface) !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 8px !important;
    outline: none !important;
    box-shadow: none !important;
    transition: border-color 0.12s ease, box-shadow 0.12s ease !important;
}

body .aipr-ec-submit-page .aipr-ec-textarea {
    height: auto !important;
    min-height: 84px !important;
    padding: 9px 12px !important;
    line-height: 1.55 !important;
    resize: vertical !important;
}

body .aipr-ec-submit-page .aipr-ec-input::placeholder,
body .aipr-ec-submit-page .aipr-ec-textarea::placeholder {
    color: var(--aipr-muted) !important;
    opacity: 1 !important;
}

body .aipr-ec-submit-page .aipr-ec-input:hover,
body .aipr-ec-submit-page .aipr-ec-select:hover,
body .aipr-ec-submit-page .aipr-ec-textarea:hover {
    border-color: var(--aipr-ink) !important;
}

/* The same 3px halo the command bar uses, so focus reads the same on both
   pages. One ring, on the control — never a second on a wrapper. */
body .aipr-ec-submit-page .aipr-ec-input:focus,
body .aipr-ec-submit-page .aipr-ec-select:focus,
body .aipr-ec-submit-page .aipr-ec-textarea:focus {
    border-color: var(--aipr-accent) !important;
    box-shadow: 0 0 0 3px var(--aipr-accent-soft) !important;
    outline: none !important;
}

body .aipr-ec-submit-page .aipr-ec-input.is-error,
body .aipr-ec-submit-page .aipr-ec-select.is-error,
body .aipr-ec-submit-page .aipr-ec-textarea.is-error {
    border-color: var(--aipr-live) !important;
    box-shadow: 0 0 0 3px var(--aipr-live-soft) !important;
}

body .aipr-ec-submit-page .aipr-ec-select {
    -webkit-appearance: none !important;
    appearance: none !important;
    padding-right: 36px !important;
    background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%236E6A7B' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: right 12px center !important;
}

/* An input with a button on its right: the URL field and the digest signup. */
body .aipr-ec-submit-page .aipr-ec-input-row {
    display: flex !important;
    gap: 8px !important;
}

body .aipr-ec-submit-page .aipr-ec-input-row .aipr-ec-input {
    flex: 1 1 auto !important;
    min-width: 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-input-row .aipr-ec-btn {
    flex: 0 0 auto !important;
}

body .aipr-ec-submit-page .aipr-ec-err {
    margin: 6px 0 0 !important;
    font-size: 13.5px !important;
    line-height: 1.5 !important;
    color: var(--aipr-live) !important;
}

body .aipr-ec-submit-page .aipr-ec-err:empty {
    display: none !important;
}


/* --- Chip groups -------------------------------------------------------- */
/* Format, Type and Topics are closed sets, and the calendar already has a
   control for a closed set. The radio or checkbox behind each chip is the
   thing the form actually submits. */

body .aipr-ec-submit-page .aipr-ec-chips {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 8px !important;
}

body .aipr-ec-submit-page .aipr-ec-chip {
    position: relative !important;
    margin: 0 !important;
    user-select: none !important;
}

body .aipr-ec-submit-page .aipr-ec-chip input {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    margin: 0 !important;
    padding: 0 !important;
    opacity: 0 !important;
    pointer-events: none !important;
}

/* The tick belongs to the multi-select group only: on Format and Type the
   accent already says which single value is chosen, and a tick beside one of
   three mutually exclusive options reads as a checkbox. */
body .aipr-ec-submit-page [data-multi] .aipr-ec-chip.is-on::before {
    content: '\2713' !important;
    font-size: 12px !important;
    line-height: 1 !important;
}

/* Past the three-topic ceiling the rest stay legible but plainly inert. */
body .aipr-ec-submit-page .aipr-ec-chip.is-off {
    opacity: 0.45 !important;
    cursor: default !important;
    pointer-events: none !important;
}

/* A group's error is stated once, under the group. Reddening every
   unselected chip was tried and removed: an option nobody has picked is not
   itself wrong, eight red pills shout louder than the sentence that explains
   them, and Format and Type — which have the same failure — were left
   plain, so the page contradicted itself. */


/* --- Listing tiers ------------------------------------------------------ */
/* Two cards, the same five rows, in the same order. 3.1.2 gave them three
   bullets against six, so the reader had to hold two lists in their head to
   find the one difference that matters — and the free tier's own cost (put
   our logo on your page first) was phrased as a feature of it. */

body .aipr-ec-submit-page .aipr-ec-tiers {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 16px !important;
    align-items: stretch !important;
}

body .aipr-ec-submit-page .aipr-ec-tier {
    position: relative !important;
    display: block !important;
    margin: 0 !important;
    padding: 18px 20px 16px !important;
    font-size: 14.5px !important;
    font-weight: 400 !important;
    line-height: 1.5 !important;
    letter-spacing: normal !important;
    text-transform: none !important;
    color: var(--aipr-ink) !important;
    background: var(--aipr-surface) !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 8px !important;
    cursor: pointer !important;
}

body .aipr-ec-submit-page .aipr-ec-tier:hover {
    border-color: var(--aipr-ink) !important;
}

/* Selected is a state, so it takes the accent — and it is drawn as an inset
   shadow rather than a second border pixel, which would move every line in
   the card by 1px on selection. */
body .aipr-ec-submit-page .aipr-ec-tier.is-on {
    border-color: var(--aipr-accent) !important;
    box-shadow: inset 0 0 0 1px var(--aipr-accent) !important;
}

body .aipr-ec-submit-page .aipr-ec-tier input {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    opacity: 0 !important;
    pointer-events: none !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-head {
    display: flex !important;
    align-items: baseline !important;
    justify-content: space-between !important;
    gap: 12px !important;
    margin: 0 0 14px !important;
    padding: 0 0 12px !important;
    border-bottom: 1px solid var(--aipr-line) !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-name {
    font-size: 16.5px !important;
    font-weight: 600 !important;
    line-height: 1.3 !important;
    letter-spacing: -0.005em !important;
    color: var(--aipr-ink) !important;
}

/* The price is a figure, not a banner: same size and weight as the name,
   in the ink colour. Gold on this page belongs to the preview alone. */
body .aipr-ec-submit-page .aipr-ec-tier-price {
    font-size: 16.5px !important;
    font-weight: 600 !important;
    line-height: 1.3 !important;
    font-variant-numeric: tabular-nums !important;
    color: var(--aipr-ink) !important;
    white-space: nowrap !important;
}

/* Spans, not a <dl>: this grid lives inside the card's <label>, and a label
   takes phrasing content only. */
body .aipr-ec-submit-page .aipr-ec-tier-rows {
    display: grid !important;
    grid-template-columns: 92px minmax(0, 1fr) !important;
    gap: 9px 12px !important;
    margin: 0 !important;
    padding: 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-k {
    margin: 0 !important;
    font-size: 11.5px !important;
    font-weight: 600 !important;
    line-height: 1.75 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-v {
    margin: 0 !important;
    font-size: 14.5px !important;
    font-weight: 400 !important;
    line-height: 1.45 !important;
    color: var(--aipr-ink-2) !important;
}

/* The one row in each card that decides the choice. */
body .aipr-ec-submit-page .aipr-ec-tier-v.is-key {
    color: var(--aipr-ink) !important;
    font-weight: 500 !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-v.is-none {
    color: var(--aipr-muted) !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-detail {
    display: none;
    margin: 16px 0 0 !important;
    padding: 16px 18px !important;
    border: 1px solid var(--aipr-line) !important;
    border-radius: 8px !important;
    background: var(--aipr-surface-2) !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-detail.is-open {
    display: block !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-detail p {
    margin: 0 0 10px !important;
    font-size: 14.5px !important;
    line-height: 1.55 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-detail p:last-child {
    margin-bottom: 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-detail a {
    color: var(--aipr-accent) !important;
    text-decoration: none !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-detail a:hover {
    text-decoration: underline !important;
}

body .aipr-ec-submit-page .aipr-ec-tier-detail .aipr-ec-field {
    margin: 14px 0 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-copy {
    display: flex !important;
    align-items: stretch !important;
    margin: 10px 0 12px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 8px !important;
    background: var(--aipr-surface) !important;
    overflow: hidden !important;
}

body .aipr-ec-submit-page .aipr-ec-copy code {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    margin: 0 !important;
    padding: 9px 12px !important;
    font-family: var(--aipr-sans) !important;
    font-size: 14px !important;
    line-height: 1.55 !important;
    color: var(--aipr-ink) !important;
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    word-break: break-all !important;
}

body .aipr-ec-submit-page .aipr-ec-copy button {
    flex: 0 0 auto !important;
    margin: 0 !important;
    padding: 0 14px !important;
    font-size: 14px !important;
    font-weight: 500 !important;
    line-height: 1 !important;
    color: var(--aipr-accent) !important;
    background: var(--aipr-surface) !important;
    border: 0 !important;
    border-left: 1px solid var(--aipr-line-2) !important;
    border-radius: 0 !important;
    cursor: pointer !important;
}

body .aipr-ec-submit-page .aipr-ec-copy button:hover {
    background: var(--aipr-accent-soft) !important;
}

body .aipr-ec-submit-page .aipr-ec-copy button.is-done {
    color: var(--aipr-green) !important;
}


/* --- Actions ------------------------------------------------------------ */
/* Left-aligned, with the consequence beside it. A centred button on a
   left-aligned form is the shape of a marketing page. */

body .aipr-ec-submit-page .aipr-ec-actions {
    display: flex !important;
    align-items: center !important;
    gap: 18px !important;
    margin: 32px 0 0 !important;
    padding: 24px 0 0 !important;
    border-top: 1px solid var(--aipr-line) !important;
}

body .aipr-ec-submit-page .aipr-ec-actions .aipr-ec-btn {
    height: 46px !important;
    padding: 0 22px !important;
    font-size: 15.5px !important;
}

body .aipr-ec-submit-page .aipr-ec-actions .aipr-ec-help {
    margin: 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-btn:disabled {
    opacity: 0.65 !important;
    cursor: default !important;
}

body .aipr-ec-submit-page .aipr-ec-spinner {
    display: none !important;
    width: 16px !important;
    height: 16px !important;
    margin-right: 9px !important;
    border: 2px solid rgba(255, 255, 255, 0.35) !important;
    border-top-color: #fff !important;
    border-radius: 50% !important;
    animation: aipr-spin 0.6s linear infinite !important;
}

body .aipr-ec-submit-page .aipr-ec-btn.is-busy .aipr-ec-spinner {
    display: inline-block !important;
}

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


/* --- Aside: how it will appear ------------------------------------------ */

body .aipr-ec-submit-page .aipr-ec-aside-label {
    margin: 26px 0 12px !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    line-height: 1.4 !important;
    letter-spacing: 0.06em !important;
    text-transform: uppercase !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-submit-page .aipr-ec-preview {
    padding: 14px 14px 4px !important;
    border: 1px solid var(--aipr-line) !important;
    border-radius: 8px !important;
    background: var(--aipr-surface) !important;
}

/* The preview is the calendar's own markup, so it carries the calendar's
   class and inherits every row, badge and strip rule unchanged. All this
   does is stop it behaving like a page container. */
body .aipr-ec-submit-page .aipr-ec-embed {
    max-width: none !important;
    width: auto !important;
    min-width: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
}

/* At 392px the four-column row is the wrong shape, so the preview uses the
   same two-line form the calendar uses on a phone. */
body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-row {
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 4px !important;
    padding: 13px 12px !important;
    cursor: default !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-row.is-sponsored {
    padding-left: 15px !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-name {
    order: 1 !important;
    font-size: 17px !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-date {
    order: 2 !important;
    font-size: 14.5px !important;
    font-weight: 400 !important;
    white-space: normal !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-location,
body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-type,
body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-row-expand-icon {
    display: none !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-mobilemeta {
    display: inline !important;
    color: var(--aipr-muted) !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-link {
    pointer-events: none !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-event-link.is-empty {
    color: var(--aipr-muted) !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-month-header {
    margin: 0 !important;
    padding: 0 0 8px !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    letter-spacing: normal !important;
    color: var(--aipr-ink-2) !important;
    border-bottom: 1px solid var(--aipr-line) !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-featured-strip {
    margin: 0 0 14px !important;
    padding: 8px 12px 4px !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-featured-item {
    flex-wrap: wrap !important;
    gap: 2px 10px !important;
    cursor: default !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-featured-name {
    flex: 1 1 100% !important;
    order: 1 !important;
    font-size: 15.5px !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-featured-meta {
    order: 2 !important;
    flex: 0 1 auto !important;
    font-size: 13.5px !important;
}

body .aipr-ec-submit-page .aipr-ec-embed .aipr-ec-featured-item .aipr-ec-badge {
    order: 3 !important;
    margin-left: 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-preview-caption {
    margin: 10px 0 0 !important;
    font-size: 13px !important;
    line-height: 1.5 !important;
    color: var(--aipr-muted) !important;
}

/* Three steps, and they really are a sequence: review, publication, report. */
body .aipr-ec-submit-page .aipr-ec-next {
    margin: 0 !important;
    padding: 0 !important;
    list-style: none !important;
    counter-reset: aipr-step !important;
}

body .aipr-ec-submit-page .aipr-ec-next li {
    position: relative !important;
    margin: 0 !important;
    padding: 0 0 14px 34px !important;
    font-size: 14.5px !important;
    line-height: 1.5 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-ec-submit-page .aipr-ec-next li::before {
    counter-increment: aipr-step !important;
    content: counter(aipr-step) !important;
    position: absolute !important;
    left: 0 !important;
    top: 1px !important;
    width: 22px !important;
    height: 22px !important;
    border: 1px solid var(--aipr-line-2) !important;
    border-radius: 50% !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    line-height: 20px !important;
    text-align: center !important;
    color: var(--aipr-ink) !important;
    background: var(--aipr-surface) !important;
}

body .aipr-ec-submit-page .aipr-ec-next strong {
    font-weight: 600 !important;
    color: var(--aipr-ink) !important;
}


/* --- Notices ------------------------------------------------------------ */

body .aipr-ec-submit-page .aipr-ec-notice {
    margin: 20px 0 0 !important;
    padding: 14px 18px !important;
    border: 1px solid var(--aipr-line) !important;
    border-left: 3px solid var(--aipr-gold-rule) !important;
    border-radius: 0 8px 8px 0 !important;
    background: var(--aipr-gold-soft) !important;
    font-size: 14.5px !important;
    line-height: 1.55 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-ec-submit-page .aipr-ec-notice strong {
    font-weight: 600 !important;
    color: var(--aipr-ink) !important;
}

body .aipr-ec-submit-page .aipr-ec-formerr {
    margin: 18px 0 0 !important;
    padding: 14px 18px !important;
    border: 1px solid var(--aipr-live) !important;
    border-radius: 8px !important;
    background: var(--aipr-live-soft) !important;
    font-size: 14.5px !important;
    line-height: 1.55 !important;
    color: var(--aipr-live) !important;
}


/* --- Done ---------------------------------------------------------------- */
/* The same masthead grammar as the form it replaces, not a centred card with
   a green tick: this page is a filing, and the confirmation of a filing is a
   receipt. */

body .aipr-ec-submit-page .aipr-ec-done {
    display: none;
    max-width: 720px !important;
    margin: 26px 0 0 !important;
}

body .aipr-ec-submit-page .aipr-ec-done.is-open {
    display: block !important;
}

body .aipr-ec-submit-page .aipr-ec-done h2 {
    margin: 0 0 10px !important;
    padding: 0 !important;
    border: 0 !important;
    font-size: 30px !important;
    font-weight: 650 !important;
    line-height: 1.2 !important;
    letter-spacing: -0.02em !important;
    text-transform: none !important;
    text-align: left !important;
    color: var(--aipr-ink) !important;
}

body .aipr-ec-submit-page .aipr-ec-done > p {
    margin: 0 0 22px !important;
    max-width: 68ch !important;
    font-size: 18px !important;
    line-height: 1.5 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-ec-submit-page .aipr-ec-done-block {
    margin: 22px 0 0 !important;
    padding: 22px 0 0 !important;
    border-top: 1px solid var(--aipr-line) !important;
    max-width: 560px !important;
}

body .aipr-ec-submit-page .aipr-ec-done-block p {
    margin: 0 0 10px !important;
    font-size: 14.5px !important;
    line-height: 1.55 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-ec-submit-page .aipr-ec-done-block a {
    color: var(--aipr-accent) !important;
    text-decoration: none !important;
}

body .aipr-ec-submit-page .aipr-ec-done-block a:hover {
    text-decoration: underline !important;
}

body .aipr-ec-submit-page .aipr-ec-done-actions {
    display: flex !important;
    align-items: center !important;
    gap: 14px !important;
    margin: 24px 0 0 !important;
}

/* A button that reads as a link: "Clear it" beside the draft notice, and
   "Replace those with what the page says" under the fill result. Both are
   actions, so they are buttons; neither deserves a button's weight on the
   page. Declares its own type and ground because Bimber styles bare
   <button>. */
body .aipr-ec-submit-page .aipr-ec-linkbtn {
    display: inline !important;
    margin: 0 !important;
    padding: 0 !important;
    font-family: inherit !important;
    font-size: inherit !important;
    font-weight: 500 !important;
    line-height: inherit !important;
    letter-spacing: normal !important;
    text-transform: none !important;
    color: var(--aipr-accent) !important;
    background: none !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    cursor: pointer !important;
    text-decoration: underline !important;
    text-underline-offset: 2px !important;
}

body .aipr-ec-submit-page .aipr-ec-linkbtn:hover {
    color: var(--aipr-accent-hover) !important;
    background: none !important;
}

body .aipr-ec-submit-page .aipr-ec-linkbtn:focus-visible {
    outline: 2px solid var(--aipr-accent) !important;
    outline-offset: 2px !important;
}

/* Neutral by default. Most of what this line says is information — what was
   read, what was left alone — and green on all of it would read as success
   on a sentence reporting that nothing changed. */
body .aipr-ec-submit-page .aipr-ec-status {
    margin: 8px 0 0 !important;
    font-size: 13.5px !important;
    line-height: 1.5 !important;
    color: var(--aipr-ink-2) !important;
}

body .aipr-ec-submit-page .aipr-ec-status.is-ok {
    color: var(--aipr-green) !important;
}

body .aipr-ec-submit-page .aipr-ec-status.is-error {
    color: var(--aipr-live) !important;
}


/* --- Narrow ------------------------------------------------------------- */
/* One column below 1100px: the preview keeps its DOM position between the
   tier cards and the contact fields, which is where it is still useful. */

@media (max-width: 1100px) {
    body .aipr-ec-submit-page .aipr-ec-form {
        grid-template-columns: minmax(0, 1fr) !important;
        column-gap: 0 !important;
    }

    /* The column keeps its measure once the preview stops sitting beside it.
       Letting the fields run to 1000px would give the description a line
       length nothing else on either page has. */
    body .aipr-ec-submit-page .aipr-ec-block {
        grid-column: 1 !important;
    }

    body .aipr-ec-submit-page .aipr-ec-aside {
        grid-column: 1 !important;
        grid-row: auto !important;
        position: static !important;
        max-width: 560px !important;
    }

    body .aipr-ec-submit-page .aipr-ec-aside-label:first-child {
        margin-top: 36px !important;
    }
}

@media (max-width: 860px) {
    body .aipr-ec-submit-page .aipr-ec-pair,
    body .aipr-ec-submit-page .aipr-ec-tiers {
        grid-template-columns: 1fr !important;
    }

    body .aipr-ec-submit-page .aipr-ec-input-row {
        flex-direction: column !important;
    }

    body .aipr-ec-submit-page .aipr-ec-input-row .aipr-ec-btn {
        justify-content: center !important;
    }

    body .aipr-ec-submit-page .aipr-ec-actions,
    body .aipr-ec-submit-page .aipr-ec-done-actions {
        flex-direction: column !important;
        align-items: stretch !important;
        gap: 14px !important;
    }

    body .aipr-ec-submit-page .aipr-ec-actions .aipr-ec-btn,
    body .aipr-ec-submit-page .aipr-ec-done-actions .aipr-ec-btn {
        justify-content: center !important;
    }

    body .aipr-ec-submit-page .aipr-ec-done h2 {
        font-size: 26px !important;
    }

    body .aipr-ec-submit-page .aipr-ec-done > p {
        font-size: 16.5px !important;
    }
}


/* ========== PRINT ========== */
/* Printing a calendar is printing the listings. Everything that only
   exists to change what is on screen comes out. */

@media print {
    body .aipr-events-calendar .aipr-ec-preview-banner,
    body .aipr-events-calendar .aipr-ec-masthead-actions,
    body .aipr-events-calendar .aipr-ec-command,
    body .aipr-events-calendar .aipr-ec-chiprow,
    body .aipr-events-calendar .aipr-ec-horizon,
    body .aipr-events-calendar .aipr-ec-density,
    body .aipr-events-calendar .aipr-ec-filters,
    body .aipr-events-calendar .aipr-ec-row-expand-icon,
    body .aipr-events-calendar .aipr-ec-cal-btns,
    body .aipr-events-calendar .aipr-ec-subscribe-primary,
    body .aipr-ec-subscribe-menu,
    body .aipr-ec-filter-pop {
        display: none !important;
    }

    body .aipr-events-calendar .aipr-ec-event-row {
        break-inside: avoid !important;
    }
}
