/* CHXLive production contract. No network fonts, generated controls or JS required.
   Latin faces are static weights, not a fictitious variable range. Arial only
   supplies its real regular face; missing Medium/Semibold use the system stack.
   Curly quotes (U+2018–201D) deliberately remain in the Chinese fallback. */
@font-face {
  font-family: "CHX Flag Emoji";
  src: url("/assets/noto-color-emoji-flags-e20cbc2b.ttf") format("truetype");
  font-style: normal;
  font-weight: 400;
  font-display: block;
  unicode-range: U+1F1E6-1F1FF;
}
@font-face {
  font-family: "CHX Latin";
  src: local("Inter Regular"), local("Inter-Regular"), local("Arial");
  font-style: normal;
  font-weight: 400;
  size-adjust: 102%;
  unicode-range: U+0020-007E, U+00A0-024F;
}
@font-face {
  font-family: "CHX Latin";
  src: local("Inter Medium"), local("Inter-Medium");
  font-style: normal;
  font-weight: 500;
  size-adjust: 102%;
  unicode-range: U+0020-007E, U+00A0-024F;
}
@font-face {
  font-family: "CHX Latin";
  src: local("Inter SemiBold"), local("Inter-SemiBold");
  font-style: normal;
  font-weight: 600;
  size-adjust: 102%;
  unicode-range: U+0020-007E, U+00A0-024F;
}

:root {
  color-scheme: light;
  --bg: #fafaf7;
  --surface: #fff;
  --inset: #f4f3ee;
  --fg: #15171c;
  --strong: #0e0d0b;
  --muted: #54514a;
  --faint: #706c62;
  --line: #eeece5;
  --line-strong: #dcd8ce;
  --accent: #ff6a1a;
  --accent-hover: #e65c13;
  --accent-ink: #b8420b;
  --accent-soft: #fff4ec;
  --zone-muted: #f1f0e9;
  --zone-soft: #f6f5f0;
  --zone-rule: #dfdcd2;
  --selection: #ffd9c2;
  --good: #047857;
  --tbc: #805d00;
  --tbd: #b8420b;
  --live: #be123c;
  --fail: #9f1239;
  --good-bg: #e9f5ef;
  --tbc-bg: #fbf2dd;
  --tbd-bg: #fceee4;
  --fail-bg: #fbe9ed;
  --weekend: #f0f0ee;
  --chip-hover: #efeee8;
  --next-ink: #c2410c;
  --decoration: #a8a49a;
  --now-rule: #e8c9b5;
  --dot-ring: rgba(255,255,255,.75);
  --orbit-border: rgba(255,106,26,.25);
  --orbit-ripple: rgba(255,106,26,.6);
  --hover-tint: rgba(255,106,26,.045);
  --calendar-hover: rgba(255,106,26,.05);
  --next-start: rgba(255,106,26,.065);
  --next-end: rgba(255,106,26,.018);
  --on-accent: #241b13;
  --text: "CHX Latin", "PingFang SC", "Noto Sans CJK SC", "Microsoft YaHei", "Source Han Sans SC", sans-serif;
  font-family: var(--text);
  font-synthesis: none;
}

/* CSS owns the system fallback, even without JS. Older engines retain the
   complete light palette above rather than invalid custom-property colors. */
@supports (color: light-dark(white, black)) {
  :root {
    color-scheme: light dark;
    --bg: light-dark(#fafaf7, #141619);
    --surface: light-dark(#fff, #1a1d20);
    --inset: light-dark(#f4f3ee, #24272a);
    --fg: light-dark(#15171c, #e7e7e2);
    --strong: light-dark(#0e0d0b, #f5f4ef);
    --muted: light-dark(#54514a, #b9b9b1);
    --faint: light-dark(#706c62, #a1a29a);
    --line: light-dark(#eeece5, #303438);
    --line-strong: light-dark(#dcd8ce, #454a4e);
    --accent: light-dark(#ff6a1a, #ff8a4a);
    --accent-hover: light-dark(#e65c13, #ffa16a);
    --accent-ink: light-dark(#b8420b, #ffae7d);
    --accent-soft: light-dark(#fff4ec, #30231d);
    --zone-muted: light-dark(#f1f0e9, #222629);
    --zone-soft: light-dark(#f6f5f0, #1b1e21);
    --zone-rule: light-dark(#dfdcd2, #3b4043);
    --selection: light-dark(#ffd9c2, #59321e);
    --good: light-dark(#047857, #6cdbad);
    --tbc: light-dark(#805d00, #efc96d);
    --tbd: light-dark(#b8420b, #ffae7d);
    --live: light-dark(#be123c, #ff8ca8);
    --fail: light-dark(#9f1239, #ff8ca8);
    --good-bg: light-dark(#e9f5ef, #18332b);
    --tbc-bg: light-dark(#fbf2dd, #352d1c);
    --tbd-bg: light-dark(#fceee4, #38271e);
    --fail-bg: light-dark(#fbe9ed, #3a222b);
    --weekend: light-dark(#f0f0ee, #1c1f22);
    --chip-hover: light-dark(#efeee8, #303538);
    --next-ink: light-dark(#c2410c, #ffae7d);
    --decoration: light-dark(#a8a49a, #969890);
    --now-rule: light-dark(#e8c9b5, #6c4530);
    --dot-ring: light-dark(rgba(255,255,255,.75), rgba(20,22,25,.85));
    --orbit-border: light-dark(rgba(255,106,26,.25), rgba(255,138,74,.4));
    --orbit-ripple: light-dark(rgba(255,106,26,.6), rgba(255,138,74,.8));
    --hover-tint: light-dark(rgba(255,106,26,.045), rgba(255,138,74,.08));
    --calendar-hover: light-dark(rgba(255,106,26,.05), rgba(255,138,74,.08));
    --next-start: light-dark(rgba(255,106,26,.065), rgba(255,138,74,.12));
    --next-end: light-dark(rgba(255,106,26,.018), rgba(255,138,74,.025));
  }
  :root[data-theme="light"] { color-scheme: light; }
  :root[data-theme="dark"] { color-scheme: dark; }
}

*, *::before, *::after { box-sizing: border-box; }
html { background: var(--bg); -webkit-text-size-adjust: 100%; scrollbar-gutter: stable; }
body {
  margin: 0;
  color: var(--fg);
  background: var(--bg);
  font-size: 15px;
  line-height: 1.7;
  overflow-wrap: anywhere;
  word-break: normal;
  -webkit-font-smoothing: antialiased;
}
[hidden] { display: none !important; }
h1, h2, h3, h4 { color: var(--strong); font-weight: 600; }
h1 { margin: 0; font-size: clamp(30px, 4vw, 40px); line-height: 1.3; }
h2 { margin: 0 0 16px; font-size: 22px; line-height: 1.4; }
h3 { margin: 0 0 12px; font-size: 18px; line-height: 1.45; }
p { margin: 0 0 16px; }
a { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 4px; }
a:hover { color: var(--accent-ink); }
strong, b { font-weight: 600; }
small { font-size: 12px; line-height: 1.6; }
img, svg { max-inline-size: 100%; vertical-align: middle; }
img { height: auto; }
figure { margin: 0; min-width: 0; }
figcaption { margin-top: 8px; color: var(--muted); font-size: 12px; line-height: 1.6; }
button, input, select, textarea { max-width: 100%; min-width: 0; font: inherit; color: inherit; }
button, select, input, textarea {
  border: 1px solid var(--line-strong);
  border-radius: 8px;
  background: var(--surface);
  padding: 8px 12px;
  line-height: 1.5;
}
button, select { cursor: pointer; }
button { min-height: 44px; font-weight: 500; }
button:hover:not(:disabled) { background: var(--accent-soft); border-color: var(--accent-hover); }
:disabled { cursor: not-allowed; opacity: .6; }
input, select { min-height: 44px; }
textarea { width: 100%; resize: vertical; }
::placeholder { color: var(--faint); opacity: 1; }
:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 4px; }
::selection { color: var(--strong); background: var(--selection); }

.shell { width: calc(100% - 48px); max-width: 960px; margin-inline: auto; min-width: 0; }
.site-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px 24px;
  min-height: 72px;
  padding-block: 12px;
  border-bottom: 1px solid var(--line);
}
/* Supports header.shell as well as header > .shell. */
.site-header > .shell { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 24px; }
.brand { display: inline-flex; align-items: center; gap: 10px; min-width: 0; text-decoration: none; }
.brand img, .brand svg { display: block; width: 32px; height: 32px; flex: 0 0 32px; object-fit: contain; }
.brand-name { font-size: 18px; line-height: 1.4; font-weight: 600; }
.brand-name small { margin-inline-start: 6px; color: var(--muted); font-size: 10px; font-weight: 400; letter-spacing: .08em; }
.intro { padding-block: 40px 32px; }
.intro p:not(.eyebrow) { max-width: 42em; margin: 12px 0 0; color: var(--muted); font-size: 14px; line-height: 1.75; }
.eyebrow { margin: 0 0 10px; color: var(--muted); font-size: 11px; font-weight: 500; line-height: 1.5; letter-spacing: .08em; }

.filters, .month-nav { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; margin: 0; padding-block: 16px; border-block: 1px solid var(--line); }
.filters label { display: grid; gap: 4px; min-width: 0; font-size: 12px; color: var(--muted); }
.filters input, .filters select { width: 100%; color: var(--fg); }
.filters > * { min-width: 0; max-width: 100%; }
.filters a, .month-nav a { display: inline-flex; align-items: center; min-height: 44px; padding: 6px 0; }
.month-nav { justify-content: space-between; }
.month-nav h1, .month-nav h2, .month-nav p { margin: 0; font-size: 22px; line-height: 1.4; }
.month-nav time { font-variant-numeric: tabular-nums; }

/* Preferred row structure: li.launch-row > .launch-time + .launch-content
   + .status. Status can instead be nested inside .launch-content. */
.timeline { margin: 0; padding: 0; list-style: none; }
.timeline ul { margin: 0; padding: 0; list-style: none; }
.timeline > h2, .timeline > li > h2, .timeline > section > h2 { margin: 24px 0 12px; font-size: 18px; }
.launch-row {
  display: grid;
  grid-template-columns: 104px minmax(0, 1fr) auto;
  align-items: start;
  gap: 16px;
  padding-block: 20px;
  border-bottom: 1px solid var(--line);
  min-width: 0;
}
.launch-row > * { min-width: 0; max-width: 100%; }
.launch-time { font-size: 24px; font-weight: 500; line-height: 1.3; font-variant-numeric: tabular-nums; }
.launch-time time { font-variant-numeric: tabular-nums; }
.launch-time small, .launch-time span { display: block; margin-top: 6px; color: var(--muted); font-size: 11px; font-weight: 400; line-height: 1.5; }
.launch-content { min-width: 0; display: flow-root; }
.launch-title { margin: 0; font-size: 17px; font-weight: 600; line-height: 1.45; }
.launch-title a { text-decoration: none; }
.launch-title a:hover { text-decoration: underline; }
.launch-meta { display: flex; flex-wrap: wrap; gap: 2px 12px; margin: 6px 0 0; color: var(--muted); font-size: 12px; line-height: 1.65; }
.launch-meta > * { min-width: 0; }
.launch-content > .status { margin-top: 8px; }
.status { display: inline-block; color: var(--muted); font-size: 12px; font-weight: 500; line-height: 1.6; }
.launch-row > .status { margin-top: 4px; text-align: end; max-width: 10em; }
/* Both .status.good and .status.status-good are accepted. Text labels must
   name the state: color alone is not an accessible status indication.
   Go/Success = good; TBC/Hold/Partial Failure = tbc; TBD = tbd. */
.status.good, .status.status-good { color: var(--good); }
.status.tbc, .status.status-tbc { color: var(--tbc); }
.status.tbd, .status.status-tbd { color: var(--tbd); }
.status.live, .status.status-live { color: var(--live); }
.status.fail, .status.status-fail { color: var(--fail); }
.status.sched, .status.status-sched { color: var(--muted); }
.empty-state { padding-block: 40px; color: var(--muted); border-bottom: 1px solid var(--line); }
.empty-state p:last-child { margin-bottom: 0; }

.detail-header { padding-block: 40px 24px; border-bottom: 1px solid var(--line); }
.detail-header .launch-meta { margin-top: 16px; }
.detail-header .status { margin-top: 12px; }
/* dl.detail-grid uses direct dt/dd pairs; no wrapper elements required. */
.detail-grid { display: grid; grid-template-columns: minmax(100px, 160px) minmax(0, 1fr); gap: 0 24px; margin: 24px 0; }
.detail-grid dt, .detail-grid dd { min-width: 0; margin: 0; padding-block: 12px; border-bottom: 1px solid var(--line); line-height: 1.7; }
.detail-grid dt { color: var(--muted); font-size: 13px; }
.detail-grid dd { font-size: 14px; }
.detail-description { max-width: 72ch; margin-block: 32px; font-size: 15px; line-height: 1.75; }
.detail-description ul, .detail-description ol { padding-inline-start: 24px; }
.detail-description pre, .plain-text { white-space: pre-wrap; overflow-wrap: anywhere; }
.task-image { display: block; width: 100%; max-width: 640px; height: auto; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 6px; margin-block: 24px; }
figure.task-image { aspect-ratio: auto; }
figure.task-image img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 6px; }

/* Keep real titles and seven weekday columns. Narrow screens scroll only
   this labelled region, never squeeze each day into unreadable 40px strips. */
.calendar-scroll { max-width: 100%; overflow-x: auto; overscroll-behavior-inline: contain; margin-block: 24px; }
.calendar-scroll-note { display: none; color: var(--muted); font-size: 12px; }
.month-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); min-width: 770px; gap: 1px; margin: 0; padding: 1px; list-style: none; background: var(--line); }
@media (max-width: 820px) { .calendar-scroll-note { display: block; } }
.day-cell { min-width: 0; min-height: 112px; padding: 10px 8px; background: var(--bg); }
.day-cell[aria-current="date"] { background: var(--accent-soft); }
.day-number { display: block; font-size: 13px; font-weight: 500; line-height: 1.5; font-variant-numeric: tabular-nums; }
.day-launch { display: block; margin-top: 8px; font-size: 12px; line-height: 1.55; overflow-wrap: anywhere; }
.day-launch time { display: block; white-space: nowrap; color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.error-page { max-width: 640px; min-height: 40vh; padding-block: 64px; }
.error-page p { margin-top: 16px; color: var(--muted); }
.turbo-progress-bar { height: 3px; background: var(--accent); }
.skip-link { position: fixed; top: -10rem; left: 12px; z-index: 100; padding: 8px 16px; background: var(--surface); color: var(--fg); border: 2px solid var(--accent); }
.skip-link:focus { top: 12px; }
.weekday { padding-block: 8px; text-align: center; font-size: 12px; color: var(--muted); border-bottom: 1px solid var(--line); }
.uncertain-plans { margin-top: 32px; }
.uncertain-plans > p { color: var(--muted); font-size: 13px; }

/* Display preferences never change the Beijing date groups or month grid. */
.date-group { margin-block: 28px 12px; min-width: 0; }
.date-group > h2, h2.date-group { margin-block: 0 12px; font-size: 18px; }
.row-thumbnail {
  float: right;
  display: block;
  width: 96px;
  max-width: 32%;
  margin: 0 0 8px 16px;
  border-radius: 6px;
}
img.row-thumbnail, .row-thumbnail img { aspect-ratio: 4 / 3; object-fit: cover; }
.row-thumbnail img { display: block; width: 100%; border-radius: inherit; }
html:not([data-thumbnails="true"]) .row-thumbnail { display: none; }
.display-controls {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 16px;
  min-width: 0;
  margin-block: 16px;
}
.display-controls { padding-block: 12px; color: var(--muted); font-size: 12px; border-bottom: 1px solid var(--line); }
.display-controls > * { min-width: 0; max-width: 100%; }
.display-controls label { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 8px; min-height: 44px; }
.display-controls select { color: var(--fg); }
.display-controls input[type="checkbox"] { flex: 0 0 20px; width: 20px; height: 20px; min-height: 20px; margin: 0; padding: 0; accent-color: var(--accent-ink); }
.display-controls p, .display-controls > small { flex-basis: 100%; margin: 0; }
.next-launch { margin-block: 24px; padding: 20px; border: 1px solid var(--line); border-inline-start: 3px solid var(--accent); border-radius: 6px; background: var(--surface); min-width: 0; }
.next-launch h2 { margin-bottom: 10px; font-size: 18px; }
.next-launch p:last-child { margin-bottom: 0; }
[data-countdown-iso] { font-variant-numeric: tabular-nums; }
.detail-extra { margin-block: 32px; min-width: 0; }
.detail-extra h2 { font-size: 20px; }
.detail-extra ul, .detail-extra ol { padding-inline-start: 24px; }
.detail-extra pre { max-width: 100%; white-space: pre-wrap; overflow-wrap: anywhere; }
.detail-extra table { display: block; max-width: 100%; overflow-x: auto; border-collapse: collapse; }
.detail-extra th, .detail-extra td { padding: 8px; border-bottom: 1px solid var(--line); text-align: start; }
.window-range { color: var(--muted); font-size: 13px; line-height: 1.7; font-variant-numeric: tabular-nums; }
.window-range time { display: inline; }
.updates { margin-block: 24px; padding: 0; list-style: none; }
.update-row { display: grid; grid-template-columns: minmax(100px, 160px) minmax(0, 1fr); gap: 8px 24px; padding-block: 16px; border-bottom: 1px solid var(--line); }
.update-row > * { min-width: 0; margin: 0; }
.update-row time { color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.update-row p:last-child { margin-bottom: 0; }
.pagination, .pagination ul { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px 16px; }
.pagination { margin-block: 28px; }
.pagination ul { padding: 0; margin: 0; list-style: none; }
.pagination a, .pagination span { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; padding: 6px 10px; }
.pagination [aria-current="page"] { color: var(--accent-ink); background: var(--accent-soft); border-radius: 6px; }
.pagination [aria-disabled="true"] { color: var(--muted); text-decoration: none; }
.sitemap-note { margin-block: 20px; color: var(--muted); font-size: 12px; line-height: 1.7; }
main[aria-busy="true"] { cursor: progress; }

@media (max-width: 600px) {
  .display-controls { gap: 8px 12px; }
  .row-thumbnail { width: 72px; margin-inline-start: 10px; }
  .next-launch { padding: 16px; }
  .update-row { grid-template-columns: minmax(0, 1fr); gap: 6px; }
  .shell { width: calc(100% - 32px); }
  .site-header { min-height: 64px; gap: 4px 16px; }
  .intro { padding-block: 28px 24px; }
  .launch-row { grid-template-columns: 72px minmax(0, 1fr); gap: 6px 12px; padding-block: 16px; }
  .launch-time { grid-column: 1; grid-row: 1 / span 2; font-size: 22px; }
  .launch-content { grid-column: 2; }
  .launch-title { font-size: 16px; }
  .launch-row > .status { grid-column: 2; margin: 0; max-width: 100%; text-align: start; }
  .launch-meta { gap: 2px 8px; }
  .detail-header { padding-block: 28px 20px; }
  .detail-grid { grid-template-columns: 80px minmax(0, 1fr); column-gap: 16px; }
  .filters { align-items: end; }
  .filters label { flex: 1 1 140px; }
  .day-cell { min-height: 88px; padding: 8px 4px; }
  .day-launch { font-size: 12px; }
  .day-launch time { font-size: 11px; }
}
@media (max-width: 360px) {
  .shell { width: calc(100% - 24px); }
  .launch-row { grid-template-columns: 64px minmax(0, 1fr); column-gap: 8px; }
  .launch-time { font-size: 20px; }
  .day-cell { padding-inline: 2px; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}
@media (forced-colors: active) {
  .day-cell[aria-current="date"] { outline: 2px solid Highlight; outline-offset: -2px; }
}

/* Homepage restoration: final V2.5 cascade, not the older design-token draft.
   These rules deliberately do not alter calendar/detail/error layouts. */
.page-home {
  font-size: 14px;
  line-height: 1.64;
  letter-spacing: -.012em;
  text-rendering: optimizeLegibility;
  /* Match the reference's synthetic bold when only a regular CJK face exists. */
  font-synthesis: weight;
}
.page-home .shell, .page-calendar .shell { width: calc(100% - 72px); max-width: 1000px; }
.page-home a { text-decoration: none; }
.ui-icon { display: inline-block; width: 14px; height: 14px; flex: none; vertical-align: -2px; }
.ui-icon-external { width: 16px; height: 16px; }
/* Shared masthead owns typography as well as geometry; never inherit route
   body settings (notably font synthesis and line-height). */
.landing-header, .site-header-band { font-size: 14px; line-height: 1.64; letter-spacing: -.012em; text-rendering: optimizeLegibility; font-synthesis: weight; }
.landing-header .hero { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 14px 36px; align-items: stretch; padding: 32px 0; }
.landing-header .hero-countdown { margin: 12px 0 0; color: var(--next-ink); font-size: 24px; font-weight: 600; line-height: 1.4; letter-spacing: 0; font-variant-numeric: tabular-nums; }
.landing-header .hero-summary { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; line-clamp: 3; overflow: hidden; margin: 10px 0 0; max-width: 48em; color: var(--muted); font-size: 13px; line-height: 1.85; }
.landing-header .hero-orbit { margin: 10px 0 0; padding-top: 10px; border-top: 1px solid var(--line); color: var(--faint); font-size: 11px; line-height: 1.75; }
.landing-header .hero-detail { margin: 8px 0 0; }
.landing-header .hero-detail-link { display: inline-flex; align-items: center; gap: 5px; min-height: 24px; color: var(--accent-ink); font-size: 11px; font-weight: 400; text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
.landing-header .hero-figure { grid-column: 2; grid-row: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; align-self: center; }
.landing-header .hero-image-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; width: 100%; aspect-ratio: 25 / 16; flex: none; min-height: 0; padding: 16px; background: var(--zone-soft); border-block: 1px solid var(--line); color: var(--faint); text-align: center; font-size: 13px; }
.landing-header .hero-image-empty small { max-width: 20em; font-size: 10px; }
.landing-header .hero-copy { min-width: 0; }
.landing-header .kicker { font-size: 10px; color: var(--faint); font-weight: 650; letter-spacing: .11em; margin: 0 0 10px; }
.landing-header .kicker span { color: var(--accent); padding-inline: 3px; }
.landing-header .hero :is(h1, h2) { margin: 0; font-size: clamp(25px, 2.8vw, 35px); font-weight: 690; letter-spacing: -.037em; line-height: 1.31; white-space: normal; min-height: 0; overflow-wrap: anywhere; }
.landing-header .hero :is(h1, h2) a { color: inherit; text-decoration: none; }
.landing-header .hero :is(h1, h2) a:hover { color: var(--accent-ink); }
/* The single page H1 names the column; it is a quiet label above the Hero. */
.landing-header .hero-window { display: flex; flex-wrap: wrap; align-items: center; gap: 3px 8px; margin: 8px 0 0; color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; }
/* Hero and calendar popovers share badge states; route styles stay scoped. */
:is(.landing-header .hero-window, .page-calendar .cal-tip) .status { display: inline-block; margin: 0; padding: 1px 6px; border: 0; border-radius: 4px; background: var(--inset); color: var(--muted); font-size: 12px; font-weight: 500; line-height: 1.6; letter-spacing: 0; white-space: nowrap; }
:is(.landing-header .hero-window, .page-calendar .cal-tip) .status.good { background: var(--good-bg); color: var(--good); }
:is(.landing-header .hero-window, .page-calendar .cal-tip) .status.tbc { background: var(--tbc-bg); color: var(--tbc); }
:is(.landing-header .hero-window, .page-calendar .cal-tip) .status.tbd { background: var(--tbd-bg); color: var(--tbd); }
:is(.landing-header .hero-window, .page-calendar .cal-tip) .status.fail { background: var(--fail-bg); color: var(--fail); }
:is(.landing-header .hero-window, .page-calendar .cal-tip) .status.live { background: var(--fail-bg); color: var(--live); }
:is(.landing-header .hero-window, .page-calendar .cal-tip) .status.sched { background: var(--inset); color: var(--muted); }
/* Term links stay quiet in data rows: the dotted underline marks the definition. */
a.term-link, a.terms-link { color: inherit; text-decoration: underline dotted; text-decoration-thickness: 1px; text-decoration-color: color-mix(in srgb, currentColor 55%, transparent); text-underline-offset: 3px; }
a.term-link:hover, a.term-link:focus-visible, a.terms-link:hover, a.terms-link:focus-visible { color: var(--accent-ink); text-decoration-style: solid; }
/* Status badges link to the glossary and keep their badge colours; the badge
   stays plain and only gains an underline on hover. */
a.status { text-decoration: none; }
a.status:hover, a.status:focus-visible { text-decoration: underline; text-underline-offset: 2px; }
.landing-header .hero-period { color: var(--accent); font: inherit; letter-spacing: 0; margin-left: 2px; }
.landing-header .lede { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 12px; margin: 11px 0 0; font-size: 13px; line-height: 1.75; color: var(--muted); letter-spacing: 0; max-width: 420px; }
.landing-header .lede > span { min-width: 0; overflow-wrap: anywhere; }
.landing-header .hero-facts { display: flex; flex-wrap: wrap; align-items: center; gap: 5px 14px; }
.landing-header .hero-fact { display: inline-flex; align-items: center; gap: 5px; min-width: 0; }
.landing-header .hero-fact > :last-child { min-width: 0; overflow-wrap: anywhere; }
.landing-header .hero-fact-icon { width: 13px; height: 13px; flex: 0 0 13px; color: var(--faint); stroke-width: 1.65; }
/* The model/provider pair is owned by the shared .mission-identity row below;
   no route adds its own type emphasis on top of it. */
.landing-header .hero-figure img { display: block; width: 100%; height: auto; min-height: 0; flex: none; object-fit: contain; object-position: center; border-radius: 2px; }
.landing-header .view-switcher { display: flex; align-items: stretch; height: 60px; }
.landing-header .tabs { display: flex; align-items: stretch; gap: 26px; }
/* Equal weights reserve the same link widths when the active tab changes. */
.landing-header .tab { display: flex; align-items: center; position: relative; padding: 0 1px; white-space: nowrap; color: var(--faint); font-size: 13px; font-weight: 650; text-decoration: none; }
.landing-header .tab:hover { color: var(--muted); }
.landing-header .tab[aria-current="page"] { color: var(--fg); }
.landing-header .tab[aria-current="page"]::after { content: ""; position: absolute; bottom: 0; left: 0; right: 0; height: 2px; background: var(--accent); }
.page-home .tools { display: flex; align-items: center; gap: 15px; min-width: 0; }
.page-home .display-controls { display: flex; flex-wrap: nowrap; align-items: center; gap: 8px; margin: 0; padding: 0; border: 0; }
.page-home .display-controls { gap: 15px; }
.page-home .display-controls label { flex-wrap: nowrap; gap: 5px; min-height: 30px; white-space: nowrap; font-size: 11px; color: var(--faint); }
.page-home .display-controls .tz { border: 0; background: transparent; max-width: 116px; padding: 4px 0; min-height: 30px; font-size: 11px; color: var(--muted); }
.page-home .display-controls input[type="checkbox"] { width: 12px; height: 12px; min-height: 12px; flex-basis: 12px; accent-color: var(--accent-ink); }
.page-home .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
.page-home .heading-line { padding: 24px 0 10px; display: flex; align-items: baseline; justify-content: space-between; gap: 16px; }
.page-home .heading-line :is(h1, h2) { margin: 0; font-size: 18px; line-height: 1.4; font-weight: 670; letter-spacing: -.025em; }
.page-home .heading-line small { font-size: 11px; color: var(--faint); }
.page-home .timeline-section { margin-bottom: 8px; }
.page-home .timeline-heading { padding: 13px 0 8px; display: flex; align-items: baseline; justify-content: space-between; gap: 15px; }
.page-home .timeline-heading h3 { margin: 0; font-size: 14px; font-weight: 660; letter-spacing: 0; line-height: 1.64; flex-shrink: 0; }
.page-home .timeline-heading small { font-size: 11px; color: var(--faint); text-align: right; }
.page-home .recent-section .timeline-heading { padding-top: 1px; }
.page-home .upcoming-section .timeline-heading { padding-top: 4px; }
.page-home .date-group.day-title { display: flex; align-items: baseline; gap: 8px; margin: 0; padding: 11px 0 8px; }
.page-home .day-title h4 { margin: 0; font-size: 12px; font-weight: 620; letter-spacing: 0; color: var(--muted); line-height: 1.64; }
.page-home .day-count { font-size: 10px; letter-spacing: 0; color: var(--decoration); margin-left: auto; }
:is(.page-home, .page-calendar) .launch-row.record { display: grid; grid-template-columns: 86px minmax(0, 1fr) 167px 78px; gap: 15px; align-items: center; min-height: 79px; width: 100%; padding: 12px 14px 13px 0; border: 0; border-top: 1px solid var(--line); background: transparent; text-align: left; color: var(--fg); transition: background .12s; }
:is(.page-home, .page-calendar) .record:hover { background: var(--hover-tint); }
/* Homepage rows are plain containers: one overlay link owns the row click and
   real term/status links sit above it. Calendar rows keep their own anchor. */
.page-home .launch-row:has(> a.task-link) { position: relative; isolation: isolate; }
.page-home .launch-row:has(> a.task-link) > a.task-link { position: absolute; inset: 0; z-index: 1; display: block; border-radius: inherit; color: inherit; text-decoration: none; font: inherit; -webkit-tap-highlight-color: transparent; }
.page-home .launch-row:has(> a.task-link) > a.task-link:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
.page-home .launch-row:has(> a.task-link) :is(a.term-link, a.terms-link, a.status) { position: relative; z-index: 2; }
/* Contained next-launch highlight: one full-height rail, no detached timeline dot.
   Insets are deducted from the edge columns so mission text keeps its axis. */
.page-home .record.next-launch { position: relative; isolation: isolate; margin: 0; padding: 14px 14px 14px 16px; grid-template-columns: 70px minmax(0, 1fr) 167px 78px; border-radius: 4px; background: linear-gradient(90deg,var(--next-start),var(--next-end)); }
.page-home .record.next-launch:hover { background: var(--accent-soft); }
.page-home .record.next-launch::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 2px; background: var(--accent); border-radius: 2px; pointer-events: none; }
.page-home .heading-line { min-height: 26px; }
.timeline-tools { display: flex; align-items: center; gap: 10px; }
/* Only time content is inset: the mission column and contained rail stay put. */
:is(.page-home, .page-calendar) .record:not(.next-launch) .time-col { padding-inline-start: 16px; }
:is(.page-home, .page-calendar) .record .time-col { position: relative; align-self: center; grid-column: auto; grid-row: auto; font-size: inherit; line-height: inherit; }
:is(.page-home, .page-calendar) .record .clock { font-size: 24px; font-weight: 640; line-height: 1.06; letter-spacing: -.045em; font-variant-numeric: tabular-nums; }
:is(.page-home, .page-calendar) .record .clock.undetermined { font-size: 15px; color: var(--muted); letter-spacing: 0; }
.page-home .next-launch .clock { display: block; color: var(--next-ink); }
.page-home .next-label { display: block; margin-bottom: 6px; color: var(--next-ink); font-size: 9px; font-weight: 550; line-height: 1.3; letter-spacing: .03em; }
.page-home .next-countdown { display: block; margin-top: 7px; color: var(--next-ink); font-size: 16px; font-weight: 500; line-height: 1.5; letter-spacing: 0; font-variant-numeric: tabular-nums; }
.page-home .next-countdown span { font: inherit; font-variant-numeric: tabular-nums; }
:is(.page-home, .page-calendar) .record .time-note { display: block; font-size: 10px; line-height: 1.3; letter-spacing: 0; margin-top: 6px; color: var(--faint); font-weight: 400; }
.page-home .launch-time .time-note span { display: inline; margin: 0; font: inherit; color: inherit; }
:is(.page-home, .page-calendar) .record .main-col { display: flex; align-items: center; gap: 13px; grid-column: auto; }
:is(.page-home, .page-calendar) .record .thumb { float: none; display: block; width: 94px; height: 61px; flex: 0 0 94px; max-width: none; margin: 0; border-radius: 6px; background: var(--inset); overflow: hidden; }
:is(.page-home, .page-calendar) .record .thumb img { display: block; width: 100%; height: 100%; aspect-ratio: auto; object-fit: cover; border-radius: inherit; }
html:not([data-thumbnails="true"]) :is(.page-home, .page-calendar) .record .thumb { display: none; }
.page-home .record-copy { min-width: 0; }
:is(.page-home, .page-calendar) .record .mission { margin: 0; font-size: 15px; line-height: 1.42; font-weight: 650; letter-spacing: -.013em; overflow-wrap: anywhere; }
:is(.page-home, .page-calendar) .record .subline { display: flex; flex-wrap: wrap; gap: 0 8px; font-size: 11px; line-height: 1.65; margin: 5px 0 0; color: var(--muted); }
:is(.page-home, .page-calendar) .record .precision-note { display: block; font-size: 10px; line-height: 1.5; color: var(--faint); margin-top: 3px; }
:is(.page-home, .page-calendar) .record .place { font-size: 11px; color: var(--faint); line-height: 1.65; }
.page-home .place :is(em.status, a.status) { display: none; }
.page-home .record > .status { grid-column: auto; display: flex; align-items: center; justify-content: flex-end; white-space: nowrap; margin: 0; max-width: none; font-size: 11px; font-weight: 590; text-align: right; line-height: 1.6; }
.page-home .status .arr { display: inline-block; flex: none; font-size: 13px; font-weight: 400; line-height: 1; margin-left: 4px; color: var(--decoration); }
.page-home .now-divider { display: flex; align-items: center; gap: 11px; margin: 24px 0 14px; color: var(--next-ink); }
.page-home .now-divider::before, .page-home .now-divider::after { content: ""; height: 1px; background: var(--line); flex: 1; }
.page-home .now-divider::before { max-width: 21px; background: var(--line-strong); }
.page-home .now-orbit { position: relative; width: 18px; height: 18px; flex: 0 0 18px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--orbit-border); border-radius: 50%; background: var(--accent-soft); }
.page-home .now-orbit i { width: 8px; height: 8px; background: var(--accent); display: block; border-radius: 50%; box-shadow: 0 0 0 2px var(--dot-ring); }
/* Only the decorative halo expands. The dot, NOW text and divider stay fixed. */
.page-home .now-orbit::after { content: ""; position: absolute; inset: -1px; border: 1px solid var(--orbit-ripple); border-radius: 50%; opacity: 0; transform: scale(1); pointer-events: none; }
@keyframes now-orbit-ripple {
  0% { opacity: 0; transform: scale(.85); }
  20% { opacity: .65; }
  100% { opacity: 0; transform: scale(1.85); }
}
@media (prefers-reduced-motion: no-preference) {
  .page-home .now-orbit[data-now-attention]::after { animation: now-orbit-ripple 2.2s ease-out 2; }
  .page-home .now-orbit[data-now-attention]:hover::after { animation-play-state: paused; }
}
.page-home .now-center { display: flex; align-items: baseline; gap: 6px; font-size: 12px; font-weight: 650; letter-spacing: 0; white-space: nowrap; }
.page-home .now-center small { color: var(--faint); font-size: 9px; font-weight: 550; letter-spacing: .07em; }
.page-home .note { border-top: 1px solid var(--line); padding: 19px 0 8px; display: flex; gap: 12px; align-items: flex-start; color: var(--faint); font-size: 11px; line-height: 1.8; margin-top: 20px; }
.page-home .note a { color: var(--muted); text-decoration: underline; }

@media (max-width: 920px) {
  .page-home .shell, .page-calendar .shell { width: calc(100% - 52px); }
  .landing-header .hero { column-gap: 24px; }
  :is(.page-home, .page-calendar) .launch-row.record { grid-template-columns: 76px minmax(0, 1fr) 115px 78px; gap: 11px; }
  .page-home .record.next-launch { grid-template-columns: 60px minmax(0, 1fr) 115px 78px; }
  :is(.page-home, .page-calendar) .record .thumb { width: 83px; height: 58px; flex-basis: 83px; }
  :is(.page-home, .page-calendar) .record .main-col { gap: 11px; }
}
@media (max-width: 740px) {
  .page-home .shell, .page-calendar .shell { width: calc(100% - 34px); }
  .landing-header .hero { grid-template-columns: minmax(0, 1fr); align-items: start; gap: 14px; padding: 24px 0 22px; }
  .landing-header .hero-figure { grid-column: 1; grid-row: auto; align-self: start; width: 100%; }
  .landing-header .hero-countdown { font-size: 20px; }
  .landing-header .hero-summary { font-size: 12px; line-height: 1.8; }
  .landing-header .hero-orbit { font-size: 10px; }
  .landing-header .hero-image-empty { padding: 10px; gap: 5px; font-size: 11px; }
  .landing-header .hero-image-empty small { font-size: 9px; line-height: 1.5; }
  .landing-header .kicker { font-size: 9px; margin-bottom: 9px; letter-spacing: .04em; }
  .landing-header h1 { font-size: clamp(25px, 7vw, 29px); line-height: 1.29; letter-spacing: -.052em; }
  .landing-header .lede { font-size: 11px; line-height: 1.65; margin-top: 9px; max-width: 225px; }
  .landing-header .desktop-only { display: none; }
  .landing-header .hero-figure img { width: 100%; }
  .landing-header .view-switcher { height: 52px; padding-bottom: 9px; }
  .landing-header .tabs { gap: 24px; }
  .page-home .tools { width: 100%; min-height: 33px; gap: 8px; justify-content: space-between; flex-wrap: wrap; }
  .page-home .display-controls { gap: 8px; }
  .page-home .display-controls .tz { max-width: 94px; font-size: 11px; }
  .page-home .display-controls label { font-size: 11px; }
  .page-home .heading-line { padding: 20px 0 6px; }
  .page-home .heading-line :is(h1, h2) { font-size: 16px; }
  .page-home .heading-line small { font-size: 10px; text-align: right; }
  .page-home .timeline-heading { padding: 11px 0 7px; }
  .page-home .timeline-heading h3 { font-size: 13px; }
  .page-home .timeline-heading small { font-size: 10px; }
  .page-home .recent-section .timeline-heading { padding-top: 2px; }
  .page-home .date-group.day-title { padding: 10px 0 8px; }
  :is(.page-home, .page-calendar) .launch-row.record { grid-template-columns: 65px minmax(0, 1fr); grid-template-areas: "time main" "time place"; gap: 1px 8px; min-height: 79px; padding: 11px 12px 12px 0; }
  :is(.page-home, .page-calendar) .record .time-col { grid-area: time; align-self: start; padding-top: 2px; }
  :is(.page-home, .page-calendar) .record .clock { font-size: 20px; }
  :is(.page-home, .page-calendar) .record .clock.undetermined { font-size: 12px; }
  :is(.page-home, .page-calendar) .record .time-note { font-size: 9px; margin-top: 5px; }
  :is(.page-home, .page-calendar) .record .main-col { grid-area: main; align-items: flex-start; gap: 9px; }
  :is(.page-home, .page-calendar) .record .thumb { width: 69px; height: 51px; flex: 0 0 69px; border-radius: 5px; }
  :is(.page-home, .page-calendar) .record .mission { font-size: 13px; line-height: 1.4; font-weight: 660; }
  :is(.page-home, .page-calendar) .record .subline { font-size: 10px; line-height: 1.55; margin-top: 4px; }
  :is(.page-home, .page-calendar) .record .precision-note { font-size: 9px; }
  :is(.page-home, .page-calendar) .record .place { grid-area: place; display: flex; flex-wrap: wrap; gap: 0 7px; align-items: baseline; font-size: 10px; line-height: 1.5; padding-top: 3px; }
  .page-home .place :is(em.status, a.status) { display: inline; margin-left: auto; font-size: 10px; font-style: normal; white-space: nowrap; }
  .page-home .record > :is(a, em).row-status { display: none; }
  .page-home .place .arr { font-size: 10px; }
  .page-home .record.next-launch { grid-template-columns: 51px minmax(0, 1fr); padding: 13px 12px 13px 14px; }
  .page-home .next-label { font-size: 8.5px; margin-bottom: 5px; }
  .page-home .next-countdown { font-size: 14px; margin-top: 6px; }
  :is(.page-home, .page-calendar) .record:not(.next-launch) .time-col { padding-inline-start: 14px; }
  .page-home .now-divider { margin: 19px 0 10px; gap: 10px; }
  .page-home .now-orbit { width: 16px; height: 16px; flex-basis: 16px; }
  .page-home .now-orbit i { height: 7px; width: 7px; }
  .page-home .now-center { font-size: 11px; }
  .page-home .note { margin-top: 13px; }
}
@media (max-width: 370px) {
  .page-home .shell, .page-calendar .shell { width: calc(100% - 28px); }
  .landing-header .hero { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  .landing-header h1 { font-size: 24px; }
  .landing-header .lede { font-size: 10px; }
  .page-home .tools { gap: 6px; }
  .page-home .display-controls .tz { max-width: 83px; }
  .page-home .display-controls, .page-home .display-controls label { gap: 5px; font-size: 10px; }
  :is(.page-home, .page-calendar) .record .thumb { width: 62px; height: 48px; flex-basis: 62px; }
  :is(.page-home, .page-calendar) .record .main-col { gap: 7px; }
  :is(.page-home, .page-calendar) .launch-row.record { grid-template-columns: 60px minmax(0, 1fr); gap: 2px 6px; }
  .page-home .record.next-launch { grid-template-columns: 46px minmax(0, 1fr); }
  :is(.page-home, .page-calendar) .record .clock { font-size: 19px; }
  :is(.page-home, .page-calendar) .record .mission { font-size: 12px; }
}
@media (prefers-reduced-motion: reduce) { :is(.page-home, .page-calendar) .launch-row.record { transition: none; } }
@media (forced-colors: active) {
  .page-home .now-orbit, .page-home .record.next-launch::before { border: 1px solid Highlight; }
  .page-home .now-orbit i { background: Highlight; }
  .page-home .now-orbit[data-now-attention]::after { animation: none; }
  .landing-header .tab[aria-current="page"] { text-decoration: underline; }
}

/* v2.5 alignment for the calendar and detail routes without changing their
   DOM contracts. Home keeps its own .page-home scope and visual gate. */
.page-calendar .shell, .page-detail .shell { max-width: 1000px; }
.page-calendar .site-header, .page-detail .site-header { min-height: 64px; }
.page-calendar .intro, .page-detail .detail-header { padding-block: 32px 24px; }
.page-calendar .intro h1, .page-detail .detail-header h1 { font-size: clamp(28px, 3vw, 36px); letter-spacing: -.03em; line-height: 1.3; }
.page-calendar .month-nav h2, .page-calendar .month-nav p { font-size: 20px; }
@media (max-width: 740px) {
  .page-calendar .shell, .page-detail .shell { width: calc(100% - 34px); }
}
@media (max-width: 370px) {
  .page-calendar .shell, .page-detail .shell { width: calc(100% - 28px); }
}

/* ---------------------------------------------------------------------------
   2026-10 visual pass: bring /calendar and /launches onto the same warm-white,
   type-led rhythm as the v2.5 home page. These rules are scoped so the home
   visual gate and the existing DOM contracts stay untouched.
--------------------------------------------------------------------------- */
.page-calendar, .page-detail { font-size: 14px; line-height: 1.7; letter-spacing: -.008em; }
.page-calendar .shell, .page-detail .shell { max-width: 1000px; }
.page-calendar .site-header, .page-detail .site-header { min-height: 64px; }
.page-calendar .intro { padding-block: 34px 20px; }
.page-calendar .intro h1 { font-size: clamp(30px, 3.4vw, 40px); font-weight: 680; letter-spacing: -.038em; line-height: 1.22; }
.page-calendar .intro p:not(.eyebrow) { max-width: 46em; margin-top: 10px; color: var(--muted); font-size: 12.5px; line-height: 1.8; }
.page-calendar .eyebrow, .page-detail .eyebrow { color: var(--faint); font-size: 10px; font-weight: 600; letter-spacing: .12em; }

/* One quiet toolbar instead of three stacked full-width rows. */
.page-calendar .filters { display: flex; align-items: flex-end; gap: 12px; margin: 6px 0 0; padding: 14px 16px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }
.page-calendar .filters label { display: grid; gap: 5px; flex: 0 1 170px; font-size: 10px; font-weight: 500; letter-spacing: .06em; color: var(--faint); }
.page-calendar .filters label:nth-child(2) { flex-basis: 190px; }
.page-calendar .filters label:nth-child(3) { flex-basis: 130px; }
.page-calendar .filters input, .page-calendar .filters select { width: 100%; min-height: 38px; padding: 6px 10px; border-color: var(--line); border-radius: 7px; background: var(--bg); font-size: 12.5px; }
.page-calendar .filters input[type="month"] { font-variant-numeric: tabular-nums; }
.page-calendar .filters button[type="submit"] { flex: 0 0 auto; min-height: 38px; padding: 6px 20px; border-color: var(--strong); background: var(--strong); color: var(--surface); font-size: 12px; font-weight: 600; letter-spacing: .08em; border-radius: 7px; }
.page-calendar .filters button[type="submit"]:hover { border-color: var(--accent); background: var(--accent); color: var(--on-accent); }

.page-calendar .calendar-bar { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-top: 10px; padding-block: 9px; border-bottom: 1px solid var(--line-strong); }
.page-calendar .calendar-bar .month-nav { flex: 1 1 auto; display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 0; padding: 0; border: 0; }
.page-calendar .calendar-bar .month-nav a { min-height: 32px; padding: 5px 9px; border-radius: 7px; color: var(--muted); font-size: 11.5px; }
.page-calendar .calendar-bar .month-nav a:hover { background: var(--accent-soft); color: var(--accent-ink); }
.page-calendar .calendar-bar .month-nav > span:not([aria-disabled]) { padding: 3px 12px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); color: var(--strong); font-size: 11.5px; font-weight: 600; letter-spacing: .07em; font-variant-numeric: tabular-nums; }
.page-calendar .calendar-bar .month-nav [aria-disabled] { color: var(--faint); font-size: 11px; }
.page-calendar .calendar-bar .display-controls { flex: 0 0 auto; display: flex; align-items: center; gap: 12px; margin: 0; padding: 0; border: 0; font-size: 11px; color: var(--faint); }
.page-calendar .calendar-bar .display-controls label { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; white-space: nowrap; font-size: 11px; }
.page-calendar .calendar-bar .display-controls select { min-height: 30px; padding: 3px 7px; border-color: var(--line); border-radius: 6px; background: var(--surface); font-size: 11px; color: var(--muted); }
.page-calendar .calendar-bar .display-controls input[type="checkbox"] { width: 13px; height: 13px; min-height: 13px; margin: 0; accent-color: var(--accent-ink); }
.page-calendar .calendar-bar [data-display-scope-note] { display: none; }

/* Date headings become quiet rules rather than repeated full-width titles. */
.page-calendar .timeline { margin-top: 8px; border-top: 0; }
.page-calendar .date-group { display: flex; align-items: center; gap: 12px; margin: 0; padding: 17px 0 7px; }
.page-calendar .date-group h2 { margin: 0; color: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: .09em; line-height: 1.5; font-variant-numeric: tabular-nums; }
.page-calendar .date-group::after { content: ""; flex: 1 1 auto; height: 1px; background: var(--line); }

.page-calendar .launch-row { grid-template-columns: 80px minmax(0, 1fr) auto; align-items: center; gap: 16px; padding-block: 14px; border-bottom: 1px solid var(--line); transition: background .15s ease; }
.page-calendar .launch-row:hover { background: linear-gradient(90deg, var(--calendar-hover), transparent 58%); }
.page-calendar .launch-time { font-size: 22px; font-weight: 620; letter-spacing: -.035em; line-height: 1.15; }
.page-calendar .launch-time small { display: block; margin-top: 5px; color: var(--faint); font-size: 9.5px; letter-spacing: .02em; }
.page-calendar .launch-title { font-size: 15.5px; font-weight: 640; line-height: 1.4; }
.page-calendar .launch-meta { margin-top: 4px; color: var(--muted); font-size: 11px; line-height: 1.6; }
.page-calendar .launch-row > .status, .page-calendar .uncertain-tail > .status { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px 4px 9px; border-radius: 999px; background: var(--inset); color: var(--muted); font-size: 10.5px; font-weight: 600; white-space: nowrap; }
.page-calendar .launch-row > .status::before, .page-calendar .uncertain-tail > .status::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.calendar-body .status.good { background: var(--good-bg); color: var(--good); }
.calendar-body .status.tbc { background: var(--tbc-bg); color: var(--tbc); }
.calendar-body .status.tbd { background: var(--tbd-bg); color: var(--tbd); }
.calendar-body .status.fail { background: var(--fail-bg); color: var(--fail); }
.calendar-body .status.live { background: var(--fail-bg); color: var(--live); }
.calendar-body .status.sched { background: var(--inset); }

/* Month grid: denser cells, two-line task titles, calmer weekend tint. */
.page-calendar .month-grid { border: 1px solid var(--line); border-radius: 10px; overflow: hidden; background: var(--line); }
.page-calendar .weekday { padding: 9px 8px; border-bottom: 0; background: var(--inset); color: var(--faint); font-size: 10px; font-weight: 600; letter-spacing: .1em; text-align: left; }
.page-calendar .day-cell { min-height: 88px; padding: 6px 7px 8px; background: var(--surface); }
.page-calendar .weekday:nth-child(6), .page-calendar .weekday:nth-child(7), .page-calendar .day-cell:nth-child(7n+6), .page-calendar .day-cell:nth-child(7n+7) { background: var(--weekend); box-shadow: 0 0 0 1px var(--line-strong); }
.page-calendar .day-cell[aria-current="date"] { background: var(--accent-soft); }
.page-calendar .day-number { margin: 0 0 4px; color: var(--faint); font-size: 10px; font-weight: 600; letter-spacing: .04em; }
.page-calendar .day-cell:nth-child(7n+6) > .day-number, .page-calendar .day-cell:nth-child(7n+7) > .day-number { color: var(--muted); }
.page-calendar .day-cell[aria-current="date"] > .day-number { color: var(--accent-ink); }
.page-calendar .today-label { display: inline-block; margin-inline-start: 3px; font-size: 9px; font-weight: 600; letter-spacing: 0; }
.page-calendar .day-launch { display: block; margin: 1px -4px; padding: 3px 4px; border-radius: 5px; font-size: 10.5px; line-height: 1.38; color: var(--fg); text-decoration: none; }
.page-calendar .day-launch:hover { background: var(--accent-soft); }
.page-calendar .day-launch .launch-name { display: block; font-weight: 620; overflow-wrap: anywhere; }
:is(.page-home, .page-calendar) .country-flag { display: inline-block; margin-inline-end: .35em; font-family: "CHX Flag Emoji", "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", sans-serif; font-size: .95em; font-weight: 400; line-height: 1; vertical-align: -.08em; }
.page-calendar .day-launch time { display: block; margin-top: 1px; color: var(--muted); font-size: 9.5px; font-variant-numeric: tabular-nums; }
.page-calendar .day-launch > .status { display: block; margin-top: 1px; font-size: 9px; font-weight: 600; }
.page-calendar .uncertain-plans { margin-top: 26px; padding: 18px 20px 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }
.page-calendar .uncertain-plans h2 { margin-bottom: 5px; font-size: 15px; letter-spacing: -.01em; }
.page-calendar .uncertain-plans > p { margin-bottom: 10px; color: var(--muted); font-size: 11px; line-height: 1.7; }

/* Detail: editorial hierarchy, warm accents, and a source-ordered update timeline. */
.page-detail .breadcrumb { display: flex; align-items: center; gap: 8px; padding: 20px 0 0; color: var(--faint); font-size: 12px; }
.page-detail .breadcrumb a { display: inline-flex; align-items: center; min-height: 28px; color: var(--muted); text-decoration: none; }
.page-detail .breadcrumb a:hover { color: var(--accent-ink); text-decoration: underline; }
.page-detail .detail-header { margin: 0; padding: 20px 0 24px; border: 0; background: none; }
.page-detail .detail-header h1 { margin: 0; font-size: clamp(30px, 3.2vw, 36px); font-weight: 680; letter-spacing: -.035em; line-height: 1.3; overflow-wrap: anywhere; text-wrap: pretty; }
.page-detail .detail-summary { margin: 10px 0 0; color: var(--muted); font-size: 13px; line-height: 1.7; }
.page-detail .detail-header .status { display: inline-flex; align-items: center; gap: 6px; margin: 0; padding: 3px 10px; border-radius: 4px; background: var(--inset); font-size: 12px; font-weight: 600; }
.page-detail .detail-header .status::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.page-detail .detail-header .status.good { background: var(--good-bg); }
.page-detail .detail-header .status.tbc { background: var(--tbc-bg); }
.page-detail .detail-header .status.tbd { background: var(--tbd-bg); }
.page-detail .detail-header .status.fail, .page-detail .detail-header .status.live { background: var(--fail-bg); }
/* The lead is one row: the header owns the whole left column (title, identity,
   status and plan, description) and the image is the right cell. Without an
   image the single column simply takes the width, and nothing has to reserve a
   second row for the schedule any more. */
.page-detail .detail-lead { display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: min-content; gap: 0 24px; align-items: start; }
.page-detail .detail-lead:has(> .detail-media) { grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); }
.page-detail .detail-lead > * { min-width: 0; }
.page-detail .detail-lead > .detail-header { grid-column: 1; grid-row: 1; }
.page-detail .detail-overview { min-width: 0; margin-top: 20px; }
.page-detail .detail-overview > * { min-width: 0; }
.page-detail .detail-schedule { display: grid; grid-template-columns: minmax(0, 1fr); align-content: start; gap: 16px 20px; margin: 0; max-width: 600px; padding-top: 4px; }
.page-detail .detail-schedule dt { color: var(--muted); font-size: 12px; }
.page-detail .detail-schedule dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.page-detail .schedule-primary dd { margin-top: 5px; color: var(--strong); font-size: clamp(20px, 2.2vw, 26px); font-weight: 600; line-height: 1.4; font-variant-numeric: tabular-nums; }
/* Zone suffix stays outside <time> so scripted rewrites never drop it. */
.page-detail .schedule-primary .time-suffix { margin-left: .3em; color: var(--muted); font-size: 13px; font-weight: 500; letter-spacing: .04em; white-space: nowrap; }
.page-detail .time-utc, .page-detail .schedule-note { display: block; margin-top: 3px; color: var(--muted); font-size: 12px; font-weight: 400; line-height: 1.7; font-variant-numeric: tabular-nums; }
.page-detail .schedule-secondary { grid-column: 1 / -1; display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 12px; font-size: 13px; line-height: 1.7; }
.page-detail .schedule-secondary .window-range { color: var(--fg); }
.page-detail .detail-reference-clock { display: block; padding: 0; border: 0; background: none; }
/* Status and countdown sit on one baseline group. The status keeps its own
   colour bucket and its own words, so a finished mission shows success or
   failure here without a timer; the countdown is only a plan-relative reading
   beside it and is never the thing that says what happened. */
.page-detail .reference-clock-group { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; }
.page-detail .detail-reference-clock .reference-phase { color: var(--muted); font-size: 13px; font-weight: 500; letter-spacing: .01em; }
.page-detail .detail-reference-clock .status { max-width: 100%; padding: 3px 12px; font-size: 20px; line-height: 1.35; }
.page-detail .detail-reference-clock .status.live { padding: 3px 8px; font-size: 13px; line-height: 1.5; }
.page-detail .detail-reference-clock .reference-timer { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; color: var(--accent-ink); font-size: 22px; font-weight: 500; line-height: 1.5; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.page-detail .detail-reference-clock .reference-timer-noscript { color: var(--muted); font-size: 12px; font-weight: 400; line-height: 1.6; white-space: nowrap; }
.page-detail .detail-media { grid-column: 2; grid-row: 1; align-self: start; margin: 20px 0 0; }
.page-detail .detail-media .task-image { display: block; width: 100%; max-width: 100%; height: auto; max-height: none; margin: 0; aspect-ratio: auto; object-fit: contain; border-radius: 9px; box-shadow: 0 8px 24px color-mix(in srgb, var(--fg) 7%, transparent); }
.page-detail .detail-grid { grid-template-columns: 92px minmax(0, 1fr) 92px minmax(0, 1fr); gap: 0 20px; margin: 10px 0 0; padding: 0; background: transparent; border: 0; border-radius: 0; }
.page-detail .detail-grid dt, .page-detail .detail-grid dd { padding: 9px 0; border: 0; background: transparent; overflow-wrap: anywhere; }
.page-detail .detail-grid dt { color: var(--muted); font-size: 12px; font-weight: 400; }
.page-detail .detail-grid dd { color: var(--fg); font-size: 14px; }
.page-detail .detail-description, .page-detail .detail-extra { min-width: 0; margin: 32px 0 0; padding-top: 24px; border-top: 1px solid var(--line); }
.page-detail .detail-description { max-width: 74ch; padding-top: 0; border: 0; }
.page-detail .detail-description h2, .page-detail .detail-extra h2 { margin: 0 0 12px; font-size: 18px; font-weight: 660; letter-spacing: -.02em; }
.page-detail .detail-description h2::before, .page-detail .detail-extra h2::before { content: ""; display: inline-block; width: 4px; height: 15px; margin-right: 10px; border-radius: 3px; background: var(--detail-section-accent, var(--accent)); vertical-align: -1px; }
.page-detail .detail-description h2::after, .page-detail .detail-extra h2::after { display: none; }
.page-detail .detail-description p, .page-detail .detail-extra p { margin-block: 0; font-size: 15px; line-height: 1.85; }
.page-detail .detail-extra .sitemap-note { margin-top: 16px; color: var(--muted); font-size: 12px; }
.page-detail .detail-section-heading { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 16px; margin-bottom: 8px; }
.page-detail .detail-section-heading h2, .page-detail .detail-section-heading .sitemap-note { margin: 0; }
.page-detail .detail-resources { margin: 0; padding: 0; list-style: none; }
.page-detail .detail-resources li + li { margin-top: 12px; }
.page-detail .resource-link { display: flex; align-items: center; justify-content: flex-start; gap: 7px; width: fit-content; max-width: 100%; min-height: 44px; color: var(--fg); font-size: 14px; line-height: 1.7; text-decoration: none; }
.page-detail .resource-link > span:first-child { min-width: 0; overflow-wrap: anywhere; }
.page-detail .resource-arrow { display: inline-flex; align-items: center; flex: none; color: inherit; background: none; border-radius: 0; }
.page-detail .resource-link:hover, .page-detail .resource-link:focus-visible { color: var(--accent-ink); }
.page-detail .resource-link:hover > span:first-child { text-decoration: underline; text-underline-offset: 4px; }
.page-detail .detail-resources small { display: block; color: var(--muted); font-size: 12px; line-height: 1.7; }
.page-detail .detail-extra .detail-empty { color: var(--muted); font-size: 14px; }
.page-detail .updates { --update-axis: 146px; --update-node-y: 10px; margin: 20px 0 0; padding: 0; border: 0; list-style: none; }
.page-detail .update-row { position: relative; display: grid; grid-template-columns: 136px minmax(0, 1fr); gap: 24px; padding: 0 0 20px; border: 0; }
.page-detail .update-row::before { content: ""; position: absolute; top: var(--update-node-y); bottom: calc(-1 * var(--update-node-y)); left: var(--update-axis); width: 1px; background: var(--line-strong); pointer-events: none; }
.page-detail .update-row::after { content: ""; position: absolute; top: calc(var(--update-node-y) - 2px); left: calc(var(--update-axis) - 2px); width: 5px; height: 5px; border-radius: 50%; background: var(--faint); pointer-events: none; }
.page-detail .update-row:last-child { padding-bottom: 0; }
.page-detail .update-row:last-child::before { display: none; }
.page-detail .update-meta { min-width: 0; }
.page-detail .update-meta time, .page-detail .update-meta small { display: block; color: var(--muted); font-size: 12px; line-height: 1.7; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.page-detail .update-author { margin-top: 4px; }
.page-detail .update-content { min-width: 0; padding: 0; border: 0; background: none; }
.page-detail .update-row p { margin: 0; font-size: 14px; line-height: 1.85; }
.page-detail .update-row a { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; margin-top: 6px; color: var(--accent-ink); font-size: 12px; }
/* A flex anchor paints no text decoration itself, so the source link underlines
   its words instead. Same offset as every other off-site link. */
.page-detail .update-row a[target="_blank"]:is(:hover, :focus-visible) > .update-link-text { text-decoration: underline; text-underline-offset: 4px; }
.page-detail .pagination { gap: 14px; margin: 16px 0 0; padding-top: 12px; border: 0; color: var(--muted); font-size: 12px; }
.page-detail #rocket h3 { margin: 0 0 12px; font-size: 16px; font-weight: 600; }
.page-detail .detail-return { margin: 32px 0 0; font-size: 13px; }
.page-detail .detail-return a { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; }
.page-detail :is(#detail-top, #launch-schedule, #mission-description, #mission-anomaly, #mission-info, #videos, #trajectory, #rocket, #updates) { scroll-margin-top: 72px; }
/* Native section links: the desktop rail stays outside the 1000px reading axis. */
:is(.page-detail, .page-terms) .detail-toc { position: fixed; top: 50%; right: max(16px, calc((100vw - 1000px) / 2 - 148px)); z-index: 10; transform: translateY(-50%); display: flex; flex-direction: column; gap: 2px; width: 124px; max-height: calc(100dvh - 96px); padding: 10px; overflow: auto; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); }
:is(.page-detail, .page-terms) .detail-toc-task { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; margin: 0 6px 6px; color: var(--strong); font-size: 12px; font-weight: 600; line-height: 1.6; overflow-wrap: anywhere; }
:is(.page-detail, .page-terms) .detail-toc a { display: flex; align-items: center; flex: none; min-height: 30px; padding: 4px 6px; border-inline-start: 2px solid transparent; border-radius: 3px; color: var(--muted); font-size: 12px; line-height: 1.5; text-decoration: none; white-space: nowrap; }
:is(.page-detail, .page-terms) .detail-toc a:hover, :is(.page-detail, .page-terms) .detail-toc a:focus-visible { color: var(--accent-ink); background: var(--accent-soft); }
:is(.page-detail, .page-terms) .detail-toc a[aria-current="location"] { color: var(--accent-ink); background: var(--accent-soft); border-inline-start-color: var(--accent); font-weight: 600; }
@media (max-width: 1319px) {
  :is(.page-detail, .page-terms) .detail-toc { position: sticky; top: 8px; right: auto; transform: none; flex-direction: row; gap: 4px; width: 100%; max-height: none; margin: 12px 0 4px; padding: 4px 6px; overflow-x: auto; }
  :is(.page-detail, .page-terms) .detail-toc-task { display: block; flex: none; max-width: 96px; margin: 0; padding: 10px 8px 10px 2px; border-inline-end: 1px solid var(--line); white-space: nowrap; text-overflow: ellipsis; -webkit-line-clamp: unset; }
  :is(.page-detail, .page-terms) .detail-toc a { min-height: 40px; border-inline-start: 0; border-bottom: 2px solid transparent; }
  :is(.page-detail, .page-terms) .detail-toc a[aria-current="location"] { border-bottom-color: var(--accent); }
  .page-detail :is(#detail-top, #launch-schedule, #mission-description, #mission-anomaly, #mission-info, #videos, #trajectory, #rocket, #updates) { scroll-margin-top: 76px; }
}
@media (prefers-reduced-motion: no-preference) and (forced-colors: none) {
  .page-detail .resource-link, .page-detail .video-outbound { transition: color 150ms ease; }
}

@media (forced-colors: active) {
  .page-detail .update-row::before, .page-detail .update-row::after { background: CanvasText; }
  :is(.page-detail, .page-terms) .detail-toc a[aria-current="location"] { outline: 1px solid Highlight; }
  .page-detail .detail-reference-clock :is(.reference-phase, .reference-timer, .reference-timer-noscript) { color: CanvasText; }
}

@media (max-width: 740px) {
  .page-calendar .filters { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px 12px; padding: 12px; }
  .page-calendar .filters label, .page-calendar .filters label:nth-child(2), .page-calendar .filters label:nth-child(3) { flex: none; }
  .page-calendar .filters label:nth-child(3) { grid-column: 1 / -1; }
  .page-calendar .filters button[type="submit"] { grid-column: 1 / -1; min-height: 44px; }
  .page-calendar .calendar-bar { flex-direction: column; align-items: stretch; gap: 8px; }
  .page-calendar .calendar-bar .display-controls { justify-content: flex-start; flex-wrap: wrap; }
  .page-calendar .launch-row { grid-template-columns: 66px minmax(0, 1fr); gap: 4px 12px; padding-block: 13px; }
  .page-calendar .launch-time { grid-column: 1; grid-row: 1 / span 2; font-size: 19px; }
  .page-calendar .launch-content { grid-column: 2; }
  .page-calendar .launch-row > .status { grid-column: 2; justify-self: start; margin-top: 2px; }
  .page-calendar .uncertain-tail { grid-column: 2; justify-content: space-between; }
  .page-calendar .day-cell { min-height: 78px; }
  .page-detail .breadcrumb { padding-top: 14px; }
  .page-detail .detail-header { margin: 0; padding: 16px 0 22px; }
  .page-detail .detail-header h1 { font-size: 28px; }
  .page-detail .detail-lead:has(> .detail-media) { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .page-detail .detail-lead > .detail-header { grid-column: 1; grid-row: 1; }
  .page-detail .detail-media { grid-column: 1; grid-row: 2; width: min(100%, 520px); margin: 0; }
  .page-detail .detail-schedule { gap: 14px 16px; }
  .page-detail .schedule-primary dd { font-size: 22px; }
  .page-detail .schedule-secondary { grid-template-columns: 64px minmax(0, 1fr); gap: 12px; }
  .page-detail .detail-grid { grid-template-columns: 92px minmax(0, 1fr); gap: 0 16px; }
  .page-detail .detail-description, .page-detail .detail-extra { margin-top: 28px; padding-top: 20px; }
  .page-detail .detail-description { padding-top: 0; }
  .page-detail .updates { --update-axis: 4px; --update-node-y: 10px; }
  .page-detail .update-row { display: block; padding: 0 0 22px 20px; }
  .page-detail .update-meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; margin-bottom: 8px; padding: 0; }
  .page-detail .update-author { margin: 0; }
}
.page-calendar .day-launch .status { width: max-content; max-width: 100%; }
.page-calendar .intro h1 { text-wrap: balance; }
.page-detail .update-row:hover { background: transparent; }
.page-detail .pagination a { display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 4px 10px; border-radius: 7px; text-decoration: none; }
.page-detail .pagination a:hover { background: var(--accent-soft); color: var(--accent-ink); }
@media (forced-colors: active) {
  .page-calendar .launch-row > .status, .page-calendar .uncertain-tail > .status, .page-detail .detail-header .status, .page-calendar .day-launch .status { border: 1px solid currentColor; }
}
.page-calendar .empty-state { margin: 22px 0; padding: 30px 22px; border: 1px dashed var(--line-strong); border-bottom: 1px dashed var(--line-strong); border-radius: 10px; background: var(--surface); text-align: center; color: var(--muted); }
.page-calendar .empty-state h2 { margin-bottom: 6px; font-size: 16px; letter-spacing: -.01em; }
.page-calendar .empty-state p { margin: 0; font-size: 12px; line-height: 1.7; }
@media (max-width: 740px) {
  .page-calendar .day-cell { min-height: 64px; }
}
/* Old-calendar information architecture, restyled for the current identity. */
.page-calendar .cal-stats { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); margin: 16px 0 0; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); overflow: hidden; }
.page-calendar .cal-stat { padding: 11px 14px; border-inline-end: 1px solid var(--line); min-width: 0; }
.page-calendar .cal-stat:last-child { border-inline-end: 0; }
.page-calendar .cal-stat .n { display: block; color: var(--strong); font-size: 22px; font-weight: 660; letter-spacing: -.04em; line-height: 1.15; font-variant-numeric: tabular-nums; }
.page-calendar .cal-stat .k { display: block; margin-top: 4px; color: var(--muted); font-size: 12px; font-weight: 400; line-height: 1.5; }
.page-calendar .cal-stat.ok .n { color: var(--good); }
.page-calendar .cal-view-tabs { display: flex; flex: 0 0 auto; gap: 3px; padding: 3px; border: 1px solid var(--line); border-radius: 8px; background: var(--inset); }
.page-calendar .cal-view-tabs .tab { padding: 4px 11px; border-radius: 6px; color: var(--muted); font-size: 11px; text-decoration: none; white-space: nowrap; }
.page-calendar .cal-view-tabs .tab:hover { color: var(--accent-ink); }
.page-calendar .cal-view-tabs .tab.on { background: var(--surface); color: var(--strong); font-weight: 600; }
.page-calendar .cal-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0 2px; }
.page-calendar .cal-chip { display: inline-flex; align-items: center; padding: 4px 10px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 11px; text-decoration: none; white-space: nowrap; }
.page-calendar .cal-chip:hover { border-color: var(--line-strong); color: var(--strong); }
.page-calendar .cal-chip.on { border-color: var(--accent); background: var(--accent-soft); color: var(--accent-ink); font-weight: 600; }
.page-calendar .cal-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 10px 0 0; color: var(--faint); font-size: 10px; }
.page-calendar .lg-dot { display: inline-block; width: 6px; height: 6px; margin-inline-end: 5px; border-radius: 50%; background: currentColor; vertical-align: 1px; }
.page-calendar .lg-dot.good { color: var(--good); }
.page-calendar .lg-dot.tbc { color: var(--tbc); }
.page-calendar .lg-dot.tbd { color: var(--tbd); }
.page-calendar .lg-dot.fail { color: var(--fail); }
@media (max-width: 740px) {
  .page-calendar .cal-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .page-calendar .cal-stat { padding: 9px 11px; border-bottom: 1px solid var(--line); }
  .page-calendar .cal-stat:nth-child(3n) { border-inline-end: 0; }
  .page-calendar .cal-stat:nth-child(n + 4) { border-bottom: 0; }
  .page-calendar .cal-stat .n { font-size: 19px; }
  .page-calendar .cal-chips { flex-wrap: wrap; overflow: visible; padding-bottom: 0; }
}
.page-calendar .cal-toolbar { display: flex; align-items: center; gap: 16px; margin-top: 14px; }
.page-calendar .cal-toolbar .filters { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; margin: 0; padding: 0; border: 0; background: transparent; }
.page-calendar .cal-toolbar .filters label { display: inline-flex; align-items: center; gap: 6px; flex: none; font-size: 10px; letter-spacing: .04em; }
.page-calendar .cal-toolbar .filters select { width: auto; min-height: 36px; padding: 5px 9px; border-color: var(--line); background: var(--surface); font-size: 12px; }
.page-calendar .cal-toolbar .filters button[type="submit"] { min-height: 36px; padding: 5px 14px; border-color: var(--strong); background: var(--strong); color: var(--surface); }
.page-calendar .cal-toolbar .filters button[type="submit"]:hover { border-color: var(--accent); background: var(--accent); }
.page-calendar .cal-toolbar .cal-chips { flex: 1 1 auto; justify-content: flex-end; margin: 0; }
@media (max-width: 740px) {
  .page-calendar .cal-toolbar { flex-direction: column; align-items: stretch; gap: 9px; }
  .page-calendar .cal-toolbar .filters { justify-content: space-between; }
  .page-calendar .cal-toolbar .cal-chips { justify-content: flex-start; }
}
#calendar-content { display: block; }
.page-calendar .month-picker { position: relative; color: var(--strong); font-size: 12px; }
.page-calendar .month-picker summary { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 34px; padding: 4px 10px; border: 1px solid var(--line); border-radius: 6px; cursor: pointer; list-style: none; font-weight: 600; }
.page-calendar .month-picker summary::-webkit-details-marker { display: none; }
.page-calendar .month-picker[open] summary { border-color: var(--accent); background: var(--accent-soft); }
.page-calendar .month-picker-panel { position: absolute; z-index: 10; top: calc(100% + 7px); left: 50%; transform: translateX(-50%); width: 236px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); box-shadow: 0 8px 24px #0002; }
.page-calendar .month-picker-year { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 7px; }
.page-calendar .month-picker-year a { display: inline-flex; justify-content: center; width: 32px; min-height: 32px; padding: 0; border-radius: 4px; text-decoration: none; font-size: 20px; }
.page-calendar .month-picker-year a[aria-disabled] { opacity: .4; }
.page-calendar .month-picker-months { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; }
.page-calendar .month-picker-months a { display: flex; align-items: center; justify-content: center; min-height: 34px; padding: 4px; border-radius: 4px; text-decoration: none; font-size: 12px; color: var(--muted); }
.page-calendar .month-picker-months a:hover, .page-calendar .month-picker-year a[href]:hover { color: var(--accent-ink); background: var(--accent-soft); }
.page-calendar .month-picker-months a[aria-current] { color: var(--accent-ink); background: var(--accent-soft); font-weight: 650; }
/* Native top-layer popovers escape the horizontally scrollable month grid. */
.cal-tip { display: none; position: fixed; inset: auto; margin: 0; width: min(310px, calc(100vw - 24px)); max-height: calc(100vh - 24px); overflow: auto; padding: 13px 15px; border: 1px solid var(--line); border-radius: 7px; background: var(--bg); color: var(--fg); box-shadow: 0 8px 24px #0003; text-align: left; font-size: 11px; line-height: 1.6; cursor: default; }
.cal-tip:popover-open { display: block; }
.cal-tip-title { display: block; margin-bottom: 8px; font-size: 13px; overflow-wrap: anywhere; }
.cal-tip-row { display: grid; grid-template-columns: 5em minmax(0, 1fr); gap: 8px; margin-top: 3px; overflow-wrap: anywhere; }
.cal-tip-row > span:first-child { color: var(--muted); }
@media (max-width: 740px) {
  .page-calendar .calendar-bar { flex-direction: column; align-items: stretch; gap: 8px; }
  .page-calendar .month-nav { justify-content: space-between; }
  .page-calendar .cal-view-tabs { align-self: flex-start; }
}
.visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
.page-calendar .day-launch { position: relative; }
.page-calendar .cal-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; padding: 26px 0 20px; }
.page-calendar .cal-head-copy { min-width: 0; }
.page-calendar .cal-head-copy h1 { font-size: clamp(30px, 3.4vw, 40px); font-weight: 680; letter-spacing: -.038em; line-height: 1.22; }
.page-calendar .cal-head-note { max-width: 42em; margin: 8px 0 0; color: var(--muted); font-size: 12px; line-height: 1.75; }
.page-calendar .cal-head-nav { flex: 0 0 auto; display: flex; align-items: center; gap: 14px; margin: 0; padding: 0; border: 0; }
.page-calendar .cal-head-nav > a, .page-calendar .cal-head-nav > span { min-height: 34px; display: inline-flex; align-items: center; padding: 4px 8px; border-radius: 7px; color: var(--muted); font-size: 11.5px; }
.page-calendar .cal-head-nav > a:hover { background: var(--accent-soft); color: var(--accent-ink); }
.page-calendar .cal-head-nav [aria-disabled] { color: var(--faint); }
.page-calendar .cal-stats { margin-top: 6px; border: 0; background: var(--surface); }
.page-calendar .cal-stat { border-inline-end: 0; padding: 13px 18px; }
.page-calendar .cal-stat + .cal-stat { border-inline-start: 0; }
.page-calendar .cal-chips { margin-top: 14px; }
.page-calendar .cal-chip { border-color: transparent; background: var(--inset); color: var(--muted); }
.page-calendar .cal-chip:hover { border-color: transparent; background: var(--chip-hover); color: var(--strong); }
.page-calendar .cal-chip.on { border-color: var(--accent); background: var(--accent-soft); color: var(--accent-ink); }
/* Fixed colors follow the existing agency groups across months and filters. */
.page-calendar [data-org="spx"] { --agency-ink: #2457a7; --agency-bg: #edf3fb; }
.page-calendar [data-org="cnsa"] { --agency-ink: #a83b16; --agency-bg: #fff0e7; }
.page-calendar [data-org="nasa"] { --agency-ink: #6b46a0; --agency-bg: #f4eefb; }
.page-calendar [data-org="esa"] { --agency-ink: #16736b; --agency-bg: #e9f5f1; }
.page-calendar [data-org="rl"] { --agency-ink: #397222; --agency-bg: #eef5e9; }
.page-calendar [data-org="ula"] { --agency-ink: #a13b6b; --agency-bg: #fbeef4; }
.page-calendar [data-org="isro"] { --agency-ink: #88611d; --agency-bg: #faf2df; }
.page-calendar [data-org="jaxa"] { --agency-ink: #176d8e; --agency-bg: #eaf3f8; }
.page-calendar [data-org="other"] { --agency-ink: #59616b; --agency-bg: #f0f1f3; }
@supports (color: light-dark(white, black)) {
  .page-calendar [data-org="spx"] { --agency-ink: light-dark(#2457a7, #9bc2ff); --agency-bg: light-dark(#edf3fb, #1c2a40); }
  .page-calendar [data-org="cnsa"] { --agency-ink: light-dark(#a83b16, #ffb38d); --agency-bg: light-dark(#fff0e7, #3a261e); }
  .page-calendar [data-org="nasa"] { --agency-ink: light-dark(#6b46a0, #c9abf5); --agency-bg: light-dark(#f4eefb, #2d243c); }
  .page-calendar [data-org="esa"] { --agency-ink: light-dark(#16736b, #7dd7c8); --agency-bg: light-dark(#e9f5f1, #17332e); }
  .page-calendar [data-org="rl"] { --agency-ink: light-dark(#397222, #a7d787); --agency-bg: light-dark(#eef5e9, #25321c); }
  .page-calendar [data-org="ula"] { --agency-ink: light-dark(#a13b6b, #efabcb); --agency-bg: light-dark(#fbeef4, #382432); }
  .page-calendar [data-org="isro"] { --agency-ink: light-dark(#88611d, #e9ca77); --agency-bg: light-dark(#faf2df, #352e1d); }
  .page-calendar [data-org="jaxa"] { --agency-ink: light-dark(#176d8e, #80d1eb); --agency-bg: light-dark(#eaf3f8, #1b2f39); }
  .page-calendar [data-org="other"] { --agency-ink: light-dark(#59616b, #bcc4ce); --agency-bg: light-dark(#f0f1f3, #282d34); }
}
.page-calendar .cal-chip[data-org]:not([data-org=""]) { gap: 5px; color: var(--agency-ink); background: var(--agency-bg); }
.page-calendar .cal-chip[data-org]:not([data-org=""])::before { content: ""; width: 6px; height: 6px; flex: none; border-radius: 50%; background: currentColor; }
.page-calendar .cal-chip.on[data-org]:not([data-org=""]), .page-calendar .cal-chip[data-org]:not([data-org=""]):hover { border-color: var(--agency-ink); }
.page-calendar .day-launch[data-org] { background: var(--agency-bg); }
.page-calendar .day-launch[data-org] > .launch-name { color: var(--agency-ink); }
.page-calendar .day-launch[data-org]:hover > .launch-name { text-decoration: underline; text-underline-offset: 2px; }
.page-calendar .month-scroll-note, .page-calendar .calendar-scroll-note { color: var(--faint); }
.page-calendar .uncertain-plans { border: 0; background: var(--surface); }
.page-calendar .uncertain-plans .launch-row { border-bottom: 0; color: inherit; text-decoration: none; }
.page-calendar .uncertain-plans .launch-row:hover .launch-title { color: var(--accent-ink); text-decoration: underline; }
.page-calendar .uncertain-tail { display: flex; align-items: center; gap: 14px; padding-inline-end: 4px; min-width: 0; }
.page-calendar .uncertain-tail > .status { margin: 0; max-width: none; }
.page-calendar .uncertain-action { display: block; flex: none; font-size: 15px; line-height: 1; font-weight: 500; color: var(--accent-ink); }
@media (max-width: 740px) {
  .page-calendar .cal-head { flex-direction: column; align-items: stretch; gap: 12px; padding-top: 20px; }
  .page-calendar .cal-head-nav { justify-content: space-between; }
  .page-calendar .cal-stat { padding: 10px 11px; border-bottom: 0; }
}
/* One shared brand header for home, calendar and detail. The full-width band
   owns the hairline so the brand row has identical geometry on every page. */
.site-header-band { border-bottom: 1px solid var(--line); }
.site-header-band .site-header { min-height: 64px; height: 64px; padding-block: 0; flex-wrap: nowrap; border-bottom: 0; gap: 8px 20px; }
.site-header-band .brand { gap: 10px; letter-spacing: 0; white-space: nowrap; }
.theme-control { display: none; flex: 0 0 auto; align-items: center; justify-content: flex-end; margin-inline-start: auto; gap: 0; width: 44px; height: 44px; min-height: 44px; padding: 0; appearance: none; border: 0; border-radius: 0; background: transparent; box-shadow: none; font-family: var(--text); font-size: 11px; font-weight: 400; line-height: 1.4; letter-spacing: 0; color: var(--muted); }
.theme-control:hover:not(:disabled), .theme-control:active { border: 0; background: transparent; box-shadow: none; color: var(--accent-ink); }
.theme-control svg { display: block; flex: 0 0 16px; stroke-linecap: round; stroke-linejoin: round; }
.theme-control .theme-auto, .theme-control .theme-sun, .theme-control .theme-moon { display: none; }
:root[data-theme-mode="auto"] .theme-control .theme-auto,
:root[data-theme-mode="light"] .theme-control .theme-sun,
:root[data-theme-mode="dark"] .theme-control .theme-moon { display: block; }
@supports (color: light-dark(white, black)) { .theme-control { display: inline-flex; } }
.site-header .brand-name { font-size: 17px; font-weight: 680; }
.site-header .brand-name small { color: var(--faint); font-size: 10px; font-weight: 540; letter-spacing: .095em; margin-inline-start: 3px; }
@media (max-width: 740px) {
  .site-header-band .site-header { min-height: 56px; height: 56px; }
  .site-header-band .brand { gap: 8px; }
  .site-header .brand img { width: 28px; height: 28px; flex-basis: 28px; }
  .site-header .brand-name { font-size: 16px; }
  .site-header .brand-name small { font-size: 9px; letter-spacing: .08em; margin-inline-start: 2px; }
}
.page-calendar .cal-head-copy .cal-month { margin: 0; font-size: clamp(30px, 3.4vw, 40px); font-weight: 680; letter-spacing: -.038em; line-height: 1.22; }
/* Editorial zones: rules mark changes of purpose, never every task row.
   Warm-gray fills stay local to labels and supporting information, not cards. */
.site-header-band { border-bottom: 0; }
.landing-header .tabs { flex: 1; box-shadow: inset 0 -1px var(--zone-rule); }

/* A date is a small index label. Tasks themselves remain unboxed. */
.page-home .date-group.day-title { padding-block: 16px 8px; }
.page-home .day-title h4 { padding: 3px 8px; border-radius: 3px; background: var(--zone-muted); font-size: 11px; letter-spacing: .015em; }
.page-home .day-count { color: var(--faint); }
.page-home .launch-row.record { border-top: 0; }
.page-home .timeline-section + .timeline-section { margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--zone-rule); }
.page-home .now-divider::before { display: none; }
.page-home .now-divider::after { display: block; background: linear-gradient(90deg, var(--now-rule), var(--line) 65%); }
.page-home .note { border-top: 1px solid var(--line); margin-top: 28px; }

/* A single statistical band, not six cards. Tiny vertical ticks group numbers. */
.page-calendar .cal-stats { background: var(--zone-muted); border-radius: 6px; }
.page-calendar .cal-stat { position: relative; }
.page-calendar .cal-stat + .cal-stat::before { content: ""; position: absolute; left: 0; top: 50%; width: 1px; height: 24px; transform: translateY(-50%); background: var(--zone-rule); }
.page-calendar .cal-chips { margin-top: 18px; }
.page-calendar .uncertain-plans { margin-top: 28px; padding: 18px 0 0; border: 0; border-top: 1px solid var(--zone-rule); border-radius: 0; background: transparent; }
.page-calendar .uncertain-plans .launch-row.record { border-top: 0; text-decoration: none; }
.page-calendar .uncertain-plans .record:hover { background: var(--hover-tint); }
.page-calendar .uncertain-plans .record-copy { min-width: 0; }
.page-calendar .uncertain-plans .record .place { display: contents; }
.page-calendar .uncertain-plans .uncertain-tail { justify-content: flex-end; }
.page-calendar .uncertain-plans .uncertain-tail > .status { padding: 0; border-radius: 0; background: transparent; color: var(--faint); font-size: 11px; font-weight: 590; line-height: 1.6; }
.page-calendar .uncertain-plans .uncertain-tail > .status::before { display: none; }
.page-calendar .uncertain-plans .status.good { color: var(--good); }
.page-calendar .uncertain-plans .status.tbc { color: var(--tbc); }
.page-calendar .uncertain-plans .status.tbd { color: var(--tbd); }
.page-calendar .uncertain-plans .status.fail { color: var(--fail); }
.page-calendar .uncertain-plans .status.live { color: var(--live); }
/* Undated tasks group under a quiet provider heading: hairlines between groups,
   no card, and every row stays one plain task link. */
.page-calendar .uncertain-provider { padding-top: 12px; border-top: 1px solid var(--line); }
.page-calendar .uncertain-provider:first-of-type { padding-top: 0; border-top: 0; }
.page-calendar .uncertain-provider + .uncertain-provider { margin-top: 14px; }
.page-calendar .uncertain-provider-title { margin: 0; color: var(--muted); font-size: 11.5px; font-weight: 560; line-height: 1.6; }
.page-calendar .uncertain-provider .timeline { margin-top: 2px; }
.page-calendar .launch-row { border-bottom: 0; }
.page-calendar .cal-legend { margin-top: 14px; }

@media (max-width: 740px) {
  .page-home .date-group.day-title { padding-block: 14px 7px; }
  .page-home .day-title h4 { font-size: 10.5px; padding: 3px 6px; }
  .page-home .timeline-section + .timeline-section { margin-top: 18px; padding-top: 14px; }
  .page-calendar .cal-stat:nth-child(4)::before { display: none; }
  .page-calendar .uncertain-plans { padding: 16px 0 0; }
  .page-calendar .uncertain-plans .record .place { display: flex; }
  .page-calendar .uncertain-plans .uncertain-tail { margin-left: auto; }
  .page-calendar .uncertain-plans .uncertain-tail > .status { font-size: 10px; }
}
/* Rocket reference: photo and description share the first row, then the whole
   spec sheet and its source links run across the full width. The wrapper stays
   in the DOM but hands its children to the outer grid, so a missing photo leaves
   no empty image column and a missing description leaves no empty text column. */
.page-detail .rocket-overview { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px 28px; align-items: start; margin-block: 14px 0; }
.page-detail .rocket-overview:has(> figure) { grid-template-columns: minmax(0, 300px) minmax(0, 1fr); }
.page-detail .rocket-overview:has(> figure):not(:has(.rocket-body > .plain-text)) { grid-template-columns: minmax(0, 1fr); }
.page-detail .rocket-overview > *, .page-detail .rocket-body > * { min-width: 0; }
.page-detail .rocket-overview:has(> figure) > figure { grid-column: 1; grid-row: 1; }
.page-detail .rocket-overview:has(> figure) .rocket-body > .plain-text { grid-column: 2; grid-row: 1; }
.page-detail .rocket-specs, .page-detail .rocket-links { grid-column: 1 / -1; }
.page-detail .rocket-image { display: block; width: auto; max-width: 100%; height: auto; max-height: 360px; margin-inline: auto; object-fit: contain; object-position: center; border-radius: 8px; background: var(--zone-soft); box-shadow: inset 0 0 0 1px var(--line); }
.page-detail .rocket-body { display: contents; }
.page-detail .rocket-specs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 32px; margin: 0; }
.page-detail .rocket-spec { min-width: 0; padding-block: 9px 10px; border-top: 1px solid var(--line); }
.page-detail .rocket-spec dt { color: var(--muted); font-size: 12px; line-height: 1.6; }
.page-detail .rocket-spec dd { margin: 2px 0 0; color: var(--fg); font-size: 14px; line-height: 1.6; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.page-detail .rocket-links { display: flex; flex-wrap: wrap; gap: 4px 18px; }
.page-detail .rocket-links:empty { display: none; }
.page-detail .rocket-links a { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; color: var(--accent-ink); font-size: 13px; }
.page-detail .rocket-links a:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 4px; }

/* A quiet homepage follow section; QR pixels and white quiet zone stay intact. */
.page-home .wechat-follow { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 14px; margin-top: 16px; padding: 12px 0 0; border-top: 1px solid var(--line); }
.page-home .wechat-follow-copy { grid-column: 2; grid-row: 1; min-width: 0; }
.page-home .wechat-follow h2 { margin: 0; color: var(--muted); font-size: 13px; font-weight: 500; line-height: 1.5; }
.page-home .wechat-follow p { max-width: 36em; margin: 4px 0 0; color: var(--muted); font-size: 12px; line-height: 1.7; }
.page-home .wechat-qrcode { grid-column: 1; grid-row: 1; display: block; width: max-content; max-width: 100%; padding: 4px; background: #fff; }
.page-home .wechat-qrcode img { display: block; width: 86px; height: 86px; max-width: 100%; margin: 0; background: #fff; filter: none; mix-blend-mode: normal; }
@media (max-width: 740px) {
  .page-home .wechat-follow { gap: 12px; margin-top: 12px; }
}

/* About shares the same editorial width and quiet warm-white section rhythm. */
.page-about { font-size: 14px; line-height: 1.8; letter-spacing: -.008em; }
.page-about .shell { width: calc(100% - 72px); max-width: 1000px; }
.about-content { width: 100%; max-width: none; padding-block: 36px 12px; }
.about-hero, .about-section > :is(h2, h3, p, ul, ol) { max-width: 760px; }
.about-content h1 { margin-bottom: 16px; font-size: clamp(28px, 3.4vw, 40px); letter-spacing: -.035em; }
.page-about .breadcrumb { display: flex; align-items: center; gap: 8px; margin: 0 0 20px; color: var(--faint); font-size: 12px; }
.page-about .breadcrumb a { display: inline-flex; align-items: center; min-height: 28px; color: var(--muted); text-decoration: none; }
.page-about .breadcrumb a:hover { color: var(--accent-ink); text-decoration: underline; }
.about-lead { max-width: 42em; margin: 0; color: var(--muted); font-size: 16px; line-height: 1.85; }
.about-section { display: grid; grid-template-columns: 140px minmax(0, 1fr); gap: 10px 32px; margin-top: 36px; padding: 0; border: 0; }
.about-section > :not(h2) { grid-column: 2; min-width: 0; }
.about-section h2 { margin: 0; font-size: 17px; font-weight: 600; line-height: 1.7; }
.about-section h3 { margin-block: 20px 8px; font-size: 16px; }
.about-section p, .about-section li { line-height: 1.85; }
.about-section ul, .about-section ol { padding-inline-start: 22px; }
.about-section li + li { margin-top: 8px; }
.about-section a { color: var(--accent-ink); }
/* Terms page: the same 1000px editorial axis as the detail route. Every section
   is a full-width block opened by one hairline; there is no left title column
   and no 760px cap, so tables keep their real column widths on desktop. */
.page-terms { font-size: 14px; line-height: 1.7; letter-spacing: -.008em; }
.page-terms .shell { width: calc(100% - 72px); max-width: 1000px; }
.page-terms [id] { scroll-margin-top: 72px; }
.page-terms .term-link:not(.status), .page-terms .terms-link:not(.status) { color: inherit; }
.page-terms .term-link:not(.status):hover, .page-terms .term-link:not(.status):focus-visible, .page-terms .terms-link:not(.status):hover, .page-terms .terms-link:not(.status):focus-visible { color: var(--accent-ink); }
/* Page head mirrors the detail header: breadcrumb, title, then one lead. */
.page-terms .terms-content { padding-block: 0 8px; }
.page-terms .breadcrumb { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 20px 0 0; color: var(--faint); font-size: 12px; }
.page-terms .breadcrumb a { display: inline-flex; align-items: center; min-height: 28px; color: var(--muted); text-decoration: none; }
.page-terms .breadcrumb a:hover, .page-terms .breadcrumb a:focus-visible { color: var(--accent-ink); text-decoration: underline; }
.page-terms .terms-header { margin: 0; padding: 20px 0 0; }
.page-terms .terms-header h1 { margin: 0; font-size: clamp(30px, 3.2vw, 36px); font-weight: 680; letter-spacing: -.035em; line-height: 1.3; text-wrap: pretty; }
.page-terms .terms-lead { max-width: 46em; margin: 10px 0 0; color: var(--muted); font-size: 13px; line-height: 1.8; }
/* Section TOC reuses the detail rail (.detail-toc); its layout lives in the page-detail block above. */
/* Detail-style section rhythm: hairline, quiet accent bar, full-width body. */
.page-terms .terms-section { margin: 22px 0 0; padding: 22px 0 0; border-top: 1px solid var(--line); }
.page-terms .terms-section > h2 { margin: 0 0 12px; font-size: 18px; font-weight: 660; letter-spacing: -.02em; line-height: 1.5; }
.page-terms .terms-section > h2::before { content: ""; display: inline-block; width: 4px; height: 15px; margin-right: 10px; border-radius: 3px; background: var(--accent); vertical-align: -1px; }
.page-terms .terms-section h3 { margin: 24px 0 10px; font-size: 15px; font-weight: 660; letter-spacing: -.01em; line-height: 1.6; }
.page-terms .terms-section p, .page-terms .terms-section li { margin: 0 0 12px; font-size: 14px; line-height: 1.85; }
.page-terms .terms-section > :last-child { margin-bottom: 0; }
.page-terms .terms-section ul, .page-terms .terms-section ol { margin: 0 0 14px; padding-inline-start: 22px; }
.page-terms .terms-section li + li { margin-top: 6px; }
.page-terms .terms-section a { color: var(--accent-ink); }
.page-terms .terms-section code { padding: 1px 5px; border-radius: 3px; background: var(--inset); color: var(--strong); font-size: 12.5px; overflow-wrap: anywhere; }
/* Reference-style aside: a quoted block, not an alert. */
.page-terms .terms-note { margin: 16px 0; padding: 12px 16px; border: 1px solid var(--line); border-radius: 6px; background: var(--zone-soft); }
.page-terms .terms-note p { margin: 0; }
/* Tables fill the block and scroll only inside their own box on narrow screens. */
.page-terms .terms-scroll { max-width: 100%; margin: 14px 0 18px; padding-block: 2px 4px; overflow-x: auto; overscroll-behavior-x: contain; }
.page-terms .terms-table { width: 100%; min-width: 520px; border-collapse: collapse; font-size: 13px; line-height: 1.7; }
.page-terms .terms-table caption { margin-bottom: 8px; color: var(--faint); font-size: 12px; text-align: left; }
.page-terms .terms-table :is(th, td) { padding: 9px 18px 9px 0; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; overflow-wrap: anywhere; }
.page-terms .terms-table thead th { color: var(--muted); font-size: 12px; font-weight: 600; border-bottom-color: var(--line-strong); white-space: nowrap; }
.page-terms .terms-table tbody th { color: var(--fg); font-weight: 600; }
.page-terms .terms-table :is(th, td):last-child { padding-right: 0; }
.page-terms .terms-table tbody tr:last-child :is(th, td) { border-bottom: 0; }
@media (max-width: 920px) { .page-terms .shell { width: calc(100% - 52px); } }
@media (max-width: 740px) {
  .page-terms .shell { width: calc(100% - 34px); }
  .page-terms .terms-header h1 { font-size: 26px; }
  .page-terms .terms-section { margin-top: 18px; padding-top: 18px; }
  .page-terms .terms-section > h2 { font-size: 17px; }
  .page-terms .terms-section h3 { margin-top: 20px; }
  .page-terms .terms-table { font-size: 12.5px; }
  .page-terms .terms-table :is(th, td) { padding: 8px 12px 8px 0; }
}
@media (max-width: 370px) { .page-terms .shell { width: calc(100% - 28px); } }
@media (max-width: 1319px) {
  /* Keep the sticky section menu from covering the anchor it just jumped to. */
  .page-terms [id] { scroll-margin-top: 76px; }
}
@media (forced-colors: active) {
  .page-terms .terms-section { border-top-color: CanvasText; }
  .page-terms .terms-section > h2::before { background: CanvasText; }
  .page-terms .terms-note { border-color: CanvasText; background: Canvas; color: CanvasText; }
}
@media (max-width: 920px) { .page-about .shell { width: calc(100% - 52px); } }
@media (max-width: 740px) {
  .page-about .shell { width: calc(100% - 34px); }
  .about-content { padding-block: 26px 8px; }
  .about-section { grid-template-columns: minmax(0, 1fr); margin-top: 28px; }
  .about-section > :not(h2) { grid-column: 1; }
  .page-detail .rocket-overview:has(> figure) { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .page-detail .rocket-overview:has(> figure) > figure,
  .page-detail .rocket-overview:has(> figure) .rocket-body > .plain-text { grid-column: 1; grid-row: auto; }
  .page-detail .rocket-image { max-height: 320px; }
  .page-detail .rocket-specs { grid-template-columns: minmax(0, 1fr); }
  .page-detail .rocket-spec { display: grid; grid-template-columns: 124px minmax(0, 1fr); gap: 12px; align-items: baseline; padding-block: 7px 8px; }
  .page-detail .rocket-spec dd { margin: 0; }
}
@media (max-width: 370px) { .page-about .shell { width: calc(100% - 28px); } }

/* One footer for all four routes. It owns typography and shell breakpoints,
   rather than inheriting subtly different page text metrics. */
.site-footer.shell { width: calc(100% - 72px); max-width: 1000px; margin-top: 40px; padding-block: 24px 30px; border-top: 1px solid var(--line); color: var(--muted); font-family: var(--text); font-size: 11px; line-height: 1.8; letter-spacing: 0; font-synthesis: weight; text-rendering: optimizeLegibility; }
.site-footer p { margin: 0; }
.site-footer .footer-main { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 12px 24px; }
.site-footer .footer-brand { min-width: 0; }
.site-footer .footer-name { color: var(--strong); font-size: 13px; font-weight: 600; margin-bottom: 3px; }
.site-footer .footer-name span { margin-left: 6px; color: var(--faint); font-size: 10px; font-weight: 400; letter-spacing: .04em; }
.site-footer nav { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 16px; min-width: 0; }
.site-footer nav a { display: inline-flex; align-items: center; min-height: 28px; }
.site-footer .footer-bottom { display: flex; justify-content: space-between; align-items: baseline; gap: 8px 24px; margin-top: 0; }
.site-footer .footer-source { display: flex; align-items: baseline; flex-wrap: wrap; gap: 3px 6px; min-width: 0; }
.site-footer .footer-about { display: inline-flex; flex: none; align-items: center; min-height: 28px; white-space: nowrap; }
.site-footer .footer-source > * { white-space: nowrap; }
.page-home .site-footer.shell { margin-top: 12px; }
.site-footer a { color: inherit; text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
.site-footer a:hover { color: var(--accent-ink); }
@media (max-width: 920px) { .site-footer.shell { width: calc(100% - 52px); } }
@media (max-width: 740px) {
  .site-footer.shell { width: calc(100% - 34px); margin-top: 32px; padding-block: 22px 26px; }
  .site-footer .footer-main { gap: 8px 18px; }
  .site-footer nav { gap: 4px 18px; }
  .site-footer .footer-bottom { column-gap: 14px; margin-top: 0; }
}
@media (max-width: 370px) { .site-footer.shell { width: calc(100% - 28px); } }

@media (forced-colors: active) {
  .landing-header .tabs { border-bottom: 1px solid CanvasText; }
  .page-home .day-title h4 { outline: 1px solid GrayText; }
  .page-calendar .cal-stats { outline: 1px solid GrayText; }
}

/* Report list pages: only real archived reports, no placeholder cards. */
.reports-page { padding-block: 32px 48px; }
.reports-header h1 { margin: 12px 0 0; font-size: clamp(26px, 3vw, 34px); font-weight: 680; letter-spacing: -.035em; line-height: 1.3; }
.reports-header .page-intro { max-width: 42em; margin: 10px 0 0; color: var(--muted); font-size: 13px; line-height: 1.85; }
.reports-section { margin-top: 28px; padding-top: 18px; border-top: 1px solid var(--line); }
.reports-section h2 { margin: 0 0 12px; font-size: 17px; font-weight: 660; letter-spacing: -.02em; }
.reports-list { margin: 0; padding: 0; list-style: none; }
.reports-list li + li { border-top: 1px solid var(--line); }
.reports-list a { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 16px; min-height: 44px; padding: 11px 0; color: inherit; text-decoration: none; }
.reports-list a:hover .reports-label { color: var(--accent-ink); }
.reports-label { font-size: 14px; font-weight: 560; }
.reports-date { color: var(--faint); font-size: 12px; font-variant-numeric: tabular-nums; }

/* 2026-10-24 focused timeline, calendar and detail refinements. */
.page-home .launch-row:hover .launch-title,
.page-home .launch-row:focus-visible .launch-title { text-decoration: underline; text-underline-offset: 3px; }

.page-calendar .cal-filters { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 12px 18px; margin-top: 18px; }
.page-calendar .cal-filters .cal-chips { flex: 1 1 auto; margin: 0; }
/* Countries are the same chip strip as the orgs, and the wider list takes its own row. */
.page-calendar .cal-filters .country-chips { flex: 1 0 100%; }
.page-calendar .country-chips .cal-chip { font-family: "CHX Flag Emoji", var(--text); }

.page-calendar .uncertain-plans .launch-row.record { grid-template-columns: minmax(0, 1fr) minmax(120px, 167px); gap: 12px 18px; padding-inline: 16px 14px; }
.page-calendar .uncertain-plans .record .main-col { grid-column: 1; }
.page-calendar .uncertain-plans .record .place { display: block; grid-column: 2; justify-self: end; text-align: end; }

.page-detail .window-schedule { display: block; }
.page-detail .window-schedule dd { margin-top: 5px; }
.page-detail .window-range > span, .page-detail .window-range > .time-utc { display: block; }

/* A video is a 16:9 frame plus one honest caption line. Embedded players keep
   the real iframe; every other source reuses the same frame with a decorative
   play triangle and stays an ordinary external link, never a fake in-page
   player. */
.page-detail .video-resources { display: grid; gap: 22px 24px; }
.page-detail .video-resources li + li { margin-top: 0; }
.page-detail .video-resource { min-width: 0; }
.page-detail .video-player, .page-detail .video-placeholder { width: 100%; max-width: 760px; aspect-ratio: 16 / 9; margin-bottom: 6px; overflow: hidden; border: 1px solid var(--line); border-radius: 8px; background: var(--zone-soft); }
.page-detail .video-placeholder { display: flex; align-items: center; justify-content: center; }
.page-detail .video-player iframe { display: block; width: 100%; height: 100%; border: 0; }
.page-detail .video-play { display: block; flex: none; width: 46px; height: 46px; }
.page-detail .video-outbound { display: block; width: 100%; max-width: 760px; color: var(--fg); text-decoration: none; }
.page-detail .video-caption { display: inline-flex; align-items: center; gap: 7px; min-width: 0; max-width: 100%; font-size: 14px; line-height: 1.7; }
.page-detail .video-caption-text { min-width: 0; overflow-wrap: anywhere; }
.page-detail .video-outbound:hover, .page-detail .video-outbound:focus-visible { color: var(--accent-ink); }
.page-detail .video-outbound:hover .video-caption-text, .page-detail .video-outbound:focus-visible .video-caption-text { text-decoration: underline; text-underline-offset: 4px; }
/* The outbound video is a whole 16:9 frame plus a play glyph, so it takes the
   reference treatment on its caption only; the glyph stays body ink. */
.page-detail .video-caption { color: var(--accent-ink); }
.page-detail .video-outbound:is(:hover, :focus-visible) .video-caption { color: var(--accent); }
@media (min-width: 741px) {
  .page-detail .video-resources { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 740px) {
  .page-calendar .cal-filters { flex-direction: column; align-items: stretch; gap: 12px; }
  .page-calendar .cal-filters .country-chips { flex: 0 0 auto; }
  .page-calendar .uncertain-plans .launch-row.record { grid-template-columns: minmax(0, 1fr); grid-template-areas: none; padding-inline: 12px; }
  /* The shared mobile row names its areas `main`/`place`. With no areas left the
     shorthand's row half still resolved both children onto one implicit row, so
     clear the whole area first and only then pin the single column. */
  .page-calendar .uncertain-plans .record .main-col,
  .page-calendar .uncertain-plans .record .place { grid-area: auto; grid-column: 1; }
  .page-calendar .uncertain-plans .record .place { justify-self: start; text-align: start; padding-top: 2px; }
  .page-detail .detail-media { margin-top: 0; }
}

/* ---------------------------------------------------------------------------
   2026-10-25 shared mission identity, detail header copy and schedule icons.
   The identity row is the same contract on the homepage Hero and the task
   detail header: one model nameplate plus a quiet provider fact, no links.
--------------------------------------------------------------------------- */
/* The row resets the Hero lede metrics it also carries (class .lede) so both
   routes share one 14px identity line instead of a 13px/225px Hero variant. */
:is(.landing-header, .page-detail) .mission-identity {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 16px;
  max-width: none;
  margin: 8px 0 0;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.6;
  letter-spacing: 0;
}
/* Warm nameplate: the model is the identity anchor, not a button. */
:is(.landing-header, .page-detail) .mission-identity .mission-model {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  padding: 3px 8px;
  border: 1px solid color-mix(in srgb, var(--accent) 25%, var(--line));
  border-radius: 3px;
  background: var(--accent-soft);
  color: var(--strong);
  font-size: 14px;
  font-weight: 550;
  line-height: 20px;
  letter-spacing: 0;
}
:is(.landing-header, .page-detail) .mission-identity .mission-model .hero-fact-icon {
  width: 14px;
  height: 14px;
  flex: 0 0 14px;
  color: var(--accent-ink);
  stroke-width: 1.7;
}
:is(.landing-header, .page-detail) .mission-identity .mission-model .model-name {
  min-width: 0;
  overflow-wrap: anywhere;
}
/* The provider stays outside the plate at plain fact size; its icon is kept. */
:is(.landing-header, .page-detail) .mission-identity .mission-provider {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--muted);
  font-size: 13px;
  font-weight: 400;
  line-height: 22px;
  letter-spacing: 0;
}
:is(.landing-header, .page-detail) .mission-identity .mission-provider .hero-fact-icon {
  width: 13px;
  height: 13px;
  flex: 0 0 13px;
  color: var(--faint);
  stroke-width: 1.65;
}
:is(.landing-header, .page-detail) .mission-identity .mission-provider > :last-child {
  min-width: 0;
  overflow-wrap: anywhere;
}
@media (max-width: 740px) {
  :is(.landing-header, .page-detail) .mission-identity .mission-provider { font-size: 12px; line-height: 20px; }
}
@media (forced-colors: active) {
  :is(.landing-header, .page-detail) .mission-identity .mission-model { border-color: CanvasText; background: Canvas; color: CanvasText; }
  :is(.landing-header, .page-detail) .mission-identity :is(.mission-model, .mission-provider) .hero-fact-icon { color: CanvasText; }
}

/* Detail header now closes with the full mission description. It keeps the
   Hero reading size, never a clamp, and never a second border above the next
   section (which already owns its own hairline). */
.page-detail .detail-header .detail-description {
  max-width: none;
  margin: 10px 0 0;
  padding: 0;
  border: 0;
}
.page-detail .detail-header .detail-description p {
  margin: 0;
  font-size: 14px;
  line-height: 1.8;
}
/* The planned-time and window labels pair a 14px muted icon with their label
   on one baseline; the CST/UTC explanations stay sibling links outside <time>. */
.page-detail .detail-schedule dt {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}
.page-detail .detail-schedule .schedule-icon {
  width: 14px;
  height: 14px;
  flex: 0 0 14px;
  color: var(--muted);
}
.page-detail .detail-schedule dt > :last-child { min-width: 0; overflow-wrap: anywhere; }
/* The UTC line's zone suffix is a small inline link inside <small.time-utc>,
   including in the updates timeline. It must not inherit the source-link button
   box (.update-row a) or the planned-clock CST sizing (.schedule-primary
   .time-suffix); the planned CST suffix keeps its own rules above. */
.page-detail .time-utc a.time-suffix {
  display: inline;
  min-height: 0;
  margin: 0;
  padding: 0;
  background: none;
  gap: 0;
  color: inherit;
  font-size: inherit;
  font-weight: inherit;
  line-height: inherit;
  letter-spacing: inherit;
}

/* ---------------------------------------------------------------------------
   One treatment for every off-site link, on every route: warm ink at rest,
   accent plus an underline on hover/focus. It is scoped with :root so it outranks
   the page-local grey or inherit colours without !important, and it only ever
   sets colour and underline - never a background, box or size.
--------------------------------------------------------------------------- */
:root a[target="_blank"]:not(.video-outbound) { color: var(--accent-ink); }
:root a[target="_blank"]:not(.video-outbound):is(:hover, :focus-visible) { color: var(--accent); text-decoration: underline; text-underline-offset: 4px; }
/* The outbound video is excluded above because the anchor wraps a whole 16:9
   frame; only its caption takes the reference treatment, the play glyph keeps
   the body ink it inherits from .video-outbound. */
.page-detail .video-outbound .video-caption { color: var(--accent-ink); }
.page-detail .video-outbound:is(:hover, :focus-visible) .video-caption { color: var(--accent); }
/* ---------------------------------------------------------------------------
   Elapsed clock roll: decoration only. JavaScript still computes and owns the
   clock text; this block only paints it. The face is aria-hidden, the timer's
   own text stays the full latest string, and no font size, weight, colour or
   box geometry of the clock is changed here: the hero keeps --next-ink and the
   detail timer keeps --accent-ink from its own page CSS. Normal SSR / no-JS
   keeps plain text, and any timer outside this scope is never touched.
--------------------------------------------------------------------------- */
.clock-roll-face { display: inline; white-space: nowrap; }

/* One clipped cell per digit: the cell box is fixed, only its glyph moves. */
.clock-roll-digit {
  display: inline-grid;
  grid-template-areas: "glyph";
  grid-template-columns: max-content;
  overflow: hidden;
  vertical-align: baseline;
}

.clock-roll-digit::before,
.clock-roll-current { grid-area: glyph; }

/* Resting state: the incoming glyph sits at 0 and no previous glyph is shown,
   so a missed animationend can never leave two digits stacked. */
.clock-roll-current { transform: none; }

.clock-roll-digit[data-roll-from]::before {
  content: attr(data-roll-from);
  transform: translateY(-100%);
  animation: clock-roll-out 180ms ease-out both;
}

.clock-roll-digit[data-roll-from] > .clock-roll-current {
  animation: clock-roll-in 180ms ease-out both;
}

@keyframes clock-roll-in {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}

@keyframes clock-roll-out {
  from { transform: translateY(0); }
  to { transform: translateY(-100%); }
}

/* Reduced motion, forced colours and print: the value is simply there. */
@media (prefers-reduced-motion: reduce), (forced-colors: active), print {
  .clock-roll-digit[data-roll-from]::before { content: none; animation: none; }
  .clock-roll-digit > .clock-roll-current,
  .clock-roll-digit[data-roll-from] > .clock-roll-current { animation: none; transform: none; }
}

@media (forced-colors: active) {
  :is(.landing-header .hero-countdown, .page-detail .reference-timer)
    > span[role="timer"][data-countdown-mode="elapsed"] {
    color: CanvasText;
  }
}

@media print {
  :is(.landing-header .hero-countdown, .page-detail .reference-timer)
    > span[role="timer"][data-countdown-mode="elapsed"] {
    color: inherit;
  }
}
