/* ============================================================================
   APS 2027 — 30th American Peptide Symposium · Boston
   Enhanced stylesheet (drop-in replacement for aps2027.css)
   Layered on Bootstrap 5.3.2. Loads the Adobe Typekit kit (houschka-pro +
   hello-bloomie-script). Every class from the original file is preserved.
   ----------------------------------------------------------------------------
   Contents
     1.  Tokens (color, type, space, radius, shadow)
     2.  Base elements (body, links, paragraphs, headings)
     3.  Display & section headings (accent-bar motif)
     4.  Intro / lead copy & people typography
     5.  Layout, sections & rhythm utilities
     6.  Hero banner
     7.  Dividers
     8.  Images & avatars
     9.  Cards (co-chair, pharma-box, generic)
     10. Venue gallery
     11. Buttons
     12. Navbar (forward-looking)
     13. Schedule / program components
     14. Footer
     15. Misc utilities, motion & print
   ========================================================================== */

@import url("https://use.typekit.net/pct0eai.css");

/* ============================================================================
   1. TOKENS
   ========================================================================== */
:root {
    /* Brand — Boston palette */
    --aps-red:        #CB3B2D;   /* primary headline accent */
    --aps-blue:       #3A53A4;   /* links, secondary accent */
    --aps-blue-dark:  #2C4080;   /* link visited / hover-dark */
    --harbor-navy:    #1A2E4C;   /* primary dark — headers, footer */
    --brass-gold:     #C9A227;   /* metallic accent, rules, bars */
    --brass-deep:     #A8851A;   /* gold hover */
    --brick-warm:     #A45A3D;   /* warm secondary accent */
    --teal:           #007777;   /* co-chairs, slogan script */
    --teal-deep:      #005C5C;

    /* Neutrals */
    --ink:            #2B303A;   /* body text */
    --ink-soft:       #454E5B;   /* secondary text */
    --muted:          #545D6A;   /* captions / meta */
    --line:           #DCE3EC;   /* hairlines */
    --line-soft:      #EAEEF4;
    --fog-gray:       #E8ECF2;   /* cool section bg */
    --parchment:      #F7F4EF;   /* warm section bg */
    --cloud:          #F4F7FB;   /* lightest cool */
    --paper:          #FFFFFF;
    --text-dark:      #2B303A;   /* legacy alias */

    /* Typography */
    --font-body:   houschka-pro, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    --font-script: "hello-bloomie-script", "Brush Script MT", cursive;

    /* Spacing scale (rhythm: 8) */
    --space-1: .5rem;    /* 8  */
    --space-2: 1rem;     /* 16 */
    --space-3: 1.5rem;   /* 24 */
    --space-4: 2rem;     /* 32 */
    --space-5: 3rem;     /* 48 */
    --space-6: 4.5rem;   /* 72 */

    /* Radius */
    --radius-sm: 6px;
    --radius:    10px;
    --radius-lg: 16px;
    --radius-pill: 999px;

    /* Shadows — warm navy-tinted */
    --shadow-sm: 0 1px 3px rgba(26, 46, 76, .08);
    --shadow-md: 0 6px 22px rgba(26, 46, 76, .10);
    --shadow-lg: 0 16px 44px rgba(26, 46, 76, .16);

    /* Motion */
    --ease: cubic-bezier(.2, .6, .2, 1);
    --t-fast: .18s var(--ease);
    --t: .26s var(--ease);

    /* Layout */
    --container-max: 1300px;
}

/* ============================================================================
   2. BASE
   ========================================================================== */
* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
    font-family: var(--font-body);
    color: var(--ink);
    background: var(--paper);
    line-height: 1.65;
    text-rendering: optimizeLegibility;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* Wider gutters than Bootstrap default; cap at a comfortable measure */
@media (min-width: 1400px) {
    .container { max-width: var(--container-max); }
}
@media (min-width: 1679px) {
    .container { width: var(--container-max); padding-left: var(--space-3); padding-right: var(--space-3); }
}

/* Links */
a {
    color: var(--aps-blue);
    text-decoration: none;
    transition: color var(--t-fast);
}
a:link    { color: var(--aps-blue); }
a:visited { color: var(--aps-blue-dark); }
a:hover   { color: var(--aps-red); }
a:active  { color: var(--brass-gold); }

/* Give in-copy links a refined underline without touching nav/button links */
.intro a,
.rich-text a,
p a {
    text-underline-offset: 3px;
    text-decoration-thickness: 1px;
    text-decoration-color: color-mix(in srgb, currentColor 35%, transparent);
    text-decoration-line: underline;
}
.intro a:hover,
.rich-text a:hover,
p a:hover { text-decoration-color: currentColor; }

/* Body copy — readable measure, softened from the old 1.3em/letter-spacing .5px */
p {
    font-size: 1.0625rem;   /* ~17px */
    font-weight: 400;
    line-height: 1.7;
    letter-spacing: 0;
    color: var(--ink);
    margin-bottom: 1.1rem;
}
p:last-child { margin-bottom: 0; }

strong, b { font-weight: 700; color: var(--harbor-navy); }

/* Constrain long prose for readability (opt-in, doesn't affect grid columns) */
.prose { max-width: 68ch; }
.prose p + p { margin-top: 0; }

h1, h2, h3, h4, h5, h6 {
    font-family: var(--font-body);
    text-transform: none;
    color: var(--harbor-navy);
    line-height: 1.15;
    letter-spacing: -0.01em;
}

/* Small eyebrow / kicker label — handy for section intros. Shares its look
   with .page-header__eyebrow (section 3b); the two are defined together there
   so a page header and a mid-page kicker can never drift apart. */

/* ============================================================================
   3. DISPLAY & SECTION HEADINGS
   ========================================================================== */

/* The big red hero title — now fluid and tighter */
h1.primary-header,
.primary-header {
    font-weight: 300;
    color: var(--aps-red);
    font-size: clamp(2.6rem, 6vw, 5rem);
    line-height: 1.02;
    letter-spacing: -0.02em;
    padding-top: 0;
    margin-top: var(--space-5);
    margin-bottom: var(--space-2);
}

/* Script slogan — teal, fluid */
.slogan-header {
    font-style: normal;
    font-family: var(--font-script);
    font-weight: 400;
    color: var(--teal);
    font-size: clamp(1.5rem, 2.3vw, 2.2rem);
    line-height: 1.1;
    margin-bottom: var(--space-3);
}

/* Keep the script slogan on a single line on large screens */
@media (min-width: 992px) {
    .slogan-header { white-space: nowrap; }
}

/* Section header — the APS signature: navy text with a brass accent bar.
   This is the core visual upgrade and ties 2027 to the APS family. */
.secondary-header {
    position: relative;
    font-weight: 600;
    color: var(--harbor-navy);
    font-size: clamp(1.8rem, 3.2vw, 2.6rem);
    line-height: 1.1;
    letter-spacing: -0.015em;
    padding-left: 1rem;
    border-left: 6px solid var(--brass-gold);
    margin-bottom: var(--space-3);
}

/* Person / sub-section heading — teal */
.co-chair-header {
    font-weight: 600;
    color: var(--teal);
    font-size: clamp(1.35rem, 2vw, 1.7rem);
    line-height: 1.2;
    letter-spacing: -0.01em;
    margin-top: var(--space-2);
    margin-bottom: .35rem;
}

/* Tertiary — warm brick, sits well on parchment/white */
.tertiary-header {
    font-weight: 600;
    color: var(--brick-warm);
    font-size: clamp(1.35rem, 1.8vw, 1.7rem);
    line-height: 1.2;
    margin-bottom: var(--space-2);
}

.co-chair-header.is-blue,
.secondary-header.is-blue { color: var(--aps-blue); }
.secondary-header.is-blue { border-left-color: var(--aps-blue); }

.slider-header {
    font-weight: 400;
    color: var(--aps-blue);
    margin-bottom: var(--space-1) !important;
    font-size: clamp(1.2rem, 1vw + .7em, 3rem);
    line-height: 1.1;
}

/* ============================================================================
   3b. PAGE HEADER — the opening beat of every interior page
   ----------------------------------------------------------------------------
   Eyebrow, title, then an optional line of meta. It began life on the venue
   page as .v-eyebrow / .v-title and is now the one header the whole site uses,
   so that a visitor moving between Speakers, Program, Venue and Sponsors sees
   the first word land in exactly the same place each time.

   That alignment rests on one number: the padding-top below is the only space
   between the nav and the eyebrow. Nothing inside may add space above the
   eyebrow -- no margin-top on .page-header__eyebrow, no wrapper with padding.
   Give the header a tint with .page-header--cloud / --parchment rather than
   wrapping it in a tinted section, which would put the padding back.
   ========================================================================== */
.page-header {
    background-color: var(--paper);
    padding: var(--space-6) 0 var(--space-4);
}
.page-header--cloud     { background-color: var(--cloud); }
.page-header--parchment { background-color: var(--parchment); }

.page-header__eyebrow,
.kicker {
    margin: 0 0 12px;
    font-size: .82rem;
    font-weight: 700;
    line-height: 1.2;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--brass-deep);
}
.kicker { display: inline-block; }

.page-header__title {
    margin: 0 0 8px;
    font-weight: 300;
    font-size: clamp(2.4rem, 5vw, 3.6rem);
    line-height: 1.02;
    letter-spacing: -.02em;
    color: var(--harbor-navy);
}
/* One line under the title: a location, a date, a result count. */
.page-header__meta {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    font-size: 1rem;
    color: var(--muted);
}
.page-header__meta i { color: var(--brass-gold); }

.page-header__lead { margin: var(--space-3) 0 0; }
.page-header__lead p:last-child { margin-bottom: 0; }
.page-header__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .75rem;
    margin-top: var(--space-3);
}

/* A section butting straight up against the header: the header has already
   supplied the top of the page's rhythm, so a second 72px would open a hole. */
section.is-flush-top { padding-top: 0; }

/* ============================================================================
   4. INTRO / LEAD & PEOPLE TYPOGRAPHY
   ========================================================================== */
.intro {
    font-size: clamp(1.1rem, 1.4vw, 1.4rem);
    font-weight: 400;
    line-height: 1.55;
    letter-spacing: 0;
    color: var(--ink-soft);
    max-width: 75ch;
}
.intro b, .intro strong { color: var(--harbor-navy); font-weight: 600; }

.banner-top {
    font-size: clamp(2rem, 2.3vw, 2.3rem);
    font-weight: 200;
    color: #fff;
    line-height: 1.2;
}
.banner-top a:link,
.banner-top a:visited { color: #fff; }
.banner-top a:hover  { color: var(--brass-gold); }

.display-name {
    font-size: clamp(1.6rem, 1.9vw, 1.9rem);
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: 0;
    color: var(--aps-blue);
    margin-bottom: .5rem;
}
.speaker-name-awardee {
    font-size: clamp(1.8rem, 2.3vw, 2.3rem);
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: 0;
    color: var(--harbor-navy);
    margin: 0;
}
.invited-speaker {
    margin: 0;
    color: var(--aps-blue);
    font-size: clamp(1rem, 1vw, 1.15rem);
    font-weight: 600;
    line-height: 1.3;
}
.speaker-description { font-size: clamp(1rem, 1.1vw, 1.1rem); }
.affiliation { font-style: italic; color: var(--muted); }
.authors { font-size: clamp(.85rem, 1.3vw, 1.05rem); font-weight: 600; color: var(--ink-soft); }
.award-text {
    font-size: clamp(1rem, 1.3vw, 1.3rem);
    color: var(--aps-red) !important;
    font-weight: 500 !important;
}

/* ============================================================================
   5. LAYOUT, SECTIONS & RHYTHM
   ========================================================================== */
section { padding: var(--space-6) 0; }

/* Keep the original auto-alternation, but warmer + intentional helpers.

   :where() drops this rule to zero specificity on purpose. Written plainly,
   `section:nth-child(even)` outranks a single class, so `.section-white` and
   `.v-sec--parchment` lost to it and rendered cloud -- and any element added
   above a section flipped the parity of every section below. As a zero-weight
   default it stays the fallback for sections that say nothing, and loses to
   every section that states its own background. */
:where(section:nth-child(even)) { background-color: var(--cloud); }

.section-parchment { background-color: var(--parchment); }
.section-fog       { background-color: var(--fog-gray); }
.section-cloud     { background-color: var(--cloud); }
.section-white     { background-color: var(--paper); }
.section-navy      { background-color: var(--harbor-navy); color: #E8EDF5; }
.section-navy .secondary-header { color: #fff; }
.section-navy p { color: #C7D2E2; }

/* A tidy section intro block */
.section-head { margin-bottom: var(--space-4); }

/* ============================================================================
   6. HERO BANNER
   ========================================================================== */
.hero-banner { width: 100%; line-height: 0; background: var(--harbor-navy); }
/* The masthead links home. `display:block` so the anchor is the image and
   not a text-height box with the picture overflowing it. */
.hero-banner__home { display: block; line-height: 0; }
.hero-banner__home:focus-visible { outline: 3px solid var(--brass-gold); outline-offset: -3px; }
.hero-banner img {
    width: 100%;
    height: auto;
    display: block;
    max-height: 460px;
    object-fit: cover;
    object-position: center;
}

/* ============================================================================
   7. DIVIDERS
   ========================================================================== */
hr.border27 {
    border: 0;
    border-top: 2px solid var(--teal);
    opacity: 1;
    margin-top: var(--space-5);
    margin-bottom: var(--space-4);
}
.underline {
    width: 64px;
    height: 0;
    border: 0;
    border-top: 3px solid var(--brass-gold);
    border-radius: 3px;
    margin-top: .5rem;
    margin-bottom: var(--space-3);
    opacity: 1;
}
.table-divider {
    margin-top: var(--space-5);
    margin-bottom: var(--space-3);
    border: 0;
    border-top: 1px solid var(--line);
    opacity: 1;
}

/* ============================================================================
   8. IMAGES & AVATARS
   ========================================================================== */
.img-responsive { border-radius: var(--radius-sm); }

/* Photos that carry the .rounded utility.
   The shadow is copied from americanpeptidesociety.org rather than taken from
   this site's own --shadow-sm, which at rgba(26,46,76,.08) was so faint it read
   as no shadow at all. Same value on both sites, so the family resemblance is
   deliberate. */
img.rounded {
    border-radius: var(--radius) !important;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}
/* .rounded's corners without its shadow, for any element (the YI video).
   Clips its contents, so an iframe or image inside takes the corners too. */
.rounded-flat {
    border-radius: var(--radius) !important;
    box-shadow: none !important;
    overflow: hidden;
}
/* Same treatment for figures and wrappers that are not the <img> itself. */
.v-figure img,
.v-highlight img,
.speaker-figure img { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); }

.profile-image {
    width: 200px;
    aspect-ratio: 1 / 1;
    border-radius: 50%;
    overflow: hidden;
    display: inline-block;
    box-shadow: var(--shadow-md);
}
.profile-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center top;
}

.headshot-circle {
    width: 55px;
    height: 55px;
    flex: 0 0 55px;
    box-shadow: var(--shadow-sm);
    border-radius: 50%;
    object-fit: cover;
    object-position: top center;
    display: inline-block;
    margin-right: 15px;
    border: 2px solid #fff;
    outline: 1px solid var(--line);
}

/* ============================================================================
   9. CARDS
   ========================================================================== */

/* Co-chair / speaker portrait blocks */
.co-chair-img {
    width: 100%;
    max-width: 400px;
    height: auto;
    object-fit: cover;
    border-radius: var(--radius);
    box-shadow: var(--shadow-md);
    transition: transform var(--t), box-shadow var(--t);
}

/* The lift belongs to the link, not the photo. On a speaker's own page the
   headshot is not a link -- there is nowhere left to go -- and a portrait that
   rises under the cursor there promises a click that does nothing. */
.speaker-figure__link { display: block; max-width: 400px; }
.speaker-figure__link:hover .co-chair-img,
.speaker-figure__link:focus-visible .co-chair-img {
    transform: translateY(-3px);
    box-shadow: var(--shadow-lg);
}
.speaker-figure__link:focus-visible { outline: 2px solid var(--aps-red); outline-offset: 3px; }

/* Speaker photo + licence attribution.
   The figure wrapper keeps the credit tied to its image; max-width matches
   .co-chair-img so the caption never runs wider than the photo above it. */
.speaker-figure {
    margin: 0;
    max-width: 400px;
}
.photo-credit {
    margin-top: var(--space-1);
    font-size: 0.82rem;
    line-height: 1.4;
    color: var(--muted);
}
.photo-credit a { color: inherit; text-decoration: underline; }

/* Speaker directory cards */

.co-chair-card h3 { margin-top: var(--space-2); font-size: 1.25rem; }
.co-chair-card .title { font-style: italic; color: var(--muted); margin-bottom: var(--space-2); }

/* Highlighted box (sponsors / notices) — refined parchment panel */
.pharma-box {
    padding: var(--space-4) var(--space-4) var(--space-2);
    border: 1px solid color-mix(in srgb, var(--brass-gold) 55%, transparent);
    border-left: 5px solid var(--brass-gold);
    border-radius: var(--radius);
    background-color: var(--parchment);
    box-shadow: var(--shadow-sm);
    margin-bottom: var(--space-4);
}

/* Generic reusable content card for future pages */
.aps-card {
    background: var(--paper);
    border: 1px solid var(--line-soft);
    border-radius: var(--radius);
    box-shadow: var(--shadow-sm);
    padding: var(--space-4);
    transition: transform var(--t), box-shadow var(--t);
}
.aps-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); }
.aps-card--feature { border-top: 4px solid var(--brass-gold); }

/* ============================================================================
   10. VENUE GALLERY
   ========================================================================== */
.venue-gallery .col-md-4 { margin-bottom: var(--space-3); }
.venue-gallery img,
.venue-gallery .img-fluid {
    width: 100%;
    height: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: var(--radius);
    box-shadow: var(--shadow-sm);
    transition: transform var(--t), box-shadow var(--t);
}
.venue-gallery a,
.venue-gallery .col-md-4 { overflow: hidden; border-radius: var(--radius); display: block; }
.venue-gallery img:hover {
    transform: translateY(-4px) scale(1.02);
    box-shadow: var(--shadow-md);
}

/* ============================================================================
   11. BUTTONS
   ========================================================================== */
.btn {
    --bs-btn-font-family: var(--font-body);
    font-weight: 600;
    letter-spacing: .01em;
    border-radius: var(--radius-sm);
    padding: .7rem 1.5rem;
    transition: transform var(--t-fast), box-shadow var(--t-fast),
                background-color var(--t-fast), color var(--t-fast), border-color var(--t-fast);
}
.btn:active { transform: translateY(1px); }

.btn-aps,
.btn-primary {
    background-color: var(--aps-blue);
    border: 1px solid var(--aps-blue);
    color: #fff;
}
.btn-aps:hover,
.btn-primary:hover {
    background-color: var(--harbor-navy);
    border-color: var(--harbor-navy);
    color: #fff;
    box-shadow: var(--shadow-md);
}

.btn-accent {
    background-color: var(--brass-gold);
    border: 1px solid var(--brass-gold);
    color: var(--harbor-navy);
}
.btn-accent:hover {
    background-color: var(--brass-deep);
    border-color: var(--brass-deep);
    color: #fff;
    box-shadow: var(--shadow-md);
}

.btn-outline-aps {
    background: transparent;
    border: 2px solid var(--aps-blue);
    color: var(--aps-blue);
}
.btn-outline-aps:hover {
    background: var(--aps-blue);
    color: #fff;
}

/* ============================================================================
   12. MAIN NAVBAR — sits under the hero banner, right-aligned
   ----------------------------------------------------------------------------
   Markup:
     <nav class="aps-navbar">
       <div class="container">
         <ul class="aps-nav">
           <li><a href="/" class="active">Home</a></li>
           <li><a href="/sponsors-exhibitors/">Sponsors &amp; Exhibitors</a></li>
         </ul>
       </div>
     </nav>
   Add the modifier class .aps-navbar--sticky if you want it to pin on scroll.
   ========================================================================== */
.aps-navbar {
    background: #fff;
    border-bottom: 1px solid var(--line);
    box-shadow: var(--shadow-sm);
}
.aps-navbar--sticky { position: sticky; top: 0; z-index: 1020; }

.aps-navbar .container {
    display: flex;
    justify-content: flex-end;   /* right-aligned */
    align-items: center;
}

.aps-nav {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: .25rem;
    margin: 0;
    padding: 0;
}
.aps-nav > li { margin: 0; }
.aps-nav a,
.aps-nav__toggle {
    display: block;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .08em;
    font-size: .95rem;
    line-height: 1;
    color: var(--ink-soft);
    padding: 1.15rem 1.1rem;
    border-bottom: 3px solid transparent;
    transition: color var(--t-fast), border-color var(--t-fast);
}
.aps-nav a:link,
.aps-nav a:visited { color: var(--ink-soft); }
.aps-nav a:hover,
.aps-nav__toggle:hover { color: var(--aps-red); }
.aps-nav a.active,
.aps-nav__toggle.active,
.aps-nav a[aria-current="page"] {
    color: var(--harbor-navy);
    border-bottom-color: var(--brass-gold);
}

/* --- Program dropdown -------------------------------------------------- */

.aps-nav__toggle {
    appearance: none;
    background: none;
    border: 0;
    border-bottom: 3px solid transparent;
    font-family: inherit;
    cursor: pointer;
    width: 100%;
    text-align: left;
}
.aps-nav__toggle:focus-visible { outline: 2px solid var(--brass-gold); outline-offset: -2px; }
.aps-nav__chev {
    font-size: .7em;
    margin-left: .3em;
    transition: transform var(--t-fast);
    display: inline-block;
}
.aps-nav__parent.is-open .aps-nav__chev { transform: rotate(180deg); }

.aps-nav__parent { position: relative; }
.aps-nav__menu {
    display: none;
    list-style: none;
    margin: 0;
    padding: .35rem 0;
    position: absolute;
    top: 100%;
    left: 0;
    min-width: 13rem;
    background: #fff;
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    box-shadow: var(--shadow-md);
    z-index: 1030;
}
/* Hover and focus-within open it too, so the menu still works if the script
   never runs -- which is also how a keyboard reaches it before the button is
   pressed. */
.aps-nav__parent:hover > .aps-nav__menu,
.aps-nav__parent:focus-within > .aps-nav__menu,
.aps-nav__parent.is-open > .aps-nav__menu { display: block; }

.aps-nav__menu a {
    padding: .6rem 1.1rem;
    border-bottom: 0;
    border-left: 3px solid transparent;
    letter-spacing: .06em;
    font-size: .88rem;
    white-space: nowrap;
}
.aps-nav__menu a:hover { background: var(--cloud); }
.aps-nav__menu a.active {
    color: var(--harbor-navy);
    border-left-color: var(--brass-gold);
    border-bottom-color: transparent;
}

/* Split parent (Sponsors & Exhibitors): a link beside a chevron-only button.
   The pair reads as one item, so the link gives up its right padding and the
   button its left. */
.aps-nav__parent--split { display: flex; align-items: stretch; }
.aps-nav__parent--split > a { padding-right: .3rem; }
.aps-nav__toggle--chev { width: auto; padding-left: .2rem; padding-right: .9rem; }
.aps-nav__toggle--chev .aps-nav__chev { margin-left: 0; }
.aps-nav__parent--split:hover > a { color: var(--aps-red); }

@media (max-width: 575.98px) {
    .aps-navbar .container { justify-content: center; }
    .aps-nav { justify-content: center; }
    .aps-nav a,
    .aps-nav__toggle { padding: .9rem .8rem; font-size: .88rem; letter-spacing: .05em; }
}

/* Back-compat: also style a Bootstrap <nav class="navbar aps-navbar"> if used */
.aps-navbar .navbar-brand { font-weight: 700; color: var(--harbor-navy); letter-spacing: .01em; }
.aps-navbar .nav-link {
    font-weight: 700; text-transform: uppercase; letter-spacing: .08em;
    font-size: .95rem; color: var(--ink-soft); padding: 1.15rem 1.1rem;
    border-bottom: 3px solid transparent; transition: color var(--t-fast), border-color var(--t-fast);
}
.aps-navbar .nav-link:hover  { color: var(--aps-red); }
.aps-navbar .nav-link.active { color: var(--harbor-navy); border-bottom-color: var(--brass-gold); }

/* ============================================================================
   13. SCHEDULE / PROGRAM COMPONENTS
   ========================================================================== */
.aps27-table { border: 0 !important; }
.aps-table { padding-left: 9px; margin-bottom: .7em; }

.schedule-item-wrapper { display: flex; align-items: center; gap: 1rem; flex-wrap: nowrap; }

.schedule-date {
    font-size: clamp(2rem, 2.5vw, 3.5rem);
    font-family: var(--font-body);
    font-weight: 300;
    letter-spacing: -0.01em;
    margin: var(--space-3) 0 .25rem;
    color: var(--harbor-navy);
}

.schedule-session-header {
    line-height: 1.25;
    font-size: clamp(1.7rem, 3vw, 2.6rem);
    margin-bottom: var(--space-2);
    padding-bottom: .4rem;
    font-weight: 600;
    color: var(--harbor-navy);
    border-bottom: 2px solid var(--brass-gold);
    text-shadow: none;
}

.schedule-event {
    line-height: 1.25;
    font-size: clamp(1.4rem, 2.5vw, 2.1rem);
    margin-bottom: .5rem;
    color: var(--aps-blue);
    font-weight: 600;
}
.schedule-item { margin: 0 0 .3rem; line-height: 1.35; font-size: clamp(1.15rem, 2vw, 1.55rem); font-weight: 400; }
.schedule-talk-title {
    font-style: italic;
    line-height: 1.4;
    font-size: clamp(1.1rem, 2vw, 1.5rem);
    margin-top: var(--space-3) !important;
    font-weight: 400;
    color: var(--ink);
}
.schedule-time { line-height: 1.3; font-size: clamp(1rem, 1vw, 1.1rem); margin-bottom: .3rem; font-weight: 600; color: var(--brick-warm); }
.schedule-location { line-height: 1.3; font-size: clamp(.9rem, 1vw, 1rem); margin-bottom: .3rem; font-weight: 400; color: var(--muted); }

.schedule-item a { font-size: clamp(1.15rem, 2vw, 1.55rem); color: var(--aps-blue); font-weight: 600; transition: color var(--t-fast); }
.schedule-item a:hover,
.sched-link:hover { color: var(--aps-red); }

.lecture-indicator { font-size: 1.1rem; font-weight: 700; color: var(--brass-gold); display: inline-block; line-height: 1.4; letter-spacing: .04em; }

.table-text {
    font-weight: 600; color: var(--harbor-navy); font-size: 1rem; line-height: 1.3;
    margin-top: var(--space-2); letter-spacing: .02em; padding-left: 9px;
}
.table-text-large {
    font-weight: 600; color: #fff; font-size: 1.35rem; line-height: 1.3;
    margin-top: .75rem; letter-spacing: .02em; padding-left: 9px;
}
.topic-box { width: 60%; }

/* ============================================================================
   14. FOOTER — Symposium Leadership
   ========================================================================== */
.apsfooter{
  background:var(--harbor-navy);
  border-top:4px solid var(--brass-gold);
  color:#B9C6DA;
  font-size:.98rem;line-height:1.7;
}
.apsfooter h1,.apsfooter h2,.apsfooter h3,.apsfooter h4,.apsfooter h5{color:#fff;}
.apsfooter a:link,.apsfooter a:visited{color:#E4EAF3;transition:color var(--t-fast);}
.apsfooter a:hover{color:var(--brass-gold);}
.footer-inner{padding:var(--space-5) var(--space-3) 0;}

/* shared brass label */
.apsfooter .label{
  font-size: .78rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--brass-gold);
}

/* co-chairs strip */
.footer-cochairs{
  display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;
  padding-bottom:var(--space-4);border-bottom:1px solid rgba(255,255,255,.12);
}
.footer-cochairs .label{width:120px;line-height:1.4;flex:0 0 auto;}
.footer-cochair{display:flex;align-items:center;gap:16px;}
.footer-cochair img{
  width:76px;height:76px;border-radius:50%;object-fit:cover;object-position:center top;
  border:2px solid var(--brass-gold);flex:0 0 auto;
}
.footer-cochair .name{font-size:1rem;font-weight:700;color:#fff;white-space:nowrap;line-height:1.3;}
.footer-cochair .affil{font-size:.85rem;color:#8EA0BC;margin-top:3px;}

/* identity + contact columns */
.footer-main{
  display:grid;grid-template-columns:1.6fr 1.3fr 1.3fr;gap:var(--space-4);
  padding-top:var(--space-4);
}
.footer-logo{height:58px;width:auto;display:block;margin-bottom:18px;}
.footer-mission{margin:0;font-size:.95rem;line-height:1.65;color:#B9C6DA;max-width:340px;}
.footer-col .label{display:block;margin-bottom:16px;}
.footer-col .c-name{font-size:1rem;font-weight:700;color:#fff;margin-bottom:2px;white-space:nowrap;}
.footer-col .c-role{font-size:.9rem;color:#8EA0BC;margin-bottom:14px;}
.footer-col .c-line{display:flex;align-items:center;gap:9px;margin-bottom:9px;
  font-size:.95rem;color:#E4EAF3;text-decoration:none;}
.footer-col .c-line i{color:var(--brass-gold);}

/* bottom bar */
.footer-bottom{
  margin-top:var(--space-4);padding:var(--space-3) 0;
  border-top:1px solid rgba(255,255,255,.12);
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;
}
.footer-bottom .copy{color:#8EA0BC;font-size: .88rem;letter-spacing:.03em;}
.footer-bottom .footer-slogan{
  font-family:var(--font-script);font-weight:400;
  color:#2BB3B3;                 /* brightened teal — reads on navy */
  font-size:clamp(1.05rem,1.8vw,1.45rem);line-height:1.1;
}

@media(max-width:768px){
  .footer-main{grid-template-columns:1fr;}
  .footer-cochairs .label{width:100%;}
}

/* ---- Sponsor CTA (parchment) ---- */
.sponsor-cta{
  background:var(--parchment);
  border-radius:var(--radius);
  padding:var(--space-5);
  display:flex;align-items:center;justify-content:space-between;
  gap:var(--space-4);flex-wrap:wrap;
}
.sponsor-cta .cta-text{border-left:6px solid var(--brass-gold);padding-left:14px;}
.sponsor-cta h2{margin:0 0 6px;font-weight:600;font-size:clamp(1.5rem,2.5vw,1.9rem);
  letter-spacing:-0.01em;color:var(--harbor-navy);}
.sponsor-cta p{margin:0;color:var(--ink-soft);font-size:1.05rem;line-height:1.5;}

/* A button-shaped element that is deliberately NOT a link: sponsor reservations
   do not open until 1 Oct 2026. It keeps the accent styling Lauren asked for but
   drops every interactive affordance, so it does not invite a click it cannot
   honour. Swap it for a real <a> when IU Conferences supply the booking URL. */
.btn-static { cursor: default; }
.btn-static:hover {
    background-color: var(--brass-gold);
    border-color: var(--brass-gold);
    color: var(--harbor-navy);
    box-shadow: none;
}
.btn-static:active { transform: none; }
.sponsor-cta .cta-action { display: flex; flex-direction: column; align-items: center; gap: .55rem; }
/* The button is a mailto, which does nothing on a machine with no mail handler
   configured and gives no feedback at all. The address is shown as copyable
   text so the primary call to action is never a dead end. */
.sponsor-cta .cta-fallback { margin: 0; font-size: .9rem; color: var(--ink-soft); text-align: center; }


/* ============================================================================
   SPEAKERS INDEX  (/speakers/)
   ========================================================================== */

.speakers-page { padding-bottom: var(--space-6); }
.speakers-page .secondary-header { margin-top: var(--space-4); }
/* .page-header already supplies the space above the first group heading. */
.speakers-page > .secondary-header:first-child { margin-top: 0; }

/* ---- Programme / schedule ---- */
.program-page { padding-bottom: var(--space-6); }
.program-page .prog-day:first-child { margin-top: 0; }
.search-page { padding-bottom: var(--space-6); }

.speaker-card { display: block; text-decoration: none; color: inherit; }
.speaker-card img { width: 100%; height: auto; display: block; }
.speaker-card img,
.speaker-card__nophoto { transition: box-shadow var(--t-fast), transform var(--t-fast); }
.speaker-card:hover img { box-shadow: var(--shadow-lg); }
.speaker-card:hover img,
.speaker-card:hover .speaker-card__nophoto { transform: translateY(-3px); }

.speaker-card__nophoto {
    aspect-ratio: 400 / 480;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--fog-gray);
    border-radius: var(--radius);
    color: var(--muted);
    font-size: 3rem;
}

.speaker-card__name {
    display: block;
    margin-top: .6rem;
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.25;
    color: var(--harbor-navy);
}
.speaker-card:hover .speaker-card__name { color: var(--aps-red); }

.speaker-card__badge {
    display: block;
    margin-top: .2rem;
    font-size: .78rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--teal);
}
.speaker-card__affil {
    display: block;
    margin-top: .15rem;
    font-size: .9rem;
    line-height: 1.35;
    color: var(--brick-warm);
}


/* ============================================================================
   SPEAKER DETAIL PAGE  (/participant/<slug>/)
   ========================================================================== */

.participant-page { padding-bottom: var(--space-6); }

.participant-back { margin: var(--space-3) 0 var(--space-2); font-size: 1.05rem; }
.participant-back a { color: var(--ink-soft); text-decoration: none; }
.participant-back a:hover { color: var(--aps-blue); text-decoration: underline; }

/* The biography runs long and this column does not, so on wide screens the
   photo follows the reader down instead of leaving half the page empty. */
@media (min-width: 992px) {
    .participant-aside { position: sticky; top: var(--space-4); }
}

/* Deliberately smaller than .primary-header, which is sized for page titles
   like "Exhibitor & Sponsor Benefits". A name with a prefix and post-nominals
   ("Professor Lotte Bjerre Knudsen, Dr.Med.Sci.") ran to two enormous lines. */
/* Name, position and institution read as one stacked block rather than three
   separate paragraphs, so the margins between them are deliberately tight. */
/* No top margin: the block sits level with the top of the headshot beside it. */
.participant-identity { margin: 0 0 var(--space-3); }
.participant-name {
    font-weight: 300;
    color: var(--aps-red);
    font-size: clamp(2rem, 3.6vw, 3.1rem);
    line-height: 1.06;
    letter-spacing: -0.02em;
    margin: 0 0 .35rem;
}

/* Position and affiliation were two identical grey paragraphs and read as one
   grey smudge. Two colours, as the 2025 pages had, so they separate at a
   glance. Both clear WCAG AA on white and on parchment. */
.participant-position {
    margin: 0 0 .1rem;
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--teal);
}
.participant-affiliation {
    margin: 0;
    font-size: 1.1rem;
    color: var(--brick-warm);
}
/* Category under the headshot. Derived from the programme where one exists,
   otherwise from the home page section, so it is filled in before any talk is
   scheduled and corrects itself once one is. */
.participant-badge {
    margin: .7rem 0 0;
    font-size: .95rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--teal);
}

.participant-link { margin: 0 0 var(--space-3); font-size: .95rem; }
.participant-link a { color: var(--aps-blue); text-decoration: none; }
.participant-link a:hover { text-decoration: underline; }

.participant-page .secondary-header {
    font-size: clamp(1.4rem, 2.1vw, 1.8rem);
    margin-top: var(--space-4);
}

/* Talks */
.participant-talk {
    padding: 0 0 var(--space-3) var(--space-2);
    border-left: 3px solid var(--line);
    margin-bottom: var(--space-3);
}
.participant-talk:last-child { padding-bottom: 0; margin-bottom: 0; }
.participant-talk__title {
    font-size: 1.2rem;
    font-weight: 600;
    line-height: 1.3;
    color: var(--harbor-navy);
    margin: 0 0 .4rem;
}
.participant-talk__meta { margin: 0 0 .2rem; font-size: .95rem; color: var(--ink-soft); }
.participant-talk__code {
    display: inline-block;
    margin-right: .5rem;
    font-weight: 700;
    color: var(--brick-warm);
    letter-spacing: .02em;
}
.participant-talk__session { margin: 0; font-size: .95rem; color: var(--muted); font-style: italic; }
/* An award is the most distinguishing thing on the page when present, and it
   was rendering as an unexplained bold line under the times. */
.award-pill {
    display: inline-block;
    margin: 0 0 .5rem;
    padding: .25rem .7rem;
    border-radius: var(--radius-pill);
    background: var(--parchment);
    border: 1px solid var(--brass-gold);
    color: var(--harbor-navy);
    font-size: .85rem;
    font-weight: 700;
    letter-spacing: .02em;
}

/* Chair / moderator / panelist / introducer appearances */
.participant-roles { list-style: none; margin: 0; padding: 0; }
.participant-roles li {
    padding: .5rem 0;
    border-bottom: 1px solid var(--line-soft);
    font-size: .95rem;
    color: var(--ink-soft);
}
.participant-roles li:last-child { border-bottom: 0; }
.participant-roles__role {
    display: inline-block;
    min-width: 8.5rem;
    font-weight: 600;
    color: var(--teal);
}
.participant-roles__date { color: var(--muted); margin-left: .5rem; }

.participant-bio { font-size: 1.02rem; line-height: 1.7; }
.participant-bio h3 {
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--harbor-navy);
    margin: var(--space-3) 0 .4rem;
}
.participant-bio p:last-child { margin-bottom: 0; }

/* Biography / Abstract tabs.
   The strip is hidden until the script switches it on, so without JavaScript
   the panels stay as a set of ordinary headed sections rather than leaving a
   row of buttons that do nothing. */
.participant-tabs { margin-top: var(--space-4); }
.participant-tabs__strip {
    display: none;
    gap: var(--space-3);
    border-bottom: 2px solid var(--fog-gray);
    margin-bottom: var(--space-3);
}
.participant-tabs.is-enhanced .participant-tabs__strip { display: flex; }

.participant-tabs__tab {
    appearance: none;
    background: none;
    border: 0;
    border-bottom: 3px solid transparent;
    margin-bottom: -2px;
    padding: .4rem .1rem .6rem;
    font-family: inherit;
    font-size: 1.15rem;
    font-weight: 600;
    color: var(--ink-soft);
    cursor: pointer;
    transition: color var(--t-fast), border-color var(--t-fast);
}
.participant-tabs__tab:hover { color: var(--aps-red); }
.participant-tabs__tab[aria-selected="true"] {
    color: var(--harbor-navy);
    border-bottom-color: var(--teal);
}
.participant-tabs__tab:focus-visible {
    outline: 2px solid var(--aps-blue);
    outline-offset: 2px;
}

/* With the strip showing, the tab label already names the panel. */
.participant-tabs.is-enhanced .participant-tabs__heading {
    position: absolute;
    width: 1px; height: 1px;
    margin: -1px; padding: 0; border: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

.participant-abstract { font-size: 1.02rem; line-height: 1.7; }
.participant-abstract p:last-child { margin-bottom: 0; }
.participant-abstract__title {
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--harbor-navy);
    line-height: 1.3;
    margin: 0 0 var(--space-2);
}
.participant-abstract__figure { margin: var(--space-3) 0 0; }
.participant-abstract__figure img { border-radius: var(--radius); }
.participant-abstract__figure figcaption {
    margin-top: .4rem;
    font-size: .88rem;
    color: var(--muted);
    line-height: 1.4;
}
.participant-abstract__keywords {
    margin-top: var(--space-3);
    font-size: .9rem;
    color: var(--ink-soft);
}
.participant-abstract__keywords span {
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .06em;
    font-size: .78rem;
    color: var(--teal);
    margin-right: .4rem;
}

/* Headshot + any attribution its licence requires */
.speaker-figure { margin: 0; }
.speaker-figure img { border-radius: var(--radius); }
.photo-credit { margin-top: .4rem; font-size: .82rem; color: var(--muted); line-height: 1.3; }
.photo-credit a { color: inherit; }

/* On a phone a 320px portrait headshot is nearly 400px tall, so the name
   landed below the fold and you scrolled a whole screen to find out whose
   page you were on. Smaller here: identification first, portrait second. */
@media (max-width: 991.98px) {
    .participant-aside { max-width: 190px; margin-bottom: var(--space-3); }
    .participant-name { font-size: clamp(1.75rem, 7vw, 2.2rem); margin-top: var(--space-2); }
    .participant-roles__role { display: block; min-width: 0; }
    .participant-roles__date { display: block; margin-left: 0; }
}

/* ============================================================================
   15. MISC, MOTION & PRINT
   ========================================================================== */
.nopad { padding: 0; }
.speaker { margin-bottom: var(--space-2); }
.small {
    font-size: .85rem; font-weight: 400; line-height: 1.5;
    letter-spacing: .02em; margin-bottom: 0; color: var(--muted);
}

.wiggle:hover { animation: wiggle .3s ease-in-out infinite; }
@keyframes wiggle {
    0%   { transform: rotate(0deg); }
    25%  { transform: rotate(2deg); }
    50%  { transform: rotate(-2deg); }
    75%  { transform: rotate(2deg); }
    100% { transform: rotate(0deg); }
}

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
    }
    .speaker-figure__link:hover .co-chair-img,
    .speaker-figure__link:focus-visible .co-chair-img,
    .venue-gallery img:hover,
    .aps-card:hover { transform: none; }
}

@media print {
    body { color: #000; background: #fff; }
    .hero-banner, .apsfooter { box-shadow: none; }
    a { color: #000; text-decoration: underline; }
    section:nth-child(even), .section-fog, .section-parchment, .section-cloud { background: #fff !important; }
}

/* ============================================================================
   16. SPONSORS & EXHIBITORS PAGE
   ========================================================================== */

/* Tier pills */
.tier-pill {
    display: inline-block;
    font-size: .78rem;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: #fff;
    padding: .32rem .8rem;
    border-radius: var(--radius-sm);
    line-height: 1;
}
.tier-pill--platinum { background: var(--harbor-navy); }
.tier-pill--gold     { background: var(--brass-gold); }
.tier-pill--silver   { background: #8A9099; }
.tier-pill--bronze   { background: var(--brick-warm); }
.tier-pill--harbor   { background: var(--teal); }

.price { font-weight: 600; color: var(--harbor-navy); white-space: nowrap; }

/* Levels & exhibition tables — quiet hairline style matching the prospectus */
.sponsor-table { width: 100%; border-collapse: collapse; }
.sponsor-table thead th {
    font-size: .8rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--muted);
    text-align: left;
    padding: 0 .75rem .65rem 0;
    border-bottom: 2px solid var(--line);
}
.sponsor-table tbody td {
    padding: .95rem .75rem;
    border-bottom: 1px solid var(--line-soft);
    vertical-align: middle;
    font-size: .98rem;
    line-height: 1.45;
    color: var(--ink-soft);
}
.sponsor-table tbody td:first-child { padding-left: 0; }
.sponsor-table .num   { text-align: center; }
.sponsor-table .limit { color: var(--muted); }
.table-footnote { font-size: .85rem; color: var(--muted); font-style: italic; margin-top: .75rem; }

/* À-la-carte cards */
.alc-label {
    font-size: .85rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--teal);
    margin-bottom: .5rem;
}
.alc-price {
    font-size: 1.9rem;
    font-weight: 600;
    color: var(--harbor-navy);
    line-height: 1;
    margin-bottom: .65rem;
}

/* Added-benefit cards (tier pill + sentence) */
.benefit-card { display: flex; flex-direction: column; gap: .9rem; height: 100%; }
.benefit-card .tier-pill { align-self: flex-start; }

/* Priority-booth callout */
.priority-callout {
    background: var(--parchment);
    border-radius: var(--radius);
    padding: 1.25rem 1.5rem;
    display: flex;
    align-items: center;
    gap: 1rem;
}
.priority-callout .star { font-size: 1.7rem; line-height: 1; color: var(--brass-gold); }
.priority-callout p { margin: 0; font-size: 1rem; color: var(--ink-soft); }

/* "At a Glance" cells — the v4 prospectus states tiers cumulatively, with
   alternative routes to the same tier introduced by OR. */
.sponsor-table .glance-main { margin: 0; }
.sponsor-table .glance-alts { list-style: none; margin: .5rem 0 0; padding: 0; }
.sponsor-table .glance-alts li { font-size: .92rem; color: var(--ink-soft); margin-top: .3rem; }
.glance-or {
    display: inline-block;
    min-width: 2.2em;
    font-size: .78rem;
    font-weight: 700;
    letter-spacing: .06em;
    color: var(--muted);
}
/* Tier cards under "Added Benefits for Sponsors Who Exhibit" */
.benefit-list { margin: 0; padding-left: 1.1rem; }
.benefit-list li { margin-bottom: .35rem; }
.benefit-list li:last-child { margin-bottom: 0; }

/* Comparison matrix */
.benefits-matrix { width: 100%; border-collapse: collapse; }
.benefits-matrix th,
.benefits-matrix td { padding: .7rem .5rem; border-bottom: 1px solid var(--line-soft); }
.benefits-matrix thead th {
    font-size: .8rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    text-align: center;
    vertical-align: bottom;
    border-bottom: 2px solid var(--line);
}
.benefits-matrix thead th .bar { height: 3px; border-radius: 2px; margin-bottom: .4rem; }
.benefits-matrix tbody td:first-child { text-align: left; font-size: .9rem; color: var(--ink); }
.benefits-matrix td.cell { text-align: center; }
.benefits-matrix .yes { color: var(--harbor-navy); font-weight: 700; }
.benefits-matrix .no  { color: #636C79; }
.benefits-matrix .val { color: var(--ink); font-weight: 600; font-size: .85rem; }
.benefits-matrix tr.investment { background: var(--parchment); }
.benefits-matrix tr.investment td { font-weight: 700; color: var(--harbor-navy); text-transform: uppercase; font-size: .85rem; letter-spacing: .04em; }
.benefits-matrix tr.investment td:first-child { color: var(--harbor-navy); }

/* Per-tier header bar colors */
.bar--platinum { background: var(--harbor-navy); }
.bar--gold     { background: var(--brass-gold); }
.bar--silver   { background: #8A9099; }
.bar--bronze   { background: var(--brick-warm); }
.bar--harbor   { background: var(--teal); }

@media (max-width: 768px) {
    .benefits-matrix-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .benefits-matrix { min-width: 640px; }
}

/* ---- Sponsors & Exhibitors: page layout rhythm ---- */
.sp-page .sp-band { padding: var(--space-5) 0; }
.sp-page .sp-band--tight { padding: var(--space-4) 0; }
.sp-page .sp-sublabel { color: var(--muted); font-size: .95rem; margin: -.5rem 0 1.6rem; max-width: 72ch; }

/* ---- Countdown clock in the main nav ---- */
.aps-navbar .container { justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.aps-countdown {
    display: flex;
    flex-direction: column;
    justify-content: center;
    line-height: 1.12;
    background: transparent;
}
.aps-countdown__label {
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .13em;
    text-transform: uppercase;
    color: var(--brass-deep);
    margin-bottom: .15rem;
}
.aps-countdown__time {
    font-size: .98rem;
    font-weight: 700;
    letter-spacing: .02em;
    color: var(--harbor-navy);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.aps-countdown__time .unit { color: var(--muted); font-weight: 600; font-size: .8em; }

@media (max-width: 575.98px) {
    .aps-countdown__time { font-size: .9rem; }
}

/* ---- Mobile nav: hamburger toggle ---- */
.aps-nav-toggle {
    display: none;
    background: transparent;
    border: 0;
    cursor: pointer;
    color: var(--harbor-navy);
    font-size: 1.7rem;
    line-height: 1;
    padding: .2rem .35rem;
}
.aps-nav-toggle:focus-visible { outline: 2px solid var(--brass-gold); outline-offset: 2px; }

@media (max-width: 768px) {
    .aps-navbar .container { justify-content: space-between; gap: .5rem; flex-wrap: wrap; }
    .aps-nav-toggle { display: inline-flex; align-items: center; }
    .aps-countdown { margin-top: 10px; align-items: flex-start; text-align: left; }

    .aps-nav {
        display: none;
        flex-basis: 100%;
        flex-direction: column;
        gap: 0;
        margin-top: .4rem;
        border-top: 1px solid var(--line);
    }
    .aps-nav.is-open { display: flex; }
    .aps-nav > li { width: 100%; }
    .aps-nav a,
    .aps-nav__toggle {
        padding: .95rem .35rem;
        border-bottom: 1px solid var(--line);
        border-left: 3px solid transparent;
    }

    /* Nothing floats in the stacked menu: the submenu opens in the flow,
       indented, and hover is meaningless on a touch screen. */
    .aps-nav__menu {
        position: static;
        border: 0;
        border-radius: 0;
        box-shadow: none;
        padding: 0;
        min-width: 0;
        background: var(--cloud);
    }
    .aps-nav__parent:hover > .aps-nav__menu { display: none; }
    .aps-nav__parent:focus-within > .aps-nav__menu,
    .aps-nav__parent.is-open > .aps-nav__menu { display: block; }
    .aps-nav__menu a { padding-left: 1.4rem; }
    .aps-nav a.active,
    .aps-nav a[aria-current="page"] {
        border-bottom-color: var(--line);
        border-left-color: var(--brass-gold);
    }

    /* The split parent stacks: link and chevron on one row, menu beneath. */
    .aps-nav__parent--split { flex-wrap: wrap; }
    .aps-nav__parent--split > a { flex: 1 1 auto; }
    .aps-nav__toggle--chev { flex: 0 0 auto; padding-left: .9rem; border-left: 0; }
    .aps-nav__toggle--chev.active { border-left: 0; }
    .aps-nav__parent--split > .aps-nav__menu { flex-basis: 100%; }
}

/* ============================================================================
   VENUE / DESTINATION PAGES
   ========================================================================== */
.v-sec{padding:var(--space-6) 0;background-color:var(--paper);}
.v-sec--cloud{background:var(--cloud);border-top:1px solid #e7edf5;border-bottom:1px solid #e7edf5;}
.v-sec--parchment{background:var(--parchment);border-top:1px solid #ece6da;border-bottom:1px solid #ece6da;}

/* The venue page's own eyebrow/title/location trio became .page-header
   (section 3b) and is now shared by every interior page. */

/* sub-label that sits under a .secondary-header */
.v-lead{margin:0 0 32px 17px;font-size:.95rem;letter-spacing:.01em;color:var(--muted);}

.v-figure{margin:0 0 24px;}
.v-figure img{width:100%;object-fit:cover;border-radius:var(--radius);box-shadow:0 2px 8px rgba(0,0,0,.2);display:block;}
.v-figure.is-hero img{height:clamp(280px,42vw,520px);box-shadow:var(--shadow-lg);}
.v-figure.is-feature img{height:clamp(280px,40vw,480px);}
.v-figcap{font-size:.85rem;color:var(--muted);margin-top:.5rem;letter-spacing:.01em;}
.v-prose{max-width:760px;}
.v-prose p{font-size:1.0625rem;line-height:1.75;color:#3f4754;margin:0 0 1.1rem;}
.v-prose p:last-child{margin-bottom:0;}

.v-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:24px;}
.v-grid-2 .v-figure{margin:0;}
.v-grid-2 .v-figure img{height:280px;}

/* Getting Here card */
.gh-card{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:#e3e9f1;
  border:1px solid #e3e9f1;border-radius:14px;overflow:hidden;box-shadow:var(--shadow-md);}
.gh-cell{background:#fff;padding:30px 32px;}
.gh-head{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
.gh-head i{color:var(--brass-gold);font-size:1.1rem;}
.gh-head span{font-size: 13px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--brass-deep);}
.gh-cell p{margin:0;font-size:1rem;line-height:1.6;color:var(--ink-soft);}
.gh-cell.is-address p{font-size:1.05rem;color:var(--ink);font-weight:600;}

/* Exploring highlights */
.v-highlights{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin:30px 0 38px;}
.v-highlight i{color:var(--teal);font-size:1.5rem;}
.v-highlight img{width:100%;height:130px;object-fit:cover;border-radius:var(--radius);
  box-shadow:var(--shadow-md);display:block;}
.v-highlight .h-name{font-size:1rem;font-weight:600;color:var(--harbor-navy);margin-top:10px;}
.v-highlight .h-desc{font-size:.9rem;color:var(--muted);line-height:1.45;margin-top:4px;}

/* Reservations placeholder */
.v-reserve{background:var(--parchment);border:1px solid rgba(201,162,39,.55);
  border-left:5px solid var(--brass-gold);border-radius:var(--radius);padding:34px 36px;
  display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;}
.v-reserve .v-reserve-text{max-width:640px;}
.badge-soon{display:inline-flex;align-items:center;gap:8px;background:#ece3cb;color:#8a7340;
  font-size: .78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  padding:5px 12px;border-radius:20px;margin-bottom:14px;}
.v-reserve p{margin:0;font-size:1.05rem;line-height:1.6;color:var(--ink-soft);}
.btn-disabled{background:#d8d3c7;color:#fff;font-weight:700;font-size:.95rem;
  padding:13px 28px;border-radius:6px;border:0;cursor:not-allowed;}

@media(max-width:768px){
  .gh-card,.v-grid-2{grid-template-columns:1fr;}
  .v-highlights{grid-template-columns:1fr 1fr;}
}

/* ============================================================================
   PROGRAM / AGENDA
   Reproduces the 2025 agenda layout: a three-column row of
   time | content | location, with session headings coloured by session type.
   ========================================================================== */

/* The site auto-alternates <section> backgrounds and gives them 72px of vertical
   padding. Neither suits a schedule: consecutive days would stripe grey/white
   arbitrarily, and the padding doubles the gap between days. Opt out. */
.prog-day,
.prog-day:nth-child(even) {
    background-color: transparent;
    padding: 0;
    margin: var(--space-6, 3rem) 0;
}
.prog-day__heading {
    font-size: 1.5rem;
    margin-bottom: .25rem;
    padding-bottom: .5rem;
    border-bottom: 2px solid var(--accent, #2E86AB);
}
.prog-day__name { font-weight: 400; color: var(--muted); margin-left: .5rem; }
.prog-day__theme { color: var(--muted); font-style: italic; margin-bottom: 1rem; }

.prog-row {
    display: grid;
    grid-template-columns: 9.5rem minmax(0, 1fr) 11rem;
    gap: 1rem;
    padding: .7rem 0;
    border-bottom: 1px solid rgba(0, 0, 0, .07);
    align-items: start;
}
.prog-row__time { font-size: .875rem; color: var(--muted); white-space: nowrap; padding-top: .15rem; }
.prog-row__loc  { font-size: .85rem; color: var(--muted); text-align: right; }

/* Session heading */
.prog-row--session { padding-top: 1.4rem; border-bottom: none; }
.prog-session__title { font-size: 1.2rem; margin: 0; line-height: 1.3; }
.prog-session__subtitle { margin: .25rem 0 0; color: var(--muted); font-size: .9375rem; }

.prog-chairs { margin-top: .5rem; font-size: .9375rem; }
.prog-chairs__label { font-weight: 600; display: block; margin-bottom: .15rem; }
.prog-chair { line-height: 1.5; }

/* Talk row: thumbnail beside the text */
.prog-row--talk .prog-row__body { display: flex; gap: .85rem; align-items: flex-start; }
.prog-thumb {
    width: 60px; height: 60px;
    border-radius: 50%;
    object-fit: cover;
    flex: 0 0 60px;
}
.prog-talk { min-width: 0; }
.prog-talk__speaker { margin: 0; line-height: 1.45; }
.prog-code { color: #C1611E; font-weight: 700; }
.prog-name { color: var(--accent, #2E86AB); font-weight: 600; }
.prog-affil { color: var(--muted); font-size: .9375rem; }
.prog-talk__title { margin: .15rem 0 0; font-style: italic; line-height: 1.45; }

/* Flash talk: title leads, presenter beneath, no code or thumbnail */
.prog-talk__title--lead { font-style: normal; margin-top: 0; }
.prog-flash__name { margin: .4rem 0 0; font-weight: 700; }
.prog-flash__role,
.prog-flash__org { margin: 0; font-size: .9375rem; color: var(--muted); }

.prog-empty { margin: 3rem 0; color: var(--muted); font-style: italic; }

@media (max-width: 760px) {
    .prog-row { grid-template-columns: 1fr; gap: .25rem; padding: .9rem 0; }
    .prog-row__loc { text-align: left; }
    .prog-row__time { font-weight: 600; }
    .prog-thumb { width: 48px; height: 48px; flex-basis: 48px; }
}

/* ============================================================================
   YOUNG INVESTIGATORS PAGE
   ----------------------------------------------------------------------------
   Main column of copy and a photo; a sidebar of downloads shown as thumbnails
   with a caption beneath. Headings and prose reuse .tertiary-header / .v-prose.
   ========================================================================== */
.yi-prose { max-width: none; margin-bottom: var(--space-4); }
.yi-photo img { max-height: 560px; }
/* Section titles inside the editor-written copy under the video. */
.yi-prose h3 {
    font-weight: 600; color: var(--brick-warm);
    font-size: 1.25rem; line-height: 1.3;
    margin: var(--space-4) 0 .6rem;
}
.yi-prose h3:first-child { margin-top: 0; }
/* Sidebar people list: name in bold, title and institution beneath. */
.yi-sidebar-section .yi-people { list-style: none; padding: 0; margin: 0 0 var(--space-3); }
.yi-sidebar-section .yi-people li {
    font-size: .9rem; line-height: 1.45; color: var(--ink-soft);
    padding: .75rem 0; border-top: 1px solid #e3e9f1;
}
.yi-sidebar-section .yi-people li:first-child { border-top: 0; padding-top: 0; }
.yi-sidebar-section .yi-people strong { display: block; color: var(--ink); font-size: 1rem; margin-bottom: .15rem; }
.yi-sidebar-photo { margin-top: var(--space-3); }
/* The width/height attributes reserve the shape; height:auto lets it scale
   rather than crop to the attribute height. */
.yi-sidebar-photo img { height: auto; }
/* Corners come from .rounded-flat in the template. No shadow and no
   background colour: the shadow read as a hard 1px line down the right edge of
   the playing video. The iframe bleeds 1px past the clip on every side so no
   rounding of its size can expose an edge. */
.yi-video {
    position: relative; aspect-ratio: 16 / 9; margin-bottom: var(--space-4);
    overflow: hidden;
}
.yi-video iframe {
    position: absolute; top: -1px; left: -1px;
    width: calc(100% + 2px); height: calc(100% + 2px); border: 0;
}
.yi-join { margin: var(--space-5) 0; }
.yi-join__notice {
    padding: 1rem 1.25rem; border-radius: var(--radius);
    background: var(--parchment); border: 1px solid rgba(201,162,39,.55);
    color: var(--ink-soft); font-weight: 600;
}
.yi-join__notice i { color: var(--teal); margin-right: .35rem; }
.yi-form { padding: var(--space-4); background: var(--cloud); border-radius: var(--radius); }
.yi-form .form-label { font-weight: 600; font-size: .9rem; color: var(--harbor-navy); margin-bottom: .3rem; }
.yi-form__req { color: var(--brick-warm); }
.yi-form__field-error, .yi-form__error { color: #b42318; font-size: .875rem; margin-top: .3rem; }
.yi-form__error { margin: 0 0 1rem; font-weight: 600; }
.yi-form__privacy { font-size: .85rem; color: var(--muted); margin: var(--space-3) 0; }
/* The honeypot: off-screen rather than display:none, which some bots skip. */
.yi-form__hp { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
.yi-downloads { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-4); }
.yi-downloads a { display: block; text-decoration: none; }
.yi-downloads img {
    width: 100%; height: auto; display: block;
    border-radius: var(--radius); box-shadow: 0 2px 8px rgba(0,0,0,.2);
    transition: transform .15s ease, box-shadow .15s ease;
}
.yi-downloads a:hover img { transform: translateY(-2px); box-shadow: var(--shadow-lg); }
.yi-downloads__label {
    display: block; margin-top: .5rem;
    font-size: .9rem; font-weight: 600; color: var(--harbor-navy);
}
.yi-downloads + .yi-sidebar-section,
.yi-sidebar-section + .yi-sidebar-section { margin-top: var(--space-5); }
.yi-sidebar-section { font-size: .95rem; line-height: 1.6; color: var(--ink-soft); }
.yi-sidebar-section ul { padding-left: 1.1rem; }
.yi-sidebar-section > :last-child { margin-bottom: 0; }
@media (max-width: 767.98px) {
    .yi-downloads { grid-template-columns: repeat(2, 1fr); }
}

/* ==========================================================================
   Exhibitor floor plan (/sponsors-exhibitors/floor-plan/)
   The drawing is a PNG inside an SVG; each .fp-booth is a <g> laid over one
   booth from home/floorplan.py. The status classes do the marking that used
   to be a pen on a printout: a red dot and a wash on taken booths.
   ========================================================================== */
.fp-sec { padding: var(--space-5) 0 var(--space-6); }
.fp-backlink {
    font-size: .92rem; font-weight: 600; color: var(--aps-blue); text-decoration: none;
}
.fp-backlink:hover { color: var(--aps-blue-dark); text-decoration: underline; }
.fp-backlink i { margin-right: .2rem; }

.fp-plan { margin: 0; }
.fp-plan__frame {
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    box-shadow: var(--shadow-sm);
    padding: 10px;
}
.fp-plan__svg { display: block; width: 100%; height: auto; }
.fp-plan__caption { font-size: .85rem; color: var(--muted); margin-top: .6rem; letter-spacing: .01em; }

.fp-booth rect {
    fill: transparent;
    stroke: transparent;
    stroke-width: 1.5;
    transition: fill .15s ease, stroke .15s ease;
}
.fp-booth circle { fill: var(--aps-red); stroke: var(--paper); stroke-width: 1.2; }
.fp-booth.is-reserved rect  { fill: rgba(203, 59, 45, .14); stroke: var(--aps-red); stroke-dasharray: 3 2; }
.fp-booth.is-confirmed rect { fill: rgba(203, 59, 45, .34); stroke: var(--aps-red); }
.fp-booth[data-exhibitor] { cursor: pointer; outline: none; }
.fp-booth[data-exhibitor]:hover rect,
.fp-booth[data-exhibitor]:focus rect,
.fp-booth.is-hot rect { fill: rgba(26, 46, 76, .28); stroke: var(--harbor-navy); stroke-width: 2.5; stroke-dasharray: none; }

.fp-legend {
    list-style: none; margin: var(--space-3) 0 0; padding: 0;
    display: flex; flex-wrap: wrap; gap: .5rem 1.6rem;
    font-size: .9rem; color: var(--ink-soft);
}
.fp-legend li { display: flex; align-items: center; gap: .5rem; }
.fp-legend__total { margin-left: auto; color: var(--muted); font-size: .85rem; }
.fp-swatch {
    display: inline-block; width: 18px; height: 16px; border-radius: 3px;
    background: #E9EDF0; border: 1px solid #9aa3ad; position: relative;
}
.fp-swatch--reserved  { background: rgba(203, 59, 45, .14); border: 1.5px dashed var(--aps-red); }
.fp-swatch--confirmed { background: rgba(203, 59, 45, .34); border: 1.5px solid var(--aps-red); }
.fp-swatch--reserved::after,
.fp-swatch--confirmed::after {
    content: ""; position: absolute; top: -4px; right: -4px;
    width: 8px; height: 8px; border-radius: 50%;
    background: var(--aps-red); border: 1px solid var(--paper);
}

.fp-h2 { font-size: clamp(1.4rem, 2.2vw, 1.75rem); margin-top: 0; }
.fp-h2--table { margin-top: var(--space-5); }
.fp-rules { color: var(--ink-soft); line-height: 1.6; }
.fp-rules ul { padding-left: 1.2rem; margin: 0; }
.fp-rules li + li { margin-top: .7rem; }
.fp-rules b, .fp-rules strong { color: var(--harbor-navy); font-weight: 600; }

.fp-table tbody tr { transition: background .15s ease; }
.fp-table tbody tr.is-hot { background: var(--cloud); }
.fp-table tbody tr[data-exhibitor] { cursor: default; }
.fp-table tbody td, .fp-table thead th { padding-left: .5rem; padding-right: .5rem; }
.fp-table tbody td:first-child, .fp-table thead th:first-child { padding-left: 0; }
.fp-table__package { font-size: .9rem; color: var(--ink-soft); }
.fp-table__part { display: block; white-space: nowrap; }
.fp-table__tbd { color: var(--muted); font-style: italic; font-size: .9rem; white-space: nowrap; }
.fp-status {
    display: inline-block; font-size: .78rem; font-weight: 700; letter-spacing: .06em;
    text-transform: uppercase; padding: .15rem .55rem; border-radius: var(--radius-pill);
}
.fp-status--reserved  { color: var(--brick-warm); background: rgba(164, 90, 61, .12); }
.fp-status--confirmed { color: var(--paper); background: var(--aps-red); }
.fp-empty { color: var(--muted); font-style: italic; }
.fp-contact { margin-top: var(--space-4); font-size: .95rem; color: var(--ink-soft); }

@media (max-width: 991.98px) {
    .fp-h2 { margin-top: var(--space-4); }
}
/* Prospectus → floor plan pointer, under the exhibition tier table. */
.sp-floorplan-link { margin: 1rem 0 0; font-size: .95rem; color: var(--ink-soft); }
.sp-floorplan-link i { color: var(--brass-gold); margin-right: .35rem; }
.sp-floorplan-link a { font-weight: 600; }
.sp-floorplan-link__note { color: var(--muted); }
