/* ============ PAGE HEAD ============ */
/* 移动端专属:mock .rk-hero(近期发射标题 + 统计副行),桌面隐藏 */
.cal-hero-m { display:none; }
/* 移动端专属:mock .month-bar(横滚月份 chips),桌面隐藏 */
.cal-monthbar-m { display:none; }
.cal-page-head { max-width:1440px;margin:0 auto;padding:24px 32px 18px;display:flex;justify-content:space-between;align-items:flex-end;gap:18px 28px;flex-wrap:wrap; }
.cal-counts { display:flex;gap:36px;flex-wrap:wrap; }
.cal-count .n { font-family:var(--font-mono);font-size:26px;font-weight:700;letter-spacing:-0.02em;color:var(--fg);font-variant-numeric:tabular-nums; }
.cal-count .n .u { font-size:13px;color:var(--fg-faint);font-weight:500;margin-left:3px; }
.cal-count .k { font-family:var(--font-sans);font-size:12px;color:var(--fg-faint);margin-top:2px; }
.cal-count.ok .n { color:var(--success-dark); }
.cal-count.warn .n { color:var(--warn-dark); }
.cal-count.danger .n { color:var(--danger-dark); }

/* 日历订阅入口 */
.cal-subscribe { display:flex;align-items:center;gap:8px;flex-wrap:wrap; }
.cal-sub-btn { display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border:1px solid transparent;border-radius:8px;background:var(--accent-soft-bg);color:var(--accent);font-size:13px;font-weight:600;text-decoration:none;transition:background var(--dur-fast) var(--ease-out); }
.cal-sub-btn:hover { background:var(--accent-tint-12); }
.cal-sub-btn svg { width:15px;height:15px; }
.cal-sub-url { font-family:var(--font-mono);font-size:12px;color:var(--fg-faint);background:var(--bg-elev);border:1px solid var(--line);border-radius:7px;padding:6px 10px;width:300px;max-width:100%;box-sizing:border-box; }
.cal-sub-url:focus { outline:none;border-color:var(--accent);color:var(--fg-muted); }
.cal-sub-copy { padding:7px 11px;border:1px solid var(--line);border-radius:7px;background:var(--bg-elev);font-family:var(--font-mono);font-size:12px;color:var(--fg-muted);cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out); }
.cal-sub-copy:hover { border-color:var(--accent);color:var(--accent); }
.cal-sub-more { font-size:12px;color:var(--fg-faint);text-decoration:none;white-space:nowrap; }
.cal-sub-more:hover { color:var(--accent); }
@media (max-width:560px) { .cal-sub-url { display:none; } }

/* ============ CONTROL BAR ============ */
.cal-cbar-wrap { background:var(--bg);border-bottom:1px solid var(--line);position:sticky;top:64px;z-index:40; }
.cal-cbar { max-width:1440px;margin:0 auto;padding:12px 32px;display:flex;align-items:center;gap:14px;flex-wrap:wrap; }
.cal-month-nav { display:flex;align-items:center;gap:6px;background:var(--bg-elev);border:1px solid var(--line);border-radius:8px;padding:3px; }
.cal-month-nav a { background:transparent;border:none;width:32px;height:32px;border-radius:5px;cursor:pointer;color:var(--fg);font-size:16px;display:inline-flex;align-items:center;justify-content:center; }
.cal-month-nav a:hover { background:var(--accent-tint-12); }
.cal-month-nav .label { padding:0 14px;font-family:var(--font-display);font-weight:700;font-size:17px;letter-spacing:-0.01em;font-variant-numeric:tabular-nums; }
.cal-month-nav .label .yr { color:var(--fg-faint);font-weight:500;font-family:var(--font-mono);font-size:13px;margin-left:4px; }

/* ---- 月份选择器:点标题展开,任选一个月 ---- */
/* <details> 而不是 <select>+JS:格子是真链接,没有 JS 也能用、也能被抓到,
   而 <select> 的方案在 JS 挂掉时是个什么都不做的控件。 */
.cal-mpick { position:relative; }
.cal-mpick > summary { display:inline-flex;align-items:center;cursor:pointer;border-radius:5px;list-style:none;user-select:none; }
.cal-mpick > summary::-webkit-details-marker { display:none; }
.cal-mpick > summary:hover { background:var(--accent-tint-12); }
.cal-mpick > summary:focus-visible { outline:2px solid var(--accent);outline-offset:1px; }
/* 小三角用 border 画,省一个 svg;展开时转 180°。
   flex:0 0 auto —— summary 是 inline-flex,不锁住会被压扁成一条线。 */
.cal-mpick-caret { flex:0 0 auto;width:0;height:0;margin-left:7px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid var(--fg-faint);transition:transform 120ms ease; }
.cal-mpick[open] > summary .cal-mpick-caret { transform:rotate(180deg); }

/* 控制栏是 sticky z-index:40,弹层必须压过它自己那一层里的兄弟元素 */
.cal-mpick-pop { position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);z-index:70;min-width:236px;background:var(--bg-elev);border:1px solid var(--line-strong);border-radius:10px;padding:10px;box-shadow:0 10px 28px rgba(0,0,0,0.22); }
.cal-mpick-hd { display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--line); }
.cal-mpick-hd b { font-family:var(--font-mono);font-size:14px;font-weight:700;letter-spacing:0.04em;font-variant-numeric:tabular-nums; }
.cal-mpick-hd a, .cal-mpick-hd .off { width:26px;height:26px;border-radius:5px;display:inline-flex;align-items:center;justify-content:center;font-size:15px;color:var(--fg);text-decoration:none; }
.cal-mpick-hd a:hover { background:var(--accent-tint-12); }
/* 越出 1970..2100 的那一端:留住位置,不留错觉 */
.cal-mpick-hd .off { color:var(--fg-faint);opacity:0.35; }

.cal-mpick-grid { display:grid;grid-template-columns:repeat(4,1fr);gap:5px; }
/* ⚠️ 前缀 `.cal-month-nav` 不是装饰,是必需的:上面那条 `.cal-month-nav a`
   是 (0,1,1),会压过裸的 `.cal-mpick-m` (0,1,0),把每一格锁成 32×32 的方块、
   四列网格直接塌掉。带上前缀是 (0,2,0) 才赢得过。.cal-mpick-hd 里的两个
   箭头同理。 */
.cal-month-nav .cal-mpick-m { display:inline-flex;align-items:center;justify-content:center;padding:7px 0;border-radius:6px;font-size:12.5px;font-weight:500;color:var(--fg);text-decoration:none;font-variant-numeric:tabular-nums; }
.cal-month-nav .cal-mpick-m:hover { background:var(--accent-tint-12);color:var(--accent); }
.cal-month-nav .cal-mpick-m.on { background:var(--accent);color:var(--accent-fg);font-weight:700; }
.cal-month-nav .cal-mpick-m.on:hover { background:var(--accent-hover);color:var(--accent-fg); }
.cal-today-btn { padding:7px 13px;border:1px solid var(--line);border-radius:8px;background:var(--bg-elev);font-family:var(--font-mono);font-size:12px;color:var(--fg);cursor:pointer;letter-spacing:0.06em;text-transform:uppercase;font-weight:600; }
.cal-today-btn:hover { border-color:var(--accent);color:var(--accent); }

/* 日历内搜索框(粘性控制栏,右对齐) */
.cal-search { margin-left:auto;display:flex;align-items:center;gap:9px; }
.cal-search-box { display:flex;align-items:center;gap:7px;height:34px;padding:0 11px;background:var(--bg-elev);border:1px solid var(--line);border-radius:8px;transition:border-color var(--dur-fast) var(--ease-out); }
.cal-search-box:focus-within { border-color:var(--accent); }
.cal-search-box svg { width:15px;height:15px;color:var(--fg-faint);flex-shrink:0; }
.cal-search-box:focus-within svg { color:var(--accent); }
.cal-search-input { border:none;background:transparent;outline:none;font-family:inherit;font-size:13.5px;color:var(--fg);width:190px; }
.cal-search-input::placeholder { color:var(--fg-faint); }
.cal-search-count { font-family:var(--font-mono);font-size:11px;color:var(--accent);white-space:nowrap; }
.cal-search-count.empty { color:var(--fg-faint); }

.cal-view-tabs { display:flex;gap:2px;background:var(--bg-elev);border:1px solid var(--line);border-radius:8px;padding:3px; }
.cal-view-tabs > * { background:transparent;border:none;padding:7px 14px;border-radius:5px;font-family:inherit;font-size:14px;color:var(--fg-muted);cursor:pointer;font-weight:500;display:inline-flex;align-items:center;gap:6px;text-decoration:none;line-height:1; }
.cal-view-tabs > a:hover, .cal-view-tabs > button:hover { background:var(--accent-tint-12); }
.cal-view-tabs > .on { background:var(--accent-soft-bg);color:var(--accent);cursor:default; }
.cal-view-tabs > button[disabled] { color:var(--fg-dim);cursor:not-allowed; }
.cal-view-tabs svg { width:13px;height:13px; }

.cal-cbar-filters { max-width:1440px;margin:0 auto;padding:0 32px 12px; }
.cal-cbar-row { display:flex;flex-wrap:wrap;gap:8px;align-items:center; }
.cal-chip-sep { width:1px;height:18px;background:var(--line);margin:0 2px; }
.cal-filter-hint { font-family:var(--font-mono);font-size:11px;color:var(--fg-faint);letter-spacing:0.04em;margin-left:6px; }
.cal-filter-hint b { color:var(--accent);font-weight:700; }
.cal-cbar-filters .chip { padding:6px 12px;border:1px solid var(--line);border-radius:6px;font-size:13.5px;color:var(--fg-muted);background:var(--bg-elev);display:inline-flex;gap:6px;align-items:center;white-space:nowrap;font-family:inherit;text-decoration:none;cursor:pointer;transition:border-color 120ms,background 120ms,color 120ms; }
.cal-cbar-filters .chip:hover { border-color:var(--accent);color:var(--accent); }
.cal-cbar-filters .chip.on { background:var(--accent-soft-bg);color:var(--accent);border-color:var(--accent); }
.cal-cbar-filters .chip.on:hover { background:var(--accent-soft-bg);color:var(--accent);border-color:var(--accent); }
.cal-cbar-filters .chip .dot-c { width:7px;height:7px;border-radius:50%;flex-shrink:0; }
.cal-cbar-filters .chip .ct { font-family:var(--font-mono);font-size:10px;opacity:0.6;margin-left:2px; }

/* ============ DENSITY STRIP ============ */
.cal-density-wrap { max-width:1440px;margin:0 auto;padding:18px 32px 0;display:grid;grid-template-columns:1fr 320px;gap:28px; }
.cal-density { display:flex;align-items:center;gap:14px;min-width:0; }
.cal-density .lab { font-family:var(--font-mono);font-size:10px;color:var(--fg-faint);letter-spacing:0.1em;text-transform:uppercase;white-space:nowrap;font-weight:600; }
.cal-density-body { flex:1;min-width:0; }
.cal-density .bars { display:grid;gap:2px;height:28px;align-items:end;min-width:0; }
.cal-density .bar { background:var(--line);border-radius:2px 2px 0 0;position:relative;cursor:default; }
.cal-density .bar:hover::after { content:attr(data-info);position:absolute;bottom:32px;left:50%;transform:translateX(-50%);background:var(--fg);color:var(--bg);font-family:var(--font-mono);font-size:10px;padding:4px 8px;border-radius:4px;white-space:nowrap;letter-spacing:0.05em;z-index:60;pointer-events:none; }
.cal-density .bar.has { background:#ffd0b0; }
.cal-density .bar.med { background:#ff9050; }
.cal-density .bar.hot { background:var(--accent); }
.cal-density .bar.now { outline:2px solid var(--fg);outline-offset:1px;background:var(--fg); }
.cal-density .axis { font-family:var(--font-mono);font-size:10px;color:var(--fg-faint);display:grid;gap:2px;margin-top:6px;letter-spacing:0.04em; }
.cal-density .axis span { text-align:center;font-variant-numeric:tabular-nums; }
.cal-density .axis span:not(:nth-child(5n+1)) { color:transparent; }

/* ============ MAIN ============ */
.cal-main { max-width:1440px;margin:0 auto;padding:18px 32px 64px;display:grid;grid-template-columns:1fr 320px;gap:28px; }

/* ============ MONTH GRID ============ */
.cal-card { background:var(--bg-elev);border:1px solid var(--line);border-radius:14px; }
.cal-weekhead { display:grid;grid-template-columns:repeat(7,1fr);background:var(--bg-inset);border-bottom:1px solid var(--line); }
.cal-weekhead .wh { padding:11px 14px;font-family:var(--font-mono);font-size:11.5px;color:var(--fg-muted);letter-spacing:0.1em;text-transform:uppercase;font-weight:700;border-right:1px solid var(--line); }
.cal-weekhead .wh:last-child { border-right:none; }
.cal-weekhead .wh.weekend { color:var(--fg-faint); }

.cal-grid { display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:minmax(176px,1fr); }
.cal-cell { border-right:1px solid var(--line-faint);border-bottom:1px solid var(--line-faint);padding:8px 10px 10px;display:flex;flex-direction:column;gap:5px;min-height:176px;position:relative;transition:background 120ms; }
.cal-cell:hover { background:var(--bg); }
.cal-cell:nth-child(7n) { border-right:none; }
.cal-cell.out { background:var(--bg);color:var(--fg-dim); }
.cal-cell.out .dn { color:var(--fg-dim); }
.cal-cell.weekend { background:var(--bg); }
.cal-cell.today { background:var(--accent-soft-bg); }
.cal-cell.today .dn { color:var(--accent); }
.cal-cell.today::before { content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--accent); }
.cal-cell .dh { display:flex;justify-content:space-between;align-items:baseline;margin-bottom:2px; }
.cal-cell .dn { font-family:var(--font-mono);font-size:14px;font-weight:700;color:var(--fg);font-variant-numeric:tabular-nums; }
.cal-cell .dn .dw { font-size:10.5px;color:var(--fg-faint);font-weight:500;letter-spacing:0.06em;margin-left:4px;text-transform:uppercase; }
.cal-cell .cnt { font-family:var(--font-mono);font-size:11px;color:var(--fg-faint);letter-spacing:0.05em; }
.cal-cell.today .cnt { color:var(--accent);font-weight:700; }
.cal-cell .anc { position:absolute;top:5px;right:8px;font-family:var(--font-mono);font-size:9px;color:var(--fg-faint);letter-spacing:0.04em;background:var(--bg-inset);padding:1px 5px;border-radius:3px;text-transform:uppercase;font-weight:600; }
.cal-cell.today .anc { background:var(--accent);color:var(--accent-fg); }

/* 单条事件 */
.cal-ev { display:grid;grid-template-columns:auto 6px 1fr;gap:6px;align-items:center;padding:3px 6px 3px 0;border-radius:5px;cursor:pointer;font-size:12.5px;line-height:1.25;transition:background 120ms;position:relative;color:inherit; }
.cal-ev:hover { z-index:60; }

/* 任务详情 tooltip（鼠标悬停在 .cal-ev 上时显示） */
.cal-tip { position:absolute;bottom:calc(100% + 6px);left:0;z-index:80;background:var(--fg);color:var(--bg);padding:10px 12px;border-radius:8px;font-family:var(--font-sans);font-size:12px;line-height:1.5;min-width:240px;max-width:320px;box-shadow:0 8px 24px rgba(0,0,0,0.3);opacity:0;pointer-events:none;transform:translateY(4px);transition:opacity 120ms ease 250ms, transform 120ms ease 250ms; }
.cal-ev:hover .cal-tip { opacity:1;transform:translateY(0); }
.cal-tip-h { font-family:var(--font-display);font-size:14px;font-weight:600;color:var(--bg);margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--line-strong);letter-spacing:-0.005em; }
.cal-tip-row { display:flex;gap:12px;margin:3px 0;align-items:baseline; }
.cal-tip-row .k { font-family:var(--font-mono);font-size:10px;color:var(--fg-dim);letter-spacing:0.08em;text-transform:uppercase;flex-shrink:0;width:32px; }
.cal-tip-row > span:not(.k) { color:var(--bg);flex:1;min-width:0; }
.cal-ev:hover { background:var(--bg-elev); }
.cal-cell.out .cal-ev:hover { background:transparent; }
.cal-ev .tm { font-family:var(--font-mono);font-size:11.5px;font-weight:700;color:var(--fg);font-variant-numeric:tabular-nums;letter-spacing:-0.01em;line-height:1.1; }
.cal-cell.out .cal-ev .tm { color:var(--fg-dim); }
.cal-ev .bar { width:3px;height:14px;border-radius:1.5px;background:var(--fg); }
/* 任务名:单行,长名右缘淡出提示;悬停时去掉淡出并按各自溢出量横向滚到末尾(cqw 容器单位,无需 JS) */
.cal-ev .nm { font-weight:600;color:var(--fg);letter-spacing:-0.005em;min-width:0;line-height:1.25;overflow:hidden;white-space:nowrap;container-type:inline-size;-webkit-mask:linear-gradient(90deg,#000 calc(100% - 14px),transparent);mask:linear-gradient(90deg,#000 calc(100% - 14px),transparent); }
.cal-ev .nm-t { display:inline-block;white-space:nowrap;transition:transform 1.4s ease 0.15s; }
.cal-ev:hover .nm { -webkit-mask:none;mask:none; }
.cal-ev:hover .nm-t { transform:translateX(min(0px, calc(100cqw - 100%))); }
.cal-cell.out .cal-ev .nm { color:var(--fg-dim);font-weight:500; }

/* 机构色条 */
.cal-ev[data-org="spx"] .bar { background:var(--fg); }
.cal-ev[data-org="cnsa"] .bar { background:var(--accent-soft-fg); }
.cal-ev[data-org="nasa"] .bar { background:#0b3d91; }
.cal-ev[data-org="esa"] .bar { background:var(--info); }
.cal-ev[data-org="rl"] .bar { background:var(--success); }
.cal-ev[data-org="ula"] .bar { background:#162a4a; }
.cal-ev[data-org="isro"] .bar { background:var(--warn-dark); }
.cal-ev[data-org="jaxa"] .bar { background:var(--danger-dark); }
.cal-ev[data-org="other"] .bar { background:var(--fg-faint); }

/* 事件状态 */
.cal-ev.live { background:rgba(225,29,72,0.06); }
.cal-ev.live .tm { color:var(--danger); }
.cal-ev.live .nm { color:var(--danger-dark); }
.cal-ev.live::after { content:'●';color:var(--danger);font-size:8px;animation:calPulse 1.4s infinite;position:absolute;right:4px;top:5px; }
@keyframes calPulse { 50% { opacity:0.3; } }
.cal-ev.scrub .tm, .cal-ev.scrub .nm { color:var(--fg-faint);text-decoration:line-through; }
.cal-ev.scrub .bar { background:var(--line-strong); }
.cal-ev.tbd .tm { color:var(--warn-dark); }
.cal-ev.success .bar { background:var(--success) !important; }
.cal-ev.success .tm::after { content:' ✓';color:var(--success); }
.cal-ev.fail .bar { background:var(--danger) !important; }
.cal-ev.fail .tm::after { content:' ✕';color:var(--danger); }

.cal-cell .more-ev { display:inline-flex;align-items:center;width:max-content;font-family:var(--font-mono);font-size:11px;color:var(--fg-faint);padding:2px 6px;letter-spacing:0.04em;cursor:pointer;font-weight:600;margin-top:auto;text-decoration:none; }
.cal-cell .more-ev:hover { color:var(--accent); }

/* ============ LEGEND ============ */
.cal-legend { padding:12px 18px;display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--line);background:var(--bg);font-family:var(--font-mono);font-size:11px;color:var(--fg-muted);letter-spacing:0.04em; }
.cal-legend-row { display:flex;flex-wrap:wrap;gap:6px 18px;align-items:center; }
.cal-legend .lk { font-size:10px;color:var(--fg-faint);letter-spacing:0.1em;text-transform:uppercase;font-weight:700;min-width:36px; }
.cal-lg-item { display:inline-flex;align-items:center;gap:6px; }
.cal-lg-item .sw { width:10px;height:10px;border-radius:2px; }
.cal-lg-status { display:inline-flex;align-items:center;gap:5px; }
.cal-lg-status .dot-s { width:7px;height:7px;border-radius:50%; }

/* ============ LIST VIEW ============ */
.cal-list-day { scroll-margin-top:132px; }
.cal-list { background:var(--bg-elev);border:1px solid var(--line);border-radius:14px;padding:6px 18px 24px; }
.cal-list-empty { padding:48px 0;text-align:center;color:var(--fg-faint);font-size:15px; }
.cal-list-row { display:grid;grid-template-columns:80px 56px 1fr auto auto;gap:18px;align-items:center;padding:14px 6px;border-bottom:1px solid var(--line-faint);text-decoration:none;color:inherit;transition:background 120ms;border-radius:6px; }
.cal-list-row:hover { background:var(--bg); }

/* 搜索高亮:命中 = accent 描边+底色,其余压暗 */
.cal-ev, .cal-list-row { transition:opacity 150ms ease, background 120ms ease; }
.cal-ev.cal-dim, .cal-list-row.cal-dim { opacity:0.26; }
.cal-ev.cal-hit { background:var(--accent-soft-bg);box-shadow:inset 0 0 0 1.5px var(--accent); }
.cal-list-row.cal-hit { background:var(--accent-soft-bg);box-shadow:inset 3px 0 0 var(--accent); }
.cal-list-thumb { width:56px;height:56px;border-radius:8px;background-size:cover;background-position:center;background-color:var(--bg-inset);flex-shrink:0;position:relative;overflow:hidden;border:1px solid rgba(0,0,0,0.06); }
.cal-list-thumb::after { content:'';position:absolute;inset:0;background:linear-gradient(180deg,transparent 50%,rgba(11,12,14,0.3)); }
.cal-list-time { font-family:var(--font-mono);font-size:18px;font-weight:600;color:var(--fg);line-height:1.1; }
.cal-list-time .tz { display:block;font-size:11px;font-weight:400;color:var(--fg-faint);margin-top:3px;letter-spacing:0.06em; }
.cal-list-body { min-width:0; }
.cal-list-titleline { display:flex;align-items:center;gap:8px;margin-bottom:5px;min-width:0;white-space:nowrap;overflow:hidden; }
.cal-list-name { font-family:var(--font-display);font-size:17px;font-weight:600;color:var(--fg);display:flex;align-items:center;gap:8px;min-width:0;flex:0 1 auto; }
.cal-list-name-text { min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.cal-list-flag { font-size:15px;line-height:1; }
.cal-list-titleline .title-sep { flex:0 0 auto;color:var(--fg-muted); }
.cal-list-sub { display:flex;align-items:center;gap:5px;min-width:0;flex:1 1 auto;font-size:13.5px;line-height:1.35;color:var(--fg);font-weight:500; }
.cal-list-sub-text { min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.cal-list-sub .cal-meta-icon { color:var(--accent); }
.cal-list-meta { font-size:13px;color:var(--fg-muted);display:flex;flex-wrap:wrap;gap:6px;align-items:center; }
.cal-list-meta-item { display:inline-flex;align-items:center;gap:4px;min-width:0; }
.cal-list-meta .org { font-weight:500;color:var(--fg); }
.cal-meta-icon { width:14px;height:14px;flex:0 0 14px;color:var(--fg-dim); }
.cal-list-meta .org .cal-meta-icon { color:var(--fg-faint); }
.cal-list-meta .logo-box { width:20px;height:20px;border-radius:4px;object-fit:contain;flex-shrink:0;background:transparent; }
.cal-list-meta .sep { color:var(--fg-muted); }
.cal-list-arrow { color:var(--fg-dim);font-size:18px; }

/* ============ TIMELINE VIEW（日期轴 + 竖脉/节点；月范围，默认视图） ============ */
.cal-tl { padding-top:4px; }

/* 「今天」分隔线:左端起于竖脉,横贯到卡片列 */
.cal-tl-divider { display:flex;align-items:center;gap:16px;margin:2px 0 24px;padding-left:112px; }
.cal-tl-divider .ln { flex:1;height:1px; }
.cal-tl-divider .ln:first-child { background:linear-gradient(90deg,var(--accent),rgba(255,106,26,0.18)); }
.cal-tl-divider .ln:last-child { background:linear-gradient(90deg,rgba(255,106,26,0.18),transparent); }
.cal-tl-divider .lab { font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:0.1em;color:var(--accent);text-transform:uppercase;white-space:nowrap; }

/* 每日分组 = 左日期轴 + 右卡片列,竖脉沿列边贯穿 */
.cal-tl .cal-list-day { display:grid;grid-template-columns:112px 1fr;gap:28px;position:relative;padding-bottom:28px; }
.cal-tl .cal-list-day::before { content:'';position:absolute;left:111px;top:6px;bottom:-6px;width:2px;background:var(--line-strong); }
.cal-tl .cal-list-day:last-child::before { background:linear-gradient(180deg,var(--line-strong) 40%,transparent); }
.cal-tl .cal-list-day.is-today::before { background:linear-gradient(180deg,var(--accent) 0%,rgba(255,106,26,0.4) 72%,transparent); }
.cal-tl .cal-list-day.is-past { opacity:0.92; }

/* 左侧日期轴 + 轴上节点(节点中心对齐竖脉 x≈112px) */
.cal-tl-axis { position:relative;text-align:right;padding-right:24px;padding-top:2px; }
.cal-tl-axis::after { content:'';position:absolute;right:-7px;top:8px;width:13px;height:13px;border-radius:50%;background:var(--bg);border:2.5px solid var(--line-strong);z-index:1; }
.cal-tl .cal-list-day.is-today .cal-tl-axis::after { border-color:var(--accent);background:var(--accent);box-shadow:0 0 0 5px rgba(255,106,26,0.16); }
.cal-tl .cal-list-day.is-past .cal-tl-axis::after { border-color:var(--line); }
.cal-tl-daynum { display:block;font-family:var(--font-mono);font-size:36px;font-weight:700;line-height:0.95;letter-spacing:-0.03em;font-variant-numeric:tabular-nums;color:var(--fg); }
.cal-tl .cal-list-day.is-today .cal-tl-daynum { color:var(--accent); }
.cal-tl .cal-list-day.is-past .cal-tl-daynum { color:var(--fg-faint); }
.cal-tl-mon { display:block;font-family:var(--font-mono);font-size:10.5px;letter-spacing:0.08em;color:var(--fg-faint);margin-top:7px; }
.cal-tl-today { display:inline-block;margin-top:9px;background:var(--accent);color:#fff;font-family:var(--font-mono);font-size:9.5px;font-weight:700;letter-spacing:0.1em;padding:3px 8px;border-radius:5px; }
.cal-tl-rel { display:block;font-size:11px;color:var(--fg-muted);margin-top:8px; }
.cal-tl-count { font-family:var(--font-mono);font-size:10.5px;color:var(--fg-faint);margin-top:13px; }

/* 右侧卡片列:复用既有发射行,每天独立成卡 */
.cal-tl-cards { min-width:0;background:var(--bg-elev);border:1px solid var(--line);border-radius:14px;padding:2px 18px;align-self:start; }
.cal-tl-cards .cal-list-row:last-child { border-bottom:none; }

@media (max-width:820px) {
  .cal-tl .cal-list-day { grid-template-columns:60px 1fr;gap:16px; }
  .cal-tl .cal-list-day::before { left:59px; }
  .cal-tl-divider { padding-left:60px; }
  .cal-tl-axis { padding-right:14px; }
  .cal-tl-daynum { font-size:26px; }
}

/* ============ ASIDE ============ */
.cal-main aside { display:flex;flex-direction:column;gap:18px;align-self:start; }
.cal-side-card { background:var(--bg-elev);border:1px solid var(--line);border-radius:12px;padding:18px 18px; }
.cal-side-card h4 { font-family:var(--font-display);font-size:15px;font-weight:700;margin:0 0 14px;letter-spacing:-0.005em;display:flex;justify-content:space-between;align-items:center; }
.cal-side-card h4 .more-mini { font-family:var(--font-sans);font-size:12px;color:var(--fg-faint);font-weight:400; }
.cal-side-card h4 .more-mini:hover { color:var(--accent); }

/* 焦点发射 · 大卡(始终深色,匹配卡上方星空渐变插画;深色 scope 覆盖在 globals.css) */
.cal-focus-card { background:var(--bg);color:var(--fg);border-radius:12px;overflow:hidden;border:1px solid var(--line-strong);display:block; }
.cal-focus-card .fc-img { aspect-ratio:16/9;background:radial-gradient(ellipse 60% 30% at 52% 72%,#ffd79a 0%,var(--accent) 35%,transparent 70%),radial-gradient(ellipse 80% 80% at 50% 100%,#4c1a00 0%,#0b0c0e 50%),linear-gradient(180deg,#1a1d22 0%,#0b0c0e 70%);position:relative; }
.cal-focus-card .fc-img.has-img { background:var(--bg);display:block; }
.cal-focus-card .fc-img.has-img img { width:100%;height:100%;object-fit:cover;display:block;opacity:0.7; }
.cal-focus-card .fc-img::before { content:'';position:absolute;left:48%;top:10%;width:4%;height:65%;background:linear-gradient(180deg,#fafaf7,#a8a49a);border-radius:2px 2px 0 0;pointer-events:none;opacity:0.85; }
.cal-focus-card .fc-img.has-img::before { display:none; }
.cal-focus-card .fc-tag { position:absolute;top:12px;left:12px;display:inline-flex;align-items:center;gap:6px;background:var(--danger);color:var(--accent-fg);padding:4px 9px;border-radius:4px;font-family:var(--font-mono);font-size:10px;font-weight:700;letter-spacing:0.1em;z-index:1; }
.cal-focus-card .fc-tag::before { content:'';width:5px;height:5px;border-radius:50%;background:var(--bg-elev);animation:calPulse 1.2s infinite; }
.cal-focus-card .fc-tag.next { background:var(--accent); }
.cal-focus-card .fc-body { padding:16px 18px; }
.cal-focus-card .fc-meta { font-family:var(--font-mono);font-size:10px;color:var(--fg-faint);letter-spacing:0.08em;margin-bottom:8px;text-transform:uppercase; }
.cal-focus-card h5 { font-family:var(--font-display);font-size:18px;font-weight:600;margin:0 0 10px;letter-spacing:-0.005em;color:var(--fg); }
.cal-focus-card .fc-cd { display:flex;gap:12px;align-items:center;padding:12px 0;border-top:1px solid var(--line-strong);border-bottom:1px solid var(--line-strong);margin-bottom:12px; }
.cal-focus-card .fc-cd .b { display:flex;flex-direction:column;flex:1; }
.cal-focus-card .fc-cd .n { font-family:var(--font-mono);font-size:22px;font-weight:700;color:var(--fg);line-height:1;font-variant-numeric:tabular-nums; }
.cal-focus-card .fc-cd .u { font-family:var(--font-mono);font-size:9px;color:var(--fg-faint);letter-spacing:0.12em;text-transform:uppercase;margin-top:4px; }
.cal-focus-card .fc-cd .fc-cd-sign { font-family:var(--font-mono);font-size:13px;font-weight:700;color:var(--fg-faint);letter-spacing:0.04em; }
.cal-focus-card .fc-cd.is-past .fc-cd-sign { color:var(--accent); }
.cal-focus-card .fc-go { display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px; }
.cal-focus-card .fc-go .gp { color:var(--success);font-weight:700; }
.cal-focus-card .fc-go .gp.warn { color:var(--warn-dark); }
.cal-focus-card .fc-go .gp.muted { color:var(--fg-faint); }
.cal-focus-card .fc-go .det { color:var(--accent);font-weight:600; }

/* 即将发射列表 */
.cal-upc { display:flex;flex-direction:column;gap:1px; }
.cal-upc-row { display:grid;grid-template-columns:60px 1fr auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px dashed var(--line-faint);color:inherit; }
.cal-upc-row:last-child { border-bottom:none; }
.cal-upc-row:hover .upc-n { color:var(--accent); }
.cal-upc .upc-t { font-family:var(--font-mono);font-size:12.5px;color:var(--fg);font-weight:700;line-height:1.2;font-variant-numeric:tabular-nums; }
.cal-upc .upc-t .d { color:var(--fg-faint);font-weight:400;font-size:11px;display:block;margin-top:1px; }
.cal-upc .upc-n { font-size:13.5px;font-weight:600;color:var(--fg);line-height:1.35; }
.cal-upc .upc-n .m { display:block;font-family:var(--font-mono);font-size:11px;color:var(--fg-faint);font-weight:400;margin-top:1px; }
.cal-upc .upc-go { font-family:var(--font-mono);font-size:10px;font-weight:700;padding:2px 6px;border-radius:3px;letter-spacing:0.04em; }
.cal-upc .upc-go.go   { background:var(--success-soft-bg);color:var(--success-dark); }
.cal-upc .upc-go.warn { background:var(--warn-soft-bg);color:var(--warn-dark); }
.cal-upc .upc-go.hold { background:var(--danger-soft-bg);color:var(--danger-dark); }
.cal-upc .upc-go.muted { background:var(--bg-inset);color:var(--fg-faint); }

/* 机构月度统计 */
.cal-org-meta { font-family:var(--font-mono);font-size:11px;color:var(--fg-faint);font-weight:400; }
.cal-org-list { display:flex;flex-direction:column;gap:10px; }
.cal-org-row { display:grid;grid-template-columns:14px 1fr 28px 60px;gap:10px;align-items:center;font-size:13.5px;color:inherit;text-decoration:none; }
a.cal-org-row { padding:2px 4px;margin:-2px -4px;border-radius:6px;transition:background 120ms; }
a.cal-org-row:hover { background:var(--accent-tint-12); }
a.cal-org-row:hover .nm { color:var(--accent); }
.cal-org-row .sw { width:10px;height:10px;border-radius:2px; }
.cal-org-row .nm { font-weight:600;color:var(--fg); }
.cal-org-row .vc { font-family:var(--font-mono);font-size:14px;font-weight:700;color:var(--fg);text-align:right;font-variant-numeric:tabular-nums; }
.cal-org-row .b { background:var(--bg-inset);height:5px;border-radius:3px;overflow:hidden; }
.cal-org-row .b > div { height:100%;border-radius:3px; }
.cal-org-more { font-family:var(--font-mono);font-size:11.5px;color:var(--fg-faint);text-align:center;padding-top:4px;border-top:1px dashed var(--line-faint);margin-top:2px;letter-spacing:0.04em; }

@media (max-width:1100px) {
  .cal-main { grid-template-columns:1fr; }
  .cal-main aside { position:static;max-height:none; }
  .cal-density-wrap { grid-template-columns:1fr; }
  .cal-grid { grid-auto-rows:minmax(150px,1fr); }
  .cal-cell { min-height:150px; }
}
@media (max-width:760px) {
  .cal-cell .cal-ev .nm { display:none; }
  .cal-grid { grid-auto-rows:minmax(126px,1fr); }
  .cal-cell { min-height:126px;padding:6px 6px; }
  .cal-density .axis { display:none; }
}
/* 手机(≤640px):整屏 App 化 —— 忠实贴 mock。
   时间线日头=.day-hd(大号日号+灰周名 | 右侧场次),发射行=.cal-row(54px mono 时间 | 正文 | 实心状态 tag),
   每日=一张 --bg-elev App 卡,行间 1px --line 细线,撤掉缩略图/箭头/桌面竖脉与节点。 */
@media (max-width:640px) {
  /* 贴设计稿:顶部 = mock .rk-hero(近期发射 + 统计副行) */
  .cal-hero-m { display:block;padding:16px 16px 4px; }
  .cal-hero-m h2 { font-family:var(--font-display);font-size:24px;font-weight:700;margin:0 0 4px;letter-spacing:-0.01em;color:var(--fg); }
  .cal-hero-m .sub { font-family:var(--font-mono);font-size:10px;color:var(--fg-muted);letter-spacing:0.08em; }
  /* 贴设计稿:手机隐藏统计面板 + 订阅(mock 日历只有标题/月份导航/列表) */
  .cal-page-head { display:none; }

  /* 贴设计稿:手机隐藏整条控制栏(月份翻页器/时间线月切换/机构筛选/搜索),
     月份导航改由下方 .cal-monthbar-m 横滚 chips 承担;搜索走顶栏图标。 */
  .cal-cbar-wrap { display:none; }

  /* ---- 月份 chips = mock .month-bar:横滚月份药丸,当前月填充,带场次计数 ---- */
  .cal-monthbar-m { display:flex;gap:6px;padding:12px 16px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;border-bottom:1px solid var(--line);background:var(--bg); }
  .cal-monthbar-m::-webkit-scrollbar { display:none; }
  .cal-monthbar-m .mb { flex:0 0 auto;display:inline-flex;align-items:center;padding:7px 12px;border:1px solid var(--line);border-radius:8px;font-size:12.5px;font-weight:500;color:var(--fg-muted);background:var(--bg-elev);white-space:nowrap;text-decoration:none; }
  .cal-monthbar-m .mb.on { background:var(--fg);color:var(--bg);border-color:var(--fg); }
  .cal-monthbar-m .mb .c { font-family:var(--font-mono);font-size:9.5px;opacity:0.6;margin-left:4px; }

  /* 贴设计稿:手机隐藏月度密度条(mock 日历无密度图) */
  .cal-density-wrap { display:none; }
  /* 贴设计稿:手机只留发射列表,隐藏侧栏(焦点/即将直播、未来 72 小时、本月机构发射) */
  .cal-main aside { display:none; }
  .cal-main { padding:12px 12px 80px; }

  /* ============ 时间线(默认视图) ============ */
  /* 移动端「近期发射」只展示当前列表:本月隐去已过去的日子,直接从今天起的待发射看起
     (仅当前月生效,经 chips 跳到其它月份仍整月展示) */
  .cal-tl-cur .cal-list-day.is-past { display:none; }
  .cal-tl-cur .cal-tl-divider { display:none; }
  /* 每日分组改为单列:.day-hd 横排在上,App 卡列在下;撤掉桌面竖脉/轴节点 */
  .cal-tl { padding-top:0; }
  .cal-tl .cal-list-day { grid-template-columns:1fr;gap:0;padding-bottom:18px; }
  .cal-tl .cal-list-day::before { display:none; }
  .cal-tl-divider { padding-left:0;margin:6px 2px 12px;gap:10px; }
  .cal-tl-divider .lab { font-size:10px; }

  /* ---- 日头 = mock .day-hd:左=大号日号+灰周名/相对,右=场次,baseline space-between ---- */
  .cal-tl-axis { display:flex;justify-content:space-between;align-items:baseline;text-align:left;padding:16px 4px 8px;gap:0 8px;flex-wrap:nowrap; }
  .cal-tl-axis::after { display:none; }
  .cal-tl-daynum { display:inline-block;font-family:var(--font-display);font-size:20px;font-weight:700;line-height:1;letter-spacing:-0.01em;color:var(--fg);flex:0 0 auto; }
  .cal-tl .cal-list-day.is-today .cal-tl-daynum { color:var(--accent); }
  .cal-tl .cal-list-day.is-past .cal-tl-daynum { color:var(--fg-faint); }
  .cal-tl-mon { display:inline;margin:0 0 0 7px;font-family:var(--font-mono);font-size:11px;font-weight:400;letter-spacing:0.02em;color:var(--fg-muted);white-space:nowrap; }
  .cal-tl-rel { display:inline;margin:0 0 0 5px;font-family:var(--font-mono);font-size:11px;color:var(--fg-muted);white-space:nowrap; }
  .cal-tl-today { display:inline-block;margin:0 0 0 7px;font-size:9px;padding:2px 6px;letter-spacing:0.08em;vertical-align:1px; }
  /* 今天:已有「今天」徽章,隐掉重复的相对天数文案 */
  .cal-tl .cal-list-day.is-today .cal-tl-rel { display:none; }
  .cal-tl-count { margin:0 0 0 auto;font-family:var(--font-mono);font-size:11px;color:var(--fg-faint);align-self:baseline;white-space:nowrap;flex:0 0 auto;padding-left:8px; }

  /* ---- 卡片列 = App 卡:--bg-elev、1px --line、圆角 14,行内左右各 14 内边距 ---- */
  .cal-tl-cards { padding:0 14px;border-radius:14px; }

  /* ---- 发射行 = mock .cal-row:54px mono 时间 | 正文 | 实心状态 tag ---- */
  .cal-list-row { grid-template-columns:54px minmax(0,1fr) auto;gap:12px;padding:13px 0;border-bottom:1px solid var(--line);border-radius:0;align-items:center; }
  .cal-list-row:active { background:var(--accent-soft-bg); }
  .cal-list-thumb, .cal-list-arrow { display:none; }

  /* 时间列:17px mono 粗体 + 下方 mono 大写 CST/TBD 标签 */
  .cal-list-time { font-size:17px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;color:var(--fg); }
  .cal-list-time .tz { display:block;font-size:9px;margin-top:4px;letter-spacing:0.06em;color:var(--fg-muted);text-transform:uppercase; }

  /* 正文:任务名 13.5/600 单行 + mono 机构·火箭·轨道 子行 */
  .cal-list-titleline { margin-bottom:3px; }
  .cal-list-name { font-family:var(--font-sans);font-size:13.5px;font-weight:600;letter-spacing:-0.005em; }
  .cal-list-flag { font-size:13px; }
  .cal-list-titleline .title-sep, .cal-list-sub { display:none; }
  /* 副行垂直排版:机构 / 工位 / 轨道 各占一行,避免单行挤压、文字重叠;去掉「·」分隔 */
  .cal-list-meta { font-family:var(--font-mono);font-size:10px;color:var(--fg-muted);flex-direction:column;align-items:flex-start;gap:3px;overflow:hidden;white-space:nowrap; }
  .cal-list-meta .org { font-weight:400;color:var(--fg-muted); }
  .cal-list-meta-item { max-width:100%;overflow:hidden;text-overflow:ellipsis; }
  .cal-list-meta .cal-meta-icon { display:none; }
  .cal-list-meta .sep { display:none; }

  /* 状态实心药丸样式见 globals.css ≤640(.cal-list/.cal-tl-cards 共用,首页+日历统一) */

  .cal-list-empty { padding:32px 0;font-size:14px; }

  /* ============ 月视图:网格收紧,去掉桌面 hover tooltip 空间 ============ */
  .cal-card { border-radius:14px; }
  .cal-weekhead .wh { padding:9px 6px;font-size:9.5px;letter-spacing:0.04em; }
  .cal-grid { grid-auto-rows:minmax(104px,1fr); }
  .cal-cell { min-height:104px;padding:6px 5px; }
  .cal-legend { padding:12px;font-size:10px; }
}

/* 归档网格 —— 让任意月份从 /calendar 一跳可达。见 render::calendar::ArchiveYear。
   容器跟 .cal-main 对齐（max-width 1440 / padding 32），它在 </main> 之外，
   不对齐就会比整页窄一截、左右都对不上。 */
.cal-archive { max-width:1440px; margin:0 auto; padding:28px 32px 48px; border-top:1px solid var(--line); }
.cal-archive h2 { font-family:var(--font-display); font-size:16px; font-weight:700; margin:0 0 2px; color:var(--fg); }
.cal-archive-sub { font-size:12px; color:var(--fg-faint); margin:0 0 16px; }
.cal-arch-row { display:flex; gap:14px; align-items:baseline; padding:5px 0; border-bottom:1px solid var(--line); }
.cal-arch-row:last-child { border-bottom:none; }
.cal-arch-y { font-family:var(--font-mono); font-size:12px; color:var(--fg-faint); width:44px; flex-shrink:0; letter-spacing:0.04em; }
.cal-arch-ms { display:flex; flex-wrap:wrap; gap:4px 6px; }
.cal-arch-m { display:inline-flex; align-items:baseline; gap:4px; padding:2px 7px; border-radius:4px; font-size:12px; color:var(--fg); text-decoration:none; line-height:1.5; }
.cal-arch-m:hover { background:var(--bg-elev); }
.cal-arch-m.on { background:var(--accent); color:var(--accent-fg); }
/* 折叠的「更早的年份」。默认收起是刻意的（见模板注释）：链接在 HTML 里、
   爬虫抓得到，视觉上只占一行。 */
.cal-arch-more { margin-top:14px; }
.cal-arch-more > summary { font-size:12px; color:var(--fg-faint); cursor:pointer; list-style:none; padding:4px 0; }
.cal-arch-more > summary::-webkit-details-marker { display:none; }
.cal-arch-more > summary::before { content:"▸ "; }
.cal-arch-more[open] > summary::before { content:"▾ "; }
.cal-arch-more > summary:hover { color:var(--fg); }
.cal-arch-ys { display:flex; flex-wrap:wrap; gap:4px 6px; padding:8px 0 2px; }
.cal-arch-yl { display:inline-flex; align-items:baseline; gap:4px; padding:2px 7px; border-radius:4px; font-family:var(--font-mono); font-size:12px; color:var(--fg); text-decoration:none; line-height:1.5; }
.cal-arch-yl:hover { background:var(--bg-elev); }
.cal-arch-yl .c { font-size:11px; color:var(--fg-faint); }
.cal-arch-m .c { font-family:var(--font-mono); font-size:10px; color:var(--fg-faint); }
.cal-arch-m.on .c { opacity:0.75; }
@media (max-width:640px) { .cal-arch-y { width:38px; } .cal-archive { padding:20px 12px 32px; } }
