/*
  IBS CTPU-PTC School on Quantum Computation for QFT
  Indico event CSS — v23 glass layout + Lecturers & Speakers page styles

  Upload THIS SINGLE FILE in Indico as the event layout CSS.
  Source order is important:
    1) v23 main event layout styles
    2) page-scoped Lecturers & Speakers additions

  Generated for event 1238.
*/

:root {
  /* ===== header / formula ===== */
  --qcqft-header-bg: #ffffff;
  --qcqft-header-ink: #142638;
  --qcqft-header-ink-soft: rgba(20, 38, 56, 0.78);

  --qcqft-formula-url: url("https://indico.ibs.re.kr/event/1238/attachments/5685/8839/formula01_distinct_light.svg");
  --qcqft-formula-url-mobile: var(--qcqft-formula-url);

  --qcqft-hero-h: clamp(252px, 20.5vh, 324px);
  --qcqft-title-size: clamp(28px, 2.55vw, 44px);
  --qcqft-formula-slot-h: clamp(36px, 4.5vh, 54px);
  --qcqft-gap-title-formula: clamp(22px, 2.6vh, 28px);
  --qcqft-gap-formula-meta: clamp(30px, 3.4vh, 34px);
  --qcqft-meta-menu-gap: 0px;

  /* ===== body ===== */
  --qcqft-body-width: 95%;
  --qcqft-body-width-mobile: 97%;
  --qcqft-body-ink: #111111;
  --qcqft-body-font-size: 1.3rem;
  --qcqft-body-font-size-mobile: 1.18rem;
  --qcqft-body-line-height: 1.74;
  --qcqft-body-line-height-mobile: 1.78;

  /* ===== centered menu ===== */
  --qcqft-menu-font-size: 1.3rem;
  --qcqft-menu-font-size-mobile: 1.08rem;
  --qcqft-menu-sub-font-size-mobile: 0.98rem;

  --qcqft-menu-ink: rgba(20, 38, 56, 0.70);
  --qcqft-menu-ink-active: #142638;

  --qcqft-menu-weight: 500;
  --qcqft-menu-weight-active: 700;

  --qcqft-menu-underline: 1.5px;
  --qcqft-menu-underline-active: 2.6px;

  --qcqft-menu-gap: 1.05rem;
  --qcqft-menu-gap-mobile: 0.75rem;

  --qcqft-menu-bottom-gap: 0.95rem;
  --qcqft-menu-bottom-gap-mobile: 0.78rem;
  --qcqft-menu-offset-y: -20px;
}

/* ===== header shell ===== */

.confheader {
  min-height: var(--qcqft-hero-h) !important;
  background-color: var(--qcqft-header-bg) !important;
  background-image: none !important;
  border-color: transparent !important;
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: center;
  box-shadow: none;
}

.confheader::before {
  content: none;
}

.confheader .confTitleBox,
.confheader .confSubTitleBox {
  background: transparent !important;
  border-color: transparent !important;
  position: relative;
}

.confheader .confTitleBox .confTitle,
.confheader .confSubTitleBox .confSubTitleContent {
  width: 100% !important;
  max-width: none !important;
  margin: 0 !important;
  padding: 0 1.25rem !important;
  box-sizing: border-box;
}

.confheader .confTitleBox,
.confheader .confTitleBox .confTitle,
.confheader .confTitleBox .confTitle h1 {
  text-align: center !important;
  line-height: 1.12 !important;
  margin: 0 !important;
}

.confheader .confTitleBox {
  padding-top: clamp(10px, 1.2vh, 16px) !important;
  padding-bottom: calc(var(--qcqft-formula-slot-h) + var(--qcqft-gap-title-formula)) !important;
  background:
    var(--qcqft-formula-url)
    center calc(100% - 2px)
    / min(1100px, 82vw) auto
    no-repeat !important;
}

.confheader .confTitleBox::after {
  content: none !important;
}

.confheader .confTitleBox .confTitle,
.confheader .confTitleBox .confTitle h1,
.confheader .conference-title-link,
.confheader .confSubTitleBox .confSubTitleContent,
.confheader .confSubTitleBox .confSubTitleContent.flexrow,
.confheader #event-search-box {
  position: relative;
  z-index: 2;
}

.confheader .confTitleBox .confTitle h1 > a {
  display: block !important;
}

.confheader .conference-title-link {
  display: block !important;
  width: 100%;
  text-align: center !important;
  color: var(--qcqft-header-ink) !important;
  font-size: var(--qcqft-title-size) !important;
  padding: 0 !important;
  margin: 0 !important;
}

.confheader .conference-title-link,
.confheader .conference-title-link span[itemprop="title"] {
  text-shadow: none !important;
}

/* ===== meta band ===== */

.confheader .confSubTitleBox {
  padding-top: var(--qcqft-gap-formula-meta) !important;
  padding-bottom: var(--qcqft-meta-menu-gap) !important;
}

.confheader .confSubTitleBox .confSubTitleContent.flexrow {
  display: grid !important;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  column-gap: 1rem;
}

.confheader .confSubTitleBox .confSubTitleContent.flexrow .confSubTitle {
  grid-column: 2;
  justify-self: center;
  text-align: center !important;
  color: var(--qcqft-header-ink-soft) !important;
  text-shadow: none;
}

.confheader .confSubTitleBox .confSubTitleContent .datePlace,
.confheader .confSubTitleBox .confSubTitleContent .timezone {
  color: var(--qcqft-header-ink-soft) !important;
}

.confheader .confSubTitleBox .confSubTitleContent.flexrow #event-search-box {
  grid-column: 3;
  justify-self: end;
}

.confheader #event-search-box .ui.input {
  background: rgba(255, 255, 255, 0.78);
  border: 1px solid rgba(20, 38, 56, 0.16);
  border-radius: 6px;
  box-shadow: 0 1px 6px rgba(20, 38, 56, 0.06);
}

.confheader #event-search-box input {
  background: transparent !important;
  color: var(--qcqft-header-ink) !important;
}

.confheader #event-search-box input::placeholder {
  color: rgba(20, 38, 56, 0.48);
}

.confheader #event-search-box i.search.icon {
  color: rgba(20, 38, 56, 0.62) !important;
}

/* ===== centered event menu ===== */

#confSectionsBox {
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
}

#confSectionsBox .conf_leftMenu {
  order: 1;
  float: none !important;
  width: 100% !important;
  max-width: none !important;
  margin: 0 auto var(--qcqft-menu-bottom-gap) !important;
  margin-top: var(--qcqft-menu-offset-y) !important;
  padding: 0 1.25rem !important;
  text-align: center !important;
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}

#confSectionsBox .conf_leftMenu > ul#outer {
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: var(--qcqft-menu-gap) !important;
  list-style: none !important;
  margin: 0 auto !important;
  padding: 0 !important;
}

#confSectionsBox .conf_leftMenu > ul#outer > li,
#confSectionsBox .conf_leftMenu ul.inner > li,
#confSectionsBox .conf_leftMenu ul ul > li {
  float: none !important;
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
}

#confSectionsBox .conf_leftMenu .menuConfTitle,
#confSectionsBox .conf_leftMenu .menuConfMiddleCell {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  margin: 0 !important;
  padding: 0 !important;
}

#confSectionsBox .conf_leftMenu .menuConfTitle > a,
#confSectionsBox .conf_leftMenu .menuConfMiddleCell > a,
#confSectionsBox .conf_leftMenu ul.inner a,
#confSectionsBox .conf_leftMenu ul ul a {
  display: inline-block !important;
  color: var(--qcqft-menu-ink) !important;
  text-decoration: none !important;
  line-height: 1.22 !important;
  font-weight: var(--qcqft-menu-weight) !important;
  border-bottom: var(--qcqft-menu-underline) solid transparent !important;
  background: transparent !important;
  transition:
    color 120ms ease,
    border-color 120ms ease,
    border-bottom-width 120ms ease,
    font-weight 120ms ease;
}

#confSectionsBox .conf_leftMenu .menuConfTitle > a,
#confSectionsBox .conf_leftMenu .menuConfMiddleCell > a {
  padding: 0.10rem 0.10rem 0.34rem !important;
  font-size: var(--qcqft-menu-font-size) !important;
}

#confSectionsBox .conf_leftMenu .menuConfTitle > a:hover,
#confSectionsBox .conf_leftMenu .menuConfMiddleCell > a:hover,
#confSectionsBox .conf_leftMenu ul.inner a:hover,
#confSectionsBox .conf_leftMenu ul ul a:hover {
  color: var(--qcqft-menu-ink-active) !important;
  border-bottom-color: rgba(20, 38, 56, 0.62) !important;
}

#confSectionsBox .conf_leftMenu li[class*="Selected"] > a,
#confSectionsBox .conf_leftMenu .menuConfSelected > a {
  color: var(--qcqft-menu-ink-active) !important;
  font-weight: var(--qcqft-menu-weight-active) !important;
  border-bottom-color: rgba(20, 38, 56, 0.92) !important;
  border-bottom-width: var(--qcqft-menu-underline-active) !important;
}

#confSectionsBox .conf_leftMenu .support_box,
#confSectionsBox .conf_leftMenu .event-service-info {
  margin: 0.85rem auto 0 !important;
  max-width: 760px !important;
  text-align: center !important;
  float: none !important;
}

/* ===== body reading measure + text ===== */

#confSectionsBox .confBodyBox {
  order: 2;
  float: none !important;
  width: var(--qcqft-body-width) !important;
  max-width: none !important;
  margin: 0 auto !important;
  color: var(--qcqft-body-ink) !important;
}

#confSectionsBox .confBodyBox .mainContent,
#confSectionsBox .confBodyBox .col2 {
  width: 100% !important;
  max-width: none !important;
  margin: 0 !important;
}

#confSectionsBox .confBodyBox p,
#confSectionsBox .confBodyBox li,
#confSectionsBox .confBodyBox dd {
  color: var(--qcqft-body-ink) !important;
  font-size: var(--qcqft-body-font-size) !important;
  line-height: var(--qcqft-body-line-height) !important;
}

#confSectionsBox .confBodyBox p {
  text-align: justify;
  text-align-last: left;
  hyphens: auto;
  overflow-wrap: break-word;
}

/* ===== mobile ===== */

@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  :root {
    --qcqft-hero-h: clamp(236px, 29vh, 304px);
    --qcqft-title-size: clamp(22px, 6.2vw, 32px);
    --qcqft-gap-title-formula: clamp(12px, 1.8vh, 18px);
    --qcqft-gap-formula-meta: clamp(10px, 1.5vh, 16px);

    --qcqft-body-width: var(--qcqft-body-width-mobile);
    --qcqft-body-font-size: var(--qcqft-body-font-size-mobile);
    --qcqft-body-line-height: var(--qcqft-body-line-height-mobile);
  }

  .confheader .confTitleBox {
    background:
      var(--qcqft-formula-url-mobile)
      center calc(100% - 2px)
      / min(92vw, 640px) auto
      no-repeat !important;
    padding-bottom: calc(clamp(44px, 6vh, 58px) + 12px) !important;
  }

  .confheader .confSubTitleBox .confSubTitleContent.flexrow {
    grid-template-columns: 1fr !important;
    row-gap: 0.5rem;
  }

  .confheader .confSubTitleBox .confSubTitleContent.flexrow .confSubTitle,
  .confheader .confSubTitleBox .confSubTitleContent.flexrow #event-search-box {
    grid-column: 1;
    justify-self: center;
  }

  .confheader .confSubTitleBox .confSubTitleContent.flexrow #event-search-box {
    width: min(520px, 100%);
  }

  #confSectionsBox .conf_leftMenu {
    margin: 0 auto var(--qcqft-menu-bottom-gap-mobile) !important;
    padding: 0 0.9rem !important;
  }

  #confSectionsBox .conf_leftMenu > ul#outer {
    gap: var(--qcqft-menu-gap-mobile) !important;
  }

  #confSectionsBox .conf_leftMenu .menuConfTitle > a,
  #confSectionsBox .conf_leftMenu .menuConfMiddleCell > a {
    font-size: var(--qcqft-menu-font-size-mobile) !important;
    padding-bottom: 0.30rem !important;
  }

  #confSectionsBox .conf_leftMenu ul.inner,
  #confSectionsBox .conf_leftMenu ul ul {
    display: flex !important;
    flex-direction: row !important;
    justify-content: center !important;
    align-items: center !important;
    flex-wrap: wrap !important;
    gap: var(--qcqft-menu-gap-mobile) !important;
    list-style: none !important;
    margin: 0.15rem 0 0 0 !important;
    padding: 0 !important;
  }

  #confSectionsBox .conf_leftMenu ul.inner a,
  #confSectionsBox .conf_leftMenu ul ul a {
    padding: 0.08rem 0.10rem 0.30rem !important;
    font-size: var(--qcqft-menu-sub-font-size-mobile) !important;
  }

  #confSectionsBox .confBodyBox p,
  #confSectionsBox .confBodyBox p *,
  #confSectionsBox .confBodyBox li,
  #confSectionsBox .confBodyBox li *,
  #confSectionsBox .confBodyBox dd,
  #confSectionsBox .confBodyBox dd * {
    font-size: var(--qcqft-body-font-size) !important;
    line-height: var(--qcqft-body-line-height) !important;
  }
}

/* ===== readability patch: keep justify ===== */
:root {
  --qcqft-body-ink: rgba(20, 38, 56, 0.82);
  --qcqft-body-line-height: 1.78;
  --qcqft-body-line-height-mobile: 1.82;
}

#confSectionsBox .confBodyBox {
  width: 91% !important;
  max-width: 900px !important;
}

#confSectionsBox .confBodyBox p {
  text-align: justify !important;
  text-align-last: left !important;
  text-justify: inter-word !important;
  hyphens: auto !important;
  margin: 0 0 1.0em 0 !important;
}

#confSectionsBox .confBodyBox ul,
#confSectionsBox .confBodyBox ol {
  margin: 0.35em 0 0.95em 1.15em !important;
}

@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox {
    width: 95% !important;
    max-width: none !important;
  }
}

/* ===== soft accent patch ===== */
:root {
  --qcqft-accent: #4257c9;
  --qcqft-accent-ink: #20345c;
  --qcqft-accent-soft: rgba(66, 87, 201, 0.085);
  --qcqft-accent-soft-2: rgba(66, 87, 201, 0.04);
  --qcqft-accent-rule: rgba(66, 87, 201, 0.20);
}

/* 1) very light header wash */
.confheader {
  background:
    linear-gradient(
      180deg,
      rgba(66, 87, 201, 0.055) 0%,
      rgba(66, 87, 201, 0.025) 38%,
      rgba(255, 255, 255, 0.0) 100%
    ),
    linear-gradient(
      90deg,
      rgba(20, 38, 56, 0.018) 0%,
      rgba(255, 255, 255, 0.0) 18%,
      rgba(255, 255, 255, 0.0) 82%,
      rgba(20, 38, 56, 0.018) 100%
    ),
    var(--qcqft-header-bg) !important;
}

/* 2) overview / body headings */
#confSectionsBox .confBodyBox h2 {
  color: var(--qcqft-header-ink) !important;
  letter-spacing: 0.01em !important;
}

#confSectionsBox .confBodyBox h3 {
  color: var(--qcqft-accent-ink) !important;
  border-left-color: var(--qcqft-accent) !important;
  background:
    linear-gradient(
      90deg,
      var(--qcqft-accent-soft) 0%,
      rgba(255, 255, 255, 0) 74%
    ) !important;
  padding: 0.12em 0 0.12em 10px !important;
  border-radius: 2px !important;
}

#confSectionsBox .confBodyBox h4 {
  color: rgba(20, 38, 56, 0.84) !important;
}

/* 3) links and small accents */
#confSectionsBox .confBodyBox a {
  color: #3450b8 !important;
  text-decoration-color: rgba(66, 87, 201, 0.30) !important;
}

#confSectionsBox .confBodyBox a:hover {
  color: #263f9f !important;
  text-decoration-color: rgba(66, 87, 201, 0.55) !important;
}

/* ===== header colorwash patch ===== */
:root {
  --qcqft-header-wash-indigo: rgba(73, 92, 206, 0.14);
  --qcqft-header-wash-blue: rgba(93, 132, 214, 0.10);
  --qcqft-header-wash-cyan: rgba(95, 162, 204, 0.075);
  --qcqft-header-wash-edge: rgba(20, 38, 56, 0.020);
}

/* keep the clean white base, but add a slightly richer academic wash */
.confheader {
  background-color: var(--qcqft-header-bg) !important;
}

.confheader::before {
  content: "" !important;
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(
      1040px 300px at 8% 0%,
      var(--qcqft-header-wash-indigo) 0%,
      rgba(73, 92, 206, 0.075) 24%,
      rgba(73, 92, 206, 0.00) 68%
    ),
    radial-gradient(
      920px 280px at 92% 6%,
      var(--qcqft-header-wash-cyan) 0%,
      rgba(95, 162, 204, 0.048) 30%,
      rgba(95, 162, 204, 0.00) 74%
    ),
    linear-gradient(
      180deg,
      var(--qcqft-header-wash-blue) 0%,
      rgba(93, 132, 214, 0.048) 26%,
      rgba(255, 255, 255, 0.00) 100%
    ),
    linear-gradient(
      90deg,
      var(--qcqft-header-wash-edge) 0%,
      rgba(255, 255, 255, 0.00) 14%,
      rgba(255, 255, 255, 0.00) 86%,
      var(--qcqft-header-wash-edge) 100%
    );
}

/* slightly soften the formula band against the richer header wash */
.confheader .confTitleBox {
  background:
    linear-gradient(
      180deg,
      rgba(255, 255, 255, 0.18) 0%,
      rgba(255, 255, 255, 0.06) 55%,
      rgba(255, 255, 255, 0.00) 100%
    ),
    var(--qcqft-formula-url)
    center calc(100% - 2px)
    / min(1100px, 82vw) auto
    no-repeat !important;
}

/* very subtle color support for the subtitle/meta row */
.confheader .confSubTitleBox .confSubTitleContent.flexrow {
  background:
    linear-gradient(
      90deg,
      rgba(66, 87, 201, 0.032) 0%,
      rgba(255, 255, 255, 0.00) 18%,
      rgba(255, 255, 255, 0.00) 82%,
      rgba(66, 87, 201, 0.032) 100%
    ) !important;
  border-radius: 8px;
}

@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  .confheader::before {
    background:
      radial-gradient(
        560px 220px at 12% 0%,
        rgba(73, 92, 206, 0.12) 0%,
        rgba(73, 92, 206, 0.055) 30%,
        rgba(73, 92, 206, 0.00) 72%
      ),
      radial-gradient(
        520px 190px at 88% 4%,
        rgba(95, 162, 204, 0.065) 0%,
        rgba(95, 162, 204, 0.030) 32%,
        rgba(95, 162, 204, 0.00) 78%
      ),
      linear-gradient(
        180deg,
        rgba(93, 132, 214, 0.075) 0%,
        rgba(93, 132, 214, 0.028) 30%,
        rgba(255, 255, 255, 0.00) 100%
      );
  }
}

/* ===== header colorwash patch v2: stronger + seamless ===== */
:root {
  --qcqft-header-wash-indigo: rgba(73, 92, 206, 0.18);
  --qcqft-header-wash-blue: rgba(93, 132, 214, 0.13);
  --qcqft-header-wash-cyan: rgba(95, 162, 204, 0.10);
  --qcqft-header-wash-edge: rgba(20, 38, 56, 0.018);
  --qcqft-header-wash-center: rgba(114, 126, 222, 0.060);
}

/* Put the color entirely on one header-wide layer to avoid seams
   between the title band and the meta band. */
.confheader {
  background-color: var(--qcqft-header-bg) !important;
}

.confheader::before {
  content: "" !important;
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(
      1120px 340px at 6% 0%,
      rgba(73, 92, 206, 0.18) 0%,
      rgba(73, 92, 206, 0.10) 22%,
      rgba(73, 92, 206, 0.040) 44%,
      rgba(73, 92, 206, 0.00) 70%
    ),
    radial-gradient(
      980px 300px at 94% 4%,
      rgba(95, 162, 204, 0.10) 0%,
      rgba(95, 162, 204, 0.052) 28%,
      rgba(95, 162, 204, 0.00) 76%
    ),
    radial-gradient(
      860px 190px at 50% 34%,
      rgba(114, 126, 222, 0.060) 0%,
      rgba(114, 126, 222, 0.032) 36%,
      rgba(114, 126, 222, 0.00) 74%
    ),
    linear-gradient(
      180deg,
      rgba(93, 132, 214, 0.13) 0%,
      rgba(93, 132, 214, 0.060) 24%,
      rgba(255, 255, 255, 0.00) 62%
    ),
    linear-gradient(
      90deg,
      rgba(20, 38, 56, 0.018) 0%,
      rgba(255, 255, 255, 0.00) 14%,
      rgba(255, 255, 255, 0.00) 86%,
      rgba(20, 38, 56, 0.018) 100%
    ) !important;
}

/* Remove local band washes that can create visible boundaries. */
.confheader .confTitleBox {
  background:
    var(--qcqft-formula-url)
    center calc(100% - 2px)
    / min(1100px, 82vw) auto
    no-repeat !important;
}

.confheader .confSubTitleBox,
.confheader .confSubTitleBox .confSubTitleContent,
.confheader .confSubTitleBox .confSubTitleContent.flexrow {
  background: transparent !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  .confheader::before {
    background:
      radial-gradient(
        620px 240px at 10% 0%,
        rgba(73, 92, 206, 0.16) 0%,
        rgba(73, 92, 206, 0.072) 30%,
        rgba(73, 92, 206, 0.00) 72%
      ),
      radial-gradient(
        560px 210px at 90% 4%,
        rgba(95, 162, 204, 0.085) 0%,
        rgba(95, 162, 204, 0.038) 32%,
        rgba(95, 162, 204, 0.00) 78%
      ),
      radial-gradient(
        420px 120px at 50% 30%,
        rgba(114, 126, 222, 0.050) 0%,
        rgba(114, 126, 222, 0.022) 34%,
        rgba(114, 126, 222, 0.00) 72%
      ),
      linear-gradient(
        180deg,
        rgba(93, 132, 214, 0.10) 0%,
        rgba(93, 132, 214, 0.040) 28%,
        rgba(255, 255, 255, 0.00) 100%
      ) !important;
  }
}


/* ===== Indico 3.3 menu compatibility patch ===== */
/* After the 3.3 upgrade, the event-page menu markup appears to no longer match
   the older ul#outer / menuConfTitle / menuConfMiddleCell structure everywhere.
   Keep the old rules above, but add broader fallbacks so the top-level page menu
   stays centered and horizontal even if Indico renders a flatter/newer list/nav. */

#confSectionsBox .conf_leftMenu > ul,
#confSectionsBox .conf_leftMenu > div > ul,
#confSectionsBox .conf_leftMenu nav > ul,
#confSectionsBox .conf_leftMenu .page-list,
#confSectionsBox .conf_leftMenu .event-page-nav > ul,
#confSectionsBox .conf_leftMenu .event-page-header > ul {
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: var(--qcqft-menu-gap) !important;
  list-style: none !important;
  margin: 0 auto !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}

#confSectionsBox .conf_leftMenu > div,
#confSectionsBox .conf_leftMenu nav,
#confSectionsBox .conf_leftMenu .page-list,
#confSectionsBox .conf_leftMenu .event-page-nav,
#confSectionsBox .conf_leftMenu .event-page-header {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}

#confSectionsBox .conf_leftMenu > ul > li,
#confSectionsBox .conf_leftMenu > div > ul > li,
#confSectionsBox .conf_leftMenu nav > ul > li,
#confSectionsBox .conf_leftMenu .page-list > li,
#confSectionsBox .conf_leftMenu .event-page-nav > ul > li,
#confSectionsBox .conf_leftMenu .event-page-header > ul > li,
#confSectionsBox .conf_leftMenu .page-list > * {
  float: none !important;
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
}

#confSectionsBox .conf_leftMenu > ul > li > a,
#confSectionsBox .conf_leftMenu > div > ul > li > a,
#confSectionsBox .conf_leftMenu nav > ul > li > a,
#confSectionsBox .conf_leftMenu .page-list > li > a,
#confSectionsBox .conf_leftMenu .event-page-nav > ul > li > a,
#confSectionsBox .conf_leftMenu .event-page-header > ul > li > a,
#confSectionsBox .conf_leftMenu .page-list a {
  display: inline-block !important;
  padding: 0.10rem 0.10rem 0.34rem !important;
  color: var(--qcqft-menu-ink) !important;
  text-decoration: none !important;
  line-height: 1.22 !important;
  font-weight: var(--qcqft-menu-weight) !important;
  font-size: var(--qcqft-menu-font-size) !important;
  border-bottom: var(--qcqft-menu-underline) solid transparent !important;
  background: transparent !important;
  transition:
    color 120ms ease,
    border-color 120ms ease,
    border-bottom-width 120ms ease,
    font-weight 120ms ease;
}

#confSectionsBox .conf_leftMenu > ul > li > a:hover,
#confSectionsBox .conf_leftMenu > div > ul > li > a:hover,
#confSectionsBox .conf_leftMenu nav > ul > li > a:hover,
#confSectionsBox .conf_leftMenu .page-list > li > a:hover,
#confSectionsBox .conf_leftMenu .event-page-nav > ul > li > a:hover,
#confSectionsBox .conf_leftMenu .event-page-header > ul > li > a:hover,
#confSectionsBox .conf_leftMenu .page-list a:hover {
  color: var(--qcqft-menu-ink-active) !important;
  border-bottom-color: rgba(20, 38, 56, 0.62) !important;
}

#confSectionsBox .conf_leftMenu li[class*="Selected"] > a,
#confSectionsBox .conf_leftMenu li.selected > a,
#confSectionsBox .conf_leftMenu li.active > a,
#confSectionsBox .conf_leftMenu a[aria-current="page"],
#confSectionsBox .conf_leftMenu .current > a {
  color: var(--qcqft-menu-ink-active) !important;
  font-weight: var(--qcqft-menu-weight-active) !important;
  border-bottom-color: rgba(20, 38, 56, 0.92) !important;
  border-bottom-width: var(--qcqft-menu-underline-active) !important;
}

@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .conf_leftMenu > ul,
  #confSectionsBox .conf_leftMenu > div > ul,
  #confSectionsBox .conf_leftMenu nav > ul,
  #confSectionsBox .conf_leftMenu .page-list,
  #confSectionsBox .conf_leftMenu .event-page-nav > ul,
  #confSectionsBox .conf_leftMenu .event-page-header > ul {
    gap: var(--qcqft-menu-gap-mobile) !important;
  }

  #confSectionsBox .conf_leftMenu > ul > li > a,
  #confSectionsBox .conf_leftMenu > div > ul > li > a,
  #confSectionsBox .conf_leftMenu nav > ul > li > a,
  #confSectionsBox .conf_leftMenu .page-list > li > a,
  #confSectionsBox .conf_leftMenu .event-page-nav > ul > li > a,
  #confSectionsBox .conf_leftMenu .event-page-header > ul > li > a,
  #confSectionsBox .conf_leftMenu .page-list a {
    font-size: var(--qcqft-menu-font-size-mobile) !important;
  }
}

/* ===== hosted-by card patch v22 ===== */
/* Use this with the HTML block:

<div class="qcqft-hosted-card">
  <p class="qcqft-hosted-text">
    <strong>Particle Theory and Cosmology Group (PTC)</strong><br>
    Center for Theoretical Physics of the Universe (CTPU)<br>
    Institute for Basic Science (IBS)
  </p>
  <p class="qcqft-hosted-logo">
    <img class="image_resized" src="/event/1238/attachments/5725/8940/IBS_logo_transparent.png" alt="Institute for Basic Science logo">
  </p>
</div>

*/

#confSectionsBox .confBodyBox .qcqft-hosted-card {
  background-color: #fdfefe !important;
  border: 1px solid #f0f3f8 !important;
  border-radius: 8px !important;
  margin: 0.5em 0 1.4em 0 !important;
  padding: 1em 1.2em !important;
  box-sizing: border-box !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-card p {
  text-align: left !important;
  text-align-last: left !important;
  margin: 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-text {
  color: rgba(20, 38, 56, 0.88) !important;
  font-size: 1.18rem !important;
  line-height: 1.42 !important;
  margin: 0 0 0.85em 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-text strong {
  color: #172eb2 !important;
  font-weight: 700 !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-logo {
  margin: 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-logo img {
  display: block !important;
  width: 100% !important;
  max-width: 200px !important;
  height: auto !important;
  margin: 0 !important;
}

@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox .qcqft-hosted-card {
    padding: 0.9em 1em !important;
  }

  #confSectionsBox .confBodyBox .qcqft-hosted-text {
    font-size: 1.08rem !important;
    line-height: 1.42 !important;
  }

  #confSectionsBox .confBodyBox .qcqft-hosted-logo img {
    max-width: 180px !important;
  }
}

/* ===== list spacing refinement ===== */

#confSectionsBox .confBodyBox ul,
#confSectionsBox .confBodyBox ol {
  margin: 0.45em 0 1.05em 1.75em !important;
  padding-left: 0.65em !important;
}

#confSectionsBox .confBodyBox li {
  padding-left: 0.15em !important;
  margin-bottom: 0.08em !important;
}

#confSectionsBox .confBodyBox li::marker {
  color: rgba(20, 38, 56, 0.72);
}

/* ===== title-size restore patch v22 ===== */
/* Keep the enlarged desktop title after later patches. */
:root {
  --qcqft-title-size: clamp(32px, 3.0vw, 52px);
  --qcqft-gap-title-formula: clamp(24px, 2.8vh, 32px);
}

/* Mobile: avoid a single orphan word while keeping the title readable. */
@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  :root {
    --qcqft-title-size: clamp(22px, 6.0vw, 31px);
  }

  .confheader .confTitleBox,
  .confheader .confTitleBox .confTitle,
  .confheader .confTitleBox .confTitle h1 {
    line-height: 1.08 !important;
  }
}

/* ===== transparent IBS logo override ===== */
#confSectionsBox .confBodyBox .qcqft-hosted-logo img {
  background: transparent !important;
  border: 0 !important;
  padding: 0 !important;
  max-width: 220px !important;
}


/* ===== hosted-by card near-invisible tone override ===== */
#confSectionsBox .confBodyBox .qcqft-hosted-card {
  background-color: #fdfefe !important;
  border: 1px solid #f0f3f8 !important;
}

/* ===== hosted-by card glass tone v23 ===== */
/* Supersedes the near-invisible v22 card while keeping the same HTML classes. */
#confSectionsBox .confBodyBox .qcqft-hosted-card {
  position: relative !important;
  overflow: hidden !important;
  background-color: rgba(255, 255, 255, 0.58) !important;
  border: 1px solid rgba(66, 87, 201, 0.14) !important;
  border-radius: 10px !important;
  margin: 0.5em 0 1.4em 0 !important;
  padding: 1em 1.2em !important;
  box-sizing: border-box !important;
  backdrop-filter: blur(10px) saturate(115%) !important;
  -webkit-backdrop-filter: blur(10px) saturate(115%) !important;
  box-shadow:
    0 8px 22px rgba(20, 38, 56, 0.045),
    inset 0 1px 0 rgba(255, 255, 255, 0.85) !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-card::before {
  content: "" !important;
  position: absolute !important;
  inset: 0 !important;
  pointer-events: none !important;
  border-radius: inherit !important;
  background:
    linear-gradient(
      135deg,
      rgba(255, 255, 255, 0.42) 0%,
      rgba(255, 255, 255, 0.08) 42%,
      rgba(66, 87, 201, 0.035) 100%
    ) !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-card > * {
  position: relative !important;
  z-index: 1 !important;
}

/* ===== hosted-by text hierarchy v23 ===== */
/* PTC remains the primary host line; CTPU is emphasized as the center line.
   IBS is represented by the transparent IBS logo in the HTML. */
#confSectionsBox .confBodyBox .qcqft-hosted-text .qcqft-hosted-center {
  color: #20345c !important;
  font-weight: 650 !important;
}

#confSectionsBox .confBodyBox .qcqft-hosted-text {
  margin: 0 0 0.72em 0 !important;
}


/* ==========================================================================
   Lecturers & Speakers page additions
   ========================================================================== */

/* ===== Lecturers & Speakers page additions — integrated v23-aligned block =====
   This block is intentionally placed AFTER the main v23 layout CSS.
   It replaces the older standalone lecturers_speakers_css_additions.css. */

#confSectionsBox .confBodyBox .qcqft-speakers-page {
  --qcqft-speaker-ink: var(--qcqft-body-ink, rgba(20, 38, 56, 0.84));
  --qcqft-speaker-ink-strong: var(--qcqft-header-ink, #142638);
  --qcqft-speaker-muted: rgba(20, 38, 56, 0.66);
  --qcqft-speaker-muted-2: rgba(20, 38, 56, 0.56);
  --qcqft-speaker-accent: var(--qcqft-accent, #4257c9);
  --qcqft-speaker-accent-ink: var(--qcqft-accent-ink, #20345c);
  --qcqft-speaker-rule: rgba(66, 87, 201, 0.15);
  --qcqft-speaker-rule-strong: rgba(66, 87, 201, 0.26);
  --qcqft-speaker-surface: rgba(255, 255, 255, 0.62);
  --qcqft-speaker-surface-soft: rgba(248, 250, 254, 0.82);
  --qcqft-speaker-radius: 10px;
  --qcqft-speaker-shadow: 0 8px 22px rgba(20, 38, 56, 0.045), inset 0 1px 0 rgba(255, 255, 255, 0.80);
  color: var(--qcqft-speaker-ink) !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page,
#confSectionsBox .confBodyBox .qcqft-speakers-page * {
  box-sizing: border-box !important;
}

/* The main v23 CSS justifies all body paragraphs.  Profiles read better left-aligned. */
#confSectionsBox .confBodyBox .qcqft-speakers-page p {
  text-align: left !important;
  text-align-last: left !important;
  hyphens: none !important;
  overflow-wrap: break-word !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-intro {
  position: relative !important;
  overflow: hidden !important;
  color: var(--qcqft-speaker-ink) !important;
  background: var(--qcqft-speaker-surface) !important;
  border: 1px solid var(--qcqft-speaker-rule) !important;
  border-radius: var(--qcqft-speaker-radius) !important;
  box-shadow: var(--qcqft-speaker-shadow) !important;
  backdrop-filter: blur(10px) saturate(115%) !important;
  -webkit-backdrop-filter: blur(10px) saturate(115%) !important;
  font-size: 1.05rem !important;
  line-height: 1.64 !important;
  margin: 0 0 1.25rem 0 !important;
  padding: 0.95rem 1.05rem !important;
}

#confSectionsBox .confBodyBox .qcqft-section-note {
  color: var(--qcqft-speaker-muted) !important;
  font-size: 1.03rem !important;
  line-height: 1.62 !important;
  margin: 0 0 1.05rem 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-section {
  margin: 0 0 2.15rem 0 !important;
}

/* Keep the h3 style supplied by the v23 main CSS; only adjust page-specific spacing. */
#confSectionsBox .confBodyBox .qcqft-speaker-section h3 {
  margin-top: 1.15rem !important;
  margin-bottom: 0.55rem !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-grid {
  display: grid !important;
  grid-template-columns: 1fr !important;
  gap: 0.95rem !important;
  margin: 0.85rem 0 0 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card {
  position: relative !important;
  display: grid !important;
  grid-template-columns: clamp(112px, 17vw, 150px) minmax(0, 1fr) !important;
  gap: clamp(0.85rem, 2vw, 1.15rem) !important;
  align-items: start !important;
  overflow: hidden !important;
  background: var(--qcqft-speaker-surface) !important;
  border: 1px solid var(--qcqft-speaker-rule) !important;
  border-radius: var(--qcqft-speaker-radius) !important;
  box-shadow: var(--qcqft-speaker-shadow) !important;
  backdrop-filter: blur(10px) saturate(115%) !important;
  -webkit-backdrop-filter: blur(10px) saturate(115%) !important;
  padding: clamp(0.9rem, 2vw, 1.12rem) !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card::before {
  content: "" !important;
  position: absolute !important;
  inset: 0 !important;
  pointer-events: none !important;
  background:
    linear-gradient(
      135deg,
      rgba(255, 255, 255, 0.42) 0%,
      rgba(255, 255, 255, 0.08) 44%,
      rgba(66, 87, 201, 0.035) 100%
    ) !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card > * {
  position: relative !important;
  z-index: 1 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-figure {
  inline-size: 100% !important;
  aspect-ratio: 1 / 1 !important;
  margin: 0 !important;
  overflow: hidden !important;
  border-radius: calc(var(--qcqft-speaker-radius) - 1px) !important;
  background:
    linear-gradient(180deg, rgba(66, 87, 201, 0.055), rgba(248, 250, 254, 0.92)) !important;
  border: 1px solid rgba(20, 38, 56, 0.10) !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.78) !important;
}

/* Put the fixed size on the frame and fill it with the image.  This is more robust than
   asking the img itself to keep an aspect ratio, especially inside Indico/CKEditor output. */
#confSectionsBox .confBodyBox .qcqft-speaker-photo {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  max-width: none !important;
  object-fit: cover !important;
  object-position: center top !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  padding: 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-photo--center {
  object-position: center center !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-photo--contain,
#confSectionsBox .confBodyBox .qcqft-speaker-photo-contain {
  object-fit: contain !important;
  object-position: center center !important;
  padding: 0.65rem !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-body {
  min-width: 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card p {
  color: var(--qcqft-speaker-ink) !important;
  font-size: 0.98rem !important;
  line-height: 1.58 !important;
  margin: 0 0 0.68rem 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card p * {
  font-size: inherit !important;
  line-height: inherit !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-role {
  color: var(--qcqft-speaker-accent) !important;
  font-size: 0.86rem !important;
  line-height: 1.35 !important;
  font-weight: 750 !important;
  letter-spacing: 0.01em !important;
  margin: 0 0 0.20rem 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-name {
  color: var(--qcqft-speaker-ink-strong) !important;
  font-size: clamp(1.20rem, 2vw, 1.40rem) !important;
  line-height: 1.22 !important;
  margin: 0 0 0.25rem 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-affiliation {
  color: var(--qcqft-speaker-muted) !important;
  font-size: 0.96rem !important;
  line-height: 1.48 !important;
  margin: 0 0 0.70rem 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card strong {
  color: rgba(20, 38, 56, 0.94) !important;
  font-weight: 700 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-area {
  color: var(--qcqft-speaker-muted) !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-context {
  background: var(--qcqft-speaker-surface-soft) !important;
  border: 1px solid rgba(66, 87, 201, 0.12) !important;
  border-left: 3px solid var(--qcqft-speaker-rule-strong) !important;
  border-radius: 7px !important;
  padding: 0.55rem 0.70rem !important;
  margin-bottom: 0.72rem !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-links {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 0.42rem !important;
  margin: 0.22rem 0 0 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-links a {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 1.85rem !important;
  padding: 0.24rem 0.62rem !important;
  color: #27449f !important;
  background: rgba(66, 87, 201, 0.075) !important;
  border: 1px solid rgba(66, 87, 201, 0.18) !important;
  border-radius: 999px !important;
  text-decoration: none !important;
  text-decoration-color: transparent !important;
  font-size: 0.86rem !important;
  line-height: 1.20 !important;
  font-weight: 650 !important;
}

#confSectionsBox .confBodyBox .qcqft-speaker-links a:hover,
#confSectionsBox .confBodyBox .qcqft-speaker-links a:focus-visible {
  color: #203985 !important;
  background: rgba(66, 87, 201, 0.12) !important;
  border-color: rgba(66, 87, 201, 0.30) !important;
  outline: none !important;
}

@media (max-width: 720px) {
  #confSectionsBox .confBodyBox .qcqft-speakers-intro,
  #confSectionsBox .confBodyBox .qcqft-section-note {
    font-size: 0.98rem !important;
    line-height: 1.60 !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speaker-card {
    grid-template-columns: 94px minmax(0, 1fr) !important;
    gap: 0.78rem !important;
    padding: 0.82rem !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speaker-card p,
  #confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-affiliation {
    font-size: 0.93rem !important;
    line-height: 1.55 !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-role,
  #confSectionsBox .confBodyBox .qcqft-speaker-links a {
    font-size: 0.82rem !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-name {
    font-size: 1.15rem !important;
  }
}

@media (max-width: 540px) {
  #confSectionsBox .confBodyBox .qcqft-speaker-card {
    grid-template-columns: 1fr !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speaker-figure {
    inline-size: min(148px, 44vw) !important;
  }
}


/* ===== Jesse Stryker photo whitespace fix ===== */
/* The source PNG has a large white canvas around the actual photo.  This class
   zooms only that image inside the existing square frame, without changing the
   layout of other speaker photos. */
#confSectionsBox .confBodyBox .qcqft-speaker-photo--jesse-crop {
  transform: scale(2.35) !important;
  transform-origin: 46% 43% !important;
}


/* ===== Jongchul Mun photo landscape/contain fix ===== */
/* The KRISS lab photo is landscape-oriented. This class fills the same square
   frame as the other portraits and anchors the crop toward Dr. Mun on the left. */
#confSectionsBox .confBodyBox .qcqft-speaker-photo--mun-crop {
  object-fit: cover !important;
  object-position: 30% 50% !important;
  padding: 0 !important;
  transform: none !important;
}

/* ===== speaker talk-title emphasis patch v2 =====
   The previous small-title rule was more specific:
   #confSectionsBox .confBodyBox .qcqft-speaker-card .qcqft-speaker-role
   so this patch intentionally uses an even more specific selector and comes last. */

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
  color: #20345c !important;
  font-size: clamp(1.28rem, 1.55vw, 1.42rem) !important;
  line-height: 1.24 !important;
  font-weight: 800 !important;
  letter-spacing: -0.018em !important;
  margin: 0 0 0.52rem 0 !important;
  text-align: left !important;
  text-align-last: left !important;
  hyphens: none !important;
  text-wrap: balance !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
  color: rgba(20, 38, 56, 0.96) !important;
  font-size: clamp(1.36rem, 1.70vw, 1.50rem) !important;
  line-height: 1.18 !important;
  font-weight: 760 !important;
  margin: 0 0 0.34rem 0 !important;
}

/* Keep affiliation visually below the title/name pair. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-affiliation {
  margin-top: 0 !important;
}

@media (max-width: 720px) {
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
    font-size: clamp(1.08rem, 4.2vw, 1.20rem) !important;
    line-height: 1.27 !important;
    margin-bottom: 0.42rem !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
    font-size: clamp(1.16rem, 4.8vw, 1.30rem) !important;
    line-height: 1.20 !important;
  }
}
/* ===== speaker-page readability patch v3 =====
   Purpose: make the Lecturers / Colloquium Speakers cards read closer to the
   Overview / Program pages while preserving the card layout.
   Put this at the very end of the single Indico layout CSS file. */

/* Speaker pages need a slightly wider reading measure than the generic 900px body,
   because each card spends 150-190px on the portrait. :has() is supported in current
   Chrome/Edge/Safari/Firefox; older browsers simply ignore this width-only refinement. */
#confSectionsBox .confBodyBox:has(.qcqft-speakers-page) {
  width: 94% !important;
  max-width: 1040px !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page {
  --qcqft-speaker-copy-size: clamp(1.08rem, 1.04vw, 1.15rem);
  --qcqft-speaker-copy-leading: 1.66;
  --qcqft-speaker-muted-copy-size: clamp(1.04rem, 1.00vw, 1.10rem);
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speakers-intro,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-section-note {
  font-size: clamp(1.17rem, 1.26vw, 1.28rem) !important;
  line-height: 1.68 !important;
  margin: 0 0 1.25rem 0 !important;
  color: rgba(20, 38, 56, 0.76) !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-grid {
  gap: 1.18rem !important;
  margin-top: 1.05rem !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card {
  grid-template-columns: clamp(150px, 18vw, 190px) minmax(0, 1fr) !important;
  gap: clamp(1.12rem, 2.2vw, 1.50rem) !important;
  padding: clamp(1.12rem, 2.1vw, 1.38rem) !important;
}

/* General body copy inside speaker cards. Keep it below the global Overview size,
   but no longer small/caption-like. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p:not(.qcqft-speaker-role):not(.qcqft-speaker-links),
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-area,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-context {
  font-size: var(--qcqft-speaker-copy-size) !important;
  line-height: var(--qcqft-speaker-copy-leading) !important;
  margin-bottom: 0.82rem !important;
  letter-spacing: -0.002em !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-affiliation {
  font-size: var(--qcqft-speaker-muted-copy-size) !important;
  line-height: 1.56 !important;
  margin-bottom: 0.86rem !important;
  color: rgba(20, 38, 56, 0.68) !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-area {
  color: rgba(20, 38, 56, 0.76) !important;
}

/* Talk/session title: large enough to read as a title, not as a small label. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
  font-size: clamp(1.34rem, 1.62vw, 1.50rem) !important;
  line-height: 1.25 !important;
  font-weight: 800 !important;
  letter-spacing: -0.018em !important;
  margin: 0 0 0.56rem 0 !important;
  color: #20345c !important;
  text-wrap: balance !important;
}

/* Speaker name: still slightly dominant, but not overwhelmingly so. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
  font-size: clamp(1.44rem, 1.75vw, 1.60rem) !important;
  line-height: 1.18 !important;
  font-weight: 760 !important;
  margin: 0 0 0.40rem 0 !important;
  color: rgba(20, 38, 56, 0.96) !important;
}

/* Link pills should not look like footnotes. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links {
  gap: 0.50rem !important;
  margin-top: 0.28rem !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links a {
  font-size: 0.98rem !important;
  line-height: 1.24 !important;
  min-height: 2.08rem !important;
  padding: 0.30rem 0.72rem !important;
}

@media (max-width: 720px) {
  #confSectionsBox .confBodyBox:has(.qcqft-speakers-page) {
    width: 95% !important;
    max-width: none !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speakers-intro,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-section-note {
    font-size: 1.06rem !important;
    line-height: 1.64 !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card {
    grid-template-columns: 112px minmax(0, 1fr) !important;
    gap: 0.92rem !important;
    padding: 0.96rem !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p:not(.qcqft-speaker-role):not(.qcqft-speaker-links),
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-area,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-context,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-affiliation {
    font-size: 1.00rem !important;
    line-height: 1.60 !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
    font-size: clamp(1.12rem, 4.8vw, 1.28rem) !important;
    line-height: 1.28 !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
    font-size: clamp(1.22rem, 5.2vw, 1.38rem) !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links a {
    font-size: 0.92rem !important;
    min-height: 2.0rem !important;
  }
}

@media (max-width: 540px) {
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card {
    grid-template-columns: 1fr !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-figure {
    inline-size: min(172px, 48vw) !important;
  }
}


/* ===== speaker-card alignment + calmer talk-title patch v4 =====
   Add this at the very end of the single Indico layout CSS file.

   Goals:
   1) Speaker-card text fills the available width using justified alignment,
      while the last / underfull line falls back to left alignment.
   2) Lecture / colloquium title line is about 90% of the speaker-name size,
      lighter in color and weight, so it reads as a talk title rather than a
      second competing name line.
*/

/* Wider card pages remain useful after increasing text density. */
#confSectionsBox .confBodyBox:has(.qcqft-speakers-page) {
  width: 94% !important;
  max-width: 1040px !important;
}

/* Justify all descriptive text in the speaker cards, with the last/short line left. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-body p:not(.qcqft-speaker-links),
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-area,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-context {
  text-align: justify !important;
  text-align-last: left !important;
  text-justify: inter-word !important;
  hyphens: auto !important;
  overflow-wrap: break-word !important;
}

/* Also justify the page-level intro/notes so the speaker pages match Overview/Program. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speakers-intro,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-section-note {
  text-align: justify !important;
  text-align-last: left !important;
  text-justify: inter-word !important;
  hyphens: auto !important;
  overflow-wrap: break-word !important;
}

/* Talk/session title: close to the name size, but calmer and visibly distinct. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
  color: #5368c9 !important;
  font-size: clamp(1.24rem, 1.48vw, 1.40rem) !important;
  line-height: 1.30 !important;
  font-weight: 700 !important;
  letter-spacing: -0.010em !important;
  margin: 0 0 0.44rem 0 !important;
  text-align: justify !important;
  text-align-last: left !important;
  text-justify: inter-word !important;
  text-wrap: normal !important;
}

/* Speaker name remains the primary dark anchor. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
  color: rgba(20, 38, 56, 0.96) !important;
  font-size: clamp(1.42rem, 1.72vw, 1.58rem) !important;
  line-height: 1.18 !important;
  font-weight: 760 !important;
  margin: 0 0 0.40rem 0 !important;
  text-align: left !important;
  text-align-last: left !important;
}

/* Link row should stay left-aligned; justified link labels look awkward. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links a {
  text-align: left !important;
  text-align-last: left !important;
}

@media (max-width: 720px) {
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
    font-size: clamp(1.04rem, 4.25vw, 1.18rem) !important;
    line-height: 1.32 !important;
    margin-bottom: 0.38rem !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
    font-size: clamp(1.18rem, 5.0vw, 1.34rem) !important;
  }
}
/* ===== speaker page v5: keep prose justified, but never justify talk-title/name/link lines ===== */
/* The v4 justification rule was too broad and also justified .qcqft-speaker-role,
   which stretches spaces in long Colloquium/Lecture titles. */

/* Prose-like text inside speaker cards: justified with the final line left-aligned. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p:not(.qcqft-speaker-role):not(.qcqft-speaker-links),
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-affiliation,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-area,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-context {
  text-align: justify !important;
  text-align-last: left !important;
  text-justify: inter-word !important;
  hyphens: auto !important;
  overflow-wrap: break-word !important;
}

/* Talk-title line: left-aligned, balanced if supported, and visually separated from the name. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
  text-align: left !important;
  text-align-last: left !important;
  text-justify: auto !important;
  word-spacing: normal !important;
  hyphens: none !important;
  overflow-wrap: normal !important;
  word-break: keep-all !important;
  text-wrap: balance !important;
  color: #5f73d0 !important;
  font-size: clamp(1.20rem, 1.42vw, 1.34rem) !important;
  line-height: 1.34 !important;
  font-weight: 680 !important;
  letter-spacing: -0.006em !important;
  margin: 0 0 0.46rem 0 !important;
}

/* Speaker name: keep it as the main anchor, not justified. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
  text-align: left !important;
  text-align-last: left !important;
  color: rgba(20, 38, 56, 0.96) !important;
  font-size: clamp(1.42rem, 1.72vw, 1.58rem) !important;
  line-height: 1.22 !important;
  font-weight: 760 !important;
  margin: 0 0 0.32rem 0 !important;
}

/* Links should not be justified; otherwise separators and link buttons drift apart. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links {
  text-align: left !important;
  text-align-last: left !important;
  justify-content: flex-start !important;
  word-spacing: normal !important;
}

@media (max-width: 720px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-role,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > .qcqft-speaker-role {
    font-size: clamp(1.06rem, 4.3vw, 1.18rem) !important;
    line-height: 1.34 !important;
    text-wrap: pretty !important;
  }

  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name {
    font-size: clamp(1.20rem, 4.8vw, 1.34rem) !important;
  }
}
/* ===== speaker page v6: hard reset talk-title alignment =====
   Use this at the very end of the single Indico layout CSS file.
   It overrides older v4/v5 rules that accidentally justify .qcqft-speaker-role. */

/* 1) Descriptive prose stays justified, but explicitly exclude the talk-title line. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-body p:not(.qcqft-speaker-role):not(.qcqft-speaker-links),
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-affiliation,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-area,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card p.qcqft-speaker-context {
  text-align: justify !important;
  text-align-last: left !important;
  text-justify: inter-word !important;
  hyphens: auto !important;
  overflow-wrap: break-word !important;
}

/* 2) Talk title must behave like a heading, not like body prose. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-body p.qcqft-speaker-role.qcqft-speaker-role,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > p.qcqft-speaker-role.qcqft-speaker-role {
  display: block !important;
  width: auto !important;
  max-width: 100% !important;
  text-align: left !important;
  text-align-last: left !important;
  text-justify: auto !important;
  word-spacing: 0 !important;
  letter-spacing: -0.004em !important;
  white-space: normal !important;
  word-break: normal !important;
  overflow-wrap: normal !important;
  hyphens: none !important;
  text-wrap: balance !important;

  color: #5f73d0 !important;
  font-size: clamp(1.18rem, 1.38vw, 1.32rem) !important;
  line-height: 1.32 !important;
  font-weight: 680 !important;
  margin: 0 0 0.42rem 0 !important;
}

/* 3) Speaker name remains the dark visual anchor. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name.qcqft-speaker-name,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name.qcqft-speaker-name {
  text-align: left !important;
  text-align-last: left !important;
  color: rgba(20, 38, 56, 0.96) !important;
  font-size: clamp(1.42rem, 1.72vw, 1.58rem) !important;
  line-height: 1.20 !important;
  font-weight: 760 !important;
  margin: 0 0 0.36rem 0 !important;
}

/* 4) Link row: keep separators and buttons from drifting. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links a {
  text-align: left !important;
  text-align-last: left !important;
  word-spacing: normal !important;
  justify-content: flex-start !important;
}

@media (max-width: 720px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-body p.qcqft-speaker-role.qcqft-speaker-role,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > p.qcqft-speaker-role.qcqft-speaker-role {
    font-size: clamp(1.04rem, 4.15vw, 1.16rem) !important;
    line-height: 1.34 !important;
    text-wrap: pretty !important;
  }
}


/* ===== speaker page v7: natural talk-title wrapping =====
   Put this at the very end of the single Indico layout CSS file.
   It removes text-wrap: balance/pretty from the Lecture/Colloquium title line
   so the browser uses the full available text column before wrapping. */

/* Talk title: heading-like, left aligned, natural wrapping, no justification. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-body p.qcqft-speaker-role.qcqft-speaker-role,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > p.qcqft-speaker-role.qcqft-speaker-role {
  display: block !important;
  width: 100% !important;
  max-width: none !important;

  text-align: left !important;
  text-align-last: left !important;
  text-justify: auto !important;

  /* Key change from v6: do NOT balance the lines. */
  text-wrap: wrap !important;
  white-space: normal !important;
  word-spacing: normal !important;
  letter-spacing: -0.006em !important;

  /* Keep Korean titles from breaking awkwardly inside short word units. */
  word-break: keep-all !important;
  line-break: strict !important;
  overflow-wrap: normal !important;
  hyphens: none !important;

  color: #6176d6 !important;
  font-size: clamp(1.16rem, 1.32vw, 1.30rem) !important;
  line-height: 1.30 !important;
  font-weight: 680 !important;
  margin: 0 0 0.42rem 0 !important;
}

/* Keep the speaker name as the darker anchor, slightly larger than the talk title. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card h4.qcqft-speaker-name.qcqft-speaker-name,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-name.qcqft-speaker-name {
  color: rgba(20, 38, 56, 0.96) !important;
  font-size: clamp(1.38rem, 1.66vw, 1.54rem) !important;
  line-height: 1.20 !important;
  font-weight: 760 !important;
  margin: 0 0 0.36rem 0 !important;
}

/* Body prose remains justified; title and links remain excluded. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-body p:not(.qcqft-speaker-role):not(.qcqft-speaker-links) {
  text-align: justify !important;
  text-align-last: left !important;
  text-justify: inter-word !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links,
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-links a {
  text-align: left !important;
  text-align-last: left !important;
  word-spacing: normal !important;
  justify-content: flex-start !important;
}

@media (max-width: 720px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-body p.qcqft-speaker-role.qcqft-speaker-role,
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card > .qcqft-speaker-body > p.qcqft-speaker-role.qcqft-speaker-role {
    font-size: clamp(1.02rem, 3.95vw, 1.14rem) !important;
    line-height: 1.34 !important;
    text-wrap: wrap !important;
    word-break: keep-all !important;
    overflow-wrap: anywhere !important;
  }
}


/* ===== speaker photo frame fix v8 =====
   Put this at the VERY END of the single Indico layout CSS.
   The frame, not the image, owns the square ratio. */

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-figure {
  width: 100% !important;
  aspect-ratio: 1 / 1 !important;
  margin: 0 !important;
  overflow: hidden !important;
  border-radius: 10px !important;
  background: rgba(248, 250, 254, 0.92) !important;
  border: 1px solid rgba(20, 38, 56, 0.10) !important;
  box-sizing: border-box !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-photo-link {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  line-height: 0 !important;
  text-decoration: none !important;
  border: 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card img.qcqft-speaker-photo {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  max-width: none !important;
  aspect-ratio: auto !important;
  object-fit: cover !important;
  object-position: center top !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  background: transparent !important;
  box-sizing: border-box !important;
}

/* Indrakshi's uploaded image is close to square but not exactly square;
   center-top keeps the portrait natural once the frame is truly square. */
#confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card img.qcqft-speaker-photo[src*="Indrakshi"] {
  object-position: center top !important;
}

@media (max-width: 720px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox .qcqft-speakers-page .qcqft-speaker-card .qcqft-speaker-figure {
    width: min(148px, 44vw) !important;
  }
}
/* ============================================================
   Timetable at a Glance — compact weekly table v3
   Base: ctpu_SSonQCQFT_23_integrated_lecturers_speakers_readability_v8.css
   Goals:
   - Fit the full Sun–Fri weekly table on normal desktop widths without a horizontal scrollbar.
   - Restore stronger, more distinguishable session colors.
   - Hide per-session detail/topic lines; keep only block title, speaker/organizer, and time.
   ============================================================ */

#confSectionsBox .confBodyBox:has(.qcqft-timetable) {
  width: min(98vw, 1320px) !important;
  max-width: calc(100vw - 2rem) !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable {
  --qcqft-tt-ink: #142638;
  --qcqft-tt-muted: rgba(20, 38, 56, 0.70);
  --qcqft-tt-line: rgba(20, 38, 56, 0.24);
  --qcqft-tt-line-strong: rgba(20, 38, 56, 0.46);
  --qcqft-tt-empty: #f8fafc;
  --qcqft-tt-empty-stripe: rgba(20, 38, 56, 0.035);

  --qcqft-tt-indrakshi-bg: #c9f3f8;
  --qcqft-tt-indrakshi-border: #16a5b4;
  --qcqft-tt-jesse-bg: #d9f3d3;
  --qcqft-tt-jesse-border: #36a852;
  --qcqft-tt-xiaoyang-bg: #fff0b8;
  --qcqft-tt-xiaoyang-border: #d99a00;
  --qcqft-tt-tutorial-bg: #f4d8e8;
  --qcqft-tt-tutorial-border: #bd5c8b;
  --qcqft-tt-colloquium-bg: #ded8f6;
  --qcqft-tt-colloquium-border: #7a65d8;
  --qcqft-tt-meal-bg: #f8d8b5;
  --qcqft-tt-meal-border: #c87523;
  --qcqft-tt-break-bg: #ffffff;
  --qcqft-tt-break-border: #8a96a3;
  --qcqft-tt-arrival-bg: #e9edf2;
  --qcqft-tt-arrival-border: #6f7f8f;

  width: 100% !important;
  max-width: 100% !important;
  color: var(--qcqft-tt-ink) !important;
  font-size: 1rem !important;
  line-height: 1.28 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable *,
#confSectionsBox .confBodyBox .qcqft-timetable *::before,
#confSectionsBox .confBodyBox .qcqft-timetable *::after {
  box-sizing: border-box !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-title {
  margin: 0 0 0.55rem 0 !important;
  color: var(--qcqft-tt-ink) !important;
  font-size: clamp(1.45rem, 1.9vw, 1.90rem) !important;
  line-height: 1.18 !important;
  font-weight: 680 !important;
  letter-spacing: -0.01em !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-legend {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 0.42rem 0.58rem !important;
  margin: 0.95rem 0 0.74rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-legend-item {
  display: inline-flex !important;
  align-items: center !important;
  min-height: 1.92rem !important;
  padding: 0.35rem 0.62rem !important;
  color: #102235 !important;
  border: 1px solid rgba(20, 38, 56, 0.16) !important;
  border-left-width: 5px !important;
  border-radius: 9px !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.68) !important;
  font-size: 0.94rem !important;
  line-height: 1.1 !important;
  font-weight: 760 !important;
  white-space: nowrap !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-scroll {
  width: 100% !important;
  max-width: 100% !important;
  margin: 0.30rem 0 0.90rem 0 !important;
  overflow-x: visible !important;
  overflow-y: visible !important;
  -webkit-overflow-scrolling: auto !important;
  border: 2px solid var(--qcqft-tt-line-strong) !important;
  border-radius: 10px !important;
  box-shadow: 0 7px 22px rgba(20, 38, 56, 0.075) !important;
  background: #ffffff !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-table,
#confSectionsBox .confBodyBox table.qcqft-timetable-table {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  table-layout: fixed !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  background: #ffffff !important;
  color: var(--qcqft-tt-ink) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-table caption {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-table th,
#confSectionsBox .confBodyBox .qcqft-timetable-table td {
  border-right: 1px solid var(--qcqft-tt-line) !important;
  border-bottom: 1px solid var(--qcqft-tt-line) !important;
  padding: 0.31rem 0.42rem !important;
  vertical-align: top !important;
  overflow: hidden !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-table tr > *:last-child {
  border-right: 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-table thead th {
  background: linear-gradient(180deg, #f8fafb 0%, #edf1f4 100%) !important;
  border-bottom: 2px solid var(--qcqft-tt-line-strong) !important;
  color: var(--qcqft-tt-ink) !important;
  padding: 0.52rem 0.34rem !important;
  text-align: center !important;
  text-align-last: center !important;
  font-size: 0.92rem !important;
  line-height: 1.12 !important;
  font-weight: 800 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-time-heading,
#confSectionsBox .confBodyBox .qcqft-timetable-time {
  width: 62px !important;
  max-width: 62px !important;
  min-width: 62px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-day {
  display: block !important;
  font-size: 0.90rem !important;
  line-height: 1.05 !important;
  font-weight: 850 !important;
  text-transform: uppercase !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-date {
  display: block !important;
  color: var(--qcqft-tt-muted) !important;
  font-size: 0.80rem !important;
  line-height: 1.14 !important;
  font-weight: 680 !important;
  margin-top: 0.08rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-time {
  position: sticky !important;
  left: 0 !important;
  z-index: 1 !important;
  background: linear-gradient(180deg, #f9fafb 0%, #eef2f5 100%) !important;
  color: rgba(20, 38, 56, 0.76) !important;
  border-right: 2px solid rgba(20, 38, 56, 0.34) !important;
  text-align: center !important;
  text-align-last: center !important;
  vertical-align: middle !important;
  font-size: 0.82rem !important;
  line-height: 1.08 !important;
  font-weight: 760 !important;
  font-variant-numeric: tabular-nums !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-empty {
  background:
    repeating-linear-gradient(
      -45deg,
      var(--qcqft-tt-empty) 0,
      var(--qcqft-tt-empty) 4px,
      var(--qcqft-tt-empty-stripe) 4px,
      var(--qcqft-tt-empty-stripe) 8px
    ) !important;
  min-height: 1.85rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell {
  border-left: 5px solid rgba(20, 38, 56, 0.22) !important;
  box-shadow:
    inset 0 0 0 1px rgba(20, 38, 56, 0.08),
    inset 0 1px 0 rgba(255, 255, 255, 0.58) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell-speaker,
#confSectionsBox .confBodyBox .qcqft-timetable-cell-time {
  text-align: left !important;
  text-align-last: left !important;
  overflow-wrap: anywhere !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-title {
  color: #102235 !important;
  font-size: clamp(0.80rem, 0.74vw, 0.92rem) !important;
  line-height: 1.15 !important;
  font-weight: 850 !important;
  margin: 0 0 0.17rem 0 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-speaker {
  color: rgba(20, 38, 56, 0.86) !important;
  font-size: clamp(0.70rem, 0.67vw, 0.80rem) !important;
  line-height: 1.18 !important;
  font-weight: 720 !important;
  margin: 0 0 0.17rem 0 !important;
}

/* User request: do not show detailed lecture/tutorial topics under lecturer/organizer names. */
#confSectionsBox .confBodyBox .qcqft-timetable-cell-topic {
  display: none !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-time {
  color: rgba(20, 38, 56, 0.66) !important;
  font-size: clamp(0.68rem, 0.62vw, 0.75rem) !important;
  line-height: 1.15 !important;
  font-weight: 720 !important;
  margin: 0.18rem 0 0 0 !important;
  font-variant-numeric: tabular-nums !important;
}

/* Strong, separated color palette. */
#confSectionsBox .confBodyBox .qcqft-timetable-track-indrakshi,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-indrakshi {
  background: var(--qcqft-tt-indrakshi-bg) !important;
  border-left-color: var(--qcqft-tt-indrakshi-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-track-jesse,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-jesse {
  background: var(--qcqft-tt-jesse-bg) !important;
  border-left-color: var(--qcqft-tt-jesse-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-track-xiaoyang,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-xiaoyang {
  background: var(--qcqft-tt-xiaoyang-bg) !important;
  border-left-color: var(--qcqft-tt-xiaoyang-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-track-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-tutorial {
  background: var(--qcqft-tt-tutorial-bg) !important;
  border-left-color: var(--qcqft-tt-tutorial-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable-track-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-colloquium {
  background: var(--qcqft-tt-colloquium-bg) !important;
  border-left-color: var(--qcqft-tt-colloquium-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-track-meal,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-lunch {
  background: var(--qcqft-tt-meal-bg) !important;
  border-left-color: var(--qcqft-tt-meal-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable-track-break,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-break {
  background: var(--qcqft-tt-break-bg) !important;
  border-left-color: var(--qcqft-tt-break-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-arrival-check-in,
#confSectionsBox .confBodyBox .qcqft-timetable-track-arrival,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-arrival {
  background: var(--qcqft-tt-arrival-bg) !important;
  border-left-color: var(--qcqft-tt-arrival-border) !important;
}

/* Mixed tutorial blocks should remain tutorial-colored rather than being overridden by lecturer track classes. */
#confSectionsBox .confBodyBox .qcqft-timetable-category-tutorial.qcqft-timetable-track-indrakshi,
#confSectionsBox .confBodyBox .qcqft-timetable-category-tutorial.qcqft-timetable-track-jesse,
#confSectionsBox .confBodyBox .qcqft-timetable-category-tutorial.qcqft-timetable-track-xiaoyang,
#confSectionsBox .confBodyBox .qcqft-timetable-category-tutorial.qcqft-timetable-track-tutorial {
  background: var(--qcqft-tt-tutorial-bg) !important;
  border-left-color: var(--qcqft-tt-tutorial-border) !important;
}

/* Keep the table fitting on ordinary desktop/laptop widths; fall back to horizontal scroll only on narrow screens. */
@media (max-width: 900px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox:has(.qcqft-timetable) {
    width: 98% !important;
    max-width: none !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-scroll {
    overflow-x: auto !important;
    overflow-y: hidden !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-table {
    min-width: 900px !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-legend-item {
    font-size: 0.82rem !important;
    min-height: 1.70rem !important;
    padding: 0.28rem 0.48rem !important;
  }
}

@media print {
  #confSectionsBox .confBodyBox:has(.qcqft-timetable) {
    width: 100% !important;
    max-width: none !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-scroll {
    overflow: visible !important;
    border: 1px solid var(--qcqft-tt-line-strong) !important;
    box-shadow: none !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-table {
    min-width: 0 !important;
    width: 100% !important;
  }
}
/* ============================================================
   Timetable at a Glance — centered/narrower table patch v4
   Base: ctpu_SSonQCQFT_23_integrated_lecturers_speakers_readability_v8_plus_timetable_v3.css

   Goals:
   - Make the timetable block visually centered on the page.
   - Reduce the table width slightly from the previous full-width v3 layout.
   - Keep the table scroll-free on ordinary desktop/laptop widths.
   ============================================================ */

/* Center the event body specifically on the timetable page. */
#confSectionsBox:has(.qcqft-timetable) {
  align-items: center !important;
}

#confSectionsBox:has(.qcqft-timetable) .conf_leftMenu {
  align-self: stretch !important;
  width: 100% !important;
}

#confSectionsBox:has(.qcqft-timetable) .confBodyBox {
  align-self: center !important;
  float: none !important;
  clear: both !important;
  width: min(94vw, 1180px) !important;
  max-width: min(94vw, 1180px) !important;
  margin-left: auto !important;
  margin-right: auto !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}

#confSectionsBox:has(.qcqft-timetable) .confBodyBox .mainContent,
#confSectionsBox:has(.qcqft-timetable) .confBodyBox .col2 {
  float: none !important;
  width: 100% !important;
  max-width: 1180px !important;
  margin-left: auto !important;
  margin-right: auto !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}

/* The actual timetable is a little narrower than the containing page body. */
#confSectionsBox .confBodyBox .qcqft-timetable.qcqft-timetable-fit,
#confSectionsBox .confBodyBox .qcqft-timetable.qcqft-timetable-weekly,
#confSectionsBox .confBodyBox .qcqft-timetable {
  width: min(100%, 1120px) !important;
  max-width: 1120px !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-title,
#confSectionsBox .confBodyBox .qcqft-timetable-legend,
#confSectionsBox .confBodyBox .qcqft-timetable-scroll,
#confSectionsBox .confBodyBox .qcqft-timetable-detail-note,
#confSectionsBox .confBodyBox .qcqft-timetable-notes {
  width: 100% !important;
  max-width: 1120px !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-scroll {
  overflow-x: visible !important;
  overflow-y: visible !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-table,
#confSectionsBox .confBodyBox table.qcqft-timetable-table {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  table-layout: fixed !important;
}

/* Slightly compact the table after narrowing, without losing readability. */
#confSectionsBox .confBodyBox .qcqft-timetable-table th,
#confSectionsBox .confBodyBox .qcqft-timetable-table td {
  padding-left: 0.36rem !important;
  padding-right: 0.36rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-time-heading,
#confSectionsBox .confBodyBox .qcqft-timetable-time {
  width: 56px !important;
  min-width: 56px !important;
  max-width: 56px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-title {
  font-size: clamp(0.78rem, 0.70vw, 0.88rem) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-speaker {
  font-size: clamp(0.68rem, 0.62vw, 0.76rem) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-time {
  font-size: clamp(0.66rem, 0.58vw, 0.72rem) !important;
}

/* On narrower screens, use horizontal scroll instead of making the text too tiny. */
@media (max-width: 1040px), (hover: none) and (pointer: coarse) {
  #confSectionsBox:has(.qcqft-timetable) .confBodyBox {
    width: 96vw !important;
    max-width: 96vw !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable.qcqft-timetable-fit,
  #confSectionsBox .confBodyBox .qcqft-timetable.qcqft-timetable-weekly,
  #confSectionsBox .confBodyBox .qcqft-timetable {
    width: 100% !important;
    max-width: 100% !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-scroll {
    overflow-x: auto !important;
    overflow-y: hidden !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-table,
  #confSectionsBox .confBodyBox table.qcqft-timetable-table {
    min-width: 980px !important;
  }
}
/* ===== timetable v5: soften meal/lunch blocks =====
   Append after timetable v4.  Meals remain identifiable, but they no longer
   compete visually with lecture/tutorial/colloquium blocks. */

:root {
  --qcqft-tt-meal-bg: #f6eee5;
  --qcqft-tt-meal-bg-2: #f3e7d9;
  --qcqft-tt-meal-border: rgba(184, 118, 53, 0.62);
  --qcqft-tt-meal-ink: rgba(20, 38, 56, 0.80);
  --qcqft-tt-meal-muted: rgba(20, 38, 56, 0.58);
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-track-meal {
  background:
    linear-gradient(180deg, var(--qcqft-tt-meal-bg) 0%, var(--qcqft-tt-meal-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-meal-border) !important;
  border-left-width: 3px !important;
  box-shadow:
    inset 0 0 0 1px rgba(184, 118, 53, 0.10),
    inset 0 1px 0 rgba(255, 255, 255, 0.55) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-lunch .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-category-dinner .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-category-banquet .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-track-meal .qcqft-timetable-cell-title {
  color: var(--qcqft-tt-meal-ink) !important;
  font-weight: 760 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-category-lunch .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-category-dinner .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-category-banquet .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-track-meal .qcqft-timetable-cell-time {
  color: var(--qcqft-tt-meal-muted) !important;
  font-weight: 650 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-meal {
  background:
    linear-gradient(180deg, var(--qcqft-tt-meal-bg) 0%, var(--qcqft-tt-meal-bg-2) 100%) !important;
  border-color: rgba(184, 118, 53, 0.36) !important;
  border-left: 4px solid var(--qcqft-tt-meal-border) !important;
  color: var(--qcqft-tt-meal-ink) !important;
}
/* ===== timetable v6: priority palette =====
   Goal:
   - 3 lecture blocks + tutorial + colloquium: prominent and clearly distinct.
   - Lunch / breaks / banquet / dinner / arrival: subdued support blocks.
   Append after all previous timetable CSS. */

:root {
  /* Primary academic blocks */
  --qcqft-tt-indrakshi-bg: #c8f3f6;
  --qcqft-tt-indrakshi-bg-2: #b7ecf0;
  --qcqft-tt-indrakshi-border: #00a4b5;

  --qcqft-tt-jesse-bg: #d2f2c9;
  --qcqft-tt-jesse-bg-2: #bfeabb;
  --qcqft-tt-jesse-border: #2daa4a;

  --qcqft-tt-xiaoyang-bg: #fff0a8;
  --qcqft-tt-xiaoyang-bg-2: #ffe584;
  --qcqft-tt-xiaoyang-border: #d6a500;

  --qcqft-tt-tutorial-bg: #f1cfe2;
  --qcqft-tt-tutorial-bg-2: #e8bdd5;
  --qcqft-tt-tutorial-border: #bd4f87;

  --qcqft-tt-colloquium-bg: #dcd4f6;
  --qcqft-tt-colloquium-bg-2: #cfc4ef;
  --qcqft-tt-colloquium-border: #7762c5;

  /* Subdued support blocks */
  --qcqft-tt-break-bg: #f7f8fa;
  --qcqft-tt-break-bg-2: #f1f3f6;
  --qcqft-tt-break-border: rgba(120, 132, 145, 0.34);

  --qcqft-tt-meal-bg: #f8f2eb;
  --qcqft-tt-meal-bg-2: #f2e7da;
  --qcqft-tt-meal-border: rgba(177, 122, 64, 0.42);

  --qcqft-tt-arrival-bg: #eef2f6;
  --qcqft-tt-arrival-bg-2: #e5ebf2;
  --qcqft-tt-arrival-border: rgba(100, 117, 136, 0.45);
}

/* --- Primary blocks: lectures by block/lecturer --- */
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-indrakshi,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-indrakshi {
  background: linear-gradient(180deg, var(--qcqft-tt-indrakshi-bg) 0%, var(--qcqft-tt-indrakshi-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-indrakshi-border) !important;
  box-shadow: inset 0 0 0 1px rgba(0, 164, 181, 0.18), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-jesse,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-jesse {
  background: linear-gradient(180deg, var(--qcqft-tt-jesse-bg) 0%, var(--qcqft-tt-jesse-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-jesse-border) !important;
  box-shadow: inset 0 0 0 1px rgba(45, 170, 74, 0.18), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-xiaoyang,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-xiaoyang {
  background: linear-gradient(180deg, var(--qcqft-tt-xiaoyang-bg) 0%, var(--qcqft-tt-xiaoyang-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-xiaoyang-border) !important;
  box-shadow: inset 0 0 0 1px rgba(214, 165, 0, 0.20), inset 0 1px 0 rgba(255,255,255,0.60) !important;
}

/* --- Primary blocks: tutorials and colloquia --- */
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-tutorial {
  background: linear-gradient(180deg, var(--qcqft-tt-tutorial-bg) 0%, var(--qcqft-tt-tutorial-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-tutorial-border) !important;
  box-shadow: inset 0 0 0 1px rgba(189, 79, 135, 0.18), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-colloquium {
  background: linear-gradient(180deg, var(--qcqft-tt-colloquium-bg) 0%, var(--qcqft-tt-colloquium-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-colloquium-border) !important;
  box-shadow: inset 0 0 0 1px rgba(119, 98, 197, 0.20), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

/* Make primary categories read as the active scientific program. */
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-colloquium {
  border-left-width: 5px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-tutorial .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-colloquium .qcqft-timetable-cell-title {
  color: #142638 !important;
  font-weight: 850 !important;
}

/* --- Subdued support blocks: breaks, meals, banquet/dinner, arrival --- */
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-break {
  background: linear-gradient(180deg, var(--qcqft-tt-break-bg) 0%, var(--qcqft-tt-break-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-break-border) !important;
  box-shadow: inset 0 0 0 1px rgba(120, 132, 145, 0.08) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-track-meal,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-meal {
  background: linear-gradient(180deg, var(--qcqft-tt-meal-bg) 0%, var(--qcqft-tt-meal-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-meal-border) !important;
  box-shadow: inset 0 0 0 1px rgba(177, 122, 64, 0.08) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-track-arrival,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-arrival-check-in,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-arrival {
  background: linear-gradient(180deg, var(--qcqft-tt-arrival-bg) 0%, var(--qcqft-tt-arrival-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-arrival-border) !important;
  box-shadow: inset 0 0 0 1px rgba(100, 117, 136, 0.08) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in {
  border-left-width: 3px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-break .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in .qcqft-timetable-cell-title {
  color: rgba(20, 38, 56, 0.78) !important;
  font-weight: 740 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-break .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in .qcqft-timetable-cell-time {
  color: rgba(20, 38, 56, 0.54) !important;
  font-weight: 620 !important;
}
/* ===== timetable v10: viewport centering + requested palette swap =====
   Base: ctpu_SSonQCQFT_23_integrated_lecturers_speakers_timetable_v9.css

   Goals:
   1) Center the timetable block visually in the browser viewport, not inside any
      shifted Indico content column.
   2) Keep the table compact enough to read without feeling over-wide.
   3) Palette swap requested by organizer:
      - Wang yellow -> Tutorials
      - Tutorial rose -> Indrakshi
      - Indrakshi cyan/blue -> Wang
      - Lunch / dinner / banquet / meals -> subtle ivory
*/

/* --- viewport-centering reset for the timetable page --- */
#confSectionsBox:has(.qcqft-timetable) {
  width: 100vw !important;
  max-width: 100vw !important;
  margin-left: calc(50% - 50vw) !important;
  margin-right: calc(50% - 50vw) !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  box-sizing: border-box !important;
}

#confSectionsBox:has(.qcqft-timetable) .conf_leftMenu {
  width: 100% !important;
  max-width: 100% !important;
  align-self: stretch !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

#confSectionsBox:has(.qcqft-timetable) .confBodyBox {
  float: none !important;
  clear: both !important;
  width: 100vw !important;
  max-width: 100vw !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  padding-left: 1rem !important;
  padding-right: 1rem !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  box-sizing: border-box !important;
}

#confSectionsBox:has(.qcqft-timetable) .confBodyBox > *,
#confSectionsBox:has(.qcqft-timetable) .confBodyBox .mainContent,
#confSectionsBox:has(.qcqft-timetable) .confBodyBox .col2 {
  float: none !important;
  width: 100% !important;
  max-width: 1080px !important;
  margin-left: auto !important;
  margin-right: auto !important;
  box-sizing: border-box !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable.qcqft-timetable-weekly,
#confSectionsBox .confBodyBox .qcqft-timetable.qcqft-timetable-fit,
#confSectionsBox .confBodyBox .qcqft-timetable {
  width: min(100%, 1080px) !important;
  max-width: 1080px !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-title,
#confSectionsBox .confBodyBox .qcqft-timetable-legend,
#confSectionsBox .confBodyBox .qcqft-timetable-scroll,
#confSectionsBox .confBodyBox .qcqft-timetable-detail-note,
#confSectionsBox .confBodyBox .qcqft-timetable-notes {
  width: 100% !important;
  max-width: 1080px !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-scroll {
  overflow-x: visible !important;
  overflow-y: visible !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-table,
#confSectionsBox .confBodyBox table.qcqft-timetable-table {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  table-layout: fixed !important;
}

/* Compact the fixed-width table just enough after the 1080px cap. */
#confSectionsBox .confBodyBox .qcqft-timetable-table th,
#confSectionsBox .confBodyBox .qcqft-timetable-table td {
  padding-left: 0.32rem !important;
  padding-right: 0.32rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-time-heading,
#confSectionsBox .confBodyBox .qcqft-timetable-time {
  width: 52px !important;
  min-width: 52px !important;
  max-width: 52px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-title {
  font-size: clamp(0.76rem, 0.66vw, 0.86rem) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-speaker {
  font-size: clamp(0.66rem, 0.60vw, 0.74rem) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell-time {
  font-size: clamp(0.64rem, 0.56vw, 0.70rem) !important;
}

/* --- requested palette remap --- */
:root {
  /* Indrakshi takes the previous tutorial rose/pink. */
  --qcqft-tt-indrakshi-bg: #f1cfe2;
  --qcqft-tt-indrakshi-bg-2: #e8bdd5;
  --qcqft-tt-indrakshi-border: #bd4f87;

  /* Jesse stays green. */
  --qcqft-tt-jesse-bg: #d2f2c9;
  --qcqft-tt-jesse-bg-2: #bfeabb;
  --qcqft-tt-jesse-border: #2daa4a;

  /* Wang takes the previous Indrakshi cyan/blue. */
  --qcqft-tt-xiaoyang-bg: #c8f3f6;
  --qcqft-tt-xiaoyang-bg-2: #b7ecf0;
  --qcqft-tt-xiaoyang-border: #00a4b5;

  /* Tutorials take the previous Wang yellow. */
  --qcqft-tt-tutorial-bg: #fff0a8;
  --qcqft-tt-tutorial-bg-2: #ffe584;
  --qcqft-tt-tutorial-border: #d6a500;

  /* Colloquia remain violet/lavender. */
  --qcqft-tt-colloquium-bg: #dcd4f6;
  --qcqft-tt-colloquium-bg-2: #cfc4ef;
  --qcqft-tt-colloquium-border: #7762c5;

  /* Meals are now quiet ivory, not orange/peach. */
  --qcqft-tt-meal-bg: #fffaf0;
  --qcqft-tt-meal-bg-2: #fbf4e6;
  --qcqft-tt-meal-border: rgba(184, 157, 105, 0.36);
  --qcqft-tt-meal-ink: rgba(20, 38, 56, 0.72);
  --qcqft-tt-meal-muted: rgba(20, 38, 56, 0.48);
}

/* Primary academic blocks retain stronger left accents. */
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-colloquium {
  border-left-width: 5px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-indrakshi,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-indrakshi {
  background: linear-gradient(180deg, var(--qcqft-tt-indrakshi-bg) 0%, var(--qcqft-tt-indrakshi-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-indrakshi-border) !important;
  box-shadow: inset 0 0 0 1px rgba(189, 79, 135, 0.18), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-jesse,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-jesse {
  background: linear-gradient(180deg, var(--qcqft-tt-jesse-bg) 0%, var(--qcqft-tt-jesse-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-jesse-border) !important;
  box-shadow: inset 0 0 0 1px rgba(45, 170, 74, 0.18), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-xiaoyang,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-xiaoyang {
  background: linear-gradient(180deg, var(--qcqft-tt-xiaoyang-bg) 0%, var(--qcqft-tt-xiaoyang-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-xiaoyang-border) !important;
  box-shadow: inset 0 0 0 1px rgba(0, 164, 181, 0.18), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-tutorial {
  background: linear-gradient(180deg, var(--qcqft-tt-tutorial-bg) 0%, var(--qcqft-tt-tutorial-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-tutorial-border) !important;
  box-shadow: inset 0 0 0 1px rgba(214, 165, 0, 0.20), inset 0 1px 0 rgba(255,255,255,0.60) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-colloquium {
  background: linear-gradient(180deg, var(--qcqft-tt-colloquium-bg) 0%, var(--qcqft-tt-colloquium-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-colloquium-border) !important;
  box-shadow: inset 0 0 0 1px rgba(119, 98, 197, 0.20), inset 0 1px 0 rgba(255,255,255,0.55) !important;
}

/* Support blocks stay quiet. */
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-track-meal,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-meal {
  background: linear-gradient(180deg, var(--qcqft-tt-meal-bg) 0%, var(--qcqft-tt-meal-bg-2) 100%) !important;
  border-left-color: var(--qcqft-tt-meal-border) !important;
  box-shadow: inset 0 0 0 1px rgba(184, 157, 105, 0.06) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in {
  border-left-width: 3px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-track-meal .qcqft-timetable-cell-title {
  color: var(--qcqft-tt-meal-ink) !important;
  font-weight: 680 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-track-meal .qcqft-timetable-cell-time {
  color: var(--qcqft-tt-meal-muted) !important;
  font-weight: 560 !important;
}

/* Keep scroll only on genuinely narrow viewports. */
@media (max-width: 1100px), (hover: none) and (pointer: coarse) {
  #confSectionsBox:has(.qcqft-timetable) .confBodyBox {
    padding-left: 0.8rem !important;
    padding-right: 0.8rem !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-scroll {
    overflow-x: auto !important;
    overflow-y: hidden !important;
  }

  #confSectionsBox .confBodyBox .qcqft-timetable-table,
  #confSectionsBox .confBodyBox table.qcqft-timetable-table {
    min-width: 980px !important;
  }
}

/* Final left-accent restoration after generic border-color overrides. */
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-indrakshi,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-indrakshi {
  border-left-color: var(--qcqft-tt-indrakshi-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-jesse,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-jesse {
  border-left-color: var(--qcqft-tt-jesse-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lecture.qcqft-timetable-track-xiaoyang,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-xiaoyang {
  border-left-color: var(--qcqft-tt-xiaoyang-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-track-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-tutorial {
  border-left-color: var(--qcqft-tt-tutorial-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-colloquium {
  border-left-color: var(--qcqft-tt-colloquium-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-cell.qcqft-timetable-track-meal,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable-legend-item.qcqft-timetable-track-meal {
  border-left-color: var(--qcqft-tt-meal-border) !important;
}
/* ===== timetable v11: flat palette + 1-hour colloquium support =====
   Append after v10.  Removes gradient fills and uses flat spreadsheet-like colors.
   HTML v11 updates Wednesday colloquium blocks to 1 hour each plus 30-min breaks. */

:root {
  /* Requested flat palette: R / G / B / V / Y. */
  --qcqft-tt-indrakshi-bg: #f3c7dc;       /* R / rose */
  --qcqft-tt-indrakshi-border: #c24f86;

  --qcqft-tt-jesse-bg: #ccefc8;           /* G */
  --qcqft-tt-jesse-border: #2ca84a;

  --qcqft-tt-xiaoyang-bg: #c9e8ff;        /* B */
  --qcqft-tt-xiaoyang-border: #2c7fc5;

  --qcqft-tt-colloquium-bg: #ded5f7;      /* V */
  --qcqft-tt-colloquium-border: #7661c8;

  --qcqft-tt-tutorial-bg: #ffec94;        /* Y */
  --qcqft-tt-tutorial-border: #d2a000;

  --qcqft-tt-meal-bg: #fff8ec;            /* pale ivory */
  --qcqft-tt-meal-border: rgba(166, 134, 82, 0.30);

  --qcqft-tt-break-bg: #f7f9fb;
  --qcqft-tt-break-border: rgba(116, 132, 146, 0.28);

  --qcqft-tt-arrival-bg: #e9eef5;
  --qcqft-tt-arrival-border: rgba(95, 112, 130, 0.42);
}

/* Remove the previous gradient/inset treatment from all timetable color blocks. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-empty,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table thead th,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-time {
  background-image: none !important;
  box-shadow: none !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table thead th {
  background: #f3f6f8 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-time {
  background: #f5f7f9 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-empty {
  background: #fbfcfd !important;
}

/* Keep primary scientific blocks visually stronger than meals/breaks. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lecture,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-colloquium {
  border-left-width: 5px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in {
  border-left-width: 3px !important;
}

/* Indrakshi = R */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-indrakshi,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-indrakshi {
  background: var(--qcqft-tt-indrakshi-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-indrakshi-border) !important;
}

/* Jesse = G */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-jesse,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-jesse {
  background: var(--qcqft-tt-jesse-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-jesse-border) !important;
}

/* Wang = B */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-xiaoyang,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-xiaoyang {
  background: var(--qcqft-tt-xiaoyang-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-xiaoyang-border) !important;
}

/* Colloquium = V */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-colloquium {
  background: var(--qcqft-tt-colloquium-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-colloquium-border) !important;
}

/* Tutorial = Y.  This is intentionally after lecturer-track rules so tutorials stay yellow. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-tutorial {
  background: var(--qcqft-tt-tutorial-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-tutorial-border) !important;
}

/* Meals / lunch / dinner / banquet = pale ivory. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-meal,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-meal {
  background: var(--qcqft-tt-meal-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-meal-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-break {
  background: var(--qcqft-tt-break-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-break-border) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-arrival-check-in,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-arrival {
  background: var(--qcqft-tt-arrival-bg) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-arrival-border) !important;
}

/* Topic rows remain hidden in case older timetable HTML is pasted. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-topic {
  display: none !important;
}
/* ===== timetable v12: flat final palette correction =====
   Append after v11.  This patch uses solid colors only and fixes the
   requested mapping:
     Raychowdhury = cyan, Stryker = green, Wang = red/rose,
     Tutorial = yellow, Colloquium = violet,
     meals/banquet/dinner = very pale ivory.
*/

:root {
  --qcqft-tt-indrakshi-bg-v12: #c7f1f5;
  --qcqft-tt-indrakshi-border-v12: #16a4b5;

  --qcqft-tt-jesse-bg-v12: #d4f3cf;
  --qcqft-tt-jesse-border-v12: #34a852;

  --qcqft-tt-xiaoyang-bg-v12: #f3c9df;
  --qcqft-tt-xiaoyang-border-v12: #c94e86;

  --qcqft-tt-tutorial-bg-v12: #ffef9d;
  --qcqft-tt-tutorial-border-v12: #d2a000;

  --qcqft-tt-colloquium-bg-v12: #ddd4f4;
  --qcqft-tt-colloquium-border-v12: #7564c8;

  --qcqft-tt-meal-bg-v12: #fffdf6;
  --qcqft-tt-meal-border-v12: rgba(178, 145, 86, 0.24);

  --qcqft-tt-break-bg-v12: #f8fafc;
  --qcqft-tt-break-border-v12: rgba(116, 132, 146, 0.24);

  --qcqft-tt-arrival-bg-v12: #e9eef5;
  --qcqft-tt-arrival-border-v12: rgba(95, 112, 130, 0.36);
}

/* Hard reset: no gradient or inner shadow on timetable blocks/legend. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-empty,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table thead th,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-time {
  background-image: none !important;
  box-shadow: none !important;
}

/* Base empty/header tones. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table thead th {
  background: #f3f6f8 !important;
  background-image: none !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-time {
  background: #f5f7f9 !important;
  background-image: none !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-empty {
  background: #fbfcfd !important;
  background-image: none !important;
}

/* Raychowdhury / Indrakshi = cyan. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-indrakshi,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-indrakshi {
  background: var(--qcqft-tt-indrakshi-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-indrakshi-border-v12) !important;
}

/* Stryker / Jesse = green. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-jesse,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-jesse {
  background: var(--qcqft-tt-jesse-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-jesse-border-v12) !important;
}

/* Wang / Xiaoyang = red/rose. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-xiaoyang,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-xiaoyang {
  background: var(--qcqft-tt-xiaoyang-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-xiaoyang-border-v12) !important;
}

/* Colloquia = violet. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-colloquium {
  background: var(--qcqft-tt-colloquium-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-colloquium-border-v12) !important;
}

/* Tutorials = yellow.  Keep this AFTER lecturer-track rules because tutorial cells
   can also include lecturer track classes. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-tutorial {
  background: var(--qcqft-tt-tutorial-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-tutorial-border-v12) !important;
}

/* Meals / lunch / dinner / banquet = very pale ivory. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-meal,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-meal {
  background: var(--qcqft-tt-meal-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-meal-border-v12) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lunch .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-dinner .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-banquet .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-meal .qcqft-timetable-cell-title {
  color: rgba(20, 38, 56, 0.74) !important;
  font-weight: 640 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lunch .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-dinner .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-banquet .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-meal .qcqft-timetable-cell-time {
  color: rgba(20, 38, 56, 0.50) !important;
  font-weight: 540 !important;
}

/* Break and arrival stay quiet. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-break,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-break {
  background: var(--qcqft-tt-break-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-break-border-v12) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-arrival-check-in,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-arrival,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-arrival {
  background: var(--qcqft-tt-arrival-bg-v12) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-arrival-border-v12) !important;
}

/* Main program cells keep stronger left bars than support cells. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lecture,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-tutorial,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-colloquium {
  border-left-width: 5px !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-break,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-arrival-check-in {
  border-left-width: 3px !important;
}

/* Defensive: old pasted HTML may include topic rows. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-topic {
  display: none !important;
}
/* ===== timetable v12 supplement: colloquium speakers + Wednesday sequence =====
   Use with timetable_at_a_glance_indico_weekly_v12.html.
   The HTML now places the colloquium speaker in the same
   .qcqft-timetable-cell-speaker line used by lecture boxes. */

/* Make colloquium speaker lines read exactly like lecture speaker lines. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-colloquium .qcqft-timetable-cell-speaker {
  display: block !important;
  color: rgba(20, 38, 56, 0.86) !important;
  font-size: clamp(0.66rem, 0.60vw, 0.74rem) !important;
  line-height: 1.18 !important;
  font-weight: 720 !important;
  margin: 0 0 0.16rem 0 !important;
  overflow-wrap: anywhere !important;
  text-align: left !important;
  text-align-last: left !important;
}

/* Keep colloquium time legible after adding speaker names. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-colloquium .qcqft-timetable-cell-time {
  margin-top: 0.14rem !important;
  font-weight: 680 !important;
}

/* Final defensive color reset: flat violet for all colloquium blocks and legend. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-colloquium,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-colloquium {
  background: var(--qcqft-tt-colloquium-bg-v12, #ddd4f4) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-colloquium-border-v12, #7564c8) !important;
  box-shadow: none !important;
}

/* Final defensive color reset: meals remain very pale ivory. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-track-meal,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-lunch,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-dinner,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-category-banquet,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-legend-item.qcqft-timetable-track-meal {
  background: var(--qcqft-tt-meal-bg-v12, #fffdf6) !important;
  background-image: none !important;
  border-left-color: var(--qcqft-tt-meal-border-v12, rgba(178, 145, 86, 0.24)) !important;
  box-shadow: none !important;
}
/* ===== timetable v13: uniform 30-minute row height =====
   Append after all previous timetable CSS.

   Goal:
   - Every visible body row represents one 30-minute slot and has the same height.
   - Rowspan event cells keep duration by occupying exact multiples of the slot height.
   - Dense one-slot cells such as 30-min breaks are compacted so they do not stretch rows.
*/

#confSectionsBox .confBodyBox .qcqft-timetable {
  --qcqft-tt-slot-h: 36px;
  --qcqft-tt-slot-pad-y: 0.16rem;
  --qcqft-tt-slot-pad-x: 0.32rem;
}

/* Keep column widths predictable; row heights below set the vertical rhythm. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table,
#confSectionsBox .confBodyBox .qcqft-timetable table.qcqft-timetable-table {
  table-layout: fixed !important;
}

/* One tbody row = one 30-minute slot. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody tr {
  height: var(--qcqft-tt-slot-h) !important;
  min-height: var(--qcqft-tt-slot-h) !important;
  max-height: var(--qcqft-tt-slot-h) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody th,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td {
  height: var(--qcqft-tt-slot-h) !important;
  min-height: 0 !important;
  padding: var(--qcqft-tt-slot-pad-y) var(--qcqft-tt-slot-pad-x) !important;
  vertical-align: top !important;
  overflow: hidden !important;
}

/* Rowspanning event cells are exact multiples of the 30-minute slot. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="1"] {
  height: calc(var(--qcqft-tt-slot-h) * 1) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 1) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="2"] {
  height: calc(var(--qcqft-tt-slot-h) * 2) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 2) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="3"] {
  height: calc(var(--qcqft-tt-slot-h) * 3) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 3) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="4"] {
  height: calc(var(--qcqft-tt-slot-h) * 4) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 4) !important;
}

/* Time column follows the same fixed grid. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody th.qcqft-timetable-time {
  height: var(--qcqft-tt-slot-h) !important;
  max-height: var(--qcqft-tt-slot-h) !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  vertical-align: middle !important;
  text-align: center !important;
  text-align-last: center !important;
  font-size: 0.74rem !important;
  line-height: 1.0 !important;
  font-variant-numeric: tabular-nums !important;
}

/* Empty cells should not contribute hidden minimum height. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-empty {
  height: var(--qcqft-tt-slot-h) !important;
  min-height: 0 !important;
  max-height: var(--qcqft-tt-slot-h) !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}

/* Override older timetable min-height rules. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell {
  min-height: 0 !important;
  overflow: hidden !important;
}

/* Compact event text enough that 30-min cells cannot force a taller row. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-speaker,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-time {
  text-align: left !important;
  text-align-last: left !important;
  margin-top: 0 !important;
  overflow: hidden !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-title {
  font-size: clamp(0.72rem, 0.64vw, 0.82rem) !important;
  line-height: 1.08 !important;
  margin-bottom: 0.07rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-speaker {
  font-size: clamp(0.62rem, 0.56vw, 0.70rem) !important;
  line-height: 1.08 !important;
  margin-bottom: 0.06rem !important;
  overflow-wrap: anywhere !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-time {
  font-size: clamp(0.56rem, 0.50vw, 0.64rem) !important;
  line-height: 1.02 !important;
  margin-top: 0.03rem !important;
}

/* One-slot support cells, especially 30-min breaks, are the main source of accidental expansion. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell[rowspan="1"],
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-break {
  padding-top: 0.10rem !important;
  padding-bottom: 0.08rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell[rowspan="1"] .qcqft-timetable-cell-title,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-category-break .qcqft-timetable-cell-title {
  font-size: clamp(0.65rem, 0.58vw, 0.74rem) !important;
  line-height: 1.02 !important;
  margin-bottom: 0.02rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell[rowspan="1"] .qcqft-timetable-cell-time,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-category-break .qcqft-timetable-cell-time {
  font-size: clamp(0.52rem, 0.47vw, 0.60rem) !important;
  line-height: 1.0 !important;
  margin-top: 0.01rem !important;
}

/* Header row is separate from the 30-minute body grid. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table thead tr,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table thead th {
  height: auto !important;
  max-height: none !important;
}

@media (max-width: 1100px), (hover: none) and (pointer: coarse) {
  #confSectionsBox .confBodyBox .qcqft-timetable {
    --qcqft-tt-slot-h: 37px;
  }
}
/* ===== timetable v14: compact equal-row hybrid =====
   Keep the accurate 30-minute grid, but reduce the vertical whitespace that made
   v13 feel heavier than the previous compact version.  Append after v13. */

#confSectionsBox .confBodyBox .qcqft-timetable {
  --qcqft-tt-slot-h: 33px !important;
  --qcqft-tt-slot-pad-y: 0.11rem !important;
  --qcqft-tt-slot-pad-x: 0.30rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-scroll {
  margin-top: 0.24rem !important;
  margin-bottom: 0.70rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table thead th {
  padding-top: 0.42rem !important;
  padding-bottom: 0.42rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody tr {
  height: var(--qcqft-tt-slot-h) !important;
  min-height: var(--qcqft-tt-slot-h) !important;
  max-height: var(--qcqft-tt-slot-h) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody th,
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td {
  height: var(--qcqft-tt-slot-h) !important;
  min-height: 0 !important;
  padding: var(--qcqft-tt-slot-pad-y) var(--qcqft-tt-slot-pad-x) !important;
  overflow: hidden !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="1"] {
  height: calc(var(--qcqft-tt-slot-h) * 1) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 1) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="2"] {
  height: calc(var(--qcqft-tt-slot-h) * 2) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 2) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="3"] {
  height: calc(var(--qcqft-tt-slot-h) * 3) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 3) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-table tbody td[rowspan="4"] {
  height: calc(var(--qcqft-tt-slot-h) * 4) !important;
  max-height: calc(var(--qcqft-tt-slot-h) * 4) !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-title {
  font-size: clamp(0.74rem, 0.64vw, 0.84rem) !important;
  line-height: 1.10 !important;
  margin-bottom: 0.10rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-speaker {
  font-size: clamp(0.63rem, 0.57vw, 0.71rem) !important;
  line-height: 1.10 !important;
  margin-bottom: 0.09rem !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell-time {
  font-size: clamp(0.60rem, 0.53vw, 0.66rem) !important;
  line-height: 1.05 !important;
  margin-top: 0.08rem !important;
}

/* Break cells are one-slot cells; keep them compact so they do not visually dominate. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-break .qcqft-timetable-cell-title {
  font-size: 0.66rem !important;
  line-height: 1.04 !important;
  margin-bottom: 0.04rem !important;
  font-weight: 760 !important;
}

#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-cell.qcqft-timetable-category-break .qcqft-timetable-cell-time {
  font-size: 0.56rem !important;
  line-height: 1.02 !important;
  margin-top: 0 !important;
}

/* Keep the equal-row grid readable but closer to the earlier compact visual feel. */
#confSectionsBox .confBodyBox .qcqft-timetable .qcqft-timetable-time {
  font-size: 0.70rem !important;
}