/* 乾知网页版小组件：右下角大模型拥挤指示灯 + 抓取进度。颜色沿用网站自己的变量（自动跟随浅色/深色）。 */
#qi-addon {
  position: fixed; right: 12px; bottom: 12px; z-index: 90;
  display: flex; flex-direction: column; align-items: flex-end; gap: 8px;
  font-family: var(--font, -apple-system, "PingFang SC", "Segoe UI", "Microsoft YaHei UI", sans-serif);
  font-size: 13px; line-height: 1.45; color: var(--label, #1d1d1f);
  pointer-events: none;
}
#qi-addon[hidden] { display: none; }
#qi-addon > * { pointer-events: auto; }
#qi-addon button { font: inherit; }

.qi-row { display: flex; align-items: center; gap: 8px; }

/* ── 指示灯 ── */
.qi-dot-btn {
  width: 28px; height: 28px; border: 0; padding: 0; border-radius: 50%;
  background: var(--bg-elevated, #fff); box-shadow: var(--shadow-s, 0 1px 2px rgba(0,0,0,.06), 0 0 0 .5px rgba(0,0,0,.06));
  display: grid; place-items: center; cursor: pointer;
}
.qi-dot-btn:focus-visible, .qi-crawl-btn:focus-visible, .qi-x:focus-visible { outline: none; box-shadow: var(--focus-ring, 0 0 0 3.5px rgba(0,122,255,.35)); }
.qi-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--label-4, #bbb); flex: none; }
.qi-dot.idle { background: var(--green-dot, #34c759); }
.qi-dot.busy { background: var(--yellow, #ffcc00); }
.qi-dot.crowded { background: var(--red-dot, #ff3b30); }
.qi-dot.crowded.pulse { animation: qi-pulse 1.6s ease-in-out infinite; }
@keyframes qi-pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(255,59,48,.45); } 50% { box-shadow: 0 0 0 5px rgba(255,59,48,0); } }

/* ── 抓取中的小胶囊 ── */
.qi-crawl-btn {
  height: 28px; border: 0; border-radius: 14px; padding: 0 11px 0 7px; cursor: pointer;
  background: var(--bg-elevated, #fff); box-shadow: var(--shadow, 0 4px 16px rgba(0,0,0,.08), 0 0 0 .5px rgba(0,0,0,.08));
  display: flex; align-items: center; gap: 7px; white-space: nowrap; max-width: 320px; color: var(--label, #1d1d1f);
}
.qi-crawl-btn .qi-txt { overflow: hidden; text-overflow: ellipsis; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-crawl-btn .qi-txt b { color: var(--label, #1d1d1f); font-weight: 600; }
.qi-ring { width: 16px; height: 16px; flex: none; transform: rotate(-90deg); }
.qi-ring circle { fill: none; stroke-width: 2.6; }
.qi-ring .bg { stroke: var(--fill-strong, rgba(120,120,128,.2)); }
.qi-ring .fg { stroke: var(--accent, #007aff); stroke-linecap: round; transition: stroke-dashoffset .4s ease; }
.qi-crawl-btn.done .qi-ring .fg { stroke: var(--green-dot, #34c759); }
.qi-crawl-btn.failed .qi-ring .fg { stroke: var(--red-dot, #ff3b30); }
@media (max-width: 1100px) { .qi-crawl-btn .qi-txt { display: none; } .qi-crawl-btn { padding: 0 6px; } }

/* ── 面板 ── */
.qi-panel {
  width: 392px; max-width: calc(100vw - 24px); max-height: min(72vh, 680px); overflow: auto;
  background: var(--bg-elevated, #fff); border-radius: var(--radius-l, 12px);
  box-shadow: var(--shadow-l, 0 24px 64px rgba(0,0,0,.18), 0 0 0 .5px rgba(0,0,0,.1));
  overscroll-behavior: contain;
}
.qi-panel.qi-enter { animation: qi-in .14s ease; }
@keyframes qi-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.qi-head { position: sticky; top: 0; z-index: 1; background: var(--bg-elevated, #fff); display: flex; align-items: center; gap: 8px;
  padding: 12px 12px 10px 16px; border-bottom: .5px solid var(--separator, rgba(60,60,67,.12)); }
.qi-head h3 { margin: 0; font-size: 14px; font-weight: 600; flex: 1; }
.qi-x { width: 24px; height: 24px; border: 0; border-radius: 6px; background: transparent; cursor: pointer; color: var(--label-3, rgba(60,60,67,.5)); font-size: 16px; line-height: 1; }
.qi-x:hover { background: var(--bg-hover, rgba(0,0,0,.04)); color: var(--label, #1d1d1f); }
.qi-sec { padding: 12px 16px; border-bottom: .5px solid var(--separator, rgba(60,60,67,.12)); }
.qi-sec:last-child { border-bottom: 0; }
.qi-sec h4 { margin: 0 0 8px; font-size: 12px; font-weight: 600; color: var(--label-3, rgba(60,60,67,.5)); letter-spacing: .02em; }
.qi-meta { color: var(--label-3, rgba(60,60,67,.5)); font-size: 12px; }
.qi-badge { display: inline-block; padding: 1px 7px; border-radius: 9px; font-size: 11.5px; font-weight: 600; }
.qi-badge.running { background: var(--accent-soft, rgba(0,122,255,.1)); color: var(--accent, #007aff); }
.qi-badge.success { background: var(--green-soft, rgba(52,199,89,.14)); color: var(--green, #28a745); }
.qi-badge.partial { background: var(--orange-soft, rgba(255,149,0,.13)); color: var(--orange, #c96a00); }
.qi-badge.failed { background: var(--red-soft, rgba(255,59,48,.1)); color: var(--red, #e5352b); }

.qi-bar { height: 4px; border-radius: 2px; background: var(--fill, rgba(120,120,128,.12)); overflow: hidden; margin-top: 8px; }
.qi-bar > i { display: block; height: 100%; background: var(--accent, #007aff); border-radius: 2px; transition: width .4s ease; }

.qi-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.qi-stat { background: var(--bg-secondary, #f5f5f7); border-radius: var(--radius, 8px); padding: 7px 8px; min-width: 0; }
.qi-stat .n { font-size: 17px; font-weight: 600; font-variant-numeric: tabular-nums; }
.qi-stat .l { font-size: 11px; color: var(--label-3, rgba(60,60,67,.5)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.qi-steps { list-style: none; margin: 0; padding: 0; }
.qi-step { display: grid; grid-template-columns: 18px 1fr auto; gap: 8px; align-items: start; padding: 4px 0; position: relative; }
.qi-step:not(:last-child)::before { content: ""; position: absolute; left: 8.5px; top: 21px; bottom: -5px; width: 1px; background: var(--separator-strong, rgba(60,60,67,.2)); }
.qi-ico { width: 18px; height: 18px; border-radius: 50%; display: grid; place-items: center; font-size: 10.5px; font-weight: 700; margin-top: 1px; box-sizing: border-box; }
.qi-step.pending .qi-ico { border: 1.5px solid var(--label-4, rgba(60,60,67,.28)); }
.qi-step.done .qi-ico { background: var(--green-dot, #34c759); color: #fff; }
.qi-step.failed .qi-ico { background: var(--red-dot, #ff3b30); color: #fff; }
.qi-step.skipped .qi-ico { border: 1.5px dashed var(--label-4, rgba(60,60,67,.28)); color: var(--label-3, rgba(60,60,67,.5)); }
.qi-step.running .qi-ico { border: 2px solid var(--accent-soft, rgba(0,122,255,.2)); border-top-color: var(--accent, #007aff); animation: qi-spin .9s linear infinite; }
@keyframes qi-spin { to { transform: rotate(360deg); } }
.qi-step .nm { font-weight: 500; }
.qi-step.pending .nm, .qi-step.skipped .nm { color: var(--label-3, rgba(60,60,67,.5)); font-weight: 400; }
.qi-step.running .nm { color: var(--accent, #007aff); font-weight: 600; }
.qi-step .dt { font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-step .ct { font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); font-variant-numeric: tabular-nums; white-space: nowrap; margin-top: 1px; }
.qi-step .ct .bad { color: var(--red, #e5352b); }

.qi-src-sum { display: flex; gap: 12px; margin-bottom: 8px; font-size: 12.5px; }
.qi-src-sum span { display: inline-flex; align-items: center; gap: 5px; }
.qi-src { display: grid; grid-template-columns: 8px 1fr auto; gap: 8px; align-items: baseline; padding: 4px 0; }
.qi-src .qi-dot { width: 7px; height: 7px; transform: translateY(-1px); }
.qi-src .qi-dot.ok { background: var(--green-dot, #34c759); }
.qi-src .qi-dot.bad { background: var(--red-dot, #ff3b30); }
.qi-src .qi-dot.run { background: var(--accent, #007aff); animation: qi-blink 1s ease-in-out infinite; }
@keyframes qi-blink { 50% { opacity: .3; } }
.qi-src .nm { min-width: 0; overflow-wrap: anywhere; }
.qi-src .why { display: block; font-size: 12px; color: var(--red, #e5352b); }
.qi-src .n { font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); font-variant-numeric: tabular-nums; white-space: nowrap; }
.qi-more { border: 0; background: transparent; padding: 4px 0 0; color: var(--accent, #007aff); cursor: pointer; font-size: 12.5px; }

.qi-load { display: flex; align-items: center; gap: 8px; }
.qi-load .qi-dot { width: 9px; height: 9px; }
.qi-empty { color: var(--label-3, rgba(60,60,67,.5)); padding: 4px 0; }

/* ── 任务清单 ── */
.qi-panel { width: 440px; }
.qi-tasks .qi-task { display: block; padding: 0; }
.qi-tasks .qi-task:not(:last-child)::before { top: 25px; bottom: -3px; }
.qi-task-head { all: unset; box-sizing: border-box; width: 100%; display: grid; grid-template-columns: 18px 1fr auto; gap: 8px;
  align-items: start; padding: 5px 0; cursor: pointer; border-radius: 6px; }
.qi-task-head:hover .nm { text-decoration: underline; text-decoration-color: var(--separator-strong, rgba(60,60,67,.25)); }
.qi-task-head:focus-visible { box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-task .qi-ico { font-size: 10px; }
.qi-task.pending .qi-ico { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-task-main { display: flex; flex-direction: column; min-width: 0; }
.qi-task .nm { font-weight: 500; overflow-wrap: anywhere; }
.qi-task .dt { font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); overflow-wrap: anywhere; }
.qi-task.running .dt { color: var(--label-2, rgba(60,60,67,.78)); }
.qi-task.failed .dt { color: var(--red, #e5352b); }
.qi-task .ct { font-size: 11.5px; color: var(--label-3, rgba(60,60,67,.5)); white-space: nowrap; margin-top: 2px; }
.qi-kind { display: inline-block; margin-left: 6px; padding: 0 5px; border-radius: 4px; font-size: 10.5px; font-weight: 500;
  background: var(--fill, rgba(120,120,128,.12)); color: var(--label-2, rgba(60,60,67,.78)); vertical-align: 1px; }
.qi-kind.ins { background: var(--purple-soft, rgba(175,82,222,.12)); color: var(--purple, #8944ab); }
.qi-task-body { margin: 2px 0 8px 26px; padding: 8px 10px; border-radius: 8px; background: var(--bg-secondary, #f5f5f7); font-size: 12.5px; }
.qi-kv { margin-bottom: 4px; overflow-wrap: anywhere; }
.qi-kv b { font-weight: 600; margin-right: 6px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-kv.bad { color: var(--red, #e5352b); }
.qi-sub { margin: 8px 0 4px; font-size: 11.5px; font-weight: 600; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-log { list-style: none; margin: 0; padding: 0; max-height: 220px; overflow: auto; }
.qi-log li { padding: 2px 0; overflow-wrap: anywhere; }
.qi-log time { font-variant-numeric: tabular-nums; color: var(--label-3, rgba(60,60,67,.5)); margin-right: 6px; font-size: 11.5px; }
.qi-prose { white-space: pre-wrap; overflow-wrap: anywhere; }
.qi-ins-used { margin-top: 8px; padding: 8px 10px; border-radius: 8px; background: var(--bg-secondary, #f5f5f7); font-size: 12.5px; }
.qi-ins-used .q { color: var(--label, #1d1d1f); }
.qi-ins-used .k { color: var(--label-3, rgba(60,60,67,.5)); font-weight: 600; }
.qi-src .why.muted { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-src .qi-dot.skip { background: var(--label-4, rgba(60,60,67,.28)); }

/* ── 特殊指令编辑器（面板 + 设置页） ── */
.qi-ins { display: flex; flex-direction: column; gap: 8px; }
.qi-ins.settings { padding: 12px 16px; }
.qi-ins-help { font-size: 12.5px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-ins-status { font-size: 12.5px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-ta { box-sizing: border-box; width: 100%; min-height: 76px; resize: vertical; padding: 8px 10px; border-radius: var(--radius-s, 6px);
  border: .5px solid var(--separator-strong, rgba(60,60,67,.25)); background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f);
  font: inherit; font-size: 13px; line-height: 1.5; }
.qi-ta:focus { outline: none; box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-ins-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.qi-grow { flex: 1; }
.qi-faint { color: var(--label-3, rgba(60,60,67,.5)); font-size: 12px; }
.qi-seg { display: inline-flex; padding: 2px; border-radius: 8px; background: var(--fill-2, rgba(120,120,128,.08)); gap: 2px; }
.qi-seg button { height: 22px; padding: 0 10px; border: 0; border-radius: 6px; background: transparent; font-size: 12px; font-weight: 500;
  color: var(--label-2, rgba(60,60,67,.78)); cursor: pointer; }
.qi-seg button.on { background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); box-shadow: var(--shadow-s, 0 1px 2px rgba(0,0,0,.08)); }
.qi-btn { height: 24px; padding: 0 10px; border: 0; border-radius: 6px; background: var(--fill, rgba(120,120,128,.12)); color: var(--label, #1d1d1f);
  font-size: 12px; font-weight: 500; cursor: pointer; }
.qi-btn.primary { background: var(--accent, #007aff); color: #fff; }
.qi-btn:disabled { opacity: .5; cursor: default; }
.qi-pill { display: inline-block; padding: 0 6px; border-radius: 9px; font-size: 11px; font-weight: 600;
  background: var(--fill, rgba(120,120,128,.12)); color: var(--label-2, rgba(60,60,67,.78)); }
.qi-pill.on { background: var(--green-soft, rgba(52,199,89,.14)); color: var(--green, #28a745); }
.qi-ins-others { display: flex; flex-direction: column; gap: 6px; }
.qi-ins-item { padding: 6px 8px; border-radius: 6px; background: var(--bg-secondary, #f5f5f7); font-size: 12.5px; }
.qi-ins-item .who { color: var(--label-3, rgba(60,60,67,.5)); display: flex; gap: 4px; align-items: baseline; }
.qi-ins-item .who b { color: var(--label-2, rgba(60,60,67,.78)); }
.qi-ins-item .txt { white-space: pre-wrap; overflow-wrap: anywhere; }
.qi-link { border: 0; background: transparent; padding: 0; margin-left: auto; color: var(--accent, #007aff); cursor: pointer; font-size: 12px; }
.qi-link.danger { color: var(--red, #e5352b); }

/* ── 设置页注入的两节（沿用网站的 group 样式） ── */
section.qi-settings { margin-top: 24px; }
.qi-group { padding: 0; }
.qi-cal-wrap { padding: 12px 16px; display: flex; flex-direction: column; gap: 10px; }
.qi-cal-top { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 13px; }
.qi-cal { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
.qi-cal-wd { text-align: center; font-size: 11.5px; color: var(--label-3, rgba(60,60,67,.5)); padding-bottom: 2px; }
.qi-cal-day { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; min-height: 48px;
  border: 0; border-radius: 8px; cursor: pointer; font: inherit; padding: 4px 2px;
  background: var(--accent-soft, rgba(0,122,255,.1)); color: var(--label, #1d1d1f); transition: background .12s, transform .08s; }
.qi-cal-day .d { font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; }
.qi-cal-day .s { font-size: 10.5px; color: var(--accent, #007aff); }
.qi-cal-day:hover { background: rgba(0,122,255,.18); }
.qi-cal-day:active { transform: scale(.97); }
.qi-cal-day:focus-visible { outline: none; box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-cal-day.off { background: var(--fill-2, rgba(120,120,128,.08)); color: var(--label-3, rgba(60,60,67,.5)); }
.qi-cal-day.off .d { text-decoration: line-through; font-weight: 500; }
.qi-cal-day.off .s { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-cal-day.off:hover { background: var(--fill, rgba(120,120,128,.14)); }
.qi-cal-day.power { background: var(--orange-soft, rgba(255,149,0,.13)); }
.qi-cal-day.power .s { color: var(--orange, #c96a00); font-weight: 600; }
.qi-cal-day.changed::after { content: ""; position: absolute; top: 5px; right: 6px; width: 6px; height: 6px; border-radius: 50%;
  background: var(--orange-dot, #ff9500); }
.qi-cal-day.today { box-shadow: inset 0 0 0 1.5px var(--accent, #007aff); }
.qi-cal-day.passed, .qi-cal-day:disabled { cursor: default; opacity: .55; transform: none; }
.qi-cal-foot { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-lg { display: inline-flex; align-items: center; gap: 5px; }
.qi-lg::before { content: ""; width: 10px; height: 10px; border-radius: 3px; background: var(--accent-soft, rgba(0,122,255,.18)); }
.qi-lg.off::before { background: var(--fill-2, rgba(120,120,128,.14)); }
.qi-lg.cont::before { background: var(--accent-soft, rgba(0,122,255,.18)); opacity: .45; }
.qi-cal-day.sel { box-shadow: inset 0 0 0 2px var(--accent, #007aff); }
.qi-cal-day .s { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 3px; }
.qi-cal-day .s2 { opacity: .8; }
/* crawl calendar: per-day editor (10-14) */
.qi-day-back { position: fixed; inset: 0; z-index: 1000; background: rgba(0,0,0,.32); display: flex; align-items: center; justify-content: center; padding: 16px; }
.qi-day-dlg { width: min(480px, 100%); max-height: calc(100vh - 32px); overflow: auto; background: var(--bg-content, #fff); color: inherit;
  border-radius: 12px; box-shadow: 0 12px 40px rgba(0,0,0,.28); padding: 16px 18px; display: flex; flex-direction: column; gap: 12px; font-size: 13px; }
.qi-day-head { display: flex; align-items: center; gap: 8px; font-size: 15px; }
.qi-day-head .qi-x { border: 0; background: none; font-size: 20px; line-height: 1; cursor: pointer; color: var(--label-2, rgba(60,60,67,.78)); padding: 2px 6px; border-radius: 6px; }
.qi-day-head .qi-x:hover { background: var(--fill-2, rgba(120,120,128,.1)); }
.qi-day-grid { display: grid; grid-template-columns: max-content 1fr; gap: 10px 12px; align-items: center; }
.qi-day-grid .qi-select { min-width: 0; flex: 1; }
.qi-week-box { border-top: 1px solid var(--separator, rgba(60,60,67,.12)); padding-top: 10px; }
.qi-week-box > summary { cursor: pointer; font-size: 13px; font-weight: 600; display: flex; flex-wrap: wrap; gap: 6px; align-items: baseline; }
.qi-week-box > summary .qi-faint { font-weight: 400; }
.qi-week-box[open] > summary { margin-bottom: 8px; }
@media (max-width: 520px) { .qi-day-grid { grid-template-columns: 1fr; } }
.qi-cal-day.cont { background: var(--accent-soft, rgba(0,122,255,.18)); background-clip: padding-box; opacity: .8; }
.qi-cal-day.cont .s { color: var(--accent, #007aff); }
/* 每周抓取时间 */
.qi-week-wrap { overflow-x: auto; }
.qi-week { border-collapse: collapse; font-size: 13px; min-width: 460px; }
.qi-week th { text-align: left; font-weight: 500; color: var(--label-2, rgba(60,60,67,.78)); padding: 4px 10px 6px 0; font-size: 12px; }
.qi-week td { padding: 4px 10px 4px 0; vertical-align: middle; }
.qi-week td.wd { font-weight: 600; white-space: nowrap; }
.qi-week tr.off td.wd { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-week .qi-select { min-width: 120px; }
.qi-lg.changed::before { width: 6px; height: 6px; border-radius: 50%; background: var(--orange-dot, #ff9500); }

/* ── 设置页：大模型（管理员） ── */
.qi-llm-wrap { padding: 12px 16px; display: flex; flex-direction: column; gap: 12px; font-size: 13px; }
.qi-llm-uses { display: flex; gap: 10px 24px; flex-wrap: wrap; }
.qi-llm-use { display: inline-flex; align-items: center; gap: 8px; font-weight: 500; min-width: 0; }
.qi-llm-use > span { white-space: nowrap; }
.qi-llm-item > * { min-width: 0; max-width: 100%; }
.qi-select, .qi-input { box-sizing: border-box; height: 28px; padding: 0 8px; border-radius: var(--radius-s, 6px); font: inherit; font-size: 13px;
  border: .5px solid var(--separator-strong, rgba(60,60,67,.25)); background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); }
.qi-select { min-width: 200px; max-width: 100%; }
.qi-select:focus, .qi-input:focus { outline: none; box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-llm-list { display: flex; flex-direction: column; gap: 8px; }
.qi-llm-item { padding: 10px 12px; border-radius: 8px; background: var(--bg-secondary, #f5f5f7); display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.qi-llm-item.off { opacity: .65; }
.qi-llm-top { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.qi-llm-acts { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.qi-llm-meta { overflow-wrap: anywhere; }
.qi-llm-ok { font-size: 12px; color: var(--green, #28a745); }
.qi-llm-err, .qi-llm-test.bad { font-size: 12px; color: var(--red, #e5352b); overflow-wrap: anywhere; }
.qi-llm-test { font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); overflow-wrap: anywhere; }
.qi-llm-test.ok { color: var(--green, #28a745); }
.qi-danger { color: var(--red, #e5352b) !important; }
.qi-llm-form { display: flex; flex-direction: column; gap: 8px; padding: 12px; border-radius: 8px;
  border: .5px solid var(--separator-strong, rgba(60,60,67,.25)); }
.qi-llm-field { display: grid; grid-template-columns: 88px minmax(0, 1fr); align-items: center; gap: 2px 10px; }
.qi-llm-field > .qi-faint { grid-column: 2; }
@media (max-width: 560px) {
  .qi-llm-field { grid-template-columns: 1fr; }
  .qi-llm-field > .qi-faint { grid-column: 1; }
  .qi-select { min-width: 0; flex: 1; }
  .qi-llm-use { width: 100%; }
}

.qi-tip {
  position: fixed; z-index: 91; pointer-events: none; max-width: 260px;
  background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); border-radius: 8px; padding: 6px 10px; font-size: 12.5px;
  box-shadow: var(--shadow, 0 4px 16px rgba(0,0,0,.08), 0 0 0 .5px rgba(0,0,0,.08));
  font-family: var(--font, -apple-system, "PingFang SC", "Microsoft YaHei UI", sans-serif);
}

/* 点公众号文章链接时“已复制标题”的提示 */
.qi-wx-toast {
  position: fixed; z-index: 97; left: 50%; bottom: 28px; transform: translate(-50%, 12px); max-width: min(560px, calc(100vw - 32px));
  background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); border-radius: 10px; padding: 10px 14px; font-size: 13px; line-height: 1.5;
  box-shadow: var(--shadow, 0 4px 16px rgba(0,0,0,.12), 0 0 0 .5px rgba(0,0,0,.08));
  font-family: var(--font, -apple-system, "PingFang SC", "Microsoft YaHei UI", sans-serif);
  opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s;
}
.qi-wx-toast.show { opacity: 1; transform: translate(-50%, 0); }

/* ── AI 搜索（融资动态 / 近期活动） ── */
.qi-ai-btn { display: inline-flex; align-items: center; gap: 4px; margin-left: 8px; white-space: nowrap; }
.qi-ai-star { color: var(--accent, #007aff); font-size: 12px; }
.qi-ai-panel {
  position: fixed; z-index: 80; left: 248px; top: 60px; bottom: 16px; width: 460px; max-width: calc(100vw - 264px);
  display: flex; flex-direction: column; overflow: hidden;
  background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); border-radius: var(--radius-l, 12px);
  box-shadow: var(--shadow-l, 0 24px 64px rgba(0,0,0,.18), 0 0 0 .5px rgba(0,0,0,.1));
  font-family: var(--font, -apple-system, "PingFang SC", "Segoe UI", "Microsoft YaHei UI", sans-serif); font-size: 13px; line-height: 1.55;
}
.qi-ai-panel.qi-enter { animation: qi-in .14s ease; }
.qi-ai-panel [hidden] { display: none !important; }
.qi-ai-form { display: flex; flex-direction: column; gap: 8px; flex: none; }
.qi-ai-form textarea {
  width: 100%; box-sizing: border-box; resize: vertical; min-height: 64px; font: inherit; color: inherit;
  background: var(--fill, rgba(120,120,128,.08)); border: .5px solid var(--separator, rgba(60,60,67,.18)); border-radius: 8px; padding: 8px 10px;
}
.qi-ai-form textarea:focus { outline: none; box-shadow: var(--focus-ring, 0 0 0 3.5px rgba(0,122,255,.35)); }
.qi-ai-out { flex: 1; overflow: auto; overscroll-behavior: contain; }
.qi-ai-wait { display: flex; align-items: center; gap: 6px; color: var(--label-2, rgba(60,60,67,.78)); margin-bottom: 8px; }
.qi-ai-steps { margin: 0 0 10px; font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-ai-steps summary { cursor: pointer; }
.qi-ai-steps ul { margin: 6px 0 0; padding-left: 16px; }
.qi-ai-err { color: var(--red, #d70015); margin: 6px 0; }
.qi-ai-md p { margin: 0 0 8px; }
.qi-ai-md h4 { margin: 10px 0 6px; font-size: 13px; }
.qi-ai-md ul, .qi-ai-md ol { margin: 0 0 10px; padding-left: 20px; }
.qi-ai-md li { margin: 4px 0; }
.qi-ai-md a { color: var(--accent, #007aff); text-decoration: none; }
.qi-ai-md a:hover { text-decoration: underline; }
.qi-ai-link { font-weight: 600; }
.qi-ai-meta { margin-top: 10px; }
@media (max-width: 900px) { .qi-ai-panel { left: 8px; right: 8px; width: auto; max-width: none; top: 56px; } }

@media (max-width: 600px) {
  #qi-addon { right: 8px; bottom: 8px; }
  .qi-panel { width: calc(100vw - 16px); max-width: none; max-height: 80vh; }
  .qi-stats { grid-template-columns: repeat(2, 1fr); }
  .qi-cal { gap: 4px; }
  .qi-cal-day { min-height: 42px; }
  .qi-cal-day .s { font-size: 9.5px; }
}
@media (prefers-reduced-motion: reduce) {
  .qi-step.running .qi-ico, .qi-dot.crowded.pulse, .qi-src .qi-dot.run, .qi-panel.qi-enter { animation: none; }
  .qi-cal-day { transition: none; }
}

/* ───── 2026-10-13：红点数字、公司历程、收藏夹、管理后台 ───── */
.qi-nav-badge { margin-left: auto; min-width: 18px; height: 18px; padding: 0 5px; box-sizing: border-box; border-radius: 9px;
  background: var(--red-dot, #ff3b30); color: #fff; font-size: 11px; font-weight: 600; line-height: 18px; text-align: center;
  font-variant-numeric: tabular-nums; box-shadow: 0 0 0 1.5px var(--bg-sidebar, transparent); }
.nav-item.active .qi-nav-badge { box-shadow: 0 0 0 1.5px rgba(255,255,255,.7); }

/* 公司历程 */
.qi-tl-filters { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.qi-tl { display: flex; flex-direction: column; }
.qi-tl-item { display: flex; gap: 12px; }
.qi-tl-rail { position: relative; width: 12px; flex: none; }
.qi-tl-rail::before { content: ""; position: absolute; left: 5.5px; top: 0; bottom: 0; width: 1px; background: var(--separator-strong, rgba(60,60,67,.2)); }
.qi-tl-item:first-child .qi-tl-rail::before { top: 8px; }
.qi-tl-item:last-child .qi-tl-rail::before { bottom: calc(100% - 10px); }
.qi-tl-node { position: absolute; top: 4px; left: 1px; width: 10px; height: 10px; box-sizing: border-box; border-radius: 50%;
  background: var(--bg-content, #fff); border: 2px solid var(--label-4, #c7c7cc); }
.qi-tl-item.k-funding .qi-tl-node { border-color: var(--accent, #007aff); }
.qi-tl-item.k-milestone .qi-tl-node, .qi-tl-item.k-product .qi-tl-node { border-color: var(--orange-dot, #ff9500); background: var(--orange-dot, #ff9500); }
.qi-tl-item.k-partnership .qi-tl-node { border-color: var(--purple, #af52de); }
.qi-tl-item.k-news .qi-tl-node, .qi-tl-item.k-honor .qi-tl-node { border-color: var(--green-dot, #34c759); }
.qi-tl-item.k-recorded .qi-tl-node, .qi-tl-item.k-favorited .qi-tl-node { width: 8px; height: 8px; left: 2px; top: 5px; }
.qi-tl-item.first.k-funding .qi-tl-node { background: var(--accent, #007aff); box-shadow: 0 0 0 3px var(--accent-soft, rgba(0,122,255,.15)); }
.qi-tl-body { flex: 1; min-width: 0; padding-bottom: 16px; }
.qi-tl-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12px; }
.qi-tl-kind { display: inline-flex; align-items: center; height: 18px; padding: 0 6px; border-radius: 4px; font-size: 11px; font-weight: 600;
  background: var(--fill-2, rgba(120,120,128,.1)); color: var(--label-2, rgba(60,60,67,.78)); }
.k-funding .qi-tl-kind { background: var(--accent-soft, rgba(0,122,255,.1)); color: var(--accent, #007aff); }
.k-milestone .qi-tl-kind, .k-product .qi-tl-kind { background: var(--orange-soft, rgba(255,149,0,.13)); color: var(--orange, #c96a00); }
.k-partnership .qi-tl-kind { background: var(--purple-soft, rgba(175,82,222,.12)); color: var(--purple, #8e44ad); }
.k-news .qi-tl-kind, .k-honor .qi-tl-kind { background: var(--green-soft, rgba(52,199,89,.14)); color: var(--green, #28a745); }
.qi-tl-title { margin-top: 3px; font-weight: 600; font-size: 13.5px; line-height: 1.45; }
.k-recorded .qi-tl-title, .k-favorited .qi-tl-title { font-weight: 500; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-tl-detail { margin-top: 2px; font-size: 12.5px; line-height: 1.5; }
.qi-tl-body .round-grid { margin-top: 6px; }

/* 收藏夹选择弹层 */
.qi-fp { display: flex; flex-direction: column; gap: 2px; padding: 4px; }
.qi-fp-new { display: flex; gap: 6px; padding: 6px 4px 2px; border-top: .5px solid var(--separator, rgba(60,60,67,.12)); margin-top: 4px; }
.qi-fp-new .input { flex: 1; min-width: 0; height: 26px; font-size: 12.5px; }

/* 收藏夹页 */
.qi-fav { flex: 1; display: flex; min-height: 0; background: var(--bg-secondary, #f5f5f7); }
.qi-fav-side { width: 220px; flex: none; padding: 14px 10px; overflow: auto; border-right: .5px solid var(--separator, rgba(60,60,67,.12));
  background: var(--bg-content, #fff); display: flex; flex-direction: column; gap: 2px; }
.qi-fav-folder { display: flex; align-items: center; gap: 8px; width: 100%; height: 30px; padding: 0 6px 0 10px; border: 0; border-radius: var(--radius-s, 6px);
  background: transparent; text-align: left; font: inherit; font-size: 13px; color: var(--label, #1d1d1f); cursor: pointer; box-sizing: border-box; }
.qi-fav-folder svg { color: var(--accent, #007aff); flex: none; }
.qi-fav-folder:hover { background: var(--bg-hover, rgba(0,0,0,.04)); }
.qi-fav-folder.on { background: var(--bg-selected, rgba(0,122,255,.12)); font-weight: 600; }
.qi-fav-folder:focus-visible { outline: none; box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-fav-act { width: 22px; height: 22px; display: none; }
.qi-fav-folder:hover .qi-fav-act, .qi-fav-folder:focus-within .qi-fav-act { display: grid; }
.qi-fav-sep { margin: 12px 10px 4px; font-size: 11.5px; font-weight: 600; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-fav-hint { padding: 4px 10px; font-size: 12px; line-height: 1.5; }
.qi-fav-newbtn { margin: 8px 4px 0; align-self: flex-start; }
.qi-fav-main { flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; }
.qi-fav-main > .filter-bar { flex: none; }
.qi-fav-cur { font-weight: 600; font-size: 13px; padding-left: 4px; }
.qi-fav-list { flex: 1; overflow: auto; padding: 4px 20px 32px; display: flex; flex-direction: column; gap: 8px; }
.qi-fav-row { background: var(--bg-elevated, #fff); border-radius: var(--radius-l, 12px); box-shadow: var(--shadow-s, 0 1px 2px rgba(0,0,0,.06));
  padding: 10px 14px; cursor: pointer; display: flex; flex-direction: column; gap: 4px; }
.qi-fav-row:hover { box-shadow: var(--shadow, 0 4px 16px rgba(0,0,0,.08)); }
.qi-fav-row.selected { box-shadow: 0 0 0 2px var(--accent, #007aff); }
.qi-fav-row:focus-visible { outline: none; box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-fav-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12.5px; }
.qi-fav-name { font-weight: 600; font-size: 14px; }
.qi-fav-one { font-size: 12.5px; }
.qi-fav-meta { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; font-size: 11.5px; }
.qi-fav-news { color: var(--red, #e5352b); font-weight: 500; }
/* qi8：收藏夹分“公司”（下面是未分类和自己建的收藏夹）和“活动”两个系统收藏夹 */
.qi-fav-folder.qi-fav-sub { padding-left: 28px; }
.qi-fav-newbtn.qi-fav-sub { margin-left: 22px; }
.qi-fav-sys { margin-top: 14px; }
.qi-fav-evmain .qi-fav-tl { flex: 1; overflow: auto; max-width: none; width: 100%; margin: 0; padding: 4px 28px 60px; }
.qi-ics-row { margin: 12px 0; }
.qi-ics-lab { font-size: 12.5px; font-weight: 600; margin-bottom: 4px; }
.qi-ics-url { flex: 1; min-width: 0; font-family: var(--font-mono, ui-monospace, Consolas, monospace); font-size: 12px; }
.qi-ics-hint { font-size: 11.5px; margin-top: 3px; }
.qi-ics-how { margin: 14px 0 0; padding-left: 18px; font-size: 12.5px; line-height: 1.8; color: var(--label-2, rgba(60,60,67,.75)); }
/* qi9：每天几点到几点、参加 / 待定 / 不参加 */
.qi-plan { margin-top: 10px; padding-top: 8px; border-top: .5px solid var(--separator, rgba(60,60,67,.12)); }
.qi-plan-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.qi-plan-lab { font-size: 12px; font-weight: 600; color: var(--label-2, rgba(60,60,67,.75)); }
.qi-plan-tip { font-size: 11.5px; }
.qi-rsvp { display: inline-flex; border: .5px solid var(--separator, rgba(60,60,67,.2)); border-radius: 7px; overflow: hidden; }
.qi-rsvp-btn { border: 0; background: transparent; color: var(--label-2, rgba(60,60,67,.75)); font-size: 12px; height: 24px; padding: 0 10px; cursor: pointer; }
.qi-rsvp-btn + .qi-rsvp-btn { border-left: .5px solid var(--separator, rgba(60,60,67,.2)); }
.qi-rsvp-btn:hover { background: var(--bg-hover, rgba(0,0,0,.04)); }
.qi-rsvp-btn.on.going { background: var(--green-dot, #34c759); color: #fff; }
.qi-rsvp-btn.on.maybe { background: var(--orange, #ff9500); color: #fff; }
.qi-rsvp-btn.on.declined { background: var(--label-3, #8e8e93); color: #fff; }
.qi-rsvp-btn.inh { box-shadow: inset 0 -2px 0 var(--accent, #007aff); }
.qi-rsvp.small .qi-rsvp-btn { height: 20px; padding: 0 7px; font-size: 11px; }
.qi-sched { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; }
.qi-sched-row { display: flex; align-items: center; gap: 10px; font-size: 12.5px; flex-wrap: wrap; }
.qi-sched-row.declined .qi-sched-d, .qi-sched-row.declined .qi-sched-t { text-decoration: line-through; opacity: .6; }
.qi-sched-d { min-width: 92px; }
.qi-sched-t { min-width: 96px; }
.inspector-body .qi-plan { margin: 0 0 14px; }

/* 行业 / 方向筛选的“全部 / 默认 / 全不选” */
.qi-ind-acts { display: flex; gap: 4px; padding: 0 4px 4px; }
.qi-ind-acts .btn.on { color: var(--accent, #007aff); font-weight: 600; }
.qi-ind-hint { padding: 0 10px 6px; font-size: 11px; }
@media (max-width: 900px) { .qi-fav { flex-direction: column; } .qi-fav-side { width: auto; flex-direction: row; flex-wrap: wrap; border-right: 0;
  border-bottom: .5px solid var(--separator, rgba(60,60,67,.12)); } .qi-fav-folder { width: auto; } .qi-fav-sep, .qi-fav-hint { display: none; } }

/* 管理后台 */
.qi-admin-page { padding-top: 16px; }
.qi-admin-host { max-width: 1040px; margin: 0 auto; }
.qi-adm { display: flex; gap: 20px; align-items: flex-start; font-size: 13px; color: var(--label, #1d1d1f); }
/* 两级菜单（10-20）：一级“服务器 / 抓取设置”是分段按钮，二级是下面的列表（窄屏时变成一行可横滑的标签） */
.qi-adm-nav { position: sticky; top: 0; width: 176px; flex: none; display: flex; flex-direction: column; gap: 10px; }
.qi-adm-g1 { display: flex; padding: 2px; border-radius: 8px; background: var(--fill-2, rgba(120,120,128,.1)); }
.qi-adm-g1 button { flex: 1; height: 28px; padding: 0 8px; border: 0; border-radius: 6px; background: transparent; font: inherit; font-size: 13px;
  color: var(--label-2, rgba(60,60,67,.78)); cursor: pointer; white-space: nowrap; }
.qi-adm-g1 button.on { background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.12); }
.qi-adm-g2 { display: flex; flex-direction: column; gap: 2px; }
.qi-adm-nav button:focus-visible { outline: none; box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-adm-g2 button { display: flex; align-items: center; gap: 8px; height: 30px; padding: 0 10px; border: 0; border-radius: var(--radius-s, 6px);
  background: transparent; text-align: left; font: inherit; font-size: 13px; color: var(--label, #1d1d1f); cursor: pointer; white-space: nowrap; flex: none; }
.qi-adm-g2 button:hover { background: var(--bg-hover, rgba(0,0,0,.04)); }
.qi-adm-g2 button.on { background: var(--bg-selected, rgba(0,122,255,.12)); font-weight: 600; color: var(--accent, #007aff); }
/* 管理后台 → 服务器 → 用户（10-20） */
.qi-usr-list { display: grid; border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: var(--radius, 8px); overflow: hidden; }
.qi-usr-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; padding: 10px 12px;
  border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); background: var(--bg-elevated, #fff); }
.qi-usr-row:last-child { border-bottom: 0; }
.qi-usr-row > .qi-msg { flex-basis: 100%; }
.qi-usr-who { flex: 1 1 260px; min-width: 0; display: grid; gap: 3px; }
.qi-usr-who .qi-faint { overflow-wrap: anywhere; }
.qi-usr-name { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 14px; }
.qi-usr-role, .qi-usr-me { display: inline-flex; align-items: center; height: 19px; padding: 0 7px; border-radius: 5px; font-size: 11px; font-weight: 600;
  background: var(--fill-2, rgba(120,120,128,.1)); color: var(--label-2, rgba(60,60,67,.78)); }
.qi-usr-role.admin { background: var(--accent-soft, rgba(0,122,255,.1)); color: var(--accent, #007aff); }
.qi-usr-me { background: var(--green-soft, rgba(52,199,89,.14)); color: var(--green, #28a745); }
.qi-usr-form { display: grid; gap: 8px; }
.qi-usr-form .qi-input { width: 100%; box-sizing: border-box; }
/* 管理后台 → 抓取设置 → 信息源与 Cookie（10-21：从抓取进度页搬过来的渠道列表） */
.qi-src-seg { display: inline-flex; padding: 2px; border-radius: 8px; background: var(--fill-2, rgba(120,120,128,.1)); }
.qi-src-seg button { height: 26px; padding: 0 10px; border: 0; border-radius: 6px; background: transparent; font: inherit; font-size: 12px;
  color: var(--label-2, rgba(60,60,67,.78)); cursor: pointer; white-space: nowrap; }
.qi-src-seg button.on { background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.12); }
.qi-src-list { display: grid; gap: 16px; }
.qi-src-gt { margin: 0 0 6px; font-size: 12px; font-weight: 600; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-src-group { border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: var(--radius, 8px); overflow: hidden; }
.qi-src-group > .qi-src-gt { margin: 0; padding: 7px 12px; background: var(--bg-secondary, #f5f5f7); border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); }
.qi-src-row { display: grid; grid-template-columns: 10px minmax(0, 1fr) auto; grid-template-areas: "dot main metric" ". acts acts"; gap: 6px 10px;
  padding: 10px 12px; border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); background: var(--bg-elevated, #fff); }
.qi-src-row:last-child { border-bottom: 0; }
.qi-src-row.off .qi-src-main { opacity: .55; }
.qi-src-dot { grid-area: dot; width: 8px; height: 8px; margin-top: 5px; border-radius: 50%; background: var(--fill-3, rgba(120,120,128,.35)); }
.qi-src-dot.green { background: var(--green-dot, #34c759); }
.qi-src-dot.red { background: var(--red-dot, #ff3b30); }
.qi-src-dot.blue { background: var(--accent, #007aff); }
.qi-src-main { grid-area: main; min-width: 0; display: grid; gap: 3px; }
.qi-src-name { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; font-size: 13.5px; }
.qi-src-name a { font-size: 12px; }
.qi-src-desc { font-size: 12px; overflow-wrap: anywhere; }
.qi-src-metric { grid-area: metric; text-align: right; font-size: 12px; white-space: nowrap; }
.qi-src-row > .qi-acts { grid-area: acts; justify-content: flex-end; }
.qi-src-row .why { color: var(--red, #d70015); font-size: 12px; overflow-wrap: anywhere; }
/* 抓取进度页：渠道列表搬去管理后台了，这里只留看板和录入统计 */
.page-narrow > .qi-cb-host ~ .run-card ~ :not(.qi-src-moved) { display: none !important; }
.qi-src-moved { margin: 4px 0 0; font-size: 12px; color: var(--label-3, rgba(60,60,67,.6)); }
.qi-src-moved a { color: var(--accent, #007aff); cursor: pointer; }
.qi-adm-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 18px; }
.qi-adm-card { background: var(--bg-elevated, #fff); border-radius: var(--radius-l, 12px); box-shadow: var(--shadow-s, 0 1px 2px rgba(0,0,0,.06)); }
.qi-adm-card > h3 { margin: 0; padding: 12px 16px 0; font-size: 14px; font-weight: 600; }
.qi-adm-card > .qi-adm-desc { padding: 4px 16px 0; font-size: 12.5px; color: var(--label-2, rgba(60,60,67,.78)); line-height: 1.55; }
.qi-adm-body { padding: 12px 16px 14px; display: flex; flex-direction: column; gap: 10px; }
.qi-kv2 { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; font-size: 13px; }
.qi-kv2 > dt { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-kv2 > dd { margin: 0; overflow-wrap: anywhere; }
.qi-form { display: grid; grid-template-columns: 180px minmax(0, 1fr); gap: 8px 14px; align-items: center; }
.qi-form > label { color: var(--label-2, rgba(60,60,67,.78)); font-size: 12.5px; }
.qi-form .qi-hint { grid-column: 2; margin-top: -4px; font-size: 11.5px; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-form .qi-input, .qi-form .qi-select { width: 100%; max-width: 420px; }
.qi-form .qi-input.short { max-width: 120px; }
.qi-acts { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.qi-acts .qi-grow { flex: 1; }
.qi-msg { font-size: 12.5px; color: var(--label-2, rgba(60,60,67,.78)); overflow-wrap: anywhere; }
.qi-msg.ok { color: var(--green, #28a745); }
.qi-msg.bad { color: var(--red, #e5352b); }
.qi-tbl { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.qi-tbl th { text-align: left; font-weight: 600; color: var(--label-3, rgba(60,60,67,.5)); font-size: 11.5px; padding: 6px 8px; border-bottom: .5px solid var(--separator, rgba(60,60,67,.12)); }
.qi-tbl td { padding: 7px 8px; border-bottom: .5px solid var(--separator, rgba(60,60,67,.12)); vertical-align: top; }
.qi-tbl tr:last-child td { border-bottom: 0; }
.qi-tbl .why { color: var(--red, #e5352b); font-size: 11.5px; overflow-wrap: anywhere; }
.qi-tbl-wrap { overflow-x: auto; }
.qi-logbox { box-sizing: border-box; width: 100%; height: 460px; margin: 0; padding: 10px 12px; overflow: auto; border-radius: 8px;
  background: var(--bg-secondary, #f5f5f7); font-family: var(--font-mono, Consolas, monospace); font-size: 11.5px; line-height: 1.5; white-space: pre; }
.qi-code { max-height: 420px; }
.qi-ta2 { box-sizing: border-box; width: 100%; min-height: 140px; padding: 8px 10px; border-radius: 8px; font: inherit; font-size: 12.5px;
  font-family: var(--font-mono, Consolas, monospace); border: .5px solid var(--separator-strong, rgba(60,60,67,.2)); background: var(--bg-content, #fff); color: inherit; resize: vertical; }
.qi-order { display: flex; flex-direction: column; gap: 6px; }
.qi-order-row { display: grid; grid-template-columns: 22px 1fr auto; gap: 8px; align-items: center; padding: 8px 10px; border-radius: 8px; background: var(--bg-secondary, #f5f5f7); }
.qi-order-row .n { font-weight: 600; color: var(--label-3, rgba(60,60,67,.5)); text-align: center; }
.qi-order-row.off { opacity: .6; }
.qi-sub2 { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 6px 12px; align-items: center; margin-top: 6px; }
.qi-sub2 > label { font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-switch { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; user-select: none; }
.qi-switch input { width: 15px; height: 15px; margin: 0; accent-color: var(--accent, #007aff); }
.qi-adm-modal { position: fixed; inset: 0; z-index: 95; background: var(--scrim, rgba(0,0,0,.25)); display: grid; place-items: center; }
.qi-adm-modal > div { width: min(640px, calc(100vw - 32px)); max-height: 80vh; overflow: auto; background: var(--bg-elevated, #fff);
  border-radius: var(--radius-l, 12px); box-shadow: var(--shadow-l, 0 24px 64px rgba(0,0,0,.18)); padding: 16px 18px; display: flex; flex-direction: column; gap: 10px; }
.qi-adm-modal h3 { margin: 0; font-size: 15px; }
/* 融资动态大表：拖动表头右边缘调整列宽（qi5） */
.dthead .dth:not(.sticky) { position: relative; }
/* 10-14：悬停 / 选中行的底色是半透明的，左边固定的星标和“项目名称”列跟着透明，横向滚动时后面列的字会透上来。
   固定列先铺不透明底色，再把悬停 / 选中色叠在上面；单元格里的字也不许溢出到别的格子。 */
.dtr:hover .dtd.sticky { background-color: var(--bg-content); background-image: linear-gradient(var(--bg-hover), var(--bg-hover)); }
.dtr.selected .dtd.sticky { background-color: var(--bg-content); background-image: linear-gradient(var(--accent-soft), var(--accent-soft)); }
.dtd { overflow: hidden; }
.dtd.sticky { z-index: 2; }
.qi-col-grip { position: absolute; top: 0; right: -4px; width: 8px; height: 100%; cursor: col-resize; z-index: 5; }
.qi-col-grip::after { content: ""; position: absolute; top: 8px; bottom: 8px; left: 3px; width: 2px; border-radius: 1px; background: transparent; }
.dth:hover .qi-col-grip::after { background: var(--separator, rgba(60,60,67,.29)); }
.qi-col-grip:hover::after, body.qi-col-resizing .qi-col-grip:hover::after { background: var(--accent, #007aff); }
body.qi-col-resizing, body.qi-col-resizing * { cursor: col-resize !important; user-select: none !important; }
.qi-crawl-btn.paused { color: var(--orange, #c96a00); }
.qi-bf-mini { margin-left: 2px; height: 20px; padding: 0 7px; border: none; border-radius: 5px; font: inherit; font-size: 11px; cursor: pointer;
  background: var(--fill-3, rgba(120,120,128,.18)); color: var(--label, #1d1d1f); }
.qi-bf-mini:hover { background: var(--fill-4, rgba(120,120,128,.26)); }
.qi-bf-mini:focus-visible { outline: 2px solid var(--accent, #007aff); outline-offset: 1px; }
/* 现在补录（10-13）：详情页头部的进度、右下角面板的日志、管理后台的进度 */
.qi-bf-inline { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 9px; border-radius: 7px; font-size: 12px;
  background: var(--fill-2, rgba(120,120,128,.1)); color: var(--label-2, rgba(60,60,67,.78)); white-space: nowrap; font-variant-numeric: tabular-nums; }
.qi-bf-bar { display: inline-block; width: 56px; height: 4px; border-radius: 2px; background: var(--fill-3, rgba(120,120,128,.18)); overflow: hidden; }
.qi-bf-bar > b { display: block; height: 100%; background: var(--accent, #007aff); transition: width .4s ease; }
.qi-bf-log { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 3px; font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-bf-log li { overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
.qi-bf-log li.bad { color: var(--red, #e5352b); }
.qi-bf-adm { display: grid; gap: 6px; margin-top: 8px; }
@media (prefers-reduced-motion: reduce) { .qi-bf-bar > b { transition: none; } }
/* 网页登录（服务器上的浏览器画面） */
.qi-rl { position: fixed; inset: 0; z-index: 96; background: var(--scrim, rgba(0,0,0,.25)); display: grid; place-items: center; }
.qi-rl > div { width: min(1320px, calc(100vw - 32px)); max-height: calc(100vh - 32px); overflow: auto; background: var(--bg-elevated, #fff);
  border-radius: var(--radius-l, 12px); box-shadow: var(--shadow-l, 0 24px 64px rgba(0,0,0,.18)); padding: 14px 18px; display: flex; flex-direction: column; gap: 8px; }
.qi-rl h3 { margin: 0; font-size: 15px; }
.qi-rl-head { display: flex; align-items: baseline; gap: 12px; min-width: 0; }
.qi-rl-url { font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.qi-rl-screen { display: block; align-self: center; max-width: 100%; max-height: 62vh; width: auto; height: auto; min-height: 120px;
  border: 1px solid var(--separator, rgba(60,60,67,.18)); border-radius: 6px; cursor: crosshair; background: var(--fill-2, rgba(120,120,128,.1)); }
.qi-rl-screen:focus-visible { outline: 2px solid var(--accent, #007aff); outline-offset: 2px; }
.qi-rl-screen { touch-action: none; user-select: none; -webkit-user-drag: none; }
.qi-rl-prog { display: flex; flex-direction: column; gap: 3px; font-size: 12.5px; }
.qi-rl-prog .qi-msg.warn { color: var(--orange, #c96a00); }
.qi-rl-type { display: flex; gap: 8px; }
.qi-rl-type .qi-input { flex: 1; min-width: 0; }
.qi-rl-foot { justify-content: flex-end; }
.qi-chip2 { display: inline-flex; align-items: center; height: 20px; padding: 0 7px; border-radius: 5px; font-size: 11px; font-weight: 500;
  background: var(--fill-2, rgba(120,120,128,.1)); color: var(--label-2, rgba(60,60,67,.78)); white-space: nowrap; }
.qi-chip2.ok { background: var(--green-soft, rgba(52,199,89,.14)); color: var(--green, #28a745); }
.qi-chip2.bad { background: var(--red-soft, rgba(255,59,48,.1)); color: var(--red, #e5352b); }
.qi-chip2.warn { background: var(--orange-soft, rgba(255,149,0,.13)); color: var(--orange, #c96a00); }
.qi-stats4 { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.qi-stats4 > div { background: var(--bg-secondary, #f5f5f7); border-radius: 8px; padding: 9px 11px; min-width: 0; }
.qi-stats4 .l { font-size: 11.5px; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-stats4 .v { margin-top: 2px; font-size: 14px; font-weight: 600; overflow-wrap: anywhere; }
.qi-adm-pointer { padding: 12px 16px; font-size: 13px; }
@media (max-width: 900px) { .qi-adm { flex-direction: column; align-items: stretch; gap: 14px; } .qi-adm-nav { position: static; width: 100%; gap: 8px; }
  .qi-adm-g1 { max-width: 420px; }
  .qi-adm-g2 { flex-direction: row; gap: 6px; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; padding-bottom: 2px; }
  .qi-adm-g2::-webkit-scrollbar { display: none; }
  .qi-adm-g2 button { height: 30px; padding: 0 12px; border-radius: 15px; background: var(--fill-2, rgba(120,120,128,.1)); }
  .qi-adm-g2 button.on { background: var(--accent, #007aff); color: #fff; }
  .qi-form, .qi-sub2 { grid-template-columns: 1fr; } .qi-form .qi-hint { grid-column: 1; } }
/* external access (cpolar) */
.qi-url { font-weight: 600; word-break: break-all; color: var(--accent, #007aff); }
/* full API keys in admin (10-14: shown in full at the user's request) */
.qi-key { font: 12px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; word-break: break-all; user-select: all; }
/* 密钥框（10-21）：圆角胶囊，默认隐藏；右边“眼睛”切换显示、“复制” */
.qi-secret { display: inline-flex; align-items: stretch; max-width: 100%; min-width: 0; box-sizing: border-box; min-height: 32px; vertical-align: middle;
  border: 1px solid var(--separator-strong, rgba(60,60,67,.29)); border-radius: 999px; background: var(--bg-elevated, #fff); overflow: hidden; }
.qi-secret-v { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; padding: 0 12px; font: 12.5px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  color: var(--label, #1d1d1f); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; user-select: all; }
.qi-secret-v.masked { letter-spacing: 1px; color: var(--label-2, rgba(60,60,67,.78)); user-select: none; }
.qi-secret-sep { flex: none; width: 1px; background: var(--separator-strong, rgba(60,60,67,.29)); }
.qi-secret-btn { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 36px; padding: 0; border: 0;
  border-left: 1px solid var(--separator-strong, rgba(60,60,67,.29)); background: transparent; color: var(--label-2, rgba(60,60,67,.78)); cursor: pointer; }
.qi-secret-sep + .qi-secret-btn { border-left: 0; }
.qi-secret-btn:hover { background: var(--bg-hover, rgba(0,0,0,.04)); color: var(--label, #1d1d1f); }
.qi-secret-btn:focus-visible { outline: none; box-shadow: inset var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-secret-btn.ok { color: var(--green, #28a745); }
.qi-secret.url .qi-secret-v { font-size: 12px; }
td .qi-secret { width: 100%; min-width: 170px; max-width: 320px; }
/* 输入框版：输入框本身去掉边框，放进胶囊里 */
.qi-secret-edit { width: 100%; max-width: 520px; }
.qi-secret-edit .qi-secret-in, .qi-secret-edit .qi-secret-in:focus { flex: 1 1 auto; min-width: 0; width: auto; height: auto; min-height: 30px; margin: 0; padding: 0 12px;
  border: 0 !important; border-radius: 0; background: transparent; box-shadow: none !important; outline: none; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.qi-secret-edit:focus-within { border-color: var(--accent, #007aff); box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.25)); }
.qi-secret-edit.area { border-radius: 12px; }
.qi-secret-edit.area .qi-secret-in { padding: 8px 12px; resize: vertical; }
.qi-secret-edit.area .qi-secret-btn { align-items: flex-start; padding-top: 8px; }
.qi-secret-masked { -webkit-text-security: disc; }
.qi-acts > .qi-secret-edit { flex: 1 1 260px; }
.qi-llm-key { margin-top: 2px; }
.qi-llm-field .qi-secret { max-width: 100%; }
.qi-tbl tr.qi-off td { opacity: .55; }
/* subscribed WeChat accounts (weixinzs, 10-14) */
.qi-mp-subs { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 6px 14px; font-size: 13px; }
.qi-mp-sub { display: flex; align-items: center; gap: 8px; min-width: 0; }
.qi-mp-sub .n { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qi-mp-list { display: flex; flex-direction: column; font-size: 13px; }
.qi-mp-row { display: grid; grid-template-columns: 92px minmax(70px, 130px) 1fr auto; gap: 10px; align-items: center; padding: 6px 0;
  border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); min-width: 0; }
.qi-mp-row:last-child { border-bottom: 0; }
.qi-mp-row .acct { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-mp-row .ttl { overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; color: inherit; text-decoration: none;
  overflow-wrap: anywhere; }
.qi-mp-row .ttl:hover { color: var(--accent, #007aff); text-decoration: underline; }
@media (max-width: 700px) { .qi-mp-row { grid-template-columns: 1fr auto; } .qi-mp-row .t, .qi-mp-row .acct { display: none; } }
.qi-mp-reader { max-height: 65vh; overflow: auto; font-size: 14px; line-height: 1.7; display: flex; flex-direction: column; gap: 6px; }
.qi-mp-reader p { margin: 0; }
.qi-mp-reader img { max-width: 100%; height: auto; border-radius: 6px; align-self: center; }
.qi-mp-reader details { font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-mp-reader pre { white-space: pre-wrap; font: inherit; margin: 6px 0 0; padding: 8px 10px; border-radius: 6px; background: var(--fill-2, rgba(120,120,128,.08)); }

/* ───── 三期合规看板（qi-board.js，所有人共用；颜色跟随网页的浅色 / 深色主题） ───── */
.qi-board-page { padding: 16px 24px 48px; }
.qi-board { --qb-blue: var(--accent, #2f5597); --qb-th: #4472c4; --qb-line: var(--separator, #e2e6ee); --qb-card: var(--bg-elevated, #fff);
  --qb-muted: var(--label-2, #6b7280); --qb-amber: var(--orange, #92400e); --qb-amber-bg: var(--orange-soft, #fff7ed);
  --qb-green: var(--green, #15803d); --qb-green-bg: var(--green-soft, #dcfce7); --qb-red: var(--red, #b91c1c); --qb-red-bg: var(--red-soft, #fee2e2);
  --qb-yellow: #a16207; --qb-yellow-bg: rgba(234, 179, 8, .16);
  color: var(--label, #1f2937); font-size: 13.5px; max-width: 1500px; }
.qi-board h1 { font-size: 19px; color: var(--qb-blue); margin: 0; font-weight: 700; }
.qi-board h2 { font-size: 14.5px; color: var(--qb-blue); margin: 0 0 10px; font-weight: 700; }
.qi-board h3 { margin: 0; }
.qi-board .sub { color: var(--qb-muted); font-size: 12px; margin-top: 4px; }
.qi-board header { display: flex; justify-content: space-between; align-items: flex-end; flex-wrap: wrap; gap: 14px; margin: 14px 0 16px; }
.qi-board .switchbox { background: var(--qb-amber-bg); border: 1.5px solid rgba(249, 115, 22, .45); border-radius: 10px; padding: 10px 16px; display: flex; align-items: center; gap: 12px; }
.qi-board .switchbox .lab { font-weight: 600; color: var(--qb-amber); font-size: 13px; line-height: 1.5; }
.qi-board .switch { position: relative; width: 56px; height: 28px; flex: none; cursor: pointer; }
/* 网页包对 checkbox 有全局样式（自己画的圆点），会盖过 opacity/宽高，开关上多出一个小白点：这里强制藏掉原生框（10-15） */
.qi-board .switch input { position: absolute !important; opacity: 0 !important; width: 1px !important; height: 1px !important; margin: 0 !important;
  padding: 0 !important; border: 0 !important; clip: rect(0 0 0 0) !important; -webkit-appearance: none !important; appearance: none !important;
  background: none !important; box-shadow: none !important; pointer-events: none; }
.qi-board .switch input::before, .qi-board .switch input::after { display: none !important; content: none !important; }
.qi-board .slider { position: absolute; inset: 0; background: #f97316; border-radius: 28px; transition: .25s; }
.qi-board .slider:before { content: ""; position: absolute; width: 22px; height: 22px; left: 3px; top: 3px; background: #fff; border-radius: 50%; transition: .25s; }
.qi-board .switch input:checked + .slider { background: #16a34a; }
.qi-board .switch input:checked + .slider:before { transform: translateX(28px); }
.qi-board .switch input:focus-visible + .slider { box-shadow: var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-board .swstate { font-weight: 700; font-size: 13px; min-width: 110px; }
.qi-board .swstate.amber { color: var(--qb-amber); } .qi-board .swstate.green { color: var(--qb-green); }
.qi-board .kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin-bottom: 16px; }
.qi-board .kpi { background: var(--qb-card); border: 1px solid var(--qb-line); border-radius: 10px; padding: 12px 16px; }
.qi-board .kpi .t { color: var(--qb-muted); font-size: 12px; }
.qi-board .kpi .v { font-size: 22px; font-weight: 700; margin-top: 4px; font-variant-numeric: tabular-nums; }
.qi-board .kpi .u { font-size: 12px; color: var(--qb-muted); font-weight: 400; }
.qi-board .kpi.hl { border-color: rgba(249, 115, 22, .45); background: var(--qb-amber-bg); }
.qi-board .scenario, .qi-board .blocks { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 18px; }
@media (max-width: 1100px) { .qi-board .scenario, .qi-board .blocks { grid-template-columns: 1fr; } }
.qi-board .scard, .qi-board .block, .qi-board .editor, .qi-board .params { background: var(--qb-card); border: 1px solid var(--qb-line); border-radius: 12px; padding: 14px 16px; }
.qi-board .editor, .qi-board .params { margin-bottom: 18px; }
.qi-board .scard.on { border-color: rgba(249, 115, 22, .45); } .qi-board .scard.off { border-color: rgba(34, 197, 94, .45); }
.qi-board .scard h3 { font-size: 13px; margin-bottom: 8px; }
.qi-board .scard.on h3 { color: var(--qb-amber); } .qi-board .scard.off h3 { color: var(--qb-green); }
.qi-board .scard .big { font-size: 20px; font-weight: 700; }
.qi-board .scard table { width: 100%; border-collapse: collapse; font-size: 12.5px; margin-top: 8px; }
.qi-board .scard td { padding: 4px 2px; border-bottom: 1px dashed var(--qb-line); }
.qi-board .scard td:last-child { text-align: right; font-weight: 600; }
.qi-board .block h2 .tag { font-size: 11px; font-weight: 400; color: var(--qb-muted); margin-left: 8px; }
.qi-board table.main { width: 100%; border-collapse: collapse; font-size: 13px; }
.qi-board table.main th { background: var(--qb-th); color: #fff; padding: 7px 8px; text-align: left; font-weight: 600; }
.qi-board table.main th:nth-child(n+2), .qi-board table.main td:nth-child(n+2) { text-align: right; }
.qi-board table.main td { padding: 7px 8px; border-bottom: 1px solid var(--qb-line); font-variant-numeric: tabular-nums; }
.qi-board .xjmark { color: #c2410c; }
.qi-board .bar { height: 6px; border-radius: 3px; background: var(--fill, #e8ecf4); margin-top: 5px; overflow: hidden; }
.qi-board .bar i { display: block; height: 100%; border-radius: 3px; }
.qi-board .st { display: inline-block; padding: 2px 9px; border-radius: 99px; font-size: 12px; font-weight: 600; }
.qi-board .st.ok { background: var(--qb-green-bg); color: var(--qb-green); }
.qi-board .st.near { background: var(--qb-yellow-bg); color: var(--qb-yellow); }
.qi-board .st.bad { background: var(--qb-red-bg); color: var(--qb-red); }
.qi-board .neg { color: var(--qb-red); } .qi-board .pos { color: var(--qb-green); }
.qi-board .editor .hint, .qi-board .histbox .hint { font-size: 12px; color: var(--qb-muted); margin-bottom: 10px; }
.qi-board .toolbar { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
.qi-board .qb-btn { border: 1px solid var(--qb-line); background: var(--qb-card); color: var(--label, #1f2937); border-radius: 8px; padding: 6px 14px; cursor: pointer; font: inherit; font-size: 13px; }
.qi-board .qb-btn:hover:not(:disabled) { border-color: var(--qb-th); color: var(--qb-blue); }
.qi-board .qb-btn.primary { background: var(--accent, #4472c4); color: #fff; border-color: var(--accent, #4472c4); }
.qi-board .qb-btn.primary:hover:not(:disabled) { color: #fff; background: var(--accent-hover, #2f5597); }
.qi-board .qb-btn.danger { color: var(--qb-red); }
.qi-board .qb-btn:disabled { opacity: .55; cursor: default; }
.qi-board .tblwrap, .qi-board .hist-wrap { overflow-x: auto; }
.qi-board table.edit { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.qi-board table.edit th { background: var(--fill-2, #eef2f9); padding: 6px; border-bottom: 2px solid var(--qb-th); font-size: 12px; font-weight: 600; }
.qi-board table.edit th.w110 { min-width: 110px; } .qi-board table.edit th.w90 { min-width: 90px; } .qi-board table.edit th.w150 { min-width: 150px; }
.qi-board table.edit td { padding: 3px 4px; border-bottom: 1px solid var(--qb-line); }
.qi-board table.edit td.idx { text-align: center; color: var(--qb-muted); }
.qi-board table.edit input[type=text], .qi-board table.edit input[type=number] { width: 100%; box-sizing: border-box; border: 1px solid transparent; background: transparent; color: inherit;
  padding: 4px; border-radius: 6px; font: inherit; font-size: 12.5px; }
.qi-board table.edit select { border: 1px solid transparent; background: transparent; color: inherit; font: inherit; font-size: 12.5px; padding: 4px; border-radius: 6px; cursor: pointer; }
.qi-board table.edit input:hover, .qi-board table.edit select:hover { border-color: var(--qb-line); background: var(--bg-hover, #fafbfd); }
.qi-board table.edit input:focus, .qi-board table.edit select:focus { outline: 2px solid rgba(59, 130, 246, .35); border-color: var(--qb-th); background: var(--qb-card); }
.qi-board table.edit td.num { width: 86px; } .qi-board table.edit td.yn { width: 64px; text-align: center; }
.qi-board .xjcol { background: rgba(249, 115, 22, .07); }
.qi-board tfoot td.b { font-weight: 700; } .qi-board tfoot td.r { text-align: right; } .qi-board tfoot td.xjnum { color: #c2410c; }
.qi-board tfoot td.fnote { font-size: 11px; color: var(--qb-muted); }
.qi-board .del { color: var(--qb-red); cursor: pointer; font-weight: 700; border: none; background: none; font-size: 15px; padding: 2px 6px; }
.qi-board .pgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 8px 18px; }
.qi-board .pitem { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: 13px; padding: 3px 0; }
.qi-board .pitem input { width: 96px; border: 1px solid var(--qb-line); border-radius: 6px; padding: 4px 8px; text-align: right; font: inherit; font-size: 13px; background: var(--qb-card); color: inherit; }
.qi-board details.note { margin-top: 4px; font-size: 12.5px; color: var(--qb-muted); }
.qi-board details.note summary { cursor: pointer; color: var(--qb-blue); font-size: 13px; }
.qi-board details.note p { margin: 6px 0; line-height: 1.7; }
.qi-board .foot { margin-top: 18px; font-size: 11.5px; color: var(--qb-muted); line-height: 1.7; }
.qi-board .histbox { border: 1px dashed var(--qb-line); border-radius: 10px; padding: 10px 12px; margin-bottom: 10px; }
.qi-board table.hist { border-collapse: collapse; font-size: 12.5px; min-width: 520px; }
.qi-board table.hist th { text-align: left; font-weight: 600; color: var(--qb-muted); padding: 4px 12px 6px 0; font-size: 12px; }
.qi-board table.hist td { padding: 4px 12px 4px 0; border-top: 1px solid var(--qb-line); }
/* 顶部保存栏：一直在页面顶上 */
.qi-board .qb-bar { position: sticky; top: 0; z-index: 5; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; padding: 10px 14px;
  border: 1px solid var(--qb-line); border-radius: 10px; background: var(--qb-card); box-shadow: var(--shadow-s, 0 1px 2px rgba(0,0,0,.06)); }
.qi-board .qb-bar.dirty { border-color: rgba(0, 122, 255, .45); background: color-mix(in srgb, var(--accent, #007aff) 7%, var(--qb-card)); }
.qi-board .qb-bar.warn { border-color: rgba(249, 115, 22, .6); }
.qi-board .qb-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.qi-board .qb-faint { color: var(--qb-muted); font-size: 12px; }
.qi-board .qb-acts { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-left: auto; }
.qi-board .qb-note { width: 220px; max-width: 100%; box-sizing: border-box; border: 1px solid var(--qb-line); border-radius: 8px; padding: 6px 10px; font: inherit; font-size: 13px; background: var(--qb-card); color: inherit; }
.qi-board .qb-alert { flex-basis: 100%; color: var(--qb-amber); font-weight: 600; font-size: 13px; }
.qi-board .qb-msg { flex-basis: 100%; font-size: 12.5px; color: var(--qb-muted); }
.qi-board .qb-msg.ok { color: var(--qb-green); } .qi-board .qb-msg.bad { color: var(--qb-red); }
@media (max-width: 700px) { .qi-board-page { padding: 12px 16px 40px; } .qi-board .qb-acts { margin-left: 0; } .qi-board .qb-note { width: 100%; } }
/* ───────── 管理后台 → 定时开关机（qi-admin.js，10-14） ───────── */
.qi-pw-ready { display: grid; gap: 10px; }
.qi-pw-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; font-size: 13px; }
.qi-pw-row > b { min-width: 150px; font-weight: 600; }
.qi-pw-row .qi-faint { flex-basis: 100%; }
.qi-pw-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.qi-pw-table th { text-align: left; font-weight: 600; font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); padding: 6px 8px; border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); }
.qi-pw-table td { padding: 8px; border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); vertical-align: top; font-variant-numeric: tabular-nums; }
.qi-pw-table td .qi-faint { display: block; margin-top: 2px; }
.qi-pw-wrap { overflow-x: auto; }
.qi-pw-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 14px; margin-top: 12px; }
.qi-pw-form label { display: grid; gap: 4px; font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-pw-form .qi-input { min-width: 190px; }
.qi-pw-count { font-size: 13px; font-weight: 600; color: var(--orange, #c96a00); }

/* 抓取进度页（原信息源页）原来的“上次抓取”卡片不显示（“运行记录”按钮搬到了抓取看板上，qi-crawlboard.js runsBtn；10-20 删了服务器日报看板） */
.qi-cb-host ~ .run-card { display: none; }

/* ───────── 管理后台 → 资料库（只读，10-14） ───────── */
.qi-lib-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; font-size: 13px; }
.qi-lib-crumbs .sep { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-lib-crumb { border: none; background: none; padding: 2px 4px; border-radius: 4px; color: var(--accent, #007aff); font: inherit; cursor: pointer; }
.qi-lib-crumb:hover { background: var(--accent-soft, rgba(0,122,255,.1)); }
.qi-lib-filter .qi-input { width: 280px; max-width: 100%; }
.qi-lib-list { display: grid; border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: var(--radius, 8px); overflow: hidden; }
.qi-lib-row { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto 92px; align-items: center; gap: 10px; padding: 8px 12px; border: none;
  border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); font: inherit;
  font-size: 13px; text-align: left; cursor: pointer; }
.qi-lib-row:last-child { border-bottom: none; }
.qi-lib-row:hover { background: var(--bg-hover, rgba(0,0,0,.04)); }
.qi-lib-row:focus-visible { outline: none; box-shadow: inset var(--focus-ring, 0 0 0 3px rgba(0,122,255,.35)); }
.qi-lib-row.folder .nm { font-weight: 600; }
.qi-lib-row .nm { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qi-lib-row .ct, .qi-lib-row .dt { font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); font-variant-numeric: tabular-nums; white-space: nowrap; text-align: right; }
.qi-lib-tag { margin-left: 8px; font-size: 11px; font-weight: 500; color: var(--label-2, rgba(60,60,67,.78)); background: var(--fill, rgba(120,120,128,.12));
  padding: 1px 6px; border-radius: 4px; }
.qi-lib-reader { display: grid; gap: 8px; }
.qi-lib-reader .qi-url { font-size: 12px; overflow-wrap: anywhere; }
.qi-lib-text { max-height: 60vh; overflow: auto; white-space: pre-wrap; font-size: 13.5px; line-height: 1.75; color: var(--label, #1d1d1f);
  background: var(--bg-secondary, #f5f5f7); border-radius: var(--radius, 8px); padding: 12px 14px; }
@media (max-width: 640px) { .qi-lib-row { grid-template-columns: 22px minmax(0, 1fr) auto; } .qi-lib-row .dt { display: none; } }

/* 关联文件弹框、信息源页各渠道录入数（10-15，qi-files.js） */
.qi-files-mask { position: fixed; inset: 0; z-index: 9000; background: rgba(0,0,0,.35); display: flex; align-items: center; justify-content: center; padding: 24px; }
.qi-files-box { background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); border-radius: 12px; width: min(860px, 100%); max-height: 86vh;
  display: flex; flex-direction: column; box-shadow: 0 12px 40px rgba(0,0,0,.25); }
.qi-files-head { display: flex; align-items: center; gap: 8px; padding: 12px 16px; border-bottom: 1px solid var(--separator, rgba(60,60,67,.18)); }
.qi-files-head h3 { margin: 0; font-size: 15px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qi-files-body { padding: 12px 16px 16px; overflow: auto; display: flex; flex-direction: column; gap: 10px; }
.qi-files-empty { padding: 24px 0; line-height: 1.7; }
.qi-files-list { display: flex; flex-direction: column; }
.qi-files-row { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; padding: 8px 0; border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); align-items: center; }
.qi-files-row .ttl { color: var(--accent, #007aff); text-decoration: none; overflow-wrap: anywhere; }
.qi-files-row .ttl:hover { text-decoration: underline; }
.qi-files-row .qi-faint { grid-column: 2; font-size: 12px; }
.qi-files-row .qi-chip2 { background: var(--fill-2, rgba(120,120,128,.12)); color: var(--label-2, rgba(60,60,67,.78)); }
.qi-files-text { white-space: pre-wrap; overflow-wrap: anywhere; font-family: inherit; font-size: 13.5px; line-height: 1.75; margin: 0;
  background: var(--bg-secondary, rgba(120,120,128,.06)); border-radius: 8px; padding: 12px 14px; }
.qi-files-rich { display: flex; flex-direction: column; gap: 8px; white-space: normal; }
.qi-files-rich .qi-files-para { white-space: pre-wrap; }
.qi-files-rich img { max-width: 100%; height: auto; border-radius: 6px; align-self: center; }
.qi-files-link { margin-left: 10px; color: var(--accent, #007aff); }
/* 设置页“邮件通知（管理员）”（qi-notify.js，10-15） */
.qi-ntf-sec .group { padding: 12px 16px 6px; }
.qi-ntf-intro { margin-bottom: 4px; }
.qi-ntf { display: grid; gap: 0; }
.qi-ntf-row { padding: 12px 0; border-top: 1px solid var(--separator, rgba(60,60,67,.12)); display: grid; gap: 6px; }
.qi-ntf-row:first-child { border-top: 0; }
.qi-ntf-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.qi-ntf-sw { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; }
.qi-ntf-sw input { width: 16px; height: 16px; margin: 0; accent-color: var(--accent, #007aff); }
.qi-ntf-name { font-weight: 600; font-size: 14px; color: var(--label, #1d1d1f); }
.qi-ntf-state { font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-ntf-row:not(.off) .qi-ntf-state { color: var(--green, #28a745); }
.qi-ntf-desc { font-size: 12.5px; color: var(--label-2, rgba(60,60,67,.78)); line-height: 1.55; }
.qi-ntf-edit { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.qi-ntf-input { flex: 1 1 260px; min-width: 0; height: 30px; padding: 0 10px; border-radius: 7px; border: 1px solid var(--separator-strong, rgba(60,60,67,.2));
  background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); font: inherit; font-size: 13px; }
.qi-ntf-row.off .qi-ntf-input { opacity: .6; }
.qi-ntf-msg { font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-ntf-msg.ok { color: var(--green, #28a745); } .qi-ntf-msg.bad { color: var(--red, #e5352b); }
.qi-ntf-warn { font-size: 12.5px; color: var(--orange, #c96a00); margin: 4px 0 8px; }
/* 融资动态大表（网页包 qi11，10-15）：长按表头拖动列、“显示列”菜单 */
.dthead .dth { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
.dthead .dth.qi-col-lift { opacity: .35; }
.dthead .dth.qi-drop-l { box-shadow: inset 3px 0 0 var(--accent, #007aff); }
.dthead .dth.qi-drop-r { box-shadow: inset -3px 0 0 var(--accent, #007aff); }
.qi-col-ghost { position: fixed; z-index: 10000; pointer-events: none; transform: translate(-50%, -150%); padding: 4px 10px; border-radius: 6px;
  background: var(--accent, #007aff); color: #fff; font-size: 12px; font-weight: 600; box-shadow: 0 4px 14px rgba(0,0,0,.22); white-space: nowrap; }
body.qi-col-dragging, body.qi-col-dragging * { cursor: grabbing !important; -webkit-user-select: none !important; user-select: none !important; }
.qi-colmenu-tip { padding: 6px 10px 4px; font-size: 11.5px; color: var(--label-3, rgba(60,60,67,.5)); }
/* 信息源页“各渠道录入”两张横向条形图（qi-files.js，10-15） */
.qi-recd { border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: var(--radius-l, 12px); background: var(--bg-elevated, #fff);
  box-shadow: var(--shadow-s, 0 1px 2px rgba(0,0,0,.06)); padding: 16px 18px 18px; margin-bottom: 22px; }
.qi-recd-head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 10px 16px; margin-bottom: 6px; }
.qi-recd-head h3 { margin: 0 0 2px; font-size: 16px; font-weight: 700; color: var(--label, #1d1d1f); }
.qi-recd-faint { font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); max-width: 560px; }
.qi-recd-seg { display: inline-flex; padding: 2px; border-radius: 8px; background: var(--fill-2, rgba(120,120,128,.12)); flex: none; }
.qi-recd-seg button { border: 0; background: transparent; color: var(--label-2, rgba(60,60,67,.78)); font: inherit; font-size: 12.5px;
  height: 26px; padding: 0 11px; border-radius: 6px; cursor: pointer; }
.qi-recd-seg button.on { background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.12); }
.qi-recd-chart { margin-top: 14px; }
.qi-recd-ct { display: flex; align-items: baseline; gap: 10px; margin-bottom: 6px; font-size: 14px; color: var(--label, #1d1d1f); }
.qi-recd-tot { font-size: 12px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-recd-rows { display: grid; gap: 3px; }
.qi-recd-row { display: grid; grid-template-columns: minmax(90px, 210px) minmax(0, 1fr) 40px; align-items: center; gap: 10px; font-size: 12px; min-height: 18px; }
.qi-recd-row .nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--label-2, rgba(60,60,67,.78)); text-align: right; }
.qi-recd-row .tr { height: 12px; border-radius: 3px; background: var(--fill-2, rgba(120,120,128,.08)); overflow: hidden; }
.qi-recd-row .tr i { display: block; height: 100%; border-radius: 3px; background: var(--accent, #007aff); min-width: 0; }
.qi-recd-row .n { font-variant-numeric: tabular-nums; color: var(--label, #1d1d1f); font-weight: 600; }
.qi-recd-row.zero .n, .qi-recd-row.zero .nm { color: var(--label-3, rgba(60,60,67,.45)); font-weight: 400; }
.qi-recd-row.off .nm { text-decoration: line-through; }
@media (max-width: 600px) { .qi-recd { padding: 14px 12px; } .qi-recd-row { grid-template-columns: 96px minmax(0, 1fr) 32px; gap: 6px; } }
@media (max-width: 640px) { .qi-files-mask { padding: 8px; } .qi-files-box { max-height: 94vh; } }

/* 已经结束的活动不再问“我参加吗”（10-15 网站检查时发现） */
.inspector:has(.when.past) .qi-plan, .inspector-body:has(.when.past) .qi-plan, aside:has(.when.past) .qi-plan { display: none; }

/* ───────── Skill 分享（10-16，qi-skills.js） ───────── */
.qi-skills-page { padding-top: 4px; }
.qi-sk { max-width: 1240px; margin: 0 auto; padding: 0 24px 48px; }
.qi-sk-tools { display: flex; align-items: center; gap: 10px; margin: 4px 0 14px; flex-wrap: wrap; }
.qi-sk-search { height: 32px; min-width: 0; width: 240px; max-width: 100%; padding: 0 12px; border-radius: 8px; border: 1px solid var(--separator, rgba(60,60,67,.18));
  background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); font: inherit; font-size: 13px; }
.qi-sk-note:empty { display: none; }
.qi-sk-note { margin-bottom: 12px; }
.qi-sk-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); gap: 14px; }
.qi-sk-empty { grid-column: 1 / -1; padding: 60px 0; text-align: center; color: var(--label-3, rgba(60,60,67,.5)); }
.qi-sk-card { display: flex; flex-direction: column; gap: 14px; padding: 16px 16px 14px; border-radius: 14px; cursor: pointer;
  background: var(--bg-elevated, #fff); border: 1px solid var(--separator, rgba(60,60,67,.12)); transition: box-shadow .15s, border-color .15s; min-width: 0; }
.qi-sk-card:hover { box-shadow: 0 4px 16px rgba(0,0,0,.08); border-color: var(--separator-2, rgba(60,60,67,.2)); }
.qi-sk-card:focus-visible { outline: 2px solid var(--accent, #007aff); outline-offset: 2px; }
.qi-sk-card-top { display: flex; align-items: flex-start; gap: 12px; min-width: 0; }
.qi-sk-card-main { flex: 1; min-width: 0; }
.qi-sk-name { font-size: 15px; font-weight: 600; color: var(--label, #1d1d1f); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qi-sk-sub { margin-top: 4px; font-size: 12.5px; line-height: 1.5; color: var(--label-2, rgba(60,60,67,.78)); overflow: hidden;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow-wrap: anywhere; }
.qi-sk-sub.busy { color: var(--accent, #007aff); }
.qi-sk-ava { flex: none; width: 44px; height: 44px; border-radius: 11px; display: grid; place-items: center; font-weight: 700; font-size: 19px;
  color: hsl(var(--h, 210) 60% 38%); background: hsl(var(--h, 210) 70% 93%); }
.qi-sk-ava.big { width: 64px; height: 64px; border-radius: 15px; font-size: 27px; }
.qi-sk-dl { flex: none; height: 28px; padding: 0 10px 0 8px; border-radius: 8px; display: inline-flex; align-items: center; gap: 4px; cursor: pointer;
  border: 1px solid var(--separator, rgba(60,60,67,.18)); background: transparent; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-sk-dl:hover { color: var(--accent, #007aff); border-color: var(--accent, #007aff); }
.qi-sk-meta { display: flex; gap: 10px; align-items: center; font-size: 11.5px; color: var(--label-3, rgba(60,60,67,.5)); flex-wrap: wrap; }
.qi-sk-badge { color: #fff; background: var(--orange, #ff9500); border-radius: 9px; padding: 0 7px; line-height: 17px; font-weight: 600; }
.qi-sk-mask { position: fixed; inset: 0; z-index: 9000; background: rgba(0,0,0,.35); display: flex; align-items: flex-start; justify-content: center;
  padding: 5vh 16px; overflow: auto; }
.qi-sk-box { position: relative; width: min(980px, 100%); background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); border-radius: 18px;
  box-shadow: 0 20px 60px rgba(0,0,0,.25); padding: 24px 26px 26px; display: flex; flex-direction: column; gap: 14px; }
.qi-sk-box.narrow { width: min(560px, 100%); }
.qi-sk-head { display: flex; align-items: center; gap: 10px; }
.qi-sk-head h3 { margin: 0; font-size: 17px; flex: 1; }
.qi-sk-x { border: 0; background: transparent; font-size: 24px; line-height: 1; color: var(--label-3, rgba(60,60,67,.5)); cursor: pointer; padding: 2px 6px; border-radius: 6px; }
.qi-sk-x:hover { background: var(--fill, rgba(120,120,128,.12)); color: var(--label, #1d1d1f); }
.qi-sk-dhead { display: flex; gap: 16px; align-items: flex-start; }
.qi-sk-dmain { flex: 1; min-width: 0; }
.qi-sk-dname { margin: 2px 0 10px; font-size: 21px; font-weight: 700; overflow-wrap: anywhere; }
.qi-sk-dacts { display: flex; gap: 8px; flex-wrap: wrap; }
.qi-sk-desc { display: flex; flex-direction: column; gap: 8px; }
.qi-sk-one { margin: 0; font-size: 14.5px; line-height: 1.7; }
.qi-sk-more { font-size: 13.5px; line-height: 1.75; color: var(--label-2, rgba(60,60,67,.85)); }
.qi-sk-intro { margin-top: 10px; padding: 10px 12px; border-radius: 10px; background: var(--fill-2, rgba(120,120,128,.06)); }
.qi-sk-intro p { margin: 4px 0 0; white-space: pre-wrap; }
.qi-sk-tog { align-self: flex-start; border: 0; background: transparent; color: var(--label-3, rgba(60,60,67,.6)); cursor: pointer; font: inherit; font-size: 12.5px; padding: 0; }
.qi-sk-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--separator, rgba(60,60,67,.12));
  border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); padding: 14px 0; text-align: center; }
.qi-sk-stat .v { font-size: 15px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 6px; }
.qi-sk-stat .l { font-size: 12px; color: var(--label-3, rgba(60,60,67,.5)); margin-top: 2px; }
.qi-sk-editors { margin-top: -6px; }
.qi-sk-reqs h4, .qi-sk-vbar h4 { margin: 0; font-size: 14px; }
.qi-sk-reqs { display: flex; flex-direction: column; gap: 8px; }
.qi-sk-req { padding: 10px 12px; border-radius: 10px; border: 1px solid var(--separator, rgba(60,60,67,.12)); font-size: 13px; display: flex; flex-direction: column; gap: 4px; }
.qi-sk-req.pending { border-color: var(--orange, #ff9500); }
.qi-sk-reqmsg { white-space: pre-wrap; overflow-wrap: anywhere; }
.qi-sk-reqacts { display: flex; gap: 8px; align-items: center; margin-top: 4px; }
.qi-sk-reqacts .qi-sk-in { flex: 1; height: 28px; }
.qi-sk-viewer { border: 1px solid var(--separator, rgba(60,60,67,.14)); border-radius: 12px; overflow: hidden; }
.qi-sk-vbar { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); flex-wrap: wrap; }
.qi-sk-ver { height: 28px; border-radius: 7px; border: 1px solid var(--separator, rgba(60,60,67,.18)); background: var(--bg-elevated, #fff);
  color: var(--label, #1d1d1f); font: inherit; font-size: 12.5px; max-width: 320px; }
.qi-sk-vmain { display: grid; grid-template-columns: 220px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); height: min(72vh, 780px); min-height: 360px; }
.qi-sk-files { border-right: 1px solid var(--separator, rgba(60,60,67,.12)); overflow: auto; padding: 6px 0; }
.qi-sk-file { display: block; width: 100%; text-align: left; border: 0; background: transparent; color: var(--label, #1d1d1f); font: inherit;
  font-size: 13px; padding: 6px 10px; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qi-sk-file:hover { background: var(--fill-2, rgba(120,120,128,.08)); }
.qi-sk-file.on { background: var(--fill, rgba(120,120,128,.14)); font-weight: 600; }
.qi-sk-fpane { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.qi-sk-fbar { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--separator, rgba(60,60,67,.08)); }
.qi-sk-path { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; color: var(--label-2, rgba(60,60,67,.78));
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qi-sk-modes { display: inline-flex; padding: 2px; border-radius: 7px; background: var(--fill-2, rgba(120,120,128,.12)); }
.qi-sk-mode { border: 0; background: transparent; font: inherit; font-size: 12px; padding: 2px 9px; border-radius: 5px; cursor: pointer; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-sk-mode.on { background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); box-shadow: 0 1px 2px rgba(0,0,0,.12); }
.qi-sk-fbody { overflow: auto; padding: 16px 22px 22px; flex: 1; min-height: 0; }
.qi-sk-code { margin: 0; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }
.qi-sk-md { font-size: 14px; line-height: 1.75; overflow-wrap: anywhere; }
.qi-sk-md h2 { font-size: 19px; margin: 18px 0 8px; } .qi-sk-md h3 { font-size: 16px; margin: 16px 0 6px; }
.qi-sk-md h4, .qi-sk-md h5, .qi-sk-md h6 { font-size: 14px; margin: 14px 0 4px; }
.qi-sk-md > :first-child { margin-top: 0; }
.qi-sk-md p { margin: 6px 0; } .qi-sk-md ul, .qi-sk-md ol { margin: 6px 0; padding-left: 22px; } .qi-sk-md li.sub { margin-left: 18px; }
.qi-sk-md code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: .9em; background: var(--fill-2, rgba(120,120,128,.1)); border-radius: 4px; padding: 0 4px; }
.qi-sk-md blockquote { margin: 8px 0; padding: 2px 12px; border-left: 3px solid var(--separator, rgba(60,60,67,.2)); color: var(--label-2, rgba(60,60,67,.78)); }
.qi-sk-md hr { border: 0; border-top: 1px solid var(--separator, rgba(60,60,67,.14)); margin: 14px 0; }
.qi-sk-md a { color: var(--accent, #007aff); }
.qi-sk-pre { margin: 8px 0; padding: 10px 12px; border-radius: 8px; background: var(--fill-2, rgba(120,120,128,.08)); overflow: auto; }
.qi-sk-pre code { background: none; padding: 0; white-space: pre; }
.qi-sk-tblwrap { overflow-x: auto; margin: 8px 0; }
.qi-sk-tbl { border-collapse: collapse; font-size: 13px; }
.qi-sk-tbl th, .qi-sk-tbl td { border: 1px solid var(--separator, rgba(60,60,67,.14)); padding: 4px 8px; text-align: left; vertical-align: top; }
.qi-sk-fm { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 4px 12px; margin: 0 0 14px; padding: 10px 12px; border-radius: 8px;
  background: var(--fill-2, rgba(120,120,128,.06)); font-size: 12.5px; }
.qi-sk-fm dt { color: var(--label-3, rgba(60,60,67,.6)); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.qi-sk-fm dd { margin: 0; }
.qi-sk-lbl { display: flex; flex-direction: column; gap: 6px; font-size: 13px; font-weight: 500; }
.qi-sk-lbl .qi-faint { font-weight: 400; font-size: 12px; }
.qi-sk-lblrow { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.qi-sk-lbl .req { color: var(--red, #e5352b); font-weight: 600; }
.qi-sk-in { box-sizing: border-box; width: 100%; padding: 7px 10px; border-radius: 8px; border: 1px solid var(--separator, rgba(60,60,67,.2));
  background: var(--bg-content, #fff); color: var(--label, #1d1d1f); font: inherit; font-size: 13.5px; font-weight: 400; }
textarea.qi-sk-in { resize: vertical; line-height: 1.6; }
.qi-sk-pick { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; border-radius: 10px; border: 1px dashed var(--separator, rgba(60,60,67,.3)); font-weight: 400; }
.qi-sk-pick-btns { display: flex; gap: 8px; }
.qi-sk-pick[hidden] { display: none; }
.qi-sk-src { display: flex; flex-direction: column; gap: 8px; font-weight: 400; }
.qi-sk-src > .qi-sk-modes { align-self: flex-start; }
.qi-sk-acts { display: flex; justify-content: flex-end; gap: 8px; margin-top: 4px; }
@media (max-width: 720px) {
  .qi-sk { padding: 0 16px 40px; } .qi-sk-box { padding: 18px 16px; } .qi-sk-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 12px; }
  .qi-sk-vmain { grid-template-columns: 1fr; grid-template-rows: auto auto; height: auto; } .qi-sk-files { border-right: 0; border-bottom: 1px solid var(--separator, rgba(60,60,67,.12)); max-height: 180px; }
  .qi-sk-fbody { max-height: 60vh; } .qi-sk-dhead .qi-sk-ava.big { width: 48px; height: 48px; font-size: 21px; }
}

/* ───────── 融资动态大表：表头里的筛选（10-16，网页包 qi12）、导出 Excel ───────── */
.qi-hf-wrap { display: inline-flex; align-items: center; margin-left: 2px; }
.qi-hf { display: inline-grid; place-items: center; width: 20px; height: 20px; border: 0; border-radius: 5px; padding: 0; background: transparent;
  color: var(--label-3, rgba(60,60,67,.45)); cursor: pointer; flex: none; }
.qi-hf:hover { background: var(--fill, rgba(120,120,128,.14)); color: var(--label, #1d1d1f); }
.qi-hf.on { color: var(--accent, #007aff); background: color-mix(in srgb, var(--accent, #007aff) 14%, transparent); }
.dth .qi-hf-wrap + .qi-col-grip, .dth .qi-hf-wrap { position: relative; }
.qi-xlsx-btn { gap: 4px; }
/* 默认视图（10-21，网页包 qi13）：按抓取批次分组，批次之间一条分割线，线上写是哪次抓取 */
.dtr.qi-batch-first::before { content: ""; position: absolute; left: 0; right: 0; top: -1px; height: 2px; z-index: 3; pointer-events: none;
  background: var(--accent, #007aff); }
.dtd.project { position: sticky; }
.qi-batch-tag { position: absolute; left: 8px; top: 0; transform: translateY(-50%); z-index: 4; height: 18px; padding: 0 8px; border-radius: 9px;
  font-size: 11px; font-weight: 600; line-height: 18px; white-space: nowrap; pointer-events: none; color: #fff; background: var(--accent, #007aff);
  box-shadow: 0 0 0 2px var(--bg-content, #fff); }
.qi-batch-tag.top { top: 2px; transform: none; height: 16px; line-height: 16px; font-size: 10.5px; }
.dtd.project:has(> .qi-batch-tag) { overflow: visible; }
.dtd.project:has(> .qi-batch-tag.top) > .ellipsis { margin-top: 16px; }
.qi-defview.active { opacity: .55; cursor: default; }
/* ───────── 抓取看板（10-19，信息源页顶部，qi-crawlboard.js） ───────── */
.qi-cb-host { margin: 0 0 18px; }
.qi-cb { background: var(--bg-elevated, #fff); border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: 16px; padding: 18px 20px 20px;
  color: var(--label, #1d1d1f); display: flex; flex-direction: column; gap: 16px; }
.qi-cb.live { border-color: var(--accent, #007aff); box-shadow: 0 0 0 3px rgba(0,122,255,.08); }
.qi-cb-head { display: flex; gap: 12px; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; }
.qi-cb-head h2 { margin: 2px 0 4px; font-size: 20px; display: flex; align-items: center; gap: 10px; }
.qi-cb-eyebrow { font-size: 12px; color: var(--label-3, rgba(60,60,67,.55)); letter-spacing: .02em; }
.qi-cb-status { font-size: 12px; font-weight: 600; padding: 1px 9px; border-radius: 10px; background: var(--fill, rgba(120,120,128,.14)); color: var(--label-2, rgba(60,60,67,.8)); }
.qi-cb-status.running { background: rgba(0,122,255,.12); color: var(--accent, #007aff); }
.qi-cb-status.success { background: rgba(52,199,89,.14); color: #1f8f3d; }
.qi-cb-status.partial, .qi-cb-status.paused { background: rgba(255,149,0,.14); color: #b26a00; }
.qi-cb-status.failed { background: rgba(255,59,48,.12); color: #d70015; }
.qi-cb-faint { font-size: 12.5px; color: var(--label-3, rgba(60,60,67,.6)); line-height: 1.6; }
.qi-cb-bad { font-size: 12.5px; color: var(--red, #d70015); }
.qi-cb-note { font-size: 13px; padding: 8px 12px; border-radius: 10px; background: rgba(255,149,0,.1); }
.qi-cb-acts { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.qi-cb-bar { height: 6px; border-radius: 3px; background: var(--fill, rgba(120,120,128,.14)); overflow: hidden; }
.qi-cb-bar.big { height: 8px; margin-top: -6px; }
.qi-cb-bar > i { display: block; height: 100%; background: var(--accent, #007aff); border-radius: inherit; transition: width .4s; }
.qi-cb-sec { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.qi-cb-sec > h3 { margin: 0; font-size: 15px; }
.qi-cb-nums { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.qi-cb-grp { border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: 12px; padding: 8px 10px 10px; min-width: 0; }
.qi-cb-grp > .g { font-size: 12px; font-weight: 600; color: var(--label-2, rgba(60,60,67,.8)); margin-bottom: 6px; }
.qi-cb-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.qi-cb-tiles.three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.qi-cb-tile { padding: 8px 10px; border-radius: 10px; background: var(--fill-2, rgba(120,120,128,.07)); min-width: 0; }
.qi-cb-tile .l { font-size: 12px; color: var(--label-3, rgba(60,60,67,.6)); }
.qi-cb-tile .v { font-size: 18px; font-weight: 700; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-variant-numeric: tabular-nums; }
.qi-cb-tile .s { font-size: 11.5px; color: var(--label-3, rgba(60,60,67,.55)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.qi-cb-tile.good .v { color: #1f8f3d; }
.qi-cb-steps { list-style: none; margin: 0; padding: 0; border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: 12px; overflow: hidden; }
.qi-cb-step + .qi-cb-step { border-top: 1px solid var(--separator, rgba(60,60,67,.1)); }
.qi-cb-step-head { display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 12px; border: 0; background: transparent; color: inherit;
  font: inherit; font-size: 13.5px; text-align: left; min-width: 0; }
button.qi-cb-step-head { cursor: pointer; }
button.qi-cb-step-head:hover { background: var(--fill-2, rgba(120,120,128,.06)); }
.qi-cb-step-head .n { font-weight: 600; white-space: nowrap; }
.qi-cb-step-head .d { flex: 1; min-width: 0; font-size: 12.5px; color: var(--label-3, rgba(60,60,67,.6)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.qi-cb-step-head .c { font-size: 12px; color: var(--label-2, rgba(60,60,67,.75)); font-variant-numeric: tabular-nums; white-space: nowrap; }
.qi-cb-step-head .chev { color: var(--label-3, rgba(60,60,67,.5)); width: 12px; }
.qi-cb-ico { flex: none; width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; font-weight: 700;
  border: 1.5px solid var(--separator-2, rgba(60,60,67,.25)); color: transparent; box-sizing: border-box; }
.qi-cb-ico.done { background: #34c759; border-color: #34c759; color: #fff; }
.qi-cb-ico.failed { background: #ff3b30; border-color: #ff3b30; color: #fff; }
.qi-cb-ico.skipped { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-cb-ico.paused { border-color: #ff9500; color: #ff9500; font-size: 9px; }
.qi-cb-ico.running { border-color: var(--accent, #007aff); border-right-color: transparent; animation: qi-cb-spin 1s linear infinite; }
@keyframes qi-cb-spin { to { transform: rotate(360deg); } }
.qi-cb-step-body { padding: 0 12px 10px 42px; display: flex; flex-direction: column; gap: 6px; }
.qi-cb-items { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.qi-cb-items.many { max-height: 360px; overflow: auto; }
.qi-cb-item { display: flex; align-items: flex-start; gap: 8px; width: 100%; padding: 4px 6px; border: 0; background: transparent; color: inherit;
  font: inherit; font-size: 13px; text-align: left; border-radius: 6px; min-width: 0; }
button.qi-cb-item { cursor: pointer; }
button.qi-cb-item:hover { background: var(--fill-2, rgba(120,120,128,.07)); }
.qi-cb-item .t { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.qi-cb-item .d { display: block; font-size: 12px; color: var(--label-3, rgba(60,60,67,.6)); }
.qi-cb-item .c { font-size: 12px; color: var(--label-2, rgba(60,60,67,.7)); white-space: nowrap; font-variant-numeric: tabular-nums; }
.qi-cb-item.done .t { color: #1f8f3d; }
.qi-cb-item.failed .t { color: #d70015; }
.qi-cb-item.skipped .t { color: var(--label-3, rgba(60,60,67,.55)); }
.qi-cb-dot { flex: none; width: 9px; height: 9px; margin-top: 5px; border-radius: 50%; border: 1.5px solid var(--separator-2, rgba(60,60,67,.3)); box-sizing: border-box; }
.qi-cb-dot.done { background: #34c759; border-color: #34c759; }
.qi-cb-dot.failed { background: #ff3b30; border-color: #ff3b30; }
.qi-cb-dot.running { background: var(--accent, #007aff); border-color: var(--accent, #007aff); animation: qi-cb-pulse 1.2s ease-in-out infinite; }
.qi-cb-dot.paused { background: #ff9500; border-color: #ff9500; }
.qi-cb-dot.skipped { background: var(--fill, rgba(120,120,128,.25)); border-color: transparent; }
@keyframes qi-cb-pulse { 50% { opacity: .35; } }
.qi-cb-tag { font-size: 11px; margin-left: 6px; padding: 0 6px; border-radius: 6px; background: rgba(175,82,222,.12); color: #8944ab; }
.qi-cb-itembody { padding: 2px 6px 8px 23px; display: flex; flex-direction: column; gap: 4px; }
.qi-cb-log { list-style: none; margin: 0; padding: 6px 8px; max-height: 240px; overflow: auto; border-radius: 8px; background: var(--fill-2, rgba(120,120,128,.06));
  font-size: 12px; line-height: 1.55; }
.qi-cb-log.short { max-height: 140px; }
.qi-cb-log li { overflow-wrap: anywhere; }
.qi-cb-log li.bad { color: #d70015; }
.qi-cb-log time { color: var(--label-3, rgba(60,60,67,.55)); margin-right: 8px; font-variant-numeric: tabular-nums; }
.qi-cb-more { align-self: flex-start; border: 0; background: transparent; color: var(--accent, #007aff); font: inherit; font-size: 12.5px; padding: 2px 0; cursor: pointer; }
.qi-cb-candwrap { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.qi-cb-cand { border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: 12px; padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.qi-cb-candhead { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; font-size: 13.5px; }
.qi-cb-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.qi-cb-chip { border: 1px solid var(--separator, rgba(60,60,67,.18)); background: transparent; color: var(--label-2, rgba(60,60,67,.8)); font: inherit;
  font-size: 12px; padding: 1px 10px; border-radius: 12px; cursor: pointer; }
.qi-cb-chip.on { background: var(--accent, #007aff); border-color: var(--accent, #007aff); color: #fff; }
.qi-cb-cands { list-style: none; margin: 0; padding: 0; max-height: 420px; overflow: auto; display: flex; flex-direction: column; }
.qi-cb-cands li { display: flex; flex-wrap: wrap; gap: 2px 8px; align-items: baseline; padding: 6px 2px; border-top: 1px solid var(--separator, rgba(60,60,67,.08)); font-size: 13px; min-width: 0; }
.qi-cb-cands li:first-child { border-top: 0; }
.qi-cb-cands li.empty { color: var(--label-3, rgba(60,60,67,.55)); }
.qi-cb-cands .nm { flex: 0 1 auto; font-weight: 500; overflow-wrap: anywhere; min-width: 5em; }
.qi-cb-cands .why { flex: 1 0 100%; min-width: 0; font-size: 12px; line-height: 1.5; color: var(--label-3, rgba(60,60,67,.6)); overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.qi-cb-cands li.out .why { color: #b4532a; }
.qi-cb-badge { margin-left: auto; flex: none; font-size: 11.5px; padding: 0 8px; border-radius: 9px; white-space: nowrap; }
.qi-cb-badge.in { background: rgba(52,199,89,.14); color: #1f8f3d; }
.qi-cb-srcsum { display: flex; gap: 16px; font-size: 13px; }
.qi-cb-srcsum i, .qi-cb-srcs i, .qi-cb-okchip i { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; vertical-align: 1px; }
.qi-cb-srcsum .ok i, .qi-cb-okchip i { background: #34c759; }
.qi-cb-srcsum .bad i, .qi-cb-srcs .bad i { background: #ff3b30; }
.qi-cb-srcsum .wait i, .qi-cb-srcs .wait i { background: var(--label-3, rgba(60,60,67,.4)); }
.qi-cb-srcs { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.qi-cb-srcs li { display: flex; gap: 8px; align-items: baseline; font-size: 13px; min-width: 0; }
.qi-cb-srcs .nm { white-space: nowrap; }
.qi-cb-srcs .why { font-size: 12px; color: var(--label-3, rgba(60,60,67,.6)); overflow-wrap: anywhere; min-width: 0; }
.qi-cb-okchips { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.qi-cb-okchip { font-size: 12px; padding: 2px 9px; border-radius: 10px; background: var(--fill-2, rgba(120,120,128,.08)); white-space: nowrap; }
.qi-cb-okchip small { color: var(--label-3, rgba(60,60,67,.55)); }
.qi-cb-md { font-size: 13.5px; line-height: 1.75; padding: 10px 14px; border-radius: 10px; background: var(--fill-2, rgba(120,120,128,.05)); overflow-wrap: anywhere; }
.qi-cb-md .hd { font-weight: 600; margin: 10px 0 4px; } .qi-cb-md .h1, .qi-cb-md .h2 { font-size: 15px; }
.qi-cb-md p { margin: 4px 0; } .qi-cb-md ul { margin: 4px 0 6px; padding-left: 20px; }
.qi-cb-bf { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--separator, rgba(60,60,67,.12)); font-size: 13px; }
@media (max-width: 720px) {
  .qi-cb { padding: 14px; } .qi-cb-nums, .qi-cb-candwrap { grid-template-columns: 1fr; }
  .qi-cb-step-head .d { display: none; } .qi-cb-step-body { padding-left: 12px; }
}

/* ───────── 手机竖屏（10-20，qi-shell.js）：网页包本身只有桌面布局（#root 最小 1024px），这里在窄屏上改成单列 ─────────
   左侧菜单收成抽屉（左上角“菜单”按钮），各页头部、筛选条、详情侧栏、弹窗按屏宽排。 */
.qi-m-burger, .qi-m-scrim, .qi-m-ailist { display: none; }
@media (max-width: 760px) {
  .platform-web #root { min-width: 0; }
  html, body { overflow-x: hidden; }
  .app { grid-template-columns: minmax(0, 1fr) !important; width: 100vw; height: 100dvh; }
  .app > .sidebar { position: fixed; top: 0; left: 0; bottom: 0; z-index: 92; width: min(280px, 84vw); transform: translateX(-104%);
    transition: transform .22s cubic-bezier(.2,.9,.25,1); box-shadow: 0 0 40px rgba(0,0,0,.18); padding-bottom: env(safe-area-inset-bottom);
    background: var(--bg-secondary, #f5f5f7); }  /* 网页包的侧栏底色是半透明的，抽屉要实心 */
  html.qi-nav-open .app > .sidebar { transform: none; }
  .app > .sidebar .nav-item { height: 40px; font-size: 15px; }
  .qi-m-scrim { position: fixed; inset: 0; z-index: 91; background: rgba(0,0,0,.32); }
  html.qi-nav-open .qi-m-scrim { display: block; }
  .qi-m-burger { display: grid; place-items: center; position: fixed; top: calc(8px + env(safe-area-inset-top)); left: 8px; z-index: 90; width: 36px; height: 36px;
    border: 0; border-radius: 10px; background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); box-shadow: 0 1px 4px rgba(0,0,0,.14); cursor: pointer; }
  .qi-m-burger svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
  html.qi-nav-open .qi-m-burger, body:has(.inspector) .qi-m-burger, body:has(.qi-adm-modal) .qi-m-burger { visibility: hidden; }  /* 详情侧栏自己有关闭按钮 */

  /* 页头：标题一行、搜索框占满第二行，左边让出“菜单”按钮 */
  .toolbar, .platform-win32 .toolbar { height: auto; min-height: 52px; flex-wrap: wrap; row-gap: 8px; padding: 8px 12px 8px 54px; }
  .toolbar > .col { min-width: 0; flex: 1 1 auto; }
  .toolbar-title { font-size: 16px; overflow: hidden; text-overflow: ellipsis; }
  .toolbar-subtitle { overflow: hidden; text-overflow: ellipsis; }
  .toolbar-spacer { display: none; }
  .toolbar .search-field { order: 10; flex: 1 1 100%; width: auto; margin-left: -42px; }
  .toolbar .search-field input { height: 34px; font-size: 16px; }  /* 16px 以下 iOS 会自动放大页面 */
  .chat-head, .platform-win32 .chat-head { padding-left: 54px; padding-right: 12px; }
  .filter-bar { padding: 8px 12px; scrollbar-width: none; }
  .filter-bar::-webkit-scrollbar { display: none; }
  .filter-bar > * { flex: none; }
  .filter-bar .grow { display: none; }
  .filter-bar .qi-fundonly { order: -1; }  /* 横着滑的筛选栏里放第一个，不用滑就看得到 */
  .page { padding: 14px 12px 40px; }
  /* 融资动态大表：“项目名称”列只留 4 个字宽（宽度在网页包 qi15 的 qiMobFit 里换），左右边距收窄 */
  .dthead .dth:nth-child(2), .dtd.project { padding-left: 8px; padding-right: 8px; }

  /* 详情侧栏占满屏幕 */
  .inspector { width: 100%; box-shadow: none; }
  .inspector-head { padding: 0 8px 0 12px; gap: 4px; }
  .inspector-body { padding: 16px 14px 48px; }
  /* 头部按钮多（关联文件、让 AI 深入研究、收藏、收藏夹、现在补录）：一行横着滑，关闭按钮固定在最左 */
  .inspector-head { overflow-x: auto; scrollbar-width: none; }
  .inspector-head::-webkit-scrollbar { display: none; }
  .inspector-head > * { flex: none; }
  .inspector-head > .grow { flex: 1 0 0; }
  .inspector-head > .icon-btn:first-child { position: sticky; left: 0; z-index: 1; background: var(--bg-content); box-shadow: 6px 0 6px var(--bg-content); }
  /* 标签：一行放不下就换行，特别长的（投资方说明）在标签里面折行 */
  .inspector .row:has(> .tag) { flex-wrap: wrap; row-gap: 6px; }
  .inspector .tag { flex: none; max-width: 100%; white-space: normal; height: auto; min-height: 20px; line-height: 1.45; padding-top: 2px; padding-bottom: 2px; }
  .co-name { font-size: 19px; }
  .co-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 12px; }
  .co-facts > div:nth-child(odd) { border-left: 0 !important; }

  /* 弹窗 */
  .sheet { width: calc(100vw - 24px); top: 5%; max-height: 88dvh; }
  .sheet-header { padding: 16px 16px 4px; } .sheet-body { padding: 12px 16px; } .sheet-footer { padding: 8px 16px 16px; flex-wrap: wrap; }
  .qi-adm-modal > div, .qi-rl > div { width: calc(100vw - 20px); max-height: 90dvh; padding: 14px; }
  .qi-files-mask { padding: 10px; }

  /* 输入框不小于 16px，免得 iOS 点进去自动放大 */
  input[type="text"], input[type="search"], input[type="email"], input[type="password"], input[type="number"], input:not([type]), textarea, select { font-size: 16px; }

  /* 管理后台 */
  .qi-admin-page { padding-top: 10px; }
  .qi-adm-body { padding: 10px 12px 12px; }
  .qi-adm-card > h3 { padding: 12px 12px 0; } .qi-adm-card > .qi-adm-desc { padding: 4px 12px 0; }
  .qi-tbl { display: block; overflow-x: auto; white-space: nowrap; }
  .qi-tbl td { white-space: normal; min-width: 72px; }
  .qi-logbox { height: 60vh; }
  .qi-kv2 { grid-template-columns: 1fr; gap: 2px; } .qi-kv2 > dd { margin-bottom: 6px; }
  .qi-chip2 { white-space: normal; height: auto; min-height: 20px; max-width: 100%; line-height: 1.45; }
  .settings-label { width: 72px; }

  /* 抓取进度页的渠道列表：名字占一整行，数字和按钮放第二行 */
  .source-row { flex-wrap: wrap; row-gap: 6px; }
  .source-row > .col.grow { flex: 1 1 calc(100% - 24px); }
  .source-row > .src-metrics { flex-direction: row; align-items: baseline; gap: 8px; margin: 0 auto 0 16px; min-width: 0; }

  /* 近期活动时间轴：日期列、竖线变窄；卡片里的星标和“前往”挪到正文下面 */
  .timeline { padding: 6px 10px 80px 6px; }
  .tl-date { width: 40px; }
  .tl-day { font-size: 19px; }
  .tl-rail { width: 18px; }
  .tl-rail:before { left: 8.5px; }
  .tl-node { left: 4px; }
  .tl-card { padding: 12px 12px; }
  .tl-card > .row { flex-wrap: wrap; row-gap: 8px; }
  .tl-card > .row > .grow { flex: 1 1 100%; }
  .tl-card > .row > .star-btn { margin-left: auto; }
  .tl-card > .row > .reg-col { flex-direction: row; align-items: center; gap: 8px; }
  .tl-name { font-size: 15px; }

  /* AI 工作：对话占满屏幕，对话列表收成抽屉（对话头部“对话列表”按钮，qi-shell.js） */
  .ai-layout { grid-template-columns: minmax(0, 1fr) !important; }
  .ai-layout > .ai-list { position: fixed; top: 0; left: 0; bottom: 0; z-index: 93; width: min(320px, 88vw); transform: translateX(-104%);
    transition: transform .22s cubic-bezier(.2,.9,.25,1); box-shadow: 0 0 40px rgba(0,0,0,.18); background: var(--bg-secondary, #f5f5f7); }
  html.qi-ai-open .ai-layout > .ai-list { transform: none; }
  html.qi-ai-open .qi-m-scrim { display: block; }
  .qi-m-ailist { display: inline-flex; margin-left: 8px; flex: none; }
  .chat-head .col { min-width: 0; }
  .composer-wrap { padding-left: 10px !important; padding-right: 10px !important; }
  .tl-card .tag { white-space: normal; height: auto; min-height: 20px; max-width: 100%; line-height: 1.45; padding-top: 2px; padding-bottom: 2px; }
}
/* ───────── 登录页“注册新账号”（10-20，qi-register.js）；管理后台 → 用户 → 待审批的注册 ───────── */
.qi-reg-entry { margin-top: 2px; }
.qi-reg-mask { position: fixed; inset: 0; z-index: 9500; background: rgba(0,0,0,.32); display: grid; place-items: center; padding: 16px; overflow: auto; }
.qi-reg-card { width: min(420px, 100%); box-sizing: border-box; background: var(--bg-elevated, #fff); color: var(--label, #1d1d1f); border-radius: 16px;
  box-shadow: 0 24px 64px rgba(0,0,0,.22); padding: 22px 22px 16px; display: flex; flex-direction: column; gap: 12px; }
.qi-reg-card h2 { margin: 0; font-size: 18px; font-weight: 700; }
.qi-reg-card p { margin: 0; font-size: 14px; line-height: 1.6; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-reg-form { display: flex; flex-direction: column; gap: 10px; }
.qi-reg-field { display: grid; gap: 4px; font-size: 12.5px; color: var(--label-2, rgba(60,60,67,.78)); }
.qi-reg-field .input { width: 100%; box-sizing: border-box; }
.qi-reg-field small { color: var(--label-3, rgba(60,60,67,.5)); }
.qi-reg-note { min-height: 56px; padding: 8px 10px; resize: vertical; font: inherit; font-size: 14px; }
.qi-reg-code { letter-spacing: .3em; font-variant-numeric: tabular-nums; }
.qi-reg-msg { min-height: 18px; font-size: 13px; color: var(--label-2, rgba(60,60,67,.78)); overflow-wrap: anywhere; }
.qi-reg-msg.ok { color: var(--green, #28a745); } .qi-reg-msg.bad { color: var(--red, #e5352b); }
.qi-reg-faint { font-size: 13px !important; }
.qi-reg-row { display: flex; align-items: center; gap: 8px; }
.qi-reg-grow { flex: 1; }
.qi-reg-cancel { align-self: center; }
.qi-reg-list { display: grid; gap: 8px; }
.qi-reg-item { border: 1px solid var(--separator, rgba(60,60,67,.12)); border-radius: var(--radius, 8px); padding: 10px 12px; display: grid; gap: 8px;
  background: var(--bg-elevated, #fff); }
.qi-reg-item .who { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.qi-reg-item .who b { font-size: 14px; overflow-wrap: anywhere; }
.qi-reg-item .note { font-size: 13px; color: var(--label, #1d1d1f); white-space: pre-wrap; overflow-wrap: anywhere; background: var(--bg-secondary, #f5f5f7);
  border-radius: 6px; padding: 6px 9px; }
.qi-reg-item .qi-acts .qi-input { width: 150px; min-width: 0; flex: 0 1 150px; }
.qi-reg-item .qi-acts .qi-select { min-width: 84px; flex: none; }
/* 10-27：左下角“已连接服务器”上面一行：大模型实时负载（qi-addon.js renderLlmLine） */
.qi-llm-line { display: flex; align-items: center; gap: 7px; font-size: 11px; color: var(--label-2, rgba(60,60,67,.78));
  padding: 2px 8px 4px; min-width: 0; font-variant-numeric: tabular-nums; }
.qi-llm-line .qi-dot { width: 8px; height: 8px; }
.qi-llm-line .qi-llm-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 10-27：AI 工作 → 日程助手入口（网页包 qi17） */
.suggestion.wide { grid-column: 1 / -1; }
.qi-sched-entry { display: flex; align-items: center; gap: 10px; margin: 6px 8px 4px; padding: 8px 10px; border: .5px solid var(--separator-strong, rgba(0,0,0,.12));
  border-radius: var(--radius, 8px); background: var(--bg-elevated, #fff); text-align: left; font: inherit; color: inherit; min-width: 0; flex: none; cursor: pointer; }
.qi-sched-entry:hover { background: var(--bg-hover, rgba(0,0,0,.04)); }
.qi-sched-entry.active { background: var(--bg-selected, rgba(0,122,255,.1)); border-color: transparent; }
.qi-sched-entry svg { color: var(--accent, #007aff); flex: none; }
.qi-sched-entry .col { display: flex; flex-direction: column; min-width: 0; gap: 1px; }
.qi-sched-entry b { font-size: 13px; font-weight: 600; }
.qi-sched-entry .faint { font-size: 11px; }
/* 10-27：合规看板的开关上多出来的白点 = 网页包自己的 .switch:after（给 <label class="switch"> 也画了一个圆点），这里去掉 */
.qi-board .switch::after, .qi-board .switch:after { display: none !important; content: none !important; }
.qi-board .switch { background: transparent !important; border-radius: 28px; }
/* 10-27：左下角“已连接服务器”不要了（上面一行大模型状态保留） */
.sidebar-footer .conn-line { display: none !important; }
/* 10-27：日程助手输入框 @ 同事（qi-chat.js） */
.qi-at { position: fixed; z-index: 2000; width: 260px; max-height: 320px; display: flex; flex-direction: column; background: var(--bg-elevated, #fff);
  border: .5px solid var(--separator-strong, rgba(0,0,0,.15)); border-radius: 10px; box-shadow: 0 8px 28px rgba(0,0,0,.18); overflow: hidden; font-size: 13px; }
.qi-at-head { display: flex; align-items: center; gap: 6px; padding: 6px 8px 6px 10px; border-bottom: .5px solid var(--separator, rgba(0,0,0,.08)); font-size: 11.5px; }
.qi-at-btn { font: inherit; font-size: 12px; padding: 2px 9px; border-radius: 6px; border: .5px solid var(--separator-strong, rgba(0,0,0,.15));
  background: transparent; color: inherit; cursor: pointer; }
.qi-at-btn.primary { background: var(--accent, #007aff); border-color: transparent; color: #fff; }
.qi-at-list { overflow-y: auto; padding: 4px; }
.qi-at-row { display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-radius: 7px; cursor: pointer; }
.qi-at-row.active { background: var(--bg-selected, rgba(0,122,255,.12)); }
.qi-at-av { width: 24px; height: 24px; border-radius: 50%; flex: none; display: inline-flex; align-items: center; justify-content: center;
  background: var(--accent, #007aff); color: #fff; font-size: 10.5px; }
.qi-at-name { font-weight: 500; }
.qi-at-login { color: var(--label-3, rgba(60,60,67,.5)); font-size: 11.5px; margin-left: auto; }
.qi-at-check { width: 16px; height: 16px; flex: none; border-radius: 4px; border: 1px solid var(--separator-strong, rgba(0,0,0,.25));
  display: inline-flex; align-items: center; justify-content: center; font-size: 11px; color: #fff; }
.qi-at-row.picked .qi-at-check { background: var(--accent, #007aff); border-color: transparent; }
.qi-at-empty { padding: 12px; color: var(--label-3, rgba(60,60,67,.5)); text-align: center; }
/* 10-27：对话里的图片点开看大图（qi-chat.js） */
img.msg-img { cursor: zoom-in; }
.qi-lightbox { position: fixed; inset: 0; z-index: 3000; background: rgba(0,0,0,.82); display: flex; align-items: center; justify-content: center;
  cursor: zoom-out; padding: 24px; }
.qi-lightbox img { max-width: 100%; max-height: 100%; object-fit: contain; border-radius: 6px; box-shadow: 0 10px 40px rgba(0,0,0,.5); }
.qi-lightbox-open { position: absolute; right: 18px; bottom: 16px; color: #fff; font-size: 13px; opacity: .8; text-decoration: none; }
/* 10-27：活动每天“上午 / 下午” */
.qi-half .qi-rsvp-btn { min-width: 44px; }
.qi-half .qi-rsvp-btn:disabled { opacity: .35; cursor: not-allowed; }