/* ==========================================================================
   polish.css — small shared refinements, added 2026-09-21.
   Presentation and small-screen fit only: no content or colour changes.
   Remove the single <link> in includes/header.php to revert all of it.
   ========================================================================== */

/* --- Photographs ----------------------------------------------------------
   The venue and previous-edition photos already sit in .card-lift frames.
   Give them one shared frame and a slow zoom so the hover reads as a photo
   rather than just a shadow. */
figure.card-lift,
.card-lift > figure,
figure { overflow: hidden; }

figure img,
.card-lift > img {
   display: block;
   transition: transform .6s cubic-bezier(.22, .61, .36, 1);
   will-change: transform;
}
figure:hover img,
.card-lift:hover > img { transform: scale(1.045); }

/* --- In-page navigation ---------------------------------------------------
   Anchor links inside the programme and key-date pages jump; ease them. */
html { scroll-behavior: smooth; }

/* --- Respect the viewer's motion preference ------------------------------ */
@media (prefers-reduced-motion: reduce) {
   html { scroll-behavior: auto; }
   figure img,
   .card-lift > img,
   .card-lift { transition: none !important; }
   figure:hover img,
   .card-lift:hover > img { transform: none !important; }
}

/* --- Long URLs on narrow screens ------------------------------------------
   The Zoom join links in the programme are unbreakable strings and pushed
   the page ~10px wider than a 320px screen, so the whole page scrolled
   sideways. Let them wrap instead. */
.content-card a,
.slot a,
.card a { overflow-wrap: anywhere; }

/* --- Justified text on phones ---------------------------------------------
   The speaker biographies are justified. In a ~300px column that leaves
   large, uneven word gaps, so fall back to ragged-right on small screens. */
@media (max-width: 575.98px) {
   .text-justify,
   [style*="text-align: justify"],
   [style*="text-align:justify"] { text-align: left !important; }
}

/* Desktop menu: nine top-level tabs (Program added Sep 2026). Tighter link
   spacing between 992px and 1399px so the last tab never runs off-screen;
   below 1200px the two long labels wrap onto two lines. */
@media (min-width: 992px) and (max-width: 1399.98px) {
   .navbar { --bs-navbar-nav-link-padding-x: .6rem; }
   .navbar .navbar-nav > .nav-item > .nav-link { padding-left: .6rem !important; padding-right: .6rem !important; }
}
@media (min-width: 992px) and (max-width: 1199.98px) {
   .navbar .navbar-nav > .nav-item > .nav-link { white-space: normal; max-width: 8.5rem; text-align: center; line-height: 1.25; }
}

/* Desktop menu alignment (2026-10-19). The theme floats each dropdown arrow
   to the right, so it dropped onto its own line below the label and the
   labels without arrows (Home, Speakers) sat at a different height.
   Arrows now sit inline beside their label and every tab is centred on one
   line; 992-1199px uses slightly tighter text so all nine tabs still fit. */
@media (min-width: 992px) {
   .navbar .navbar-nav > .nav-item > .nav-link {
      display: flex; align-items: center; justify-content: center;
      gap: .3rem; text-align: center; line-height: 1.25;
   }
   .navbar .navbar-nav > .nav-item > .nav-link.dropdown-toggle::after {
      float: none; margin: 0; font-size: .7rem; line-height: 1;
      width: auto; height: auto; vertical-align: 0; flex: 0 0 auto; opacity: .75;
   }
}
@media (min-width: 992px) and (max-width: 1199.98px) {
   .navbar .navbar-nav > .nav-item { flex-shrink: 0; }
   .navbar .navbar-nav > .nav-item > .nav-link {
      font-size: 14px; max-width: 8.4rem; gap: .22rem;
      padding-left: .36rem !important; padding-right: .36rem !important;
   }
}

/* === Shared page style (2026-10-19) =========================================
   Plain content pages (Venue, Registration, Submission, Committee, Calls...)
   now carry the same accents as the Speakers, Program and Gala Dinner pages:
   a short gradient bar under the page title, a purple bar on section
   headings, and a comfortable line length for long paragraphs. Centred
   headings, hero titles and anything inside a card are left untouched.
   Delete this block to revert. */
body main h1:not([class*=display]):not(.hero-text-box h1):not(.text-center h1):not(.card h1) {
   position: relative; padding-bottom: .85rem; margin-bottom: 1.6rem !important;
}
body main h1:not([class*=display]):not(.hero-text-box h1):not(.text-center h1):not(.card h1)::after {
   content: ''; position: absolute; left: 0; bottom: 0; width: 64px; height: 4px;
   border-radius: 4px; background: linear-gradient(90deg, #6c63ff, #0ea5e9);
}
body main h2.mb-3:not([class*=display]):not(.text-center):not(.text-center *):not(.card *):not([class*=fw-bold]),
body main h3.mb-3:not(.text-center):not(.text-center *):not(.card *),
body main .py-xl-9 .container > h3:not(.text-center *) {
   border-left: 4px solid #6c63ff; padding-left: .8rem; line-height: 1.25;
}
body main .container > .mb-5 p.fs-5:not(.text-center *) { max-width: 78ch; }
/* === end shared page style === */
