/* ============================================================================
   CMLase — Programme paper page
   cmlase.org/programme/
   ----------------------------------------------------------------------------
   TOKENS
   Every colour is read as var(--site-token, fallback). If the site already
   defines its own custom properties, map them in ONE place: the :root block
   below. Do not hunt through the file.
   ========================================================================== */

:root{
  /* Mapped onto the site's own palette tokens (--site-*). The site is dark for
     every visitor, so the dark values are the only values and the
     prefers-color-scheme block was removed. Text on an accent fill reads
     --prg-on-accent / --prg-on-accent-ink (below) instead of #fff, for contrast
     on this site's cyan; the severity pills further down carry their dark
     values directly. */
  --prg-ink:        var(--site-ice, #F7FAFC);
  --prg-ink-2:      var(--site-silver, #9EABB7);
  --prg-ink-3:      var(--site-silver, #9EABB7);
  --prg-paper:      var(--site-midnight, #06101D);
  --prg-paper-2:    var(--site-carbon, #0B1F32);
  --prg-rule:       var(--site-carbon, #0B1F32);
  --prg-rule-2:     var(--site-carbon, #0B1F32);
  --prg-accent:     var(--site-cyan, #39D5E8);
  --prg-accent-ink: var(--site-electric, #3478F6);
  --prg-accent-wash:var(--site-carbon, #0B1F32);
  --prg-warn:       #e3a857;
  --prg-warn-wash:  #241c10;

  /* Ink on an accent fill: midnight on cyan, ice on electric. */
  --prg-on-accent:     var(--site-midnight, #06101D);
  --prg-on-accent-ink: var(--site-ice, #F7FAFC);

  /* --- type: the site's own faces --- */
  --prg-serif: var(--font-display);
  --prg-sans:  var(--font-body);
  --prg-mono:  var(--font-mono);

  /* --- metrics --- */
  --prg-max: 1240px;
  --prg-measure: 68ch;
  --prg-gutter: 24px;
  --prg-radius: 10px;
}

/* If the site uses an explicit theme switch, these honour it. */
:root[data-theme="dark"]{ color-scheme: dark; }
:root[data-theme="light"]{ color-scheme: light; }

/* ============================ base ====================================== */

.prg-body{
  margin:0;
  background:var(--prg-paper);
  color:var(--prg-ink-2);
  font-family:var(--prg-sans);
  font-size:17px;
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
.prg-body *,
.prg-body *::before,
.prg-body *::after{ box-sizing:border-box; }

.prg-wrap{
  max-width:var(--prg-max);
  margin-inline:auto;
  padding-inline:var(--prg-gutter);
}

.prg-body a{ color:var(--prg-accent); text-decoration-thickness:1px; text-underline-offset:2px; }
.prg-body a:hover{ color:var(--prg-accent-ink); }

.prg-skip{
  position:absolute; left:-9999px; top:0;
  background:var(--prg-accent); color:var(--prg-on-accent); padding:10px 16px; z-index:200;
}
.prg-skip:focus{ left:8px; top:8px; }

.prg-body :focus-visible{
  outline:2px solid var(--prg-accent);
  outline-offset:3px;
  border-radius:3px;
}

/* ===================== fallback chrome (delete on integration) ========== */

.prg-fallback-header{
  display:flex; flex-wrap:wrap; gap:16px 28px; align-items:center;
  padding:18px var(--prg-gutter);
  border-bottom:1px solid var(--prg-rule);
  background:var(--prg-paper);
}
.prg-brand{
  font-weight:700; font-size:20px; letter-spacing:-.01em;
  color:var(--prg-ink); text-decoration:none; line-height:1.15;
}
.prg-brand span{
  display:block; font-size:10px; font-weight:600; letter-spacing:.16em;
  text-transform:uppercase; color:var(--prg-ink-3); margin-top:3px;
}
.prg-fallback-nav{ display:flex; flex-wrap:wrap; gap:4px 20px; margin-left:auto; }
.prg-fallback-nav a{
  font-size:13px; font-weight:600; letter-spacing:.06em; text-transform:uppercase;
  color:var(--prg-ink-3); text-decoration:none;
}
.prg-fallback-nav a:hover,
.prg-fallback-nav a[aria-current="page"]{ color:var(--prg-accent); }

.prg-fallback-footer{
  margin-top:0; padding:40px var(--prg-gutter);
  border-top:1px solid var(--prg-rule);
  color:var(--prg-ink-3); font-size:14px;
}
.prg-fallback-footer p{ margin:4px 0; }

/* ============================== hero ==================================== */

.prg-hero{
  padding:72px 0 56px;
  border-bottom:1px solid var(--prg-rule);
  background:
    radial-gradient(1200px 320px at 12% -10%, var(--prg-accent-wash), transparent 70%),
    var(--prg-paper);
}
.prg-hero > .prg-wrap{ max-width:900px; margin-inline:auto; }

.prg-eyebrow{
  margin:0 0 20px;
  font-size:12px; font-weight:700; letter-spacing:.18em; text-transform:uppercase;
  color:var(--prg-accent);
}
.prg-hero h1{
  margin:0 0 18px;
  font-family:var(--prg-serif);
  font-weight:400;
  font-size:clamp(34px, 5.4vw, 58px);
  line-height:1.1;
  letter-spacing:-.015em;
  color:var(--prg-ink);
  text-wrap:balance;
}
.prg-standfirst{
  margin:0 0 24px;
  font-size:clamp(19px, 2.2vw, 23px);
  line-height:1.45;
  color:var(--prg-ink-3);
}
.prg-byline{
  margin:0 0 32px; padding-bottom:28px;
  border-bottom:1px solid var(--prg-rule);
  font-size:15px; color:var(--prg-ink-3);
}
.prg-byline strong{ color:var(--prg-ink); }

.prg-abstract{
  margin:28px 0 36px;
  font-size:18px; line-height:1.72;
  color:var(--prg-ink-2);
}

.prg-actions{ display:flex; flex-wrap:wrap; gap:12px; }

.prg-btn{
  display:inline-flex; align-items:baseline; gap:9px;
  padding:13px 22px;
  border-radius:var(--prg-radius);
  font-size:14px; font-weight:700; letter-spacing:.04em; text-transform:uppercase;
  text-decoration:none; border:1.5px solid transparent;
  transition:background-color .18s ease, border-color .18s ease, color .18s ease;
}
/* Doubled class selectors: a host rule like `.site a { color: … }` has
   specificity (0,1,1) and would otherwise beat `.prg-btn--primary` (0,1,0),
   painting link-coloured text onto a solid button. See the same note in
   announce.css. */
.prg-btn--primary{ background:var(--prg-accent); border-color:var(--prg-accent); }
.prg-btn--primary.prg-btn--primary{ color:var(--prg-on-accent); text-decoration:none; }
.prg-btn--primary.prg-btn--primary:hover,
.prg-btn--primary.prg-btn--primary:focus-visible{
  background:var(--prg-accent-ink); border-color:var(--prg-accent-ink); color:var(--prg-on-accent-ink);
}
.prg-btn--ghost{ border-color:var(--prg-rule-2); background:transparent; }
.prg-btn--ghost.prg-btn--ghost{ color:var(--prg-ink); text-decoration:none; }
.prg-btn--ghost.prg-btn--ghost:hover,
.prg-btn--ghost.prg-btn--ghost:focus-visible{ border-color:var(--prg-accent); color:var(--prg-accent); }
.prg-btn-note{ font-size:11px; font-weight:600; letter-spacing:.08em; opacity:.8; text-transform:none; }

/* ======================== layout: rail + article ======================== */

.prg-layout{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:48px;
  padding-top:56px;
  padding-bottom:72px;
}
@media (min-width:1060px){
  .prg-layout{ grid-template-columns:252px minmax(0,1fr); gap:64px; }
}

.prg-rail{ display:none; }
@media (min-width:1060px){
  .prg-rail{
    display:block;
    position:sticky; top:24px;
    align-self:start;
    max-height:calc(100vh - 48px);
    overflow-y:auto;
    padding-right:8px;
    font-size:13.5px;
    line-height:1.4;
  }
}
.prg-rail-title{
  margin:0 0 14px;
  font-size:11px; font-weight:700; letter-spacing:.16em; text-transform:uppercase;
  color:var(--prg-ink-3);
}
.prg-rail ol{ list-style:none; margin:0; padding:0; counter-reset:prgtoc; }
.prg-rail li{ counter-increment:prgtoc; }
.prg-rail a{
  display:block;
  padding:6px 0 6px 40px;
  position:relative;
  color:var(--prg-ink-3);
  text-decoration:none;
  border-left:2px solid transparent;
  transition:color .15s ease, border-color .15s ease;
}
.prg-rail a::before{
  content:"§" counter(prgtoc);
  position:absolute; left:8px; top:6px;
  width:24px; text-align:right;
  font-size:11px; font-variant-numeric:tabular-nums; color:var(--prg-rule-2);
}
.prg-rail a:hover{ color:var(--prg-ink); }
.prg-rail a.is-current{
  color:var(--prg-accent); font-weight:600;
  border-left-color:var(--prg-accent);
}
.prg-rail a.is-current::before{ color:var(--prg-accent); }
.prg-rail-foot{ margin:20px 0 0; padding-top:16px; border-top:1px solid var(--prg-rule); font-size:13px; }

/* ============================= article ================================== */

.prg-article{ max-width:var(--prg-measure); }
.prg-article > section{
  padding-top:16px;
  scroll-margin-top:88px;
}
.prg-article > section + section{
  margin-top:64px;
  padding-top:56px;
  border-top:1px solid var(--prg-rule);
}

.prg-sec-num{
  margin:0 0 10px;
  font-size:12px; font-weight:700; letter-spacing:.16em;
  color:var(--prg-accent);
  font-variant-numeric:tabular-nums;
}

.prg-article h2{
  margin:0 0 24px;
  font-family:var(--prg-serif); font-weight:400;
  font-size:clamp(27px, 3.3vw, 36px);
  line-height:1.2; letter-spacing:-.01em;
  color:var(--prg-ink);
  text-wrap:balance;
}
.prg-h2-sm{ font-size:22px !important; }

.prg-article h3{
  margin:40px 0 16px;
  font-family:var(--prg-sans); font-weight:700;
  font-size:19px; line-height:1.35; letter-spacing:-.005em;
  color:var(--prg-ink);
}

.prg-article p{ margin:0 0 20px; }
.prg-article strong{ color:var(--prg-ink); font-weight:650; }

.prg-lead{
  font-size:19.5px; line-height:1.6;
  color:var(--prg-ink);
  font-weight:450;
}

.prg-note{ font-size:14.5px; color:var(--prg-ink-3); }

.prg-list{ margin:0 0 20px; padding-left:22px; }
.prg-list li{ margin-bottom:8px; }

/* ---- hypothesis block ---- */
.prg-hyp{
  margin:0 0 28px;
  padding:20px 24px;
  border-left:3px solid var(--prg-accent);
  background:var(--prg-accent-wash);
  border-radius:0 var(--prg-radius) var(--prg-radius) 0;
}
.prg-hyp p{ margin:0; font-size:17.5px; line-height:1.6; color:var(--prg-ink); }

/* ---- callouts ---- */
.prg-callout{
  margin:28px 0;
  padding:20px 24px;
  background:var(--prg-paper-2);
  border:1px solid var(--prg-rule);
  border-radius:var(--prg-radius);
}
.prg-callout p{ margin:0 0 12px; }
.prg-callout p:last-child{ margin-bottom:0; }
.prg-callout--key{ border-left:3px solid var(--prg-accent); background:var(--prg-accent-wash); }
.prg-callout--warn{ border-left:3px solid var(--prg-warn); background:var(--prg-warn-wash); }
.prg-callout--scope{
  margin:0 0 28px;
  border-left:3px solid var(--prg-rule-2);
  font-size:15.5px;
}

/* ---- equations ---- */
.prg-eq{
  margin:28px 0;
  padding:20px 16px;
  background:var(--prg-paper-2);
  border:1px solid var(--prg-rule);
  border-radius:var(--prg-radius);
  overflow-x:auto;
  text-align:center;
  font-size:16px;
}
/* Before KaTeX runs, keep the raw TeX from flashing as a wall of backslashes. */
.prg-eq:not(.katex-done){ color:var(--prg-ink-3); font-family:var(--prg-mono); font-size:14px; }
.prg-eq.katex-done{ color:var(--prg-ink); font-family:inherit; }
/* KaTeX unavailable: programme.js swaps in the data-plain text. */
.prg-eq.is-plain{ color:var(--prg-ink); font-size:15.5px; white-space:pre-wrap; }
.prg-eq .katex-display{ margin:0; }

/* ---- tables ---- */
.prg-tablewrap{
  margin:28px 0;
  overflow-x:auto;
  border:1px solid var(--prg-rule);
  border-radius:var(--prg-radius);
  -webkit-overflow-scrolling:touch;
}
.prg-article table{
  width:100%;
  min-width:520px;
  border-collapse:collapse;
  font-size:14.5px;
  line-height:1.5;
}
.prg-article caption{
  caption-side:top;
  text-align:left;
  padding:14px 18px 12px;
  font-size:12px; font-weight:700; letter-spacing:.12em; text-transform:uppercase;
  color:var(--prg-ink-3);
  border-bottom:1px solid var(--prg-rule);
}
.prg-article thead th{
  text-align:left;
  padding:12px 18px;
  font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase;
  color:var(--prg-ink-3);
  background:var(--prg-paper-2);
  border-bottom:1px solid var(--prg-rule);
  vertical-align:bottom;
}
.prg-article tbody th,
.prg-article tbody td{
  padding:13px 18px;
  border-bottom:1px solid var(--prg-rule);
  vertical-align:top;
}
.prg-article tbody th{ text-align:left; font-weight:650; color:var(--prg-ink); }
.prg-article tbody tr:last-child th,
.prg-article tbody tr:last-child td{ border-bottom:0; }
.prg-row--hi{ background:var(--prg-accent-wash); }

.prg-sev{
  display:inline-block;
  padding:3px 9px;
  border-radius:999px;
  font-size:11px; font-weight:700; letter-spacing:.05em; text-transform:uppercase;
  white-space:nowrap;
}
/* The package's own dark values, hoisted out of @media (prefers-color-scheme:
   dark) on 2026-11-01: this site is dark for every visitor, so the pills must
   not follow the visitor's OS. */
.prg-sev--t{ background:#331517; color:#f5a3a3; }
.prg-sev--h{ background:#2e2411; color:#e8bd74; }

/* ---- figures ---- */
.prg-fig{
  margin:36px 0;
  padding:0;
}
.prg-fig img{
  display:block;
  width:100%;
  height:auto;
  border:1px solid var(--prg-rule);
  border-radius:var(--prg-radius);
  background:var(--prg-paper);
}
.prg-fig figcaption{
  margin-top:12px;
  font-size:14px;
  line-height:1.5;
  color:var(--prg-ink-3);
}

/* ---- citation ---- */
.prg-cite .prg-sec-num{ color:var(--prg-ink-3); }
.prg-bibtex{
  margin:20px 0;
  padding:18px 20px;
  background:var(--prg-paper-2);
  border:1px solid var(--prg-rule);
  border-radius:var(--prg-radius);
  overflow-x:auto;
  font-family:var(--prg-mono);
  font-size:13px;
  line-height:1.6;
  color:var(--prg-ink-2);
}
.prg-bibtex code{ font:inherit; }

.prg-position{
  font-size:14.5px;
  color:var(--prg-ink-3);
}
.prg-position h2{ font-size:20px !important; }

/* ---- end CTA ---- */
.prg-endcta{
  padding:72px 0;
  border-top:1px solid var(--prg-rule);
  background:var(--prg-paper-2);
  text-align:center;
}
.prg-endcta h2{
  margin:0 0 12px;
  font-family:var(--prg-serif); font-weight:400;
  font-size:clamp(26px, 3.4vw, 36px); line-height:1.2;
  color:var(--prg-ink);
}
.prg-endcta p{ margin:0 0 28px; color:var(--prg-ink-3); font-size:18px; }
.prg-endcta .prg-actions{ justify-content:center; }

/* ============================= print ==================================== */
@media print{
  .prg-rail, .prg-endcta, .prg-actions,
  .prg-fallback-header, .prg-fallback-nav,
  .cml-announce, .cml-feature{ display:none !important; }
  .prg-body{ font-size:11pt; color:#000; background:#fff; }
  .prg-layout{ display:block; padding:0; }
  .prg-article{ max-width:none; }
  .prg-article > section{ break-inside:avoid-page; }
  .prg-article h2, .prg-article h3{ break-after:avoid-page; }
  .prg-fig, .prg-tablewrap{ break-inside:avoid-page; }
  .prg-body a{ color:#000; text-decoration:underline; }
  .prg-body a[href^="http"]::after{ content:" (" attr(href) ")"; font-size:9pt; color:#555; }
}

/* ========================= reduced motion =============================== */
@media (prefers-reduced-motion: reduce){
  .prg-body *{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
}
