/* 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: 18px; }
.page-detail .detail-overview > * { min-width: 0; }
/* The three plan rows are one reading column: primary instant, then the status
   and plan-relative clock beside it, then the launch window. Source order is the
   same order, so no `order` is needed and screen readers follow the page. */
.page-detail .detail-schedule { position: relative; display: grid; grid-template-columns: minmax(0, 1fr); align-content: start; gap: 0; margin: 0; max-width: 600px; padding-top: 0; }
.page-detail .detail-schedule dt { color: var(--muted); font-size: 12px; line-height: 1.5; }
.page-detail .detail-schedule dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.page-detail .schedule-primary dd { margin-top: 6px; color: var(--strong); font-size: clamp(22px, 2.3vw, 27px); font-weight: 600; line-height: 1.32; letter-spacing: -.015em; font-variant-numeric: tabular-nums; }
/* Zone suffix stays outside <time> so scripted rewrites never drop it. */
.page-detail .schedule-primary .time-suffix { margin-left: .28em; 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; }
/* The primary clock reads as one tight block: its UTC line stays close to the
   Beijing instant, and its own note keeps a wider gap so it never reads as part
   of the clock. The reference clock's note belongs to the status row instead. */
.page-detail .schedule-primary .time-utc { line-height: 1.55; }
.page-detail .schedule-primary .schedule-note { margin-top: 6px; line-height: 1.6; }
.page-detail .detail-reference-clock .schedule-note { margin-top: 7px; line-height: 1.6; }
.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 .detail-reference-clock { display: block; margin-top: 14px; 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 12px; }
.page-detail .detail-reference-clock .reference-phase { color: var(--muted); font-size: 13px; font-weight: 500; letter-spacing: .01em; }
/* One badge size for every state here; `live` no longer needs its own rule. */
.page-detail .detail-reference-clock .status { position: absolute; top: -4.2px; right: 0; margin: 0; max-width: 55%; padding: 3px 8px; font-size: 13px; line-height: 1.5; }
.page-detail .detail-schedule a.time-suffix[title^="北京时间"] { display: none; }
.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; }
/* Plan time reads as one instant: the date line, then the clock with a single
   solid point. The point is decoration only; the clock text states the time and
   the zone link states the zone. */
.page-detail .schedule-primary { position: relative; }
.page-detail .plan-instant { display: grid; gap: 4px; }
.page-detail .instant-day { color: var(--muted); font-size: 13px; font-weight: 400; line-height: 1.55; }
.page-detail .instant-clock { display: flex; align-items: center; gap: 10px; color: var(--strong); font-size: 32px; font-weight: 600; line-height: 1.2; }
.page-detail .instant-clock::before { content: ""; flex: none; width: 7px; height: 7px; border: 1px solid var(--accent); border-radius: 50%; background: var(--accent); }
/* Only the value's own zone link moves to the label line; the UTC links nested
   in the UTC line stay inline, or they would float away from their time. */
.page-detail .schedule-primary > dd > .time-suffix { position: absolute; top: 0; right: 0; margin: 0; font-size: 12px; font-weight: 500; letter-spacing: .04em; }
/* A window is a range, so it reads as two ends and the space between them: a
   static rail with hollow endpoints, never a filled progress bar. */
.page-detail .window-schedule { position: relative; }
.page-detail .window-schedule > dd > .time-suffix { position: absolute; top: 12px; right: 0; margin: 0; font-size: 12px; font-weight: 500; letter-spacing: .04em; }
.page-detail .window-date { display: block; margin-bottom: 8px; color: var(--muted); font-size: 13px; line-height: 1.55; font-variant-numeric: tabular-nums; }
.page-detail .window-track { display: grid; grid-template-columns: max-content minmax(18px, 1fr) max-content; gap: 12px; align-items: end; }
.page-detail .window-endpoint { display: block; min-width: 0; color: var(--muted); font-size: 12px; line-height: 1.6; }
.page-detail .window-endpoint time { display: block; font-variant-numeric: tabular-nums; }
.page-detail .window-endpoint .endpoint-day { display: block; color: var(--muted); font-size: 13px; font-weight: 400; line-height: 1.55; }
.page-detail .window-endpoint .endpoint-clock { display: block; color: var(--fg); font-size: 18px; font-weight: 500; line-height: 1.5; }
.page-detail .window-endpoint-end { text-align: right; }
.page-detail .window-bridge { display: flex; align-items: center; justify-content: center; min-width: 0; height: 27px; }
.page-detail .window-rail { display: none; }
.page-detail .window-bridge.is-range .window-rail { position: relative; display: block; width: 100%; border-top: 1px solid var(--line-strong); }
.page-detail .window-bridge.is-range .window-rail::before, .page-detail .window-bridge.is-range .window-rail::after { content: ""; position: absolute; top: -4px; width: 7px; height: 7px; border: 1px solid var(--muted); border-radius: 50%; background: var(--bg); }
.page-detail .window-bridge.is-range .window-rail::before { left: 0; }
.page-detail .window-bridge.is-range .window-rail::after { right: 0; }
.page-detail .window-range .window-boundary { 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; }
  .page-detail .instant-clock::before { border-color: CanvasText; background: CanvasText; }
  .page-detail .window-bridge.is-range .window-rail { border-top-color: CanvasText; }
  .page-detail .window-bridge.is-range .window-rail::before, .page-detail .window-bridge.is-range .window-rail::after { border-color: CanvasText; background: Canvas; }
  :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: 0; }
  .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; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--line); }
.page-detail .window-schedule dd { margin-top: 5px; }
.page-detail .window-range { color: var(--muted); font-size: 13px; line-height: 1.62; }
.page-detail .window-range > span, .page-detail .window-range > .time-utc { display: block; }
.page-detail .window-range .time-utc { margin-top: 8px; color: var(--muted); font-size: 12px; line-height: 1.55; }
/* One boundary per edge: an instant and its zone suffix wrap as a unit, so a
   320px column never strands CST/UTC on a line of its own. The value itself is
   never split, re-dated or relabelled here. */
.page-detail .window-boundary { display: inline-block; white-space: nowrap; }
/* These mobile values own the same properties as the rules above, so they have
   to stay after them (the older 740px block only zeroes the plan gap). */
@media (max-width: 740px) {
  .page-detail .detail-overview { margin-top: 16px; }
  .page-detail .detail-reference-clock { margin-top: 12px; }
  .page-detail .detail-reference-clock .status { top: -5.2px; }
  .page-detail .window-schedule { margin-top: 14px; padding-top: 10px; }
  .page-detail .schedule-primary dd { margin-top: 5px; font-size: 22px; }
  .page-detail .instant-clock { font-size: 28px; }
  .page-detail .window-schedule > dd > .time-suffix { top: 10px; }
}
@media (max-width: 400px) {
  .page-detail .schedule-primary dd { letter-spacing: -.025em; }
  .page-detail .reference-clock-group { gap: 4px 10px; }
  .page-detail .window-track { gap: 10px; }
}

/* 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: 22px 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;
  }
}

/* Combined plan/window axis on the detail page. The rail is the measured
   window; the plan time is centred above it, not placed at its real
   proportion. Everything is decoration except the original <time> values,
   links and the reference clock group; no client script measures geometry. */
.page-detail .net-head-term::before {
  content: " · ";
  color: var(--decoration);
}
/* Combined plan/window axis on the detail page. Four grid columns: zone |
   window start | rail | window end. Row 1 is the centred plan time, row 2 the
   rail with the endpoint readouts outside it, row 3 the matching UTC line.
   Everything is decoration except the original <time> values, links and
   reference clock group; no client script computes or measures geometry. */
.page-detail .net-head-term::before {
  content: " \00b7 ";
  color: var(--decoration);
}
.page-detail .net-axis {
  position: relative;
  display: grid;
  grid-template-columns: 62px minmax(0, 1fr) 62px;
  grid-template-rows: auto auto auto;
  gap: 10px 8px;
  height: auto;
  min-height: 0;
  font-variant-numeric: tabular-nums;
}

/* Row 1: the source NET spans the whole axis; no zone label sits above it. */
.page-detail .net-cst {
  grid-row: 1;
  grid-column: 1 / -1;
  position: static;
  top: auto;
  left: auto;
  width: auto;
  text-align: center;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.5;
  white-space: normal;
}
.page-detail .net-cst .plan-instant { grid-column: 2; display: inline; white-space: nowrap; }
/* The reading keeps the clock on the middle column of the axis; the 发射 suffix
   fills the free space to its right instead of pushing the digits off centre. */
.page-detail .net-main-reading {
  display: grid;
  grid-template-columns: minmax(0, 1fr) max-content minmax(0, 1fr);
  column-gap: 4px;
  align-items: baseline;
}
.page-detail .net-launch-label {
  grid-column: 3;
  justify-self: start;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.5;
  white-space: nowrap;
}
.page-detail .net-plan-label {
  display: none;
  margin: 0 0 2px;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.5;
}
.page-detail .net-cst .net-pending-note { display:block; margin:4px 0 0; color:var(--muted); font-size:12px; font-weight:400; line-height:1.5; letter-spacing:normal; text-align:center; }
.page-detail .net-cst .instant-day {
  display: inline;
  color: var(--strong);
  font-size: 20px;
  font-weight: 650;
  line-height: 1.3;
  letter-spacing: -.025em;
  white-space: nowrap;
}
.page-detail .net-cst > .instant-day { white-space: normal; overflow-wrap: anywhere; }
.page-detail .net-cst .instant-clock {
  display: inline;
  margin-left: 4px;
  color: var(--strong);
  font-size: 20px;
  font-weight: 650;
  line-height: 1.3;
  letter-spacing: -.025em;
  white-space: nowrap;
}
.page-detail .net-cst .instant-clock::before { content: none; }
/* The header CST link now closes row 1; this copy stays in the DOM. */
.page-detail .net-cst .time-suffix { display: none; }

/* The zone words stay in the DOM but are not shown: the axis is Beijing time by
   default, so no leading label column is reserved. */
.page-detail .net-zone {
  grid-column: 1;
  align-self: center;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.5;
  white-space: nowrap;
}
.page-detail .net-zone-cst { grid-row: 1; display: none; }
.page-detail .net-zone .time-suffix {
  margin: 0;
  color: inherit;
  font-size: 11px;
  font-weight: 400;
  letter-spacing: 0;
  white-space: nowrap;
}

/* Row 1, sides: the complete window endpoints in CST. */
.page-detail .net-ends { display: contents; }
.page-detail .net-ends .window-endpoint {
  grid-row: 2;
  align-self: center;
  position: static;
  top: auto;
  bottom: auto;
  left: auto;
  right: auto;
  margin: 0;
  min-width: 0;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.6;
  white-space: normal;
}
.page-detail .net-ends .window-endpoint:first-child {
  grid-column: 1;
  text-align: right;
}
.page-detail .net-ends .window-endpoint-end {
  grid-column: 3;
  margin-left: 0;
  text-align: left;
}
.page-detail .net-ends .window-endpoint time {
  display: inline;
  white-space: normal;
}
/* Same-day endpoints hide their date in the schedule block; here every date
   stays visible. Scoped to the axis only. */
.page-detail .net-ends .endpoint-day {
  display: block;
  position: static;
  width: auto;
  height: auto;
  padding: 0;
  margin: 0;
  overflow: visible;
  clip-path: none;
  white-space: normal;
  border: 0;
  color: var(--muted);
  font-size: 11px;
  font-weight: 400;
  line-height: 1.6;
}
.page-detail .net-ends .endpoint-clock {
  display: inline;
  color: var(--muted);
  font-size: 11px;
  font-weight: 400;
  line-height: 1.6;
}

/* Row 2: the rail is the middle column only, between the two endpoint readouts,
   and keeps its hollow window ends. */
.page-detail .net-rail {
  grid-row: 2;
  grid-column: 2;
  position: relative;
  top: auto;
  left: auto;
  right: auto;
  width: 100%;
  height: 1px;
  align-self: center;
  background: var(--line-strong);
}
.page-detail .net-rail::before,
.page-detail .net-rail::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 7px;
  height: 7px;
  border: 1px solid var(--muted);
  border-radius: 50%;
  background: var(--bg);
  transform: translateY(-50%);
}
.page-detail .net-rail::before { left: 0; transform: translate(-50%, -50%); }
.page-detail .net-rail::after { right: 0; transform: translate(50%, -50%); }
.page-detail .net-dot {
  display: none;
  position: absolute;
  left: var(--net-position, 50%);
  top: 50%;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 3px var(--bg);
  transform: translate(-50%, -50%);
}
.page-detail .net-dot::before {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 100%;
  width: 1px;
  height: 7px;
  background: var(--accent);
  opacity: .5;
  transform: translateX(-50%);
}

/* Row 2: status and the plan-relative clock keep their original group in the
   DOM and are placed against the axis by CSS only. The status stays on the
   heading row; T+/- is centred under the plan time. */
.page-detail .net-axis > .reference-clock-group {
  grid-row: 2;
  grid-column: 2;
  position: static;
  display: block;
  width: 100%;
  min-height: 33px;
  padding: 0;
  align-self: center;
}
.page-detail .net-axis > .reference-clock-group > .status {
  position: absolute;
  top: -34px;
  right: 0;
  margin: 0;
  padding: 3px 8px;
  max-width: 55%;
  font-size: 13px;
  line-height: 1.5;
}
.page-detail .net-axis > .reference-clock-group > .reference-timer {
  position: relative;
  top: 0;
  display: block;
  width: max-content;
  left: auto;
  right: auto;
  margin-inline: auto;
  text-align: center;
  max-width: calc(100% - 20px);
  gap: 0;
  background: var(--bg);
  box-shadow: 0 0 0 5px var(--bg);
  color: var(--accent-ink);
  font-size: 16px;
  font-weight: 500;
  line-height: 33px;
  font-variant-numeric: tabular-nums;
  white-space: normal;
  overflow-wrap: anywhere;
}
.page-detail .net-axis.net-late > .reference-clock-group > .reference-timer {
  left: auto;
  right: auto;
  margin-inline: auto;
  text-align: center;
  max-width: calc(100% - 20px);
}
.page-detail .net-axis .clock-roll-face { white-space: normal; }
.page-detail .net-axis > .reference-clock-group > .reference-timer > span {
  line-height: 33px;
}

.page-detail .net-utc-disclosure:not(:has(time)) { display: none; }
.page-detail .net-axis.net-no-range:not(:has(.net-ends, .reference-timer)) > .reference-clock-group { min-height: 0; }
.page-detail .detail-net-schedule > dd > .net-window-note { text-align: center; font-size: 12px; font-weight: 400; }

/* Row 3: the whole UTC readout is one native disclosure. Its summary states the
   zone once; the panel reuses the original three blocks in a three-column grid
   that stays aligned with the CST columns. No script is involved. */
.page-detail .net-utc-disclosure {
  grid-row: 3;
  grid-column: 1 / -1;
  min-width: 0;
}
.page-detail .net-utc-disclosure > summary {
  width: max-content;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.5;
  white-space: nowrap;
  cursor: pointer;
}
.page-detail .net-utc-disclosure > summary:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.page-detail .net-utc-panel {
  display: grid;
  grid-template-columns: 62px minmax(0, 1fr) 62px;
  gap: 8px;
  margin-top: 6px;
  padding-left: 0;
  box-sizing: border-box;
  min-width: 0;
}
/* The summary already states the zone, so the panel drops its inline label. */
.page-detail .net-utc-panel .net-zone-utc { display: none; }
/* The shared <small.time-utc> wrappers are display:contents so their children
   land on the panel grid. */
.page-detail .net-legend { display: contents; }
.page-detail .net-legend .time-utc { display: contents; }
.page-detail .net-legend .window-boundary {
  grid-row: 1;
  max-width: none;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.6;
  white-space: normal;
  overflow-wrap: anywhere;
}
.page-detail .net-legend .window-boundary:first-child {
  grid-column: 1;
  text-align: right;
}
.page-detail .net-legend .window-boundary:last-child {
  grid-column: 3;
  text-align: left;
}
.page-detail .net-utc {
  grid-row: 1;
  grid-column: 2;
  position: static;
  top: auto;
  left: auto;
  width: auto;
  margin: 0;
  text-align: center;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.6;
  white-space: normal;
  overflow-wrap: anywhere;
}
.page-detail .net-utc > .time-utc {
  display: inline;
  margin: 0;
  color: inherit;
  font-size: 11px;
  line-height: inherit;
}
/* Only the two row ends state the zone. */
.page-detail .net-axis .net-utc .time-utc a.time-suffix { display: none; }

/* Every UTC instant takes its own line whatever the width. The template keeps
   the original "date clock" string; a 10ch block makes it wrap at its single
   space, so no new backend field is needed. */
.page-detail .net-axis .time-utc time {
  display: block;
  inline-size: 10ch;
  max-inline-size: 100%;
  white-space: normal;
}
.page-detail .net-axis .net-utc .time-utc time { margin-inline: auto; inline-size: auto; max-inline-size: none; white-space: nowrap; }
.page-detail .net-axis .net-legend .window-boundary:last-child time { margin-left: auto; }

/* Narrow screens only tighten the gaps; the two-line CST and UTC layout is
   already the default at every width. */
@media (max-width: 600px) {
  .page-detail .net-axis { gap: 8px 6px; }
  .page-detail .net-axis > .reference-clock-group > .status, .page-detail .detail-reference-clock .status { max-width: 60%; }
}
.page-detail .detail-net-schedule > dd .reference-timer-noscript {
  display: block;
  margin: 4px 0 0;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.4;
}

/* One note after the axis; a prevented marker also states its reason once. */
.page-detail .detail-net-schedule > dd > .schedule-note {
  display: block;
  margin: 8px 0 0;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.6;
}
.page-detail .timeline-note {
  margin: 8px 0 0;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.6;
}
.page-detail .detail-overview > .timeline-note { margin-top: 8px; }

@media (forced-colors: active) {
  .page-detail .net-rail { background: CanvasText; }
  .page-detail .net-rail::before,
  .page-detail .net-rail::after { border-color: CanvasText; background: Canvas; }
  .page-detail .net-dot { background: CanvasText; box-shadow: none; }
  .page-detail .net-dot::before { background: CanvasText; }
}
