/* ============================================================
   AITX Community: Texas AI Summit site template (#8039)
   The server injects this file on EVERY conference page of a program
   whose site_template is "aitx" (#8044), forked or not. It loads after
   conference.css and each page's own <style>. Rules carry a :root body
   prefix so they outrank those, and the nav sheet conference.js injects.
   Page-specific rules key on an element only that page has.

   Concept, from the AITX design reference: a Texas dance hall
   bill. Hierarchy comes from stacked type and horizontal rules.
   No cards, no shadows, no rounded boxes, no gradients.
   Orange is a signal (bar, primary action, rules, numbers).
   ============================================================ */

/* Archivo, the one family. Imported here, not linked per page, because
   unforked pages carry no template markup to hold a <link>. */
@import url("https://fonts.googleapis.com/css2?family=Archivo:ital,wdth,wght@0,62..125,100..900;1,62..125,100..900&display=swap");

:root {
    --ink: #010101;
    --flame: #ff4201;
    --paper: #ffffff;
    --bone: #f0e7d6;
    --dust: #9a9089;
    --soot: #4a423a;
    --gutter: clamp(20px, 5vw, 64px);
    --rule: 1px solid rgba(255, 255, 255, .18);
    --rule-ink: 1px solid rgba(1, 1, 1, .16);
    --aitx-font: "Archivo", system-ui, -apple-system, "Segoe UI", sans-serif;
}

/* ---------- base ----------
   Body-level tokens win over the :root values the SSR theme block and
   _applyBranding write, so the org theme colors never repaint this site. */
:root body {
    --color-text: var(--paper);
    --color-text-muted: var(--dust);
    --color-text-light: var(--dust);
    --color-primary: var(--flame);
    --color-dark: var(--ink);
    --color-surface: var(--ink);
    --color-surface-alt: var(--ink);
    --color-border: rgba(255, 255, 255, .18);
    --theme-primary: var(--flame);
    --conf-primary: var(--flame);
    --font-heading: var(--aitx-font);
    --font-body: var(--aitx-font);
    background: var(--ink);
    color: var(--paper);
    font-family: var(--aitx-font);
    font-variation-settings: "wdth" 100;
    font-size: clamp(16px, 1.05vw, 18px);
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
}
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

/* Links: conference.css colors them with --color-primary, set to flame above.
   No element-level link rule here: it would outrank every classed link. */
:root body .page-content { padding: 0; max-width: none; margin: 0; }
/* Only template-owned elements: site.js toggles these with the hidden attribute. */
:root body [hidden]:is([class*="aitx"], [data-aitx-needs], [data-aitx-hc], [data-aitx-hc-html],
    [data-aitx-cfp-cta], [data-aitx-cfp-close], [data-aitx-cfp-close-long], [data-aitx-tracks-wrap],
    [data-aitx-formats-wrap], [data-aitx-contact-email], [data-aitx-contact-wrap], [data-aitx-website],
    [data-section]) { display: none !important; }
:root body .aitx-hidden { display: none !important; }

:root body a:focus-visible,
:root body button:focus-visible,
:root body .aitx-btn:focus-visible,
:root body summary:focus-visible { outline: 3px solid var(--flame); outline-offset: 3px; }

/* ---------- announcement bar ---------- */
:root body .aitx-bar {
    display: block;
    background: var(--flame);
    color: var(--ink);
    font-weight: 700;
    font-size: .82rem;
    letter-spacing: .08em;
    text-transform: uppercase;
    text-align: center;
    padding: 9px var(--gutter);
    text-decoration: none;
}
:root body .aitx-bar span { font-variation-settings: "wdth" 88; }
:root body .aitx-bar:hover span { text-decoration: underline; }
:root body .aitx-bar:focus-visible { outline: 3px solid var(--ink); outline-offset: -5px; }

/* ---------- masthead: the Janix nav restyled ----------
   conference.js injects its own nav stylesheet after this file loads, so
   every rule here carries the :root body scope to outrank it. */
:root body #conf-nav { display: contents; }
:root body #nav-container:empty { display: none; }
:root body .conf-nav {
    background: var(--ink);
    padding: 0 var(--gutter);
    border-bottom: var(--rule);
    position: sticky;
    top: 0;
    z-index: 100;
}
:root body .conf-nav-inner { max-width: none; height: auto; min-height: 70px; gap: 26px; font-family: var(--aitx-font); }
:root body .conf-nav-logo { color: var(--paper); }
:root body .conf-nav-logo-img { height: 26px; max-width: 200px; }
:root body .conf-nav-logo-text {
    font-weight: 900;
    font-variation-settings: "wdth" 108;
    text-transform: uppercase;
    letter-spacing: -.01em;
    font-size: 1rem;
}
:root body .conf-nav-links { justify-content: flex-end; gap: 26px; }
:root body .conf-nav-link,
:root body .conf-nav-more-btn {
    color: var(--dust);
    background: none;
    border-radius: 0;
    padding: 6px 0;
    font-size: .85rem;
    font-weight: 600;
    transition: color .15s;
}
:root body .conf-nav-link:hover,
:root body .conf-nav-link:focus-visible,
:root body .conf-nav-more-btn:hover,
:root body .conf-nav-more-btn[aria-expanded="true"] { color: var(--paper); background: none; text-decoration: none; }
:root body .conf-nav-link.active { color: var(--flame); background: none; border-bottom: 0; }
:root body .conf-nav-link:focus-visible,
:root body .conf-nav-more-btn:focus-visible { outline: 3px solid var(--flame); outline-offset: 3px; }
:root body .conf-nav-more-menu {
    background: var(--ink);
    border: var(--rule);
    border-top: 2px solid var(--flame);
    border-radius: 0;
    box-shadow: none;
    padding: 6px 16px;
}
:root body .conf-nav-more-menu .conf-nav-link { padding: 10px 0; border-bottom: var(--rule); }
:root body .conf-nav-more-menu .conf-nav-link.active { background: none; color: var(--flame); }
:root body .conf-nav-parent {
    color: var(--dust);
    border: 0;
    border-radius: 0;
    padding: 6px 0;
    font-size: .85rem;
    font-weight: 600;
}
:root body .conf-nav-parent:hover { color: var(--paper); background: none; }
:root body .conf-nav-auth,
:root body .conf-nav-cart {
    background: transparent;
    color: var(--paper);
    border: 2px solid var(--flame);
    border-radius: 2px;
    padding: 7px 16px;
    font-family: var(--aitx-font);
    font-size: .8rem;
    font-weight: 800;
    transition: background .15s, color .15s;
}
:root body .conf-nav-auth:hover,
:root body .conf-nav-auth:focus-visible,
:root body .conf-nav-cart:hover,
:root body .conf-nav-cart:focus-visible { background: var(--flame); color: var(--ink); opacity: 1; text-decoration: none; }
:root body .conf-nav-cart-badge { background: var(--flame); color: var(--ink); border-radius: 0; }
:root body .conf-nav-hamburger span { background: var(--paper); }
:root body .conf-nav-mobile { padding: 0 0 18px; }
:root body .conf-nav-mobile .conf-nav-link { padding: 12px 0; border-bottom: var(--rule); font-size: .95rem; }
:root body .conf-nav-mobile .conf-nav-auth { margin: 16px 0 0; }
:root body .conf-nav-mobile .conf-nav-parent { margin: 12px 0 0; justify-content: flex-start; }

/* ---------- buttons ---------- */
:root body .aitx-actions { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin-top: clamp(26px, 4vw, 40px); }
:root body .aitx-actions-left { justify-content: flex-start; }
:root body .aitx-btn,
:root body .ch-btn,
:root body .btn-primary,
:root body .conf-section-cta__btn,
:root body .mr-btn {
    display: inline-block;
    padding: 15px 30px;
    font-family: var(--aitx-font);
    font-weight: 800;
    font-size: .95rem;
    line-height: 1.2;
    text-decoration: none;
    border: 2px solid var(--flame);
    border-radius: 2px;
    background: var(--flame);
    color: var(--ink);
    box-shadow: none;
    cursor: pointer;
    transition: background .15s, color .15s;
}
:root body .aitx-btn:hover, :root body .aitx-btn:focus-visible,
:root body .ch-btn:hover, :root body .ch-btn:focus-visible,
:root body .btn-primary:hover, :root body .btn-primary:focus-visible,
:root body .conf-section-cta__btn:hover, :root body .conf-section-cta__btn:focus-visible {
    background: transparent;
    color: var(--flame);
    text-decoration: none;
}
:root body .aitx-btn-line,
:root body .ch-btn-ghost { background: transparent; color: var(--paper); border-color: var(--paper); }
:root body .aitx-btn-line:hover, :root body .aitx-btn-line:focus-visible,
:root body .ch-btn-ghost:hover, :root body .ch-btn-ghost:focus-visible { background: var(--paper); color: var(--ink); }
:root body .aitx-sec-bone .aitx-btn-line { color: var(--ink); border-color: var(--ink); }
:root body .aitx-sec-bone .aitx-btn-line:hover,
:root body .aitx-sec-bone .aitx-btn-line:focus-visible { background: var(--ink); color: var(--bone); }
:root body button[disabled] { opacity: .6; cursor: progress; }

/* ---------- the bill (home hero) ----------
   The injected anchors arrive in the fixed markup order the injector needs
   (badge, name, tagline). Flex order sets them as a poster: name, tagline,
   stamp. The stacked wordmark comes from a narrow measure, not from markup,
   because the name is one server-injected string. */
:root body .aitx-bill {
    padding: clamp(48px, 9vw, 110px) var(--gutter) clamp(36px, 6vw, 64px);
    text-align: center;
    color: var(--paper);
    min-height: 0;
    overflow: visible;
}
:root body .aitx-bill-inner { display: flex; flex-direction: column; align-items: center; max-width: none; animation: none; }
:root body .aitx-bill .ch-hero-title {
    order: 1;
    margin: 0 auto;
    /* Two lines, not the design's three-line poster stack: AITX found the
       wordmark too big and too stacked (2026-10-06). */
    max-width: 14ch;
    font-family: var(--aitx-font);
    font-weight: 900;
    font-variation-settings: "wdth" 112;
    font-size: clamp(2.4rem, 8vw, 6.5rem);
    line-height: .9;
    letter-spacing: -.02em;
    text-transform: uppercase;
    text-wrap: balance;
    overflow-wrap: break-word;
    color: var(--paper);
}
:root body .ch-hero-accent,
:root body .conf-hero-accent { color: var(--flame); background: none; -webkit-text-fill-color: currentColor; }
:root body .aitx-bill .ch-hero-tagline {
    order: 2;
    margin: clamp(22px, 3.5vw, 38px) auto 0;
    /* 24ch was the design's cap for its own two-line tagline. The prod
       tagline is 34 characters and wrapped after "in" at every width. */
    max-width: 44ch;
    font-size: clamp(1.05rem, 2.5vw, 1.75rem);
    font-weight: 500;
    font-style: italic;
    line-height: 1.3;
    color: var(--paper);
}
:root body .aitx-bill .ch-hero-eyebrow {
    order: 3;
    display: block;
    width: 100%;
    max-width: 760px;
    margin: clamp(26px, 4vw, 44px) auto 0;
    padding: 13px 0;
    border: 0;
    border-top: 2px solid var(--flame);
    border-bottom: 2px solid var(--flame);
    border-radius: 0;
    backdrop-filter: none;
    font-weight: 800;
    font-variation-settings: "wdth" 80;
    letter-spacing: .14em;
    text-transform: uppercase;
    font-size: clamp(.78rem, 1.9vw, 1.05rem);
    color: var(--paper);
}
:root body .aitx-bill .ch-hero-subhead { order: 4; margin: 18px auto 0; max-width: 56ch; color: var(--dust); }
:root body .aitx-bill .ch-hero-sales-open-pill { order: 5; margin: 22px auto 0; }
:root body .aitx-bill .aitx-hero-actions-wrap { order: 6; width: 100%; }
:root body .aitx-bill .ch-hero-actions { margin-top: 0; gap: 12px; }
:root body .aitx-bill .ch-hero-actions > div { margin-top: clamp(26px, 4vw, 40px); gap: 12px; }
:root body #hero-notify-form { display: none !important; }
:root body.phase-sales_open .aitx-announce-only,
:root body.phase-live .aitx-announce-only { display: none; }

:root body .ch-hero-sales-open-pill {
    background: transparent;
    color: var(--flame);
    border: 2px solid var(--flame);
    border-radius: 2px;
    box-shadow: none;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .1em;
    font-size: .78rem;
    padding: 6px 12px;
}
:root body .ch-hero-sales-open-pill::before { display: none; }

@media (prefers-reduced-motion: no-preference) {
    :root body .aitx-bill .ch-hero-title,
    :root body .aitx-bill .ch-hero-tagline,
    :root body .aitx-bill .ch-hero-eyebrow,
    :root body .aitx-bill .aitx-hero-actions-wrap {
        animation: aitx-rise .72s cubic-bezier(.2, .7, .3, 1) backwards;
    }
    :root body .aitx-bill .ch-hero-title { animation-delay: .04s; }
    :root body .aitx-bill .ch-hero-tagline { animation-delay: .34s; }
    :root body .aitx-bill .ch-hero-eyebrow { animation-delay: .44s; }
    :root body .aitx-bill .aitx-hero-actions-wrap { animation-delay: .54s; }
}
@keyframes aitx-rise { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }

/* ---------- page header (interior pages) ---------- */
:root body .aitx-phead {
    padding: clamp(44px, 7vw, 84px) var(--gutter) clamp(30px, 4vw, 48px);
    border-bottom: 2px solid var(--flame);
    text-align: left;
    margin: 0;
    max-width: none;
}
:root body .aitx-phead h1,
:root body .section-header.aitx-phead h1 {
    font-family: var(--aitx-font);
    font-weight: 900;
    font-variation-settings: "wdth" 108;
    font-size: clamp(2.2rem, 7vw, 5rem);
    line-height: .92;
    letter-spacing: -.02em;
    text-transform: uppercase;
    color: var(--paper);
    margin: 0;
    max-width: 16ch;
}
:root body .aitx-phead h1 em { color: var(--flame); font-style: normal; }
:root body .aitx-phead .aitx-sub,
:root body .aitx-phead .section-subtitle {
    margin-top: clamp(16px, 2.4vw, 26px);
    font-size: clamp(1.05rem, 2vw, 1.35rem);
    max-width: 56ch;
    line-height: 1.45;
    color: var(--paper);
}
:root body .aitx-phead .aitx-sub:empty,
:root body .aitx-phead .section-subtitle:empty { display: none; }
:root body .aitx-back {
    display: inline-block;
    margin-bottom: 18px;
    font-size: .85rem;
    font-weight: 700;
    color: var(--dust);
    text-decoration: none;
    text-transform: none;
}
:root body .aitx-back:hover, :root body .aitx-back:focus-visible { color: var(--flame); }

/* ---------- sections ---------- */
:root body .aitx-sec { padding: clamp(52px, 8vw, 104px) var(--gutter); }
:root body .aitx-sec-bone { background: var(--bone); color: var(--ink); }
:root body .aitx-wrap { max-width: 1080px; margin: 0 auto; }
:root body .aitx-narrow { max-width: 62ch; }
/* About sits on the full 1080px measure so its left edge lines up with the
   venue card and the sections below it (CTO, 2026-10-07). The design set
   it as a centred 62ch column; the prose keeps a reading measure. */
:root body #aitx-about .aitx-narrow { max-width: 1080px; }
/* Heading across the top, prose on the full measure, the two buttons the
   same width side by side under the text (CTO, 2026-10-07). */
:root body #aitx-about .aitx-prose { max-width: none; }
:root body #aitx-about .aitx-actions { display: inline-grid; grid-auto-flow: column; grid-auto-columns: 1fr; }
:root body #aitx-about .aitx-actions .aitx-btn { text-align: center; }
@media (max-width: 600px) {
    :root body #aitx-about .aitx-actions { display: grid; grid-auto-flow: row; }
}
:root body .aitx-sec h2,
:root body .aitx-h2 {
    font-family: var(--aitx-font);
    font-weight: 900;
    font-variation-settings: "wdth" 105;
    font-size: clamp(1.7rem, 4.4vw, 3.1rem);
    line-height: 1.02;
    letter-spacing: -.02em;
    margin: 0 0 clamp(20px, 3vw, 34px);
    color: inherit;
}
:root body .aitx-sec h3 { font-weight: 800; font-size: clamp(1.12rem, 2.3vw, 1.55rem); line-height: 1.15; color: inherit; }
:root body .aitx-sec p + p { margin-top: 1.05em; }
:root body .aitx-lede { font-size: clamp(1.06rem, 1.9vw, 1.3rem); line-height: 1.5; }
:root body .aitx-lede:empty { display: none; }
:root body .aitx-muted { color: var(--dust); }
:root body .aitx-sec-bone .aitx-muted { color: var(--soot); }
:root body .aitx-gap { margin-top: clamp(22px, 3vw, 32px); }
:root body .aitx-subhead { font-weight: 800; font-size: clamp(1.05rem, 2vw, 1.3rem); margin-top: clamp(30px, 4vw, 46px); }

/* Organizer HTML (about_html, sponsor_pitch_html) */
:root body .aitx-prose p + p { margin-top: 1.05em; }
:root body .aitx-prose > p:first-child { font-size: clamp(1.06rem, 1.9vw, 1.3rem); line-height: 1.5; }
:root body .aitx-prose a { color: var(--flame); font-weight: 700; }
:root body .aitx-prose ul, :root body .aitx-prose ol { margin: 1em 0 0 1.2em; }
:root body .aitx-prose .aitx-sign,
:root body .aitx-sign { margin-top: clamp(26px, 3.5vw, 40px); font-weight: 800; font-size: 1rem; }
:root body .aitx-sign span { display: block; font-weight: 500; color: var(--soot); font-size: .88rem; margin-top: 3px; }

/* ---------- rule list (tracks, formats, ways in) ---------- */
:root body .aitx-list { border-top: 2px solid var(--flame); margin-top: clamp(14px, 2vw, 22px); }
:root body .aitx-list:empty { display: none; }
:root body .aitx-row {
    display: grid;
    grid-template-columns: clamp(46px, 7vw, 86px) 1fr;
    gap: clamp(14px, 3vw, 38px);
    align-items: baseline;
    padding: clamp(20px, 3vw, 30px) 0;
    border-bottom: var(--rule);
}
:root body .aitx-row.aitx-nokey { grid-template-columns: 1fr; }
:root body .aitx-row .aitx-n {
    font-weight: 900;
    font-variation-settings: "wdth" 76;
    font-size: clamp(1.5rem, 4vw, 2.7rem);
    color: var(--flame);
    line-height: 1;
}
:root body .aitx-row h3 { margin-bottom: 5px; }
:root body .aitx-row p { color: var(--dust); max-width: 60ch; font-size: .95rem; }
:root body .aitx-sec-bone .aitx-list,
:root body .aitx-sec-bone .aitx-pitch { border-top-color: var(--ink); }
:root body .aitx-sec-bone .aitx-row { border-bottom: var(--rule-ink); }
:root body .aitx-sec-bone .aitx-row p { color: var(--soot); }

/* sponsor_pitch_html: each h3 opens a row of the bill */
:root body .aitx-pitch { border-top: 2px solid var(--flame); }
:root body .aitx-pitch h3 { padding-top: clamp(20px, 3vw, 30px); margin-bottom: 5px; }
:root body .aitx-pitch h3 + p,
:root body .aitx-pitch p { color: var(--soot); max-width: 60ch; font-size: .95rem; padding-bottom: clamp(20px, 3vw, 30px); border-bottom: var(--rule-ink); margin: 0; }
:root body .aitx-pitch ul { list-style: none; margin: 0; }
:root body .aitx-pitch li { padding: 16px 0; border-bottom: var(--rule-ink); }

/* ---------- plain list ---------- */
:root body .aitx-plainlist { list-style: none; margin-top: clamp(18px, 2.6vw, 26px); max-width: 60ch; }
:root body .aitx-plainlist li {
    position: relative;
    padding: 14px 0 14px 26px;
    border-bottom: var(--rule);
    font-size: clamp(1rem, 1.7vw, 1.15rem);
}
:root body .aitx-plainlist li:first-child { border-top: var(--rule); }
:root body .aitx-plainlist li::before {
    content: "";
    position: absolute;
    left: 0;
    top: calc(1em + 2px);
    width: 11px;
    height: 2px;
    background: var(--flame);
}
:root body .aitx-plainlist b { font-weight: 800; }

/* ---------- tally ---------- */
:root body .aitx-tally {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    border-top: 2px solid var(--flame);
    margin-top: clamp(14px, 2vw, 22px);
}
:root body .aitx-tally > div { padding: clamp(22px, 3vw, 32px) clamp(14px, 2vw, 26px) clamp(22px, 3vw, 32px) 0; border-bottom: var(--rule); }
:root body .aitx-tally .aitx-n {
    display: block;
    font-weight: 900;
    font-variation-settings: "wdth" 92;
    font-size: clamp(2rem, 5.2vw, 3.3rem);
    line-height: 1;
    color: var(--flame);
}
:root body .aitx-tally .aitx-l { display: block; margin-top: 9px; font-size: .88rem; color: var(--dust); max-width: 22ch; }

/* ---------- company names ---------- */
:root body .aitx-marks { display: flex; flex-wrap: wrap; gap: 8px; margin-top: clamp(16px, 2.5vw, 24px); }
:root body .aitx-marks span { border: 1.5px solid rgba(255, 255, 255, .3); padding: 7px 13px; font-size: .85rem; font-weight: 700; }

/* ---------- two-up ---------- */
:root body .aitx-two { display: grid; grid-template-columns: 1fr; gap: clamp(24px, 4vw, 48px); }
@media (min-width: 860px) { :root body .aitx-two { grid-template-columns: 1.1fr .9fr; align-items: start; } }

/* ---------- capture box (mailing list, sponsor intake) ---------- */
:root body .aitx-capture { border: 2px solid var(--flame); padding: clamp(22px, 3vw, 32px); }
:root body .aitx-capture h3 { margin-bottom: 6px; font-size: 1.18rem; font-weight: 800; }
:root body .aitx-capture > p,
:root body .aitx-capture form > p { color: var(--dust); font-size: .92rem; margin-bottom: 18px; }
:root body .aitx-capture-row { display: flex; flex-wrap: wrap; gap: 10px; }
:root body .aitx-capture input,
:root body .aitx-capture select,
:root body .aitx-form input,
:root body .aitx-form select,
:root body .aitx-form textarea,
:root body .filter-input,
:root body .filter-select {
    flex: 1 1 200px;
    width: 100%;
    background: transparent;
    border: 1px solid rgba(255, 255, 255, .35);
    border-radius: 2px;
    color: var(--paper);
    font: inherit;
    font-size: .95rem;
    padding: 13px 14px;
    box-shadow: none;
}
:root body .aitx-capture-row input { width: auto; }
:root body .aitx-capture select option,
:root body .aitx-form select option,
:root body .filter-select option { background: var(--ink); color: var(--paper); }
:root body .aitx-capture input::placeholder,
:root body .aitx-form input::placeholder,
:root body .aitx-form textarea::placeholder,
:root body .filter-input::placeholder { color: var(--dust); }
:root body .aitx-capture input:focus-visible,
:root body .aitx-capture select:focus-visible,
:root body .aitx-form input:focus-visible,
:root body .aitx-form select:focus-visible,
:root body .aitx-form textarea:focus-visible,
:root body .filter-input:focus-visible,
:root body .filter-select:focus-visible { outline: 2px solid var(--flame); outline-offset: 1px; border-color: transparent; box-shadow: none; }
:root body .aitx-capture .aitx-btn { flex: 0 0 auto; }
:root body .aitx-capture-stack input,
:root body .aitx-capture-stack select,
:root body .aitx-capture-stack textarea { flex: 0 0 auto; resize: vertical; }
:root body .aitx-mail { color: var(--flame); font-weight: 700; text-decoration: none; }
:root body .aitx-mail:hover { text-decoration: underline; }
:root body .aitx-form .fas,
:root body .aitx-capture .fas { display: none; }
:root body .aitx-capture-stack { display: flex; flex-direction: column; gap: 10px; }
:root body .aitx-success,
:root body #notify-success { display: none; color: var(--paper); font-weight: 700; padding: 14px 0 0; }
:root body .aitx-success::before,
:root body #notify-success::before { content: ""; display: inline-block; width: 11px; height: 2px; background: var(--flame); margin-right: 10px; vertical-align: middle; }
:root body .aitx-hp { position: absolute !important; left: -10000px !important; top: auto !important; width: 1px !important; height: 1px !important; overflow: hidden !important; }
:root body .aitx-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* ---------- forms on the CFP and sponsor pages ---------- */
:root body .aitx-form { max-width: 760px; }
:root body .aitx-form fieldset { border: 0; border-top: 2px solid var(--flame); padding: 22px 0 6px; margin: 0 0 28px; }
:root body .aitx-form legend {
    padding: 0 12px 0 0;
    font-weight: 900;
    font-variation-settings: "wdth" 105;
    text-transform: uppercase;
    letter-spacing: .04em;
    font-size: .95rem;
    color: var(--paper);
}
:root body .aitx-form label { display: block; font-weight: 700; margin-bottom: 6px; font-size: .9rem; color: var(--paper); }
:root body .aitx-form .form-group { margin-bottom: 18px; }
:root body .aitx-form .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 600px) { :root body .aitx-form .form-row { grid-template-columns: 1fr; } }
:root body .aitx-form .form-help { margin: 6px 0 0; font-size: .85rem; color: var(--dust); }
:root body .aitx-form .form-check { display: flex; align-items: center; gap: 8px; }
:root body .aitx-form .form-check input[type="checkbox"] { width: auto; flex: 0 0 auto; margin: 0; accent-color: var(--flame); }
:root body .aitx-form .form-check label { margin-bottom: 0; }
:root body .aitx-form .form-actions { text-align: left; margin-top: 8px; }
:root body .aitx-form-title { margin-bottom: 18px; }
:root body .submit-status {
    margin-top: 16px;
    padding: 12px 0 12px 16px;
    border: 0;
    border-left: 3px solid var(--flame);
    border-radius: 0;
    background: none;
    color: var(--paper);
    font-size: .95rem;
}
:root body .submit-status.success,
:root body .submit-status.duplicate,
:root body .submit-status.error { background: none; color: var(--paper); border: 0; border-left: 3px solid var(--flame); }

/* CFP page */
:root body .aitx-dates { display: flex; flex-wrap: wrap; border-top: 2px solid var(--flame); margin: 0 0 clamp(26px, 4vw, 40px); }
:root body .aitx-date { flex: 1 1 160px; padding: 18px 18px 18px 0; border-bottom: var(--rule); }
:root body .aitx-date:has(.aitx-date-value:empty) { display: none; }
:root body .aitx-date-label { display: block; font-size: .78rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--dust); }
:root body .aitx-date-value { display: block; margin-top: 6px; font-weight: 900; font-size: 1.2rem; color: var(--paper); }
:root body #cfp-status { display: none; }
:root body.aitx-cfp-closed .aitx-cfp-open-only { display: none; }
:root body .aitx-closed { border-top: 2px solid var(--flame); padding-top: clamp(22px, 3vw, 32px); max-width: 62ch; }
:root body .aitx-closed a { color: var(--flame); font-weight: 700; }

/* Sponsor intake: a tier field shows only when tiers exist */
:root body .aitx-tier-group:not(:has(option:nth-child(2))) { display: none; }
:root body .aitx-capture #thank-you h3 { margin-bottom: 8px; }
:root body .aitx-capture #thank-you p { color: var(--dust); }

/* ---------- designed "not yet" states ---------- */
:root body .aitx-empty { border-top: 2px solid var(--flame); padding: clamp(28px, 4vw, 44px) 0 0; }
:root body .aitx-empty h2 {
    font-family: var(--aitx-font);
    font-weight: 900;
    font-variation-settings: "wdth" 105;
    font-size: clamp(1.7rem, 4.4vw, 3.1rem);
    line-height: 1.02;
    letter-spacing: -.02em;
    text-transform: uppercase;
    margin: 0 0 14px;
}
:root body .aitx-empty p { color: var(--dust); max-width: 56ch; }
:root body .aitx-empty .aitx-capture { margin-top: clamp(22px, 3vw, 32px); max-width: 560px; }

/* ---------- home: speakers set as a bill ---------- */
:root body .ch-speakers-section { background: none; padding: clamp(52px, 8vw, 104px) var(--gutter); opacity: 1; transform: none; }
:root body .ch-speakers-section:not(:has(.ch-spk-card:not(.ch-spk-card--tba))) { display: none; }
:root body .ch-speakers-section .ch-section-header { text-align: center; margin-bottom: 0; }
:root body #speakers-subtitle:empty { display: none; }
:root body .ch-speakers-grid {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: baseline;
    gap: 6px 0;
    border-top: 2px solid var(--flame);
    border-bottom: 2px solid var(--flame);
    padding: clamp(22px, 3vw, 34px) 0;
    margin-top: clamp(18px, 3vw, 28px);
    grid-template-columns: none;
}
:root body .ch-spk-card,
:root body .ch-spk-card--featured {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    background: none;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    padding: 6px clamp(14px, 2.4vw, 28px);
    text-align: center;
    max-width: none;
    opacity: 1;
}
:root body .ch-spk-card--tba,
:root body .ch-spk-photo-wrap,
:root body .ch-spk-badge,
:root body .ch-spk-bio { display: none; }
:root body .ch-spk-name {
    font-family: var(--aitx-font);
    font-weight: 900;
    font-variation-settings: "wdth" 100;
    text-transform: uppercase;
    font-size: clamp(1.15rem, 2.6vw, 1.8rem);
    line-height: 1.05;
    letter-spacing: -.01em;
    color: var(--paper);
    margin: 0;
}
:root body .ch-spk-card:has(.ch-spk-badge) .ch-spk-name,
:root body .ch-spk-name--lg { font-size: clamp(1.8rem, 5.2vw, 3.6rem); font-variation-settings: "wdth" 112; }
:root body .ch-spk-role,
:root body .ch-spk-company { color: var(--dust); font-size: .82rem; margin: 4px 0 0; }
:root body .ch-spk-role + .ch-spk-company { margin-top: 0; }
:root body .ch-section-footer { text-align: center; margin-top: 22px; }
:root body .ch-link-more { color: var(--flame); font-weight: 800; text-decoration: none; }
:root body .ch-link-more:hover { text-decoration: underline; }

/* ---------- home: sponsors strip, only when sponsors are confirmed ---------- */
:root body .aitx-sponsors { background: none; padding: clamp(52px, 8vw, 104px) var(--gutter); opacity: 1; transform: none; }
:root body .aitx-sponsors:not(:has(.ch-confirmed-logos)) { display: none; }
:root body .aitx-sponsors .ch-confirmed-logos { border-top: 2px solid var(--flame); }
:root body .aitx-sponsors .ch-sponsor-tier-group { padding: 22px 0; border-bottom: var(--rule); }
:root body .aitx-sponsors .ch-sponsor-tier-label { font-size: .78rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--dust); margin-bottom: 14px; }
:root body .aitx-sponsors .ch-sponsor-logo-row { display: flex; flex-wrap: wrap; gap: 18px 32px; align-items: center; }
:root body .aitx-sponsors .ch-sponsor-logo { max-height: 44px; width: auto; filter: grayscale(1) invert(1) brightness(1.4); }
:root body .aitx-sponsors .ch-sponsor-name { font-weight: 800; font-size: 1.1rem; }

/* ---------- home: venue, only when the organizer names one ---------- */
:root body #section-venue { padding: clamp(52px, 8vw, 104px) var(--gutter) 0; background: none; opacity: 1; transform: none; }
:root body #section-venue .ch-venue-split { display: block; }
:root body #venue-visual { display: none; }
:root body #section-venue .ch-venue-info { border-top: 2px solid var(--flame); padding-top: clamp(20px, 3vw, 30px); }
:root body .aitx-label { display: block; font-size: .78rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--dust); margin-bottom: 10px; }
:root body .ch-venue-name { font-weight: 900; font-variation-settings: "wdth" 105; font-size: clamp(1.7rem, 4.4vw, 3.1rem); line-height: 1.02; letter-spacing: -.02em; text-transform: uppercase; color: var(--paper); margin: 0; }
:root body .ch-venue-institution,
:root body .ch-venue-address { color: var(--paper); font-weight: 700; margin-top: 10px; }
:root body .ch-venue-desc { color: var(--dust); margin-top: 12px; max-width: 60ch; }
:root body .ch-venue-institution:empty,
:root body .ch-venue-address:empty,
:root body .ch-venue-desc:empty { display: none; }
:root body .ch-venue-links { display: flex; gap: 22px; margin-top: 18px; }
:root body .ch-venue-link { color: var(--flame); font-weight: 800; text-decoration: none; }
:root body .ch-venue-link:hover { text-decoration: underline; }

/* ---------- home: sales banner (sales_open phase) ---------- */
:root body #section-sales-banner { padding: 0 var(--gutter); background: none; opacity: 1; transform: none; }
:root body .ch-sales-banner {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    align-items: center;
    justify-content: space-between;
    max-width: 1080px;
    margin: 0 auto;
    padding: 22px 0;
    background: none;
    border: 0;
    border-top: 2px solid var(--flame);
    border-bottom: 2px solid var(--flame);
    border-radius: 0;
    box-shadow: none;
}
:root body .ch-sales-banner__title { font-weight: 900; font-size: clamp(1.3rem, 3vw, 2rem); text-transform: uppercase; color: var(--paper); margin: 0; }
:root body .ch-sales-banner__body { color: var(--dust); margin: 4px 0 0; }
:root body .ch-sales-banner__btn { background: var(--flame); color: var(--ink); border: 2px solid var(--flame); border-radius: 2px; padding: 13px 24px; font-weight: 800; text-decoration: none; }
:root body .ch-sales-banner__btn:hover { background: transparent; color: var(--flame); }

/* ---------- home: save the date (#section-notify) ----------
   index.html's script hides #section-notify in the announcement phase and
   moves the email capture to the hero. This design keeps one capture box,
   here, in every phase that has one. */
:root body #section-notify:not(.conf-section--hidden) { display: block !important; }
:root body #section-notify { background: none; border: 0; opacity: 1; transform: none; }
:root body #notify-heading { font-family: var(--aitx-font); font-size: clamp(1.7rem, 4.4vw, 3.1rem); color: var(--paper); }
:root body #notify-sub:empty { display: none; }

/* ---------- interior pages: Janix CTA strips ---------- */
:root body .conf-section-cta {
    background: none;
    border: 0;
    border-top: 2px solid var(--flame);
    border-radius: 0;
    box-shadow: none;
    text-align: left;
    padding: clamp(26px, 4vw, 40px) 0 0;
    margin-top: clamp(40px, 6vw, 72px);
    max-width: none;
    color: var(--paper);
}
:root body .conf-section-cta__title { font-weight: 900; font-size: clamp(1.3rem, 3vw, 2rem); color: var(--paper); margin: 0 0 8px; }
:root body .conf-section-cta__body { color: var(--dust); margin: 0 0 18px; max-width: 56ch; }
:root body .conf-section-cta__btn .fas { display: none; }
:root body .ch-notify.aitx-notify-block { background: none; border: 0; padding: clamp(36px, 5vw, 56px) 0 0; opacity: 1; transform: none; }

/* Session modal */
:root body .modal-overlay { background: rgba(1, 1, 1, .82); }
:root body .modal-content { background: var(--ink); color: var(--paper); border: 2px solid var(--flame); border-radius: 0; box-shadow: none; }
:root body .modal-close { color: var(--dust); }
:root body .modal-close:hover { color: var(--paper); }
:root body .modal-title { font-weight: 900; font-size: clamp(1.4rem, 3vw, 2rem); line-height: 1.1; color: var(--paper); }
:root body .modal-track-badge { background: none !important; color: var(--flame) !important; padding: 0; border-radius: 0; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
:root body .modal-meta-item i { color: var(--flame); }
:root body .modal-description { color: var(--paper); }
:root body .modal-speaker { border-radius: 0; background: none; border-bottom: var(--rule); }
:root body .modal-speaker-name { color: var(--paper); font-weight: 800; }
:root body .modal-speaker-title { color: var(--dust); }
:root body .modal-view-more { color: var(--flame); font-weight: 800; }

/* ---------- footer ---------- */
:root body .aitx-footer {
    padding: clamp(36px, 5vw, 58px) var(--gutter);
    border-top: 2px solid var(--flame);
    background: var(--ink);
}
:root body .aitx-footer-main { display: flex; flex-wrap: wrap; gap: 22px; justify-content: space-between; align-items: flex-end; }
:root body .aitx-footer-logo { height: 22px; width: auto; margin-bottom: 12px; }
:root body .aitx-who { font-weight: 700; font-size: .95rem; color: var(--paper); }
:root body .aitx-who span { display: block; font-weight: 400; color: var(--dust); font-size: .86rem; margin-top: 4px; }
:root body .aitx-who a { color: var(--flame); text-decoration: none; font-weight: 700; }
:root body .aitx-who a:hover,
:root body .aitx-who a:focus-visible { text-decoration: underline; }
:root body .aitx-footer .ch-footer { background: none; border: 0; padding: 0; }
:root body .aitx-footer .ch-footer-inner { max-width: none; margin-top: 26px; padding-top: 18px; border-top: var(--rule); gap: 14px 28px; }
:root body .aitx-footer .ch-footer-brand { display: none; }
:root body .aitx-footer .ch-footer-nav { gap: 8px 22px; }
:root body .aitx-footer .ch-footer-nav a { color: var(--dust); font-size: .82rem; font-weight: 600; text-decoration: none; }
:root body .aitx-footer .ch-footer-nav a:hover { color: var(--paper); }
:root body .aitx-footer .ch-footer-powered { color: var(--dust); font-size: .78rem; }
:root body .aitx-footer .ch-footer-powered a { color: var(--dust); }
:root body .aitx-footer .ch-footer-social { border-top: 0; justify-content: flex-start; padding-top: 0; flex-basis: auto; }
:root body .aitx-footer .ch-footer-social a { color: var(--dust); }
:root body .aitx-footer .ch-footer-social a:hover { color: var(--flame); }

/* ============================================================
   DEFAULT PAGES (#8044). Unforked pages get this file over their
   default markup. Shared Janix classes take the poster look
   everywhere; layout fixes key on an id or container only one
   page has, named in each block.
   ============================================================ */

/* ---------- shared: tokens a few components read directly ---------- */
:root body {
    --theme-text: var(--paper);
    --theme-text-muted: var(--dust);
    --color-maroon: var(--flame);
    --conf-accent: var(--flame);
}

/* ---------- shared: interior page header ----------
   .section-header (sponsors, speakers, tracks, passes) and
   .schedule-page-header (schedule, schedule-builder). */
:root body .section-header,
:root body .schedule-page-header {
    text-align: left;
    max-width: none;
    margin: 0 0 clamp(30px, 4vw, 48px);
    padding: clamp(44px, 7vw, 84px) var(--gutter) clamp(30px, 4vw, 48px);
    border-bottom: 2px solid var(--flame);
    background: none;
}
:root body .section-header h1,
:root body .section-header h2,
:root body .schedule-page-header h1 {
    font-family: var(--aitx-font);
    font-weight: 900;
    font-variation-settings: "wdth" 108;
    font-size: clamp(2.2rem, 7vw, 5rem);
    line-height: .92;
    letter-spacing: -.02em;
    text-transform: uppercase;
    color: var(--paper);
    margin: 0;
    max-width: 18ch;
}
:root body .section-header .section-subtitle,
:root body .schedule-page-header .section-subtitle {
    margin-top: clamp(16px, 2.4vw, 26px);
    font-size: clamp(1.05rem, 2vw, 1.35rem);
    max-width: 56ch;
    line-height: 1.45;
    color: var(--paper);
}
:root body .section-subtitle:empty { display: none; }

/* Containers that wrap a header: the header bleeds, the rest takes the measure. */
:root body .schedule-container,
:root body .conf-page-container { max-width: none; margin: 0; padding: 0 0 clamp(52px, 8vw, 104px); }
:root body :is(.schedule-container, .conf-page-container) > :not(.section-header):not(.schedule-page-header),
:root body .page-content > :is(#sponsors-container, #sponsor-pitch-section, .filter-bar, #tracks-grid, .passes-container, .exhib-container) {
    width: min(1080px, calc(100% - 2 * var(--gutter)));
    margin-left: auto;
    margin-right: auto;
}
:root body .page-content > :is(#sponsors-container, #tracks-grid, .passes-container, .exhib-container) { margin-bottom: clamp(52px, 8vw, 104px); }

/* ---------- shared: states, filters, CTA strip, mailing list ---------- */
:root body .loading-state,
:root body .empty-state { color: var(--dust); padding: 22px 0; text-align: left; }
:root body .error-state { color: var(--flame); text-align: left; }
/* site.js promotes an empty roster or program to this designed state. */
:root body .aitx-empty-heading {
    font-family: var(--aitx-font);
    font-weight: 900;
    font-variation-settings: "wdth" 105;
    font-size: clamp(1.7rem, 4.4vw, 3.1rem);
    line-height: 1.02;
    letter-spacing: -.02em;
    text-transform: uppercase;
    color: var(--paper);
    border-top: 2px solid var(--flame);
    padding: clamp(28px, 4vw, 44px) 0 0;
}
:root body .ch-notify {
    background: none;
    border: 0;
    border-top: 2px solid var(--flame);
    padding: clamp(28px, 4vw, 44px) 0 0;
    margin-top: clamp(40px, 6vw, 72px);
    opacity: 1;
    transform: none;
}
:root body .ch-notify-inner { max-width: none; display: grid; grid-template-columns: 1fr; gap: 22px; align-items: start; }
@media (min-width: 860px) { :root body .ch-notify-inner { grid-template-columns: 1.1fr .9fr; } }
:root body .ch-notify-heading { font-family: var(--aitx-font); font-weight: 900; font-size: clamp(1.5rem, 3.6vw, 2.4rem); color: var(--paper); margin: 0 0 8px; }
:root body .ch-notify-sub { color: var(--dust); font-size: 1rem; }
:root body .ch-notify-form { border: 2px solid var(--flame); padding: clamp(18px, 3vw, 28px); }
:root body .ch-notify-input-row { display: flex; flex-wrap: wrap; gap: 10px; }
:root body .ch-notify-input {
    flex: 1 1 200px;
    background: transparent;
    border: 1px solid rgba(255, 255, 255, .35);
    border-radius: 2px;
    color: var(--paper);
    font: inherit;
    font-size: .95rem;
    padding: 13px 14px;
}
:root body .ch-notify-input::placeholder { color: var(--dust); }
:root body .ch-notify-input:focus-visible { outline: 2px solid var(--flame); outline-offset: 1px; border-color: transparent; }
:root body .ch-notify-legal { color: var(--dust); }
:root body .ch-notify-success { color: var(--paper); font-weight: 700; }
:root body .ch-notify-success i { color: var(--flame); }
:root body .ch-btn .fas,
:root body .conf-section-cta__btn .fas { display: none; }

/* ---------- shared: Janix footer (renderFooter) ---------- */
:root body .ch-footer { background: var(--ink); border-top: 2px solid var(--flame); padding: clamp(36px, 5vw, 58px) var(--gutter); }
:root body .ch-footer-inner { max-width: none; gap: 14px 28px; }
:root body .ch-footer-name { font-family: var(--aitx-font); font-weight: 900; text-transform: uppercase; color: var(--paper); }
:root body .ch-footer-brand::after { content: "Produced by AITX Community"; display: block; color: var(--dust); font-size: .86rem; margin-top: 4px; }
:root body .ch-footer-date { color: var(--dust); }
:root body .ch-footer-nav a { color: var(--dust); font-size: .82rem; font-weight: 600; text-decoration: none; }
:root body .ch-footer-nav a:hover { color: var(--paper); }
:root body .ch-footer-powered,
:root body .ch-footer-powered a { color: var(--dust); }
:root body .ch-footer-social { border-top: var(--rule); }
:root body .ch-footer-social a:hover { color: var(--flame); }

/* ---------- shared: headings colored with --color-dark (an ink background here) ---------- */
:root body :is(.conf-track-name, .session-detail-title, .session-detail-section h2,
    .session-detail-speaker-name, .session-detail-badge--format,
    .builder-session-title, .builder-day-header h2, .speaker-info h1, .speaker-sessions h2) { color: var(--paper); }

/* ---------- shared: no rounded boxes anywhere (AITX brand rule) ----------
   One reset over every default component; circular spinners keep their shape. */
:root body *:not([class*="spinner"]):not(.conf-nav-cart-badge) { border-radius: 0 !important; }
:root body .btn-outline-dark { color: var(--paper); border-color: var(--paper); background: transparent; font-weight: 800; }
:root body .btn-outline-dark:hover { background: var(--paper); color: var(--ink); }
:root body .session-detail-hero { border: 0; border-top: 2px solid var(--flame); background: none; box-shadow: none; padding-left: 0; padding-right: 0; }
:root body .session-detail-cal-menu { background: var(--ink); border: var(--rule); box-shadow: none; }

/* ---------- schedule.html (#schedule-list, #schedule-grid) ----------
   Sessions set as a bill: the list view at every width, never the grid. */
:root body #schedule-grid { display: none !important; }
:root body #schedule-list { display: block; border-top: 2px solid var(--flame); }
:root body #schedule-list:empty { border-top: 0; }
:root body .schedule-list-item {
    display: grid;
    grid-template-columns: minmax(96px, 150px) 1fr auto;
    gap: 4px clamp(14px, 3vw, 32px);
    align-items: baseline;
    background: none;
    border: 0 !important;
    border-bottom: var(--rule) !important;
    border-radius: 0;
    box-shadow: none;
    padding: clamp(16px, 2.4vw, 24px) 0;
    margin: 0;
    cursor: pointer;
}
:root body .schedule-list-item:hover { box-shadow: none; }
:root body .schedule-list-item:hover .schedule-list-name { color: var(--flame); }
:root body .schedule-list-time { grid-column: 1; grid-row: 1 / span 3; font-weight: 800; font-variation-settings: "wdth" 80; letter-spacing: .06em; color: var(--flame); font-size: .9rem; margin: 0; }
:root body .schedule-list-name { grid-column: 2; font-family: var(--aitx-font); font-weight: 900; font-size: clamp(1.1rem, 2.4vw, 1.5rem); line-height: 1.15; color: var(--paper); margin: 0; transition: color .15s; }
:root body .schedule-list-meta { grid-column: 2; color: var(--dust); font-size: .88rem; }
:root body .schedule-list-item .conf-rsvp-control { grid-column: 2; }
:root body .schedule-list-item .session-row-cue { grid-column: 3; grid-row: 1; position: static; background: none; border: 0; color: var(--dust); font: inherit; font-size: .8rem; font-weight: 700; cursor: pointer; }
:root body .schedule-list-item:hover .session-row-cue { color: var(--flame); }
@media (max-width: 600px) {
    :root body .schedule-list-item { grid-template-columns: 1fr auto; }
    :root body .schedule-list-time { grid-column: 1; grid-row: auto; }
    :root body .schedule-list-name,
    :root body .schedule-list-meta,
    :root body .schedule-list-item .conf-rsvp-control { grid-column: 1; }
    :root body .schedule-list-item .session-row-cue { grid-column: 2; grid-row: 1 / span 2; }
}
:root body .session-live-now-badge { background: var(--flame); color: var(--ink); border-radius: 0; font-weight: 800; }
:root body .schedule-single-day { font-family: var(--aitx-font); font-weight: 900; text-transform: uppercase; letter-spacing: .04em; font-size: 1.1rem; color: var(--paper); margin: 0 0 14px; }
:root body .schedule-tz-note { color: var(--dust); font-size: .85rem; margin-bottom: 18px; text-align: left; }
:root body .schedule-live-status { background: none; border: 0; border-left: 3px solid var(--flame); border-radius: 0; color: var(--paper); }

/* Day tabs and filters: ruled text tabs, not pills (schedule, builder, speakers, tracks) */
:root body .day-tabs { border-bottom: var(--rule); gap: 26px; margin-bottom: 22px; }
:root body .day-tab {
    padding: 10px 0;
    font-family: var(--aitx-font);
    font-weight: 700;
    font-size: .95rem;
    color: var(--dust);
    border-bottom: 2px solid transparent;
    border-radius: 0;
    background: none;
}
:root body .day-tab:hover { color: var(--paper); }
:root body .day-tab.active { color: var(--flame); border-bottom-color: var(--flame); }
:root body .filter-bar { background: none; border: 0; border-radius: 0; padding: 0; gap: 18px 32px; margin-bottom: 22px; }
:root body .filter-label { color: var(--dust); font-size: .78rem; font-weight: 800; letter-spacing: .12em; }
:root body .filter-select { flex: 0 0 auto; width: auto; padding: 8px 12px; }
:root body .track-filter-chips { gap: 4px 18px; }
:root body .track-chip,
:root body .track-chip.active {
    background: transparent !important;
    border: 0 !important;
    border-bottom: 2px solid transparent !important;
    border-radius: 0;
    padding: 4px 0;
    color: var(--dust) !important;
    font-weight: 700;
}
:root body .track-chip.active { color: var(--paper) !important; border-bottom-color: var(--flame) !important; }
:root body .track-chip-dot { display: none; }
:root body .skeleton { border-radius: 0; }

/* ---------- speakers.html (#speakers-grid.speakers-grid) ----------
   Names set as a bill. index.html's grid is .ch-speakers-grid, so it is
   not matched here. */
:root body #speakers-grid.speakers-grid {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0;
    border-top: 2px solid var(--flame);
    border-bottom: 2px solid var(--flame);
    padding: clamp(18px, 3vw, 30px) 0;
}
:root body #speakers-grid.speakers-grid:has(> .empty-state) { border: 0; padding: 0; justify-content: flex-start; }
/* The grid is a flex row, so the empty state shrank to its text and its
   flame rule stopped short of the rules below it. Span the row. */
:root body #speakers-grid.speakers-grid > .empty-state { flex: 1 1 100%; }
:root body #speakers-grid.speakers-grid .skeleton { width: 160px; height: 28px; margin: 10px; }
:root body .conf-speaker-card {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    background: none;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    padding: 10px clamp(14px, 2.4vw, 28px);
    text-align: center;
    text-decoration: none;
    color: var(--paper);
}
:root body .conf-speaker-card:hover { transform: none; box-shadow: none; text-decoration: none; }
:root body .conf-speaker-card:hover .conf-speaker-name { color: var(--flame); }
:root body .conf-speaker-photo { display: none; }
:root body .conf-speaker-name {
    font-family: var(--aitx-font);
    font-weight: 900;
    text-transform: uppercase;
    font-size: clamp(1.15rem, 2.6vw, 1.8rem);
    line-height: 1.05;
    color: var(--paper);
    margin: 0;
    transition: color .15s;
}
:root body .conf-speaker-subtitle { color: var(--dust); font-size: .82rem; margin: 4px 0 0; }
:root body .conf-speaker-tags { display: none; }

/* ---------- speaker.html (#speaker-detail, #speaker-sessions) ---------- */
:root body #speaker-detail,
:root body #speaker-sessions { width: min(1080px, calc(100% - 2 * var(--gutter))); max-width: none; margin: 0 auto; padding-left: 0; padding-right: 0; }
:root body #speaker-detail { padding-top: clamp(44px, 7vw, 84px); }
:root body .speaker-photo img,
:root body .photo-placeholder { border-radius: 0; filter: grayscale(1) contrast(1.05); }
:root body .speaker-info h1,
:root body .ssr-detail-title { font-family: var(--aitx-font); font-weight: 900; text-transform: uppercase; letter-spacing: -.02em; line-height: .95; font-size: clamp(2rem, 6vw, 4rem); color: var(--paper); }
:root body .speaker-title { color: var(--dust); }
:root body .speaker-bio { color: var(--paper); }
:root body .tags .tag { background: none; border: 1px solid rgba(255, 255, 255, .3); border-radius: 0; color: var(--dust); }
:root body .social-links a:hover { color: var(--flame); }
:root body #speaker-sessions h2 { border-top: 2px solid var(--flame); padding-top: 22px; font-family: var(--aitx-font); font-weight: 900; text-transform: uppercase; }

/* ---------- session cards (speaker.html sessions list, tracks) ---------- */
:root body .conf-session-card,
:root body .track-card,
:root body .conf-track-card {
    background: none;
    border: 0 !important;
    border-bottom: var(--rule) !important;
    border-radius: 0;
    box-shadow: none;
    padding: clamp(16px, 2.4vw, 24px) 0;
}
:root body .conf-session-card:hover,
:root body .track-card:hover,
:root body .conf-track-card:hover { box-shadow: none; transform: none; }
:root body .conf-track-desc,
:root body .conf-track-count { color: var(--dust); }
:root body .conf-session-card-title h3,
:root body .track-card-name { font-family: var(--aitx-font); font-weight: 900; color: var(--paper); }
:root body .conf-session-card-title:hover h3 { color: var(--flame); }
:root body .conf-badge,
:root body .conf-tag { background: none !important; border: 1px solid rgba(255, 255, 255, .3); border-radius: 0; color: var(--dust) !important; }
:root body .conf-btn-rsvp { background: var(--flame); color: var(--ink); border-radius: 2px; font-weight: 800; }

/* ---------- tracks.html (#tracks-grid) ---------- */
:root body #tracks-grid { display: block; border-top: 2px solid var(--flame); }

/* ---------- session.html (.session-detail-wrapper) ---------- */
:root body .session-detail-wrapper { max-width: 860px; padding: clamp(44px, 7vw, 84px) var(--gutter) clamp(52px, 8vw, 104px); }
:root body .session-detail-back-link { color: var(--dust); font-weight: 700; }
:root body .session-detail-back-link:hover { color: var(--flame); }
:root body .session-detail-title { font-family: var(--aitx-font); font-weight: 900; text-transform: uppercase; letter-spacing: -.02em; line-height: .98; }
:root body .session-detail-section h2 { font-family: var(--aitx-font); font-weight: 900; border-top: 2px solid var(--flame); padding-top: 18px; }
:root body .session-detail-badge { background: none !important; border: 1px solid rgba(255, 255, 255, .3); border-radius: 0; color: var(--dust) !important; }
:root body .session-detail-abstract { color: var(--paper); }

/* ---------- sponsors.html (#sponsors-container, #sponsor-pitch-section) ---------- */
:root body .conf-sponsor-pitch { padding: 0; margin-bottom: clamp(40px, 6vw, 72px); }
:root body .conf-sponsor-pitch__head { text-align: left; margin: 0 0 22px; max-width: 62ch; }
:root body .conf-sponsor-pitch__title { font-family: var(--aitx-font); font-weight: 900; color: var(--paper); }
:root body .conf-sponsor-pitch__tiers { gap: 0; border-top: 2px solid var(--flame); }
:root body .conf-sponsor-tier-card {
    background: none;
    border: 0;
    border-bottom: var(--rule);
    border-radius: 0;
    box-shadow: none;
    padding: 20px 18px 20px 0;
}
:root body .conf-sponsor-tier-card__name { color: var(--paper); }
:root body .conf-sponsor-tier-card__price { color: var(--flame); }
/* AITX publishes no sponsorship prices (client feedback, 2026-10-06). The
   admin keeps the amounts; the public tier cards show name and copy only. */
:root body .conf-sponsor-tier-card__price { display: none; }
:root body .sponsors-tier-name,
:root body .tier-name,
:root body .sponsor-card__tier { color: var(--dust); font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
/* Logos need a light ground; poster stock, square, no shadow. */
:root body .sponsor-card { background: var(--bone); border: 0; border-radius: 0; box-shadow: none; color: var(--ink); }
:root body .sponsor-card:hover { box-shadow: none; transform: none; }
:root body .sponsor-card .sponsor-name-only,
:root body .sponsor-card .sponsor-description { color: var(--ink); }

/* ---------- light-surface pages: poster stock ----------
   my-registration (.mr-shell), confirmation (.oc-shell), passes
   (.passes-container) and login (.login-container) paint dark text on light
   surfaces by design (#5829). They hold on bone, with ink tokens inside. */
:root body :is(.mr-shell, .oc-shell, .pass-tier-card, .passes-extras, .login-container, .exhib-container, .portal-shell, .invite-shell) {
    color: var(--ink);
    --color-text: var(--ink);
    --theme-text: var(--ink);
    --color-text-muted: var(--soot);
    --theme-text-muted: var(--soot);
    --color-surface: transparent;
    --color-dark: var(--ink);
    --conf-dark: var(--ink);
    --conf-light: rgba(1, 1, 1, .08);
    --color-border: rgba(1, 1, 1, .2);
}
:root body :is(.mr-shell, .oc-shell, .pass-tier-card, .passes-extras, .login-container, .exhib-container, .portal-shell, .invite-shell) :not(.fa):not(.fas):not(.far):not(.fab):not(i) { font-family: var(--aitx-font); }
:root body :is(.mr-shell, .oc-shell, .pass-tier-card, .passes-extras, .login-container, .exhib-container, .portal-shell, .invite-shell) a:not([class]) { color: var(--ink); text-decoration: underline; }

/* Portal pages (speaker-portal, speaker-invite, sponsor-logo-upload,
   badge-claim). No nav, no footer: one card, held on bone. */
:root body :is(.portal-card, .invite-card) { background: var(--bone); border: 0; border-top: 2px solid var(--flame); border-radius: 0; box-shadow: none; color: var(--ink); }

/* exhibitors.html (.exhib-container). Not linked in the AITX nav, kept legible. */
:root body .exhib-container { background: var(--bone); border-top: 2px solid var(--flame); padding: clamp(22px, 3vw, 36px) clamp(16px, 3vw, 36px); }

/* my-registration.html (.mr-shell) */
:root body .mr-shell {
    max-width: 1080px;
    margin: clamp(36px, 5vw, 60px) auto clamp(52px, 8vw, 104px);
    background: var(--bone);
    border: 0;
    border-top: 2px solid var(--flame);
    border-radius: 0;
    color: var(--ink);
}
@media (max-width: 1120px) { :root body .mr-shell { margin-left: var(--gutter); margin-right: var(--gutter); } }
:root body .mr-title { font-weight: 900; font-variation-settings: "wdth" 108; text-transform: uppercase; letter-spacing: -.02em; font-size: clamp(2rem, 5vw, 3.4rem); line-height: .95; color: var(--ink); }
:root body .mr-sub { color: var(--soot); }
:root body .mr-section-header { font-weight: 900; text-transform: uppercase; letter-spacing: .02em; color: var(--ink); }
:root body .mr-card { background: transparent; border: 1px solid rgba(1, 1, 1, .25); border-top: 3px solid var(--ink) !important; border-radius: 0; box-shadow: none; color: var(--ink); }
:root body .mr-card.mr-clickable:hover { box-shadow: none; border-color: var(--ink); }
:root body .mr-card.mr-clickable:hover .mr-card-name { color: var(--flame); }
:root body .mr-card-name { color: var(--ink); }
:root body .mr-btn { padding: 10px 18px; font-size: .85rem; }
:root body .mr-btn-quiet { background: transparent; color: var(--ink); border-color: var(--ink); }
:root body .mr-btn-quiet:hover { background: var(--ink); color: var(--bone); }
:root body .mr-modal { border-radius: 0; box-shadow: none; border-top: 3px solid var(--flame); }

/* confirmation.html (.oc-shell) */
:root body .oc-shell { max-width: 720px; padding: clamp(36px, 5vw, 60px) var(--gutter) clamp(52px, 8vw, 104px); }
:root body .oc-card { background: var(--bone); border: 0; border-top: 2px solid var(--flame); border-radius: 0; box-shadow: none; }
:root body .oc-heading { font-weight: 900; text-transform: uppercase; letter-spacing: -.01em; color: var(--ink); }
:root body .oc-stamp { border-radius: 0; }
:root body .oc-stamp-brand { background: var(--flame); color: var(--ink); }
:root body .oc-action-primary { background: var(--flame); color: var(--ink); }
:root body .oc-progress,
:root body .oc-progress-fill { border-radius: 0; }

/* passes.html (.passes-container) */
/* The bone ground sits on each card, not the container: in the announcement
   phase passes.html hides every card, and an empty panel would remain. */
:root body .pass-tier-card,
:root body .passes-extras { background: var(--bone); color: var(--ink); border: 0; border-top: 2px solid var(--flame); border-radius: 0; box-shadow: none; }
:root body .passes-loading,
:root body .passes-loading p { color: var(--dust); }
:root body .pass-tier-card:hover { box-shadow: none; transform: none; }
:root body .pass-tier-card.featured { border: 2px solid var(--flame); }
:root body .pass-tier-featured-badge,
:root body .pass-sold-out-banner { border-radius: 0; }
:root body .pass-tier-featured-badge { background: var(--flame); color: var(--ink); }
:root body .pass-tier-name { font-weight: 900; text-transform: uppercase; color: var(--ink); }
:root body .pass-buy-btn { border-radius: 2px; font-weight: 800; }
:root body .pass-buy-btn.primary { background: var(--flame); color: var(--ink); }
:root body .pass-buy-btn.secondary { background: var(--ink); color: var(--paper); }
:root body .extra-option { border-radius: 0; }
:root body .extra-option .extra-add-btn { background: transparent; border-radius: 2px; }

/* login.html (.login-container). Its <body> carries an inline light
   background; this is the one rule that needs !important to win. */
:root body:has(> .login-container) { background: var(--ink) !important; font-family: var(--aitx-font) !important; }
:root body .login-card { background: var(--bone); border-radius: 0; box-shadow: none; border-top: 2px solid var(--flame); text-align: left; }
:root body .login-card h1 { font-weight: 900; text-transform: uppercase; color: var(--ink); }
:root body .login-card p { color: var(--soot); }
:root body .login-card input[type="email"] { border: 1px solid rgba(1, 1, 1, .35); border-radius: 2px; background: transparent; color: var(--ink); }
:root body .login-card input[type="email"]:focus-visible { outline: 2px solid var(--flame); outline-offset: 1px; }
:root body .login-card button { background: var(--flame); color: var(--ink); border: 2px solid var(--flame); border-radius: 2px; font-weight: 800; }
:root body .login-card button:hover { background: transparent; opacity: 1; }
:root body .login-success,
:root body .login-error { border-radius: 0; }
:root body .login-container .back-link { color: var(--dust); font-weight: 700; }
:root body .login-container .back-link:hover { color: var(--flame); }

/* ---------- schedule-builder.html (#builder-list) ---------- */
:root body .builder-mock-banner { background: none; border: 0; border-left: 3px solid var(--flame); border-radius: 0; color: var(--dust); }
:root body .builder-view-toggle { border: var(--rule); border-radius: 0; }
:root body .builder-view-toggle button { background: transparent; color: var(--dust); font-family: var(--aitx-font); font-weight: 700; }
:root body .builder-view-toggle button.active { background: var(--flame); color: var(--ink); }
:root body .builder-day-header { border-bottom: 2px solid var(--flame); }
:root body .builder-slot-time { color: var(--flame); }
:root body .builder-session { background: none; border: 0; border-bottom: var(--rule); border-radius: 0; box-shadow: none; padding: 16px 0; }
:root body .builder-session.is-added { background: none; border-left: 3px solid var(--flame); padding-left: 14px; box-shadow: none; }
:root body .builder-session-track-badge { background: none !important; color: var(--flame) !important; padding: 0; border-radius: 0; }
:root body .builder-btn-add,
:root body .builder-btn-remove { border-radius: 2px; font-family: var(--aitx-font); font-weight: 800; }
:root body .builder-toast { border-radius: 0; background: var(--flame); color: var(--ink); }
:root body .aitx-empty .aitx-empty-heading { border-top: 0; padding-top: 0; }

/* ============================================================
   CONTRAST (WCAG 2.1 AA). Measured: ink on bone 17.00:1, soot on
   bone 8.03:1, ink on flame 6.00:1, flame on ink 6.00:1, dust on ink
   6.68:1. Flame on bone (2.84:1), dust on bone (2.54:1) and white on
   flame (3.48:1) fail, so:
   - filled flame buttons carry INK text, everywhere;
   - on bone, text is ink or soot, and flame is a rule or border only;
   - focus rings on bone are ink.
   ============================================================ */

/* passes.html: the container is black; its own empty and error states sit on it. */
:root body :is(.passes-empty, .passes-error) { color: var(--dust); }
:root body :is(.passes-empty, .passes-error) h2 { color: var(--paper); }
:root body :is(.passes-empty, .passes-error) .btn { background: var(--flame); color: var(--ink); font-weight: 800; }
:root body :is(.passes-empty, .passes-error) .btn:is(:hover, :focus-visible) { background: transparent; color: var(--flame); box-shadow: inset 0 0 0 2px var(--flame); }

/* White on flame: page-owned buttons repainted with ink text. */
:root body .builder-btn-add { background: var(--flame); border-color: var(--flame); color: var(--ink); }
:root body .builder-btn-add:hover { background: transparent; color: var(--flame); }

/* On bone: links, labels, prices in ink or soot. */
:root body :is(.aitx-sec-bone, .mr-shell, .oc-card, .pass-tier-card, .passes-extras, .login-card, .portal-card, .invite-card, .exhib-container, .sponsor-card) a:not([class]),
:root body .aitx-sec-bone .aitx-prose a { color: var(--ink); text-decoration: underline; text-decoration-color: var(--flame); text-decoration-thickness: 2px; }
:root body .sponsor-card .sponsor-card__tier { color: var(--soot); }
:root body .extra-option .extra-price,
:root body .pass-tier-price-note.last-chance,
:root body .pass-tier-price.free,
:root body .pass-tier-benefits li::before { color: var(--ink); }
:root body .pass-tier-card :is(.pass-tier-description, .pass-tier-price-note, .pass-tier-ladder-step,
    .pass-tier-member-note, .pass-tier-meta-item, .pass-tier-meta-item i, .pass-tier-price .currency) { color: var(--soot); }
:root body .extra-option .extra-add-btn { background: transparent; color: var(--ink); border-color: var(--ink); }
:root body .extra-option .extra-add-btn:hover:not(:disabled) { background: var(--ink); color: var(--bone); }
:root body .extra-option:hover { border-color: var(--ink); }
:root body .mr-card.mr-clickable:hover .mr-card-name { color: var(--ink); text-decoration: underline; text-decoration-color: var(--flame); text-decoration-thickness: 2px; }

/* On bone: a filled button's hover and focus go ink, never flame text on bone. */
:root body :is(.aitx-sec-bone, .mr-shell, .oc-card, .pass-tier-card, .passes-extras, .login-card, .portal-card, .invite-card, .exhib-container, .sponsor-card) :is(.aitx-btn, .btn-primary, .btn, .mr-btn, .pass-buy-btn.primary, .oc-action-primary, button[type="submit"]):is(:hover, :focus-visible) {
    background: var(--ink); color: var(--bone); border-color: var(--ink); opacity: 1;
}
:root body .login-card button:is(:hover, :focus-visible) { background: var(--ink); color: var(--bone); border-color: var(--ink); }

/* On bone: ink focus rings (flame on bone is 2.84:1, under the 3:1 floor). */
:root body :is(.aitx-sec-bone, .mr-shell, .oc-card, .pass-tier-card, .passes-extras, .login-card, .portal-card, .invite-card, .exhib-container, .sponsor-card) :focus-visible { outline: 3px solid var(--ink) !important; outline-offset: 2px; }
:root body :is(.aitx-sec-bone, .mr-shell, .oc-card, .pass-tier-card, .passes-extras, .login-card, .portal-card, .invite-card, .exhib-container, .sponsor-card) :is(input, select, textarea):focus-visible { outline-offset: 1px; }

/* Schedule empty-state form: a failed POST says so. */
:root body .aitx-notify-error { display: none; margin-top: 12px; padding-left: 12px; border-left: 3px solid var(--flame); color: var(--paper); font-size: .9rem; }
:root body .exhib-container p { color: var(--soot); }

/* ---------- no tier names on any public page (#8137) ---------- */
/* sponsors.html writes these (tiered and consolidated layouts); home writes the label. */
:root body .sponsor-tier .tier-name,
:root body .sponsor-card__tier,
:root body .aitx-sponsors .ch-sponsor-tier-label { display: none !important; }
