/* ============================================================
   运行调度 · 底部飞行时间表（#ftl-panel）
   —— 由页面底部触发条唤起（调度态替代 Dock），贴底横向铺开
   —— 纵向：调度计划（编号 + 活动性质）/ 公共航路（航路 + 走廊）
   —— 横向：当日 00:00 → 24:00 时间刻度；轨道区滚轮缩放、编号列滚轮滚动列表
   —— 玻璃质感与左翼 #fp-panel 同源（半透底 + backdrop-filter；滚动时底色加深）
   —— 左翼飞行计划面板展开时让位，收起后向左铺满原面板区域
   —— 选中态与左翼卡片双向联动（.ftl-row.sel ↔ .fp-card.sel）
   ============================================================ */

:root {
  --ftl-h: 330px;         /* 排班表高度（1K 基准，容纳 9 行航空器） */
  --ftl-gap: 30px;        /* 面板顶边与九天助手图标之间的呼吸距 */
  --ftl-lw: 214px;        /* 行首航空器 / 活动性质列宽 */
  --ftl-row-h: 30px;      /* 单行高度 */
  --ftl-inset: 18px;      /* 时间刻度左右留白：端点 0:00 / 24:00 不再贴边 */
}
@media (min-width: 2048px) {
  :root {
    --ftl-h: 384px;
    --ftl-gap: 34px;
    --ftl-lw: 262px;
    --ftl-row-h: 34px;
    --ftl-inset: 22px;
  }
}

/* —— 调度态：触发条只唤排班表，底部 Dock 整体让位 —— */
body.as-dispatch-scene #dock,
body.as-dispatch-scene #dock-pop,
body.as-dispatch-scene #dock-particles {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
}
/* 排班表展开后触发条把手让位（最小化后自动回归） */
body.as-dispatch-scene.ftl-open #dock-grab { opacity: 0; }

/* —— 主体：贴底玻璃面板（与 #fp-panel 同一配方） —— */
#ftl-panel {
  position: absolute;
  left: calc(var(--ac-left) + var(--ac-w) + 12px);
  right: var(--sr-right);
  bottom: var(--ac-bottom);
  height: var(--ftl-h);
  z-index: 18;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border-radius: 12px;
  background: rgba(13, 18, 26, 0.62);
  -webkit-backdrop-filter: blur(10px) saturate(132%);
  backdrop-filter: blur(10px) saturate(132%);
  border: 1px solid rgba(255, 255, 255, 0.11);
  box-shadow: var(--shadow-float), inset 0 1px 0 rgba(255, 255, 255, 0.05);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  /* 收起态：不做压扁形变，整块沿底边平滑滑出视口（收进触发条下方），形变全程保持原比例 */
  transform: translateY(calc(100% + var(--ac-bottom) + 10px));
  will-change: transform;
  /* 收起：匀速偏缓滑出，尾段才淡出隐藏，避免滑出边缘时出现硬切 */
  transition: transform 440ms cubic-bezier(0.42, 0, 0.32, 1),
              opacity 180ms ease-in 260ms,
              left 440ms cubic-bezier(0.32, 0.72, 0, 1),
              background-color 320ms ease, visibility 0s linear 440ms;
}
@media (min-width: 2048px) { #ftl-panel { border-radius: 14px; } }
#ftl-panel::before {
  content: "";
  position: absolute; left: 12px; right: 12px; top: 0; height: 1px;
  pointer-events: none; z-index: 2;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 200, 245, 0.38) 50%, transparent 100%);
}
/* 门控：仅运行调度 + 已唤起时显示 */
body.as-dispatch-scene.ftl-open #ftl-panel {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0);
  /* 展开：自触发条上方整体升起，快起长收、末端自然停稳，面板比例保持不变 */
  transition: transform 600ms cubic-bezier(0.16, 1, 0.3, 1),
              opacity 170ms ease-out,
              left 440ms cubic-bezier(0.32, 0.72, 0, 1),
              background-color 320ms ease, visibility 0s;
}
/* 展开层次感：内容随面板升起轻微错峰上浮入画；收起时先行回落，避免整块生硬平移 */
#ftl-panel > .ftl-head,
#ftl-panel > .ftl-headrow,
#ftl-panel > .ftl-scroll {
  transform: translateY(14px);
  transition: transform 300ms cubic-bezier(0.4, 0, 0.3, 1);
}
body.as-dispatch-scene.ftl-open #ftl-panel > .ftl-head,
body.as-dispatch-scene.ftl-open #ftl-panel > .ftl-headrow,
body.as-dispatch-scene.ftl-open #ftl-panel > .ftl-scroll {
  transform: translateY(0);
  transition: transform 460ms cubic-bezier(0.16, 1, 0.3, 1);
}
body.as-dispatch-scene.ftl-open #ftl-panel > .ftl-head { transition-delay: 90ms; }
body.as-dispatch-scene.ftl-open #ftl-panel > .ftl-headrow { transition-delay: 140ms; }
body.as-dispatch-scene.ftl-open #ftl-panel > .ftl-scroll { transition-delay: 190ms; }
/* 滚动激活：滚动期间底色加深，弱化底层地图透出（与 #fp-panel.is-active 同款） */
#ftl-panel.is-active { background-color: rgba(13, 18, 26, 0.80); }
/* 拖拽平移中：全局抓手光标，禁止选中文字 */
#ftl-panel.is-panning,
#ftl-panel.is-panning * { cursor: grabbing !important; user-select: none; -webkit-user-select: none; }

/* 左翼面板收起：排班表向左铺满原信息面板区域 */
body.as-dispatch-scene #fp-panel.collapsed ~ #ftl-panel { left: var(--ac-left); }

/* —— 头行：标题 + 最小化 —— */
.ftl-head {
  flex-shrink: 0;
  height: 44px;
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 0 14px;
  white-space: nowrap;
  border-bottom: 1px solid rgba(255, 255, 255, 0.07);
}
@media (min-width: 2048px) { .ftl-head { height: 50px; padding: 0 18px; gap: 11px; } }
.ftl-hbar {
  width: 3px; height: 14px; border-radius: 2px; flex-shrink: 0;
  background: linear-gradient(180deg, #C4DCF6 0%, #6FA3D0 100%);
  box-shadow: 0 0 8px rgba(111, 163, 208, 0.7);
}
.ftl-title {
  flex-shrink: 0;
  font-size: 13px; font-weight: 700; letter-spacing: 2.2px;
  background: linear-gradient(180deg, #FFFFFF 0%, #EAF4FF 34%, #BED9F0 70%, #8FB8DE 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: #FFFFFF;
  filter: drop-shadow(0 0 8px rgba(130, 185, 230, 0.42));
}
@media (min-width: 2048px) { .ftl-title { font-size: 15px; letter-spacing: 2.6px; } }

/* —— 工具组：日期筛选器 → 调度计划 → 公共航路 归为一组等距排布 —— */
.ftl-tools {
  flex-shrink: 0;
  display: flex; align-items: center; gap: 8px;
  margin-left: 10px;
}
@media (min-width: 2048px) {
  .ftl-tools { gap: 10px; margin-left: 14px; }
}

/* —— 数据源复选组：调度计划 / 公共航路 是同一批选项，共用一枚胶囊外壳 —— */
.ftl-filters {
  flex-shrink: 0;
  display: inline-flex; align-items: center; gap: 2px;
  height: 26px; padding: 1px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.11);
  background: rgba(255, 255, 255, 0.045);
}
@media (min-width: 2048px) {
  .ftl-filters { height: 30px; }
}

/* —— 日期筛选：胶囊入口（默认今天，点击展开自绘日历） —— */
.ftl-date {
  flex-shrink: 0;
  display: inline-flex; align-items: center; gap: 7px;
  height: 26px; padding: 0 9px 0 10px;
  border-radius: 999px; cursor: pointer;
  border: 1px solid rgba(255, 255, 255, 0.11);
  background: rgba(255, 255, 255, 0.045);
  color: rgba(206, 226, 244, 0.70);
  font: inherit; font-size: 11.5px; letter-spacing: 0.4px;
  transition: color 170ms ease, border-color 170ms ease, background 170ms ease, box-shadow 170ms ease;
}
.ftl-date:hover {
  color: #EAF3FB;
  border-color: rgba(150, 200, 245, 0.30);
  background: rgba(255, 255, 255, 0.075);
}
.ftl-date.is-open {
  color: #F1DCBE;
  border-color: rgba(228, 178, 116, 0.50);
  background: rgba(228, 178, 116, 0.10);
  box-shadow: 0 0 14px -3px rgba(228, 178, 116, 0.45);
}
.ftl-date-ic { width: 14px; height: 14px; flex-shrink: 0; opacity: 0.72; }
.ftl-date.is-open .ftl-date-ic, .ftl-date:hover .ftl-date-ic { opacity: 0.95; }
.ftl-date-t {
  font-family: var(--font-mono);
  font-size: 11.5px; font-weight: 600; letter-spacing: 0.2px;
  color: #EAF3FF;
}
.ftl-date-w {
  font-style: normal;
  padding: 1.5px 6px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.10);
  background: rgba(255, 255, 255, 0.05);
  font-size: 10px; letter-spacing: 0.4px;
  color: rgba(198, 220, 240, 0.62);
}
.ftl-date.is-today .ftl-date-w {
  border-color: rgba(228, 178, 116, 0.34);
  background: rgba(228, 178, 116, 0.16);
  color: #F1CF9C;
}
.ftl-date-caret { width: 10px; height: 10px; flex-shrink: 0; opacity: 0.55; transition: transform 200ms cubic-bezier(0.32, 0.72, 0, 1); }
.ftl-date.is-open .ftl-date-caret { transform: rotate(180deg); opacity: 0.9; }
@media (min-width: 2048px) {
  .ftl-date { height: 30px; padding: 0 11px 0 12px; gap: 8px; font-size: 12.5px; }
  .ftl-date-ic { width: 15px; height: 15px; }
  .ftl-date-t { font-size: 12.5px; }
  .ftl-date-w { padding: 2px 7px; font-size: 11px; }
  .ftl-date-caret { width: 11px; height: 11px; }
}
.ftl-chk {
  position: relative;
  display: inline-flex; align-items: center; gap: 6px;
  height: 100%; padding: 0 10px 0 9px;
  border-radius: 999px; cursor: pointer;
  border: 1px solid transparent;
  background: transparent;
  color: rgba(198, 220, 240, 0.62);
  font-size: 11.5px; letter-spacing: 0.6px;
  user-select: none;
  transition: color 170ms ease, border-color 170ms ease, background 170ms ease, box-shadow 170ms ease;
}
@media (min-width: 2048px) {
  .ftl-chk { padding: 0 12px 0 11px; font-size: 12px; gap: 7px; }
}
.ftl-chk input { position: absolute; opacity: 0; width: 0; height: 0; pointer-events: none; }
.ftl-chk i {
  width: 13px; height: 13px; flex-shrink: 0; border-radius: 3.5px;
  border: 1px solid rgba(150, 200, 245, 0.34);
  background: rgba(8, 12, 18, 0.42);
  position: relative;
  transition: background 170ms ease, border-color 170ms ease, box-shadow 170ms ease;
}
@media (min-width: 2048px) { .ftl-chk i { width: 14px; height: 14px; } }
.ftl-chk i::after {
  content: "";
  position: absolute; left: 50%; top: 46%;
  width: 7px; height: 3.5px;
  border-left: 1.7px solid #FFF4E2;
  border-bottom: 1.7px solid #FFF4E2;
  transform: translate(-50%, -50%) rotate(-45deg) scale(0.4);
  opacity: 0;
  transition: opacity 150ms ease, transform 170ms cubic-bezier(0.32, 0.72, 0, 1);
}
.ftl-chk input:checked ~ i {
  border-color: rgba(228, 178, 116, 0.72);
  background: rgba(228, 178, 116, 0.28);
  box-shadow: 0 0 9px -2px rgba(228, 178, 116, 0.65);
}
.ftl-chk input:checked ~ i::after { opacity: 1; transform: translate(-50%, -50%) rotate(-45deg) scale(1); }
.ftl-chk input:checked ~ span { color: #F1DCBE; }
.ftl-chk:hover {
  color: #EAF3FB;
  background: rgba(150, 200, 245, 0.10);
}
.ftl-chk:has(input:checked) {
  border-color: rgba(228, 178, 116, 0.30);
  background: rgba(228, 178, 116, 0.13);
  color: #EBC795;
}
.ftl-chk:has(input:checked):hover {
  border-color: rgba(228, 178, 116, 0.48);
  background: rgba(228, 178, 116, 0.20);
  box-shadow: 0 0 10px -4px rgba(228, 178, 116, 0.55);
}
.ftl-chk input:focus-visible ~ i { box-shadow: 0 0 0 2px rgba(150, 200, 245, 0.35); }
.ftl-spacer { flex: 1; min-width: 8px; }
.ftl-min {
  flex-shrink: 0; width: 24px; height: 24px; padding: 0; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer;
  border: 1px solid rgba(255, 255, 255, 0.12);
  background: rgba(255, 255, 255, 0.05);
  color: rgba(205, 224, 240, 0.72);
  transition: background 170ms ease, border-color 170ms ease, color 170ms ease, box-shadow 170ms ease;
}
.ftl-min svg { width: 12px; height: 12px; display: block; }
.ftl-min:hover {
  color: #FFF3E2;
  border-color: rgba(228, 178, 116, 0.55);
  background: rgba(228, 178, 116, 0.14);
  box-shadow: 0 0 10px -2px rgba(228, 178, 116, 0.55);
}
@media (min-width: 2048px) {
  .ftl-min { width: 27px; height: 27px; }
  .ftl-min svg { width: 13px; height: 13px; }
}

/* —— 刻度头行：左侧字段表头（航空器 / 活动性质）+ 右侧当日时间标尺 —— */
.ftl-headrow {
  flex-shrink: 0;
  height: 32px;
  display: flex;
  border-bottom: 1px solid rgba(150, 200, 245, 0.12);
}
@media (min-width: 2048px) { .ftl-headrow { height: 38px; } }
.ftl-lh {
  width: var(--ftl-lw); flex: 0 0 var(--ftl-lw);
  display: flex; align-items: center;
  padding: 0 10px;
  border-right: 1px solid rgba(150, 200, 245, 0.12);
  background: rgba(255, 255, 255, 0.024);
  font-size: 11px; font-weight: 600; letter-spacing: 0.7px;
  color: rgba(218, 236, 250, 0.86);
}
@media (min-width: 2048px) { .ftl-lh { padding: 0 12px; font-size: 12.5px; letter-spacing: 0.9px; } }
/* 两列等分居中：表头文字与下方编号 / 活动性质各自对齐 */
.ftl-lh > span { flex: 1 1 0; min-width: 0; text-align: center; }
.ftl-lh-sub {
  font-size: 11px; font-weight: 500; letter-spacing: 0.7px;
  color: rgba(206, 226, 244, 0.72);
}
@media (min-width: 2048px) { .ftl-lh-sub { font-size: 12.5px; } }
.ftl-ruler {
  position: relative; flex: 1; min-width: 0;
  overflow: visible;
  background: rgba(6, 10, 16, 0.22);
  cursor: grab;
  touch-action: none;
  user-select: none; -webkit-user-select: none;
}
.ftl-tick {
  position: absolute; bottom: 0;
  width: 1px; height: 6px;
  transform: translateX(-0.5px);
  background: rgba(150, 200, 245, 0.20);
  pointer-events: none;
}
.ftl-tick.major { height: 9px; background: rgba(170, 210, 245, 0.44); }
.ftl-tick b {
  position: absolute; left: 0; bottom: 11px;
  transform: translateX(-50%);
  font-family: var(--font-mono); font-size: 11px; font-weight: 500;
  letter-spacing: 0.2px; color: rgba(198, 222, 242, 0.64);
  white-space: nowrap;
}
.ftl-tick.major b { color: rgba(218, 236, 250, 0.86); }
/* 端点文字内侧对齐：刻度线不动，只把 00:00 / 24:00 拉离面板边缘 */
.ftl-tick.edge-l b { left: 2px; transform: none; }
.ftl-tick.edge-r b { left: -2px; transform: translateX(-100%); }
@media (min-width: 2048px) {
  .ftl-tick { height: 7px; }
  .ftl-tick.major { height: 11px; }
  .ftl-tick b { font-size: 12.5px; bottom: 13px; }
}

/* —— 行列表（纵向滚动；行内左标签 + 右时间轨道） —— */
.ftl-scroll {
  flex: 1; min-height: 0;
  overflow-y: auto; overflow-x: hidden;
  scrollbar-width: none; -ms-overflow-style: none;
}
.ftl-scroll::-webkit-scrollbar { width: 0; height: 0; display: none; }
.ftl-rows { position: relative; min-height: 100%; }
.ftl-rows-in { display: block; }
.ftl-row {
  --ftl-st: #E0A968;
  position: relative;
  display: flex;
  height: var(--ftl-row-h);
  border-bottom: 1px solid rgba(255, 255, 255, 0.032);
  transition: background 160ms ease;
}
.ftl-row:nth-child(even) { background: rgba(255, 255, 255, 0.012); }
.ftl-row:hover { background: rgba(126, 185, 230, 0.075); }
.ftl-row[data-st="wait"] { --ftl-st: #E0A968; }
.ftl-row[data-st="run"]  { --ftl-st: #5FDCA8; }
.ftl-row[data-st="done"] { --ftl-st: #5FA9E8; }
.ftl-row[data-st="stop"] { --ftl-st: #8FB0CC; }

.ftl-lab {
  position: relative;
  width: var(--ftl-lw); flex: 0 0 var(--ftl-lw);
  display: flex; align-items: center; gap: 0;
  padding: 0 10px;
  cursor: pointer;
  border-right: 1px solid rgba(150, 200, 245, 0.12);
  overflow: hidden;
}
@media (min-width: 2048px) { .ftl-lab { padding: 0 12px; } }
/* 状态点随编号居中组同行，紧贴编号左缘 */
.ftl-dot {
  flex: 0 0 auto;
  width: 5px; height: 5px; border-radius: 50%;
  margin-right: 6px;
  background: var(--ftl-st);
  box-shadow: 0 0 6px var(--ftl-st);
}
.ftl-row[data-st="run"] .ftl-dot { animation: ftl-dot-breathe 1.8s ease-in-out infinite; }
@keyframes ftl-dot-breathe {
  0%, 100% { opacity: 0.55; box-shadow: 0 0 4px var(--ftl-st); }
  50%      { opacity: 1;    box-shadow: 0 0 9px var(--ftl-st); }
}
.ftl-uid {
  flex: 1 1 0; min-width: 0;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono);
  font-size: 12.5px; font-weight: 600;
  letter-spacing: 0.1px;
  color: #DEEEFB;
}
/* 定宽文本块：所有编号左缘齐平，块整体随状态点居中于「航空器」表头下方 */
.ftl-uid > span {
  flex: 0 0 auto;
  width: calc(var(--ftl-uid-w, 12ch) + 2px);   /* ch 不含字距，补 2px 防末位省略 */
  min-width: 0;
  text-align: left;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
@media (min-width: 2048px) { .ftl-uid { font-size: 14px; } }
/* 活动性质：胶囊修饰。刻意用中性冷紫灰，避开飞行状态四色
   （待起飞琥珀 #E0A968 / 飞行中翠绿 #5FDCA8 / 已完成天蓝 #5FA9E8 / 已终止钢蓝 #8FB0CC），
   状态语义只由行首圆点承担，胶囊仅表达「性质分类」 */
.ftl-nature {
  --ftl-nat-ink: #C6C9E6;
  --ftl-nat-bg: rgba(148, 155, 208, 0.12);
  --ftl-nat-bg2: rgba(118, 126, 186, 0.06);
  --ftl-nat-line: rgba(162, 170, 226, 0.26);
  flex: 1 1 0; min-width: 0;
  display: flex; align-items: center; justify-content: center;
  font-style: normal;
}
.ftl-nature > span {
  display: block;
  max-width: 100%;
  padding: 2px 8px;
  border-radius: 999px;
  border: 1px solid var(--ftl-nat-line);
  background: linear-gradient(180deg, var(--ftl-nat-bg) 0%, var(--ftl-nat-bg2) 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 1px 3px rgba(3, 7, 12, 0.42);
  font-size: 11.5px; line-height: 15px; letter-spacing: 0.2px;
  color: var(--ftl-nat-ink);
  text-align: center;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
@media (min-width: 2048px) {
  .ftl-nature > span { padding: 2.5px 10px; font-size: 12.5px; line-height: 16px; letter-spacing: 0.3px; }
}

/* —— 时间轨道：竖向小时网格（当日 0:00 起，固定步长） —— */
.ftl-track {
  position: relative; flex: 1; min-width: 0;
  overflow: hidden;
  cursor: grab;
  touch-action: none;
  user-select: none; -webkit-user-select: none;
  background-image: repeating-linear-gradient(90deg,
    rgba(150, 200, 245, 0.085) 0 1px,
    transparent 1px var(--ftl-grid-step, 50px));
  background-position-x: var(--ftl-grid-off, 0px);
}
/* 行内基线：把短色条串在同一条轨道上，避免满屏散点感 */
.ftl-track::before {
  content: "";
  position: absolute; left: var(--ftl-inset, 18px); right: var(--ftl-inset, 18px);
  top: 50%; height: 1px; pointer-events: none;
  background: linear-gradient(90deg,
    rgba(150, 200, 245, 0.028) 0%,
    rgba(150, 200, 245, 0.075) 50%,
    rgba(150, 200, 245, 0.028) 100%);
}
.ftl-row:hover .ftl-track { background-color: rgba(126, 185, 230, 0.035); }

/* —— 时间窗：2px 光轨 + 两端立标 + 极淡光雾（彻底替代实心色块） —— */
.ftl-bar {
  position: absolute; top: 50%;
  transform: translateY(-50%);
  height: 19px;
  min-width: 9px;
  overflow: visible;
  cursor: pointer;
  background: none;
  border: 0;
  box-shadow: none;
  transition: filter 160ms ease;
}
@media (min-width: 2048px) { .ftl-bar { height: 22px; min-width: 10px; } }
/* 光轨：贯穿起止的水平亮线 */
.ftl-bar::before {
  content: "";
  position: absolute; left: 0; right: 0; top: calc(50% - 2px); height: 4px;
  z-index: 1;
  border-radius: 2px;
  background: linear-gradient(90deg,
    color-mix(in srgb, var(--ftl-st) 58%, #FFFFFF 42%) 0%,
    color-mix(in srgb, var(--ftl-st) 96%, transparent) 42%,
    color-mix(in srgb, var(--ftl-st) 72%, transparent) 100%);
  box-shadow: 0 0 11px -2px var(--ftl-st), 0 1px 2px rgba(0, 0, 0, 0.50);
  transition: height 160ms ease, top 160ms ease, box-shadow 160ms ease;
}
/* 辉光带：以光轨为中心向上下散开的柔光，两端自然消隐（不做实心填充） */
.ftl-bar::after {
  content: "";
  position: absolute; left: -1px; right: -1px; top: calc(50% - 7px);
  height: 14px;
  z-index: 0; pointer-events: none;
  border-radius: 7px;
  background: linear-gradient(90deg,
    color-mix(in srgb, var(--ftl-st) 0%, transparent) 0%,
    color-mix(in srgb, var(--ftl-st) 18%, transparent) 12%,
    color-mix(in srgb, var(--ftl-st) 32%, transparent) 50%,
    color-mix(in srgb, var(--ftl-st) 18%, transparent) 88%,
    color-mix(in srgb, var(--ftl-st) 0%, transparent) 100%);
  filter: blur(2.5px);
  opacity: 0.62;
}
@media (min-width: 2048px) {
  .ftl-bar::after { top: calc(50% - 8px); height: 16px; }
}
/* 两端立标：像量尺的收口，短时长也能看清起止 */
.ftl-cap {
  position: absolute; top: 50%;
  width: 2px; height: 12px;
  transform: translateY(-50%);
  z-index: 2; pointer-events: none;
  border-radius: 1px;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--ftl-st) 46%, #FFFFFF 54%) 0%,
    color-mix(in srgb, var(--ftl-st) 92%, transparent) 100%);
  box-shadow: 0 0 8px -1px var(--ftl-st);
  transition: height 160ms ease, background 160ms ease;
}
.ftl-cap.a { left: 0; }
.ftl-cap.b { right: 0; }
@media (min-width: 2048px) { .ftl-cap { height: 14px; } }
/* 两端菱形：起止立标统一收口，左右形态完全一致 */
.ftl-cap::after {
  content: "";
  position: absolute; left: 50%; top: 50%;
  width: 5px; height: 5px;
  transform: translate(-50%, -50%) rotate(45deg);
  border-radius: 1px;
  background: color-mix(in srgb, var(--ftl-st) 32%, #FFFFFF 68%);
  box-shadow: 0 0 8px color-mix(in srgb, var(--ftl-st) 82%, transparent);
}
@media (min-width: 2048px) { .ftl-cap::after { width: 6px; height: 6px; } }
/* 时段标注：浮在光轨上方，靠深色字影压住底层地图，不做文字底板 */
.ftl-bar-t {
  position: absolute; z-index: 3; left: 50%;
  bottom: calc(50% + 5px);
  transform: translateX(-50%);
  font-family: var(--font-mono);
  font-size: 11px; line-height: 12px; letter-spacing: 0.1px;
  color: color-mix(in srgb, var(--ftl-st) 26%, #F7FBFF 74%);
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.9), 0 0 7px rgba(3, 7, 12, 0.92);
  white-space: nowrap; pointer-events: none;
}
@media (min-width: 2048px) {
  .ftl-bar-t { bottom: calc(50% + 4.5px); font-size: 13px; line-height: 14px; }
}
.ftl-bar.tiny .ftl-bar-t { display: none; }
/* 飞行中：光轨外晕略强，但不改变形态 */
.ftl-row[data-st="run"] .ftl-bar::before {
  box-shadow: 0 0 12px -2px color-mix(in srgb, var(--ftl-st) 82%, transparent),
              0 1px 2px rgba(0, 0, 0, 0.46);
}
@media (min-width: 2048px) {
  .ftl-bar::before { top: calc(50% - 2.5px); height: 5px; }
}
.ftl-bar:hover { filter: brightness(1.18); }
.ftl-bar:hover::before {
  top: calc(50% - 2.5px); height: 5px;
  box-shadow: 0 0 15px -1px color-mix(in srgb, var(--ftl-st) 84%, transparent),
              0 1px 2px rgba(0, 0, 0, 0.46);
}
.ftl-bar:hover .ftl-cap { height: 14px; }

/* —— 选中联动：行底高亮 + 光轨琥珀化 + 左缘光脊 —— */
.ftl-row.sel { background: rgba(228, 178, 116, 0.10); }
.ftl-row.sel:hover { background: rgba(228, 178, 116, 0.14); }
.ftl-row.sel .ftl-lab::before {
  content: "";
  position: absolute; left: 0; top: 3px; bottom: 3px; width: 2px;
  border-radius: 0 2px 2px 0;
  background: #F5C97B;
  box-shadow: 0 0 8px rgba(245, 201, 123, 0.72);
}
.ftl-row.sel .ftl-uid { color: #FFF6E8; }
/* 选中态胶囊只提亮、不改色相：仍保持冷紫灰，不与行首琥珀光脊 / 状态色抢语义 */
.ftl-row.sel .ftl-nature {
  --ftl-nat-ink: #E7EAFB;
  --ftl-nat-bg: rgba(168, 176, 232, 0.20);
  --ftl-nat-bg2: rgba(126, 136, 200, 0.10);
  --ftl-nat-line: rgba(188, 196, 244, 0.38);
}
.ftl-row.sel .ftl-bar { filter: brightness(1.16); }
.ftl-row.sel .ftl-bar::before {
  box-shadow: 0 0 0 1px rgba(245, 201, 123, 0.32),
              0 0 16px rgba(245, 201, 123, 0.52),
              0 1px 2px rgba(0, 0, 0, 0.45);
}
.ftl-row.sel .ftl-cap {
  background: #F5C97B;
  box-shadow: 0 0 9px rgba(245, 201, 123, 0.82);
}
.ftl-row.sel .ftl-cap::after {
  background: #FFF6E6;
  box-shadow: 0 0 9px rgba(245, 201, 123, 0.9);
}
.ftl-row.sel .ftl-bar-t { color: #FFF3DF; }
.ftl-row.sel .ftl-bar::after { opacity: 0.80; }

/* —— 当前时刻线 —— */
.ftl-now {
  position: absolute; top: 0; bottom: 0; width: 1px;
  z-index: 3; pointer-events: none;
  background: linear-gradient(180deg, rgba(245, 201, 123, 0.88) 0%, rgba(245, 201, 123, 0.24) 100%);
  box-shadow: 0 0 9px rgba(245, 201, 123, 0.45);
}
.ftl-now::before {
  content: "";
  position: absolute; top: 0; left: 50%;
  width: 6px; height: 6px;
  transform: translate(-50%, -50%) rotate(45deg);
  background: #F5C97B;
  box-shadow: 0 0 8px rgba(245, 201, 123, 0.85);
}
/* 标尺内的当前时刻标记：线身收短，菱形游标改挂标尺下缘、指向行内时刻线 */
.ftl-ruler .ftl-now {
  top: 4px; z-index: 2;
  background: linear-gradient(180deg, rgba(245, 201, 123, 0.18) 0%, rgba(245, 201, 123, 0.78) 100%);
}
.ftl-ruler .ftl-now::before {
  top: auto; bottom: 0;
  transform: translate(-50%, 50%) rotate(45deg);
}

/* —— 空数据 —— */
.ftl-empty {
  height: 100%; min-height: 110px;
  display: grid; place-items: center;
  font-size: 11.5px; letter-spacing: 0.06em;
  color: var(--text-3);
}

/* —— 悬停信息标签：电子登机牌式（与左翼票根 / 航线信息标签同源） ——
   背景与描边沿用面板同一玻璃配方；字段读数用票根的中轴 + 撕票线 + 起降脚印结构
   位置由 JS 约束在时间轨道可视区内（不压时间刻度 / 左侧性质列，不越下缘与右缘） */
#ftl-tip {
  --c: #E0A968;
  position: fixed; left: 0; top: 0;
  z-index: 60; pointer-events: none;
  width: 300px;
  padding: 11px 13px 12px;
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.11);
  background:
    radial-gradient(34% 20% at 100% 0%, rgba(184, 158, 255, 0.26) 0%, rgba(148, 118, 238, 0.05) 44%, rgba(148, 118, 238, 0) 72%),
    rgba(13, 18, 26, 0.62);
  -webkit-backdrop-filter: blur(10px) saturate(132%);
  backdrop-filter: blur(10px) saturate(132%);
  box-shadow:
    0 18px 44px -14px rgba(0, 0, 0, 0.72),
    0 0 0 1px rgba(0, 0, 0, 0.16),
    inset 0 1px 0 rgba(255, 255, 255, 0.10),
    inset 0 -1px 0 rgba(0, 0, 0, 0.20);
  color: var(--text-2);
  font-family: var(--font-ui); font-size: 11px;
  opacity: 0;
  transform: translateY(5px) scale(0.992);
  transition: opacity 150ms ease, transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
}
#ftl-tip.on { opacity: 1; transform: none; }
/* 顶缘冷光：与 #fp-panel / #fp-modal 同源 */
#ftl-tip::before {
  content: "";
  position: absolute; left: 12px; right: 12px; top: 0; height: 1px;
  pointer-events: none; z-index: 2;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 200, 245, 0.38) 50%, transparent 100%);
}

/* 头行：发光方点 + 航空器编号 + 状态胶囊 */
.ftl-tip-head {
  display: flex; align-items: center; gap: 7px;
  padding-bottom: 7px; border-bottom: 1px solid rgba(255, 255, 255, 0.09);
}
.ftl-tip-dot {
  width: 7px; height: 7px; border-radius: 2px; flex-shrink: 0;
  background: var(--c);
  box-shadow: 0 0 8px color-mix(in srgb, var(--c) 75%, transparent);
}
.ftl-tip-uid {
  font-family: var(--font-mono); font-size: 12px; font-weight: 700;
  letter-spacing: 1px; color: #EAF2F8;
}
.ftl-tip-st {
  flex-shrink: 0; margin-left: auto;
  display: inline-flex; align-items: center; gap: 5px;
  padding: 1.5px 8px; border-radius: 999px;
  font-size: 10px; font-weight: 500; letter-spacing: 1px;
  color: var(--c); background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.12);
}
.ftl-tip-st i {
  width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0;
  background: currentColor; box-shadow: 0 0 6px currentColor;
}

/* 任务名称（最多两行）+ 性质胶囊：冷紫灰与左翼行内胶囊同源 */
.ftl-tip-name {
  margin-top: 8px;
  font-size: 12.5px; font-weight: 600; line-height: 1.5; letter-spacing: 0.3px;
  background: linear-gradient(180deg, #F1F8FE 0%, #CFE4F5 52%, #A6C6E2 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: #D5E4F0;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.ftl-tip-tags { margin-top: 6px; display: flex; }
.ftl-tip-nat {
  display: inline-flex; align-items: center;
  padding: 1.5px 8px; border-radius: 999px;
  border: 1px solid rgba(162, 170, 226, 0.26);
  background: linear-gradient(180deg, rgba(148, 155, 208, 0.12) 0%, rgba(118, 126, 186, 0.06) 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 1px 3px rgba(3, 7, 12, 0.42);
  font-size: 10.5px; line-height: 15px; letter-spacing: 0.2px;
  color: #C6C9E6; white-space: nowrap;
}

/* 起降票根：上段起降时间（中轴徽标 + 时长）/ 撕票线 / 下段起降点 */
.ftl-tip-tk {
  position: relative; margin-top: 9px; border-radius: 9px; overflow: hidden;
  padding: 9px 10px 0;
  background:
    radial-gradient(110% 130% at 50% -18%, rgba(120, 172, 226, 0.07) 0%, rgba(255, 255, 255, 0) 62%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.040) 0%, rgba(255, 255, 255, 0.014) 100%);
  border: 1px solid rgba(150, 200, 245, 0.10);
  box-shadow: inset 0 0 14px rgba(0, 0, 0, 0.11);
}
.ftl-tip-tk::before {
  content: ""; position: absolute; left: 10px; right: 10px; top: 0; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 200, 245, 0.18) 50%, transparent 100%);
}
.ftl-tip-time {
  position: relative; display: grid; grid-template-columns: 1fr auto 1fr;
  align-items: center; gap: 6px; padding: 0 2px 8px;
}
.ftl-tip-col {
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  min-width: 0; text-align: center;
}
.ftl-tip-col > span { font-size: 10px; letter-spacing: 0.6px; color: var(--text-3); }
.ftl-tip-col > b {
  font-family: var(--font-mono); font-size: 14px; font-weight: 600; line-height: 1.25;
  letter-spacing: 0.3px; color: #DFEEF9; font-variant-numeric: tabular-nums;
}
.ftl-tip-col > em { font-style: normal; font-size: 9.5px; letter-spacing: 0.5px; color: var(--text-3); }

/* 中轴：飞行时长胶囊 + 航段光带 + 航空器徽标（航路行不挂徽标） */
.ftl-tip-axis {
  flex-shrink: 0; display: flex; flex-direction: column; align-items: center; gap: 2px;
  color: rgba(150, 200, 245, 0.5);
}
.ftl-tip-dur {
  display: inline-flex; align-items: baseline; gap: 3px;
  padding: 1px 7px 2px; border-radius: 999px;
  font-family: var(--font-mono); font-style: normal; white-space: nowrap;
  font-variant-numeric: tabular-nums;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.042) 0%, rgba(255, 255, 255, 0.012) 100%);
  border: 1px solid rgba(150, 200, 245, 0.10);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.07);
}
.ftl-tip-dur > b {
  font-size: 11.5px; font-weight: 600; line-height: 1.15; letter-spacing: 0.2px;
  background: linear-gradient(180deg, #EAF6FE 0%, #BBD8EE 55%, #82A9C8 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: #C6DCEE;
  filter: drop-shadow(0 0 7px rgba(120, 185, 240, 0.30));
}
.ftl-tip-dur > span {
  font-size: 8.5px; font-weight: 500; letter-spacing: 1.1px; text-transform: uppercase;
  color: rgba(148, 184, 216, 0.54);
}
.ftl-tip-dash { display: flex; align-items: center; gap: 6px; }
.ftl-tip-dash > i {
  width: 40px; height: 1px; border-radius: 1px;
  background: linear-gradient(90deg,
    rgba(150, 200, 245, 0) 0%,
    rgba(150, 200, 245, 0.16) 22%,
    rgba(160, 210, 250, 0.52) 72%,
    rgba(206, 235, 255, 0.92) 100%);
  box-shadow: 0 0 7px rgba(120, 185, 240, 0.26);
}
.ftl-tip-dash > i:last-child {
  background: linear-gradient(90deg,
    rgba(206, 235, 255, 0.92) 0%,
    rgba(160, 210, 250, 0.52) 28%,
    rgba(150, 200, 245, 0.16) 78%,
    rgba(150, 200, 245, 0) 100%);
}
.ftl-tip-drone {
  width: 20px; height: 20px; border-radius: 50%; flex-shrink: 0;
  display: grid; place-items: center; color: rgba(214, 234, 250, 0.92);
  background: radial-gradient(circle at 50% 34%, rgba(150, 205, 255, 0.16) 0%, rgba(90, 150, 210, 0.05) 72%);
  border: 1px solid rgba(160, 210, 250, 0.22);
  box-shadow: 0 0 8px -4px rgba(120, 185, 240, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.ftl-tip-drone svg { width: 12px; height: 12px; }

/* 撕票线：半透明虚线 + 两端半圆缺口（与票根同一刀口） */
.ftl-tip-perf {
  position: relative; height: 1px; margin: 0 -10px;
  background: repeating-linear-gradient(90deg, rgba(150, 200, 245, 0.20) 0 4px, transparent 4px 8px);
}
.ftl-tip-perf::before, .ftl-tip-perf::after {
  content: ""; position: absolute; top: -4px; width: 8px; height: 8px; border-radius: 50%;
  background: rgba(11, 15, 21, 0.62);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05);
}
.ftl-tip-perf::before { left: -4px; }
.ftl-tip-perf::after { right: -4px; }

/* 起降点：起飞（冷青爬升箭头）/ 降落（暖琥珀下降箭头），与票根脚印同色 */
.ftl-tip-feet { display: flex; align-items: center; gap: 8px; padding: 8px 0 9px; }
.ftl-tip-loc {
  display: flex; align-items: center; gap: 6px; min-width: 0; flex: 1;
  font-size: 11px; letter-spacing: 0.4px; color: rgba(202, 222, 238, 0.76);
}
.ftl-tip-loc.arr { justify-content: flex-end; text-align: right; }
.ftl-tip-loc > i {
  width: 20px; height: 20px; flex-shrink: 0; border-radius: 6px;
  display: grid; place-items: center;
  background: rgba(120, 190, 240, 0.10);
  border: 1px solid rgba(120, 190, 240, 0.24);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.10), 0 0 10px -4px rgba(120, 190, 240, 0.56);
}
.ftl-tip-loc > i svg { width: 13px; height: 13px; }
.ftl-tip-loc.dep > i { color: #8FD0F5; }
.ftl-tip-loc.arr > i {
  color: #E8B36F;
  background: rgba(228, 178, 116, 0.10);
  border-color: rgba(228, 178, 116, 0.24);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.10), 0 0 10px -4px rgba(228, 178, 116, 0.50);
}
.ftl-tip-loc > b { min-width: 0; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

@media (min-width: 2048px) {
  #ftl-tip { width: 340px; padding: 13px 15px 14px; border-radius: 13px; }
  .ftl-tip-uid { font-size: 14px; }
  .ftl-tip-st { font-size: 11px; padding: 2px 9px; }
  .ftl-tip-name { font-size: 14px; margin-top: 9px; }
  .ftl-tip-nat { font-size: 11.5px; line-height: 17px; padding: 2px 9px; }
  .ftl-tip-tk { margin-top: 10px; padding: 10px 12px 0; }
  .ftl-tip-time { padding-bottom: 9px; }
  .ftl-tip-col > span { font-size: 11px; }
  .ftl-tip-col > b { font-size: 16px; }
  .ftl-tip-col > em { font-size: 10.5px; }
  .ftl-tip-dash > i { width: 48px; }
  .ftl-tip-drone { width: 23px; height: 23px; }
  .ftl-tip-drone svg { width: 14px; height: 14px; }
  .ftl-tip-feet { padding: 9px 0 10px; }
  .ftl-tip-loc { font-size: 12.5px; }
  .ftl-tip-loc > i { width: 23px; height: 23px; border-radius: 7px; }
  .ftl-tip-loc > i svg { width: 15px; height: 15px; }
}

/* —— 地图交互期毛玻璃降级：与 #fp-panel 同批（body.map-busy 由 index.html 统一派发） —— */
body.map-busy #ftl-panel {
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}

/* —— 排班表展开 / 收起：九天助手图标联动上移、归位 —— */
#ai-assistant { transition: bottom 560ms cubic-bezier(0.32, 0.72, 0, 1); }

/* ============================================================
   日期筛选浮层：自绘日历（挂 body，fixed 定位，避免被面板圆角裁切）
   —— 深色玻璃 + 琥珀选中，自右上角对焦落位；固定 6 行高度不跳动
   ============================================================ */
.ftl-cal {
  position: fixed; z-index: 90;
  width: 274px;
  padding: 12px 13px 11px;
  border-radius: 15px;
  background:
    radial-gradient(120% 80% at 100% 0%, rgba(184, 158, 255, 0.12) 0%, rgba(184, 158, 255, 0) 55%),
    rgba(13, 18, 26, 0.62);
  -webkit-backdrop-filter: blur(10px) saturate(132%);
  backdrop-filter: blur(10px) saturate(132%);
  border: 1px solid rgba(255, 255, 255, 0.13);
  box-shadow: 0 24px 54px -16px rgba(0, 0, 0, 0.82),
              0 0 0 1px rgba(4, 8, 14, 0.55),
              inset 0 1px 0 rgba(255, 255, 255, 0.07);
  color: #DEEEFB;
  opacity: 0; visibility: hidden; pointer-events: none;
  transform: translateY(-8px) scale(0.965);
  transform-origin: 100% 0%;
  transition: opacity 160ms ease,
              transform 210ms cubic-bezier(0.22, 0.68, 0.3, 1),
              visibility 0s linear 210ms;
}
.ftl-cal::before {
  content: "";
  position: absolute; left: 16px; right: 16px; top: 0; height: 1px;
  background: linear-gradient(90deg, rgba(196, 220, 246, 0), rgba(196, 220, 246, 0.38), rgba(196, 220, 246, 0));
  opacity: 0.65;
}
.ftl-cal.open {
  opacity: 1; visibility: visible; pointer-events: auto;
  transform: none;
  transition: opacity 160ms ease,
              transform 230ms cubic-bezier(0.22, 0.68, 0.3, 1),
              visibility 0s;
}
.ftl-cal-h {
  display: flex; align-items: center; justify-content: space-between;
  height: 26px; margin-bottom: 6px;
}
.ftl-cal-m {
  font-size: 12px; font-weight: 600; letter-spacing: 1.4px;
  color: #ECF4FE;
  text-shadow: 0 0 12px rgba(140, 190, 236, 0.28);
}
.ftl-cal-nav {
  width: 24px; height: 24px; padding: 0; border-radius: 8px;
  display: grid; place-items: center; cursor: pointer;
  border: 1px solid transparent; background: transparent;
  color: rgba(200, 222, 242, 0.62);
  transition: color 150ms ease, background 150ms ease, border-color 150ms ease, transform 160ms ease;
}
.ftl-cal-nav svg { width: 13px; height: 13px; display: block; }
.ftl-cal-nav:hover {
  color: #FFFFFF;
  background: rgba(150, 200, 245, 0.10);
  border-color: rgba(150, 200, 245, 0.22);
}
.ftl-cal-nav:active { transform: scale(0.92); }
.ftl-cal-w { display: grid; grid-template-columns: repeat(7, 1fr); margin-bottom: 3px; }
.ftl-cal-w span {
  text-align: center;
  font-size: 10px; letter-spacing: 0.6px;
  color: rgba(184, 206, 228, 0.46);
}
.ftl-cal-g { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.ftl-cal-d {
  position: relative; height: 30px; padding: 0; border: 0; border-radius: 9px;
  background: transparent; cursor: pointer;
  font: inherit; font-size: 11.5px; letter-spacing: 0.2px;
  color: #D5E5F3;
  display: grid; place-items: center;
  transition: background 140ms ease, color 140ms ease, box-shadow 200ms ease, transform 120ms ease;
}
.ftl-cal-d:hover { background: rgba(150, 200, 245, 0.11); color: #FFFFFF; }
.ftl-cal-d:active { transform: scale(0.94); }
.ftl-cal-d.out { color: rgba(158, 182, 204, 0.30); }
.ftl-cal-d.out:hover { color: rgba(210, 230, 246, 0.72); }
.ftl-cal-d.today:not(.sel) {
  box-shadow: inset 0 0 0 1px rgba(245, 201, 123, 0.45);
  color: #F5D9AE;
}
.ftl-cal-d.today::after {
  content: "";
  position: absolute; left: 50%; bottom: 4px;
  width: 3px; height: 3px; border-radius: 50%;
  transform: translateX(-50%);
  background: #F5C97B;
  box-shadow: 0 0 6px rgba(245, 201, 123, 0.9);
}
.ftl-cal-d.sel {
  background: linear-gradient(180deg, #F7D49B 0%, #E8B269 100%);
  color: #2A1A06; font-weight: 700;
  box-shadow: 0 6px 16px -4px rgba(232, 178, 105, 0.62),
              inset 0 1px 0 rgba(255, 255, 255, 0.55);
}
.ftl-cal-d.sel:hover { color: #2A1A06; }
.ftl-cal-d.sel::after { background: rgba(58, 37, 8, 0.88); box-shadow: none; }
.ftl-cal-f {
  display: flex; justify-content: center;
  margin-top: 7px; padding-top: 8px;
  border-top: 1px solid rgba(255, 255, 255, 0.07);
}
/* 当前已是今天：「回到今天」默认不出现，选了其他日期后才出现 */
.ftl-cal.is-today .ftl-cal-f { display: none; }
/* 地图交互期毛玻璃降级（与 #ftl-panel 同批） */
body.map-busy .ftl-cal {
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}
.ftl-cal-today {
  height: 24px; padding: 0 13px; border-radius: 999px; cursor: pointer;
  border: 1px solid rgba(228, 178, 116, 0.34);
  background: rgba(228, 178, 116, 0.09);
  color: #EDCB99;
  font: inherit; font-size: 10.5px; letter-spacing: 0.6px;
  transition: color 150ms ease, background 150ms ease, border-color 150ms ease, box-shadow 170ms ease;
}
.ftl-cal-today:hover {
  color: #FFF3E2;
  background: rgba(228, 178, 116, 0.18);
  border-color: rgba(228, 178, 116, 0.55);
  box-shadow: 0 0 12px -3px rgba(228, 178, 116, 0.5);
}
@media (min-width: 2048px) {
  .ftl-cal { width: 300px; padding: 14px 15px 12px; border-radius: 17px; }
  .ftl-cal-h { height: 30px; margin-bottom: 7px; }
  .ftl-cal-m { font-size: 13.5px; letter-spacing: 1.6px; }
  .ftl-cal-nav { width: 27px; height: 27px; border-radius: 9px; }
  .ftl-cal-nav svg { width: 14px; height: 14px; }
  .ftl-cal-w span { font-size: 11px; }
  .ftl-cal-d { height: 34px; font-size: 12.5px; border-radius: 10px; }
  .ftl-cal-d.today::after { bottom: 5px; width: 3.5px; height: 3.5px; }
  .ftl-cal-f { margin-top: 8px; padding-top: 9px; }
  .ftl-cal-today { height: 27px; padding: 0 15px; font-size: 11.5px; }
}
body.ftl-open #ai-assistant { bottom: calc(var(--ftl-h) + var(--ftl-gap)); }
/* 悬停卡片随图标一起抬升，避免压在面板之上（卡片底缘锚到图标底缘） */
body.ftl-open #ai-assistant .ja-panel { bottom: 0; }
body.ftl-open #ja-chat { bottom: calc(var(--ftl-h) + var(--ftl-gap) + 4px); }
