/* hivemind 控制台 — 浅色主题（默认且唯一主题）。
   气质对标 Apple HIG：内容优先、装饰极少 —— 白/浅灰两级面板、克制的圆角
   与阴影、单一强调色（iOS 蓝，只给「可点的东西」用）。状态色是另一套语义
   通道：绿=正常、琥珀=等你做事、红=坏了，全部用「浅底深字」的柔和配方。 */

/* hidden 属性一律藏住：作者样式里任何 display（如 .ag-body 的 grid）都会压过
   浏览器默认的 [hidden]{display:none}，让 JS 的 .hidden = true 失效。 */
[hidden] { display: none !important; }

:root {
  /* 面板层次：页面底 → 卡片 → 内嵌控件 */
  --bg: #f5f5f7;
  --panel: #ffffff;
  --panel-2: #f2f2f5;
  --line: #e3e3e8;
  --text: #1d1d1f;
  --muted: #6e6e73;

  /* 唯一强调色（交互专用）：iOS 蓝 */
  --accent: #0071e3;
  --accent-hover: #0077ed;
  --accent-tint: #eaf3fd;

  /* 状态语义色（浅底深字，柔和但清楚） */
  --ok-fg: #1e7e43;   --ok-bg: #e7f6ec;
  --warn-fg: #9a5b00; --warn-bg: #fff3df;
  --err-fg: #c23934;  --err-bg: #fdedec;
  --idle-fg: #6e6e73; --idle-bg: #ececf0;

  --radius: 12px;
  --table-label-min-width: 108px;
  --control-height: 36px;
  --shadow-card: 0 1px 2px rgba(0, 0, 0, .04), 0 4px 16px rgba(0, 0, 0, .05);
  --shadow-pop: 0 8px 20px rgba(0, 0, 0, .10), 0 24px 60px rgba(0, 0, 0, .14);
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  background: var(--bg);
  color: var(--text);
  font: 15px/1.5 -apple-system, "PingFang SC", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
}
b { font-weight: 600; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
.muted { color: var(--muted); }

input, select, textarea {
  font-family: inherit;
}
input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 1px;
}

/* ---- login ----
   hero + 卡片并排（窄屏自动换行成上下）。容器是弹性布局：将来注册卡
   上线，在卡片一侧再放一张即可，hero 不用动。 */
.login-wrap { min-height: 100vh; display: flex; flex-wrap: wrap; align-items: center;
  justify-content: center; gap: 48px 88px; padding: 48px 28px; }
.login-hero { max-width: 430px; }
/* 登录+注册两张卡：并排顶对齐，窄了自动纵排。宽屏给卡固定宽 —— 卡的
   min(360px,100%) 在容器 intrinsic 尺寸计算里百分比会塌陷,容器被算窄、
   两卡被迫换行;固定 360px 让并排判定拿到真实宽度。 */
.login-cards { display: flex; flex-wrap: wrap; gap: 24px; align-items: flex-start;
  justify-content: center; }
@media (min-width: 901px) { .login-cards > .card.login { width: 360px; } }
/* keep-all:CJK 不许字间断行,只在空格处断 —— 标题的空格就是设计好的断点;
   balance 再在这些断点里挑最均衡的一个。 */
.login-hero .hero-title { font-size: 40px; line-height: 1.18; font-weight: 700;
  letter-spacing: -.02em; margin: 0; text-wrap: balance; word-break: keep-all; }
@media (max-width: 900px) {
  .login-wrap { align-content: center; }
  .login-cards { width: min(360px, 100%); }
  .login-hero { text-align: center; max-width: 480px; }
  .login-hero .hero-title { font-size: 30px; }
}
.card.login { width: min(360px, 100%); background: var(--panel); border: 1px solid var(--line);
  border-radius: 16px; padding: 34px 30px; box-shadow: var(--shadow-card); }
.card.login .logo { font-size: 26px; }
.card.login h1 { font-size: 22px; font-weight: 600; margin: 12px 0 2px; letter-spacing: -.01em; }
.card.login .sub { color: var(--muted); margin: 0 0 20px; font-size: 13px; letter-spacing: .04em; }
.card.login label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 14px; }
.card.login input[type=text],
.card.login input[type=password],
.card.login select { display: block; width: 100%; margin-top: 6px;
  padding: 10px 12px; background: var(--panel); border: 1px solid var(--line);
  border-radius: 10px; color: var(--text); font-size: 15px; }
.card.login .remember { display: flex; align-items: center; gap: 8px; }
.card.login .remember input { margin: 0; accent-color: var(--accent); }
.card.login button { width: 100%; margin-top: 8px; padding: 11px; border: 0; border-radius: 10px;
  background: var(--accent); color: #fff; font-weight: 600; font-size: 15px; cursor: pointer; }
.card.login button:hover { background: var(--accent-hover); }
.card.login .hint { color: var(--muted); font-size: 13px; }
.card.login code { background: var(--panel-2); border: 1px solid var(--line); border-radius: 6px;
  padding: 2px 6px; font-size: 12px; color: var(--text); }
.error { background: var(--err-bg); border: 1px solid #f6c9c6;
  color: var(--err-fg); padding: 8px 10px; border-radius: 8px; font-size: 13px; margin: 0 0 14px; }
.card.login .error { font-size: 13px; }

/* ---- app shell ---- */
.topbar { display: flex; align-items: center; gap: 14px; padding: 12px 22px;
  background: rgba(255, 255, 255, .82);
  -webkit-backdrop-filter: saturate(180%) blur(20px); backdrop-filter: saturate(180%) blur(20px);
  border-bottom: 1px solid var(--line); position: sticky; top: 0; z-index: 5; }
.topbar .brand { font-size: 16px; color: var(--text); }
.topbar .brand:hover { text-decoration: none; }
.topbar .spacer { flex: 1; }
.link { background: none; border: 1px solid var(--line); color: var(--muted);
  padding: 6px 12px; border-radius: 8px; cursor: pointer; font-size: 13px;
  white-space: nowrap; }
.link:hover { color: var(--text); border-color: #c9c9ce; background: var(--panel); }
/* 标题旁的低调改名入口：默认几乎隐形，悬停才浮现边框 */
.rename-btn { border-color: transparent; padding: 3px 8px; font-size: 12px;
  font-weight: 400; vertical-align: 2px; }
.rename-btn:hover { border-color: var(--line); }
main { max-width: 1000px; margin: 0 auto; padding: 26px 22px 60px; }
/* 标题跟它下面的内容是一伙的，跟上一块不是 —— 上留白必须明显大于下留白，
   否则标题看着像黏在上一个模块的尾巴上（整站通病，2026-08-07 修）。 */
.section-head { display: flex; align-items: center; gap: 12px; margin: 34px 0 14px; }
section:first-child > .section-head,
main > .section-head:first-child { margin-top: 8px; }
.section-head h2 { font-size: 17px; font-weight: 600; letter-spacing: -.01em; margin: 0; flex: 1; }
button.primary { background: var(--accent); color: #fff; border: 0; font-weight: 600;
  padding: 9px 16px; border-radius: 9px; cursor: pointer; font-size: 14px; }
button.primary:hover { background: var(--accent-hover); }
button.primary, button.ghost { min-height: var(--control-height); }
/* 到达创建上限时按钮变灰不可点，鼠标悬停给出原因（title） */
button.primary:disabled { opacity: .45; cursor: default; background: var(--accent); }
#fleet-meta { margin-bottom: 12px; font-size: 13px; }

/* ---- fleet / list cards ---- */
.hive { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 16px 18px; margin-bottom: 12px; display: grid;
  grid-template-columns: 1fr auto; gap: 8px 16px; align-items: center;
  box-shadow: var(--shadow-card); }
.hive .h-main { min-width: 0; }
.hive .h-name { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.hive .h-id { color: var(--muted); font-size: 12px; font-weight: 400; font-family: ui-monospace, monospace; }
.hive .h-sub { color: var(--muted); font-size: 13px; margin-top: 4px; display: flex; flex-wrap: wrap; gap: 6px 16px; }
.hive .h-actions { display: flex; gap: 8px; align-items: center; }

/* 状态徽章：绿=正常 / 琥珀=等你做事 / 红=坏了 / 灰=停着 */
.badge { font-size: 12px; padding: 3px 10px; border-radius: 20px; font-weight: 600; white-space: nowrap; }
.badge.ok   { background: var(--ok-bg);   color: var(--ok-fg); }
.badge.warn { background: var(--warn-bg); color: var(--warn-fg); }
.badge.err, .badge.error { background: var(--err-bg); color: var(--err-fg); }
.badge.error { border: 0; margin: 0; }
.badge.idle { background: var(--idle-bg); color: var(--idle-fg); }
a.badge, a.badge:hover { text-decoration: none; }
a.badge.warn:hover { background: #ffeccc; }

.pill { font-size: 11px; padding: 2px 8px; border-radius: 6px; background: var(--panel-2);
  border: 1px solid var(--line); color: var(--muted); font-family: ui-monospace, monospace; }
.pill.new { color: var(--accent); background: var(--accent-tint); border-color: #c6dff7; }
.pill.warn { color: var(--warn-fg); background: var(--warn-bg); border-color: #f2d9ae; }
.mismatch ul { margin: 4px 0 0 18px; padding: 0; }
button.ghost { background: var(--panel); border: 1px solid var(--line); color: var(--text);
  padding: 7px 13px; border-radius: 9px; cursor: pointer; font-size: 13px; }
button.ghost:hover { border-color: #c9c9ce; background: var(--panel-2); }
button.ghost:disabled { opacity: .45; cursor: default; background: var(--panel); }
button.upgrade { border-color: #c6dff7; color: var(--accent); }
button.upgrade:hover { background: var(--accent-tint); }
.empty { color: var(--muted); padding: 30px; text-align: center;
  border: 1px dashed #d4d4d9; border-radius: var(--radius); background: rgba(255, 255, 255, .5); }
.empty code { font-family: ui-monospace, monospace; background: var(--panel-2);
  border: 1px solid var(--line); border-radius: 5px; padding: 1px 6px; font-size: 12px; }
.empty .primary { margin-left: 10px; }

/* ---- breadcrumbs (舰队 › 蜂巢 › bot) ---- */
.crumbs { font-size: 13px; color: var(--muted); margin: 2px 0 16px; display: flex;
  align-items: center; flex-wrap: wrap; gap: 2px; }
.crumbs a { color: var(--accent); }
.crumbs .cur { color: var(--text); font-weight: 600; }
.crumbs .sep { margin: 0 8px; color: #c9c9ce; }

/* ---- hive / bot detail ---- */
.hive.clickable { cursor: pointer; transition: border-color .12s, box-shadow .12s; }
.hive.clickable:hover { border-color: #c9c9ce; box-shadow: 0 2px 6px rgba(0, 0, 0, .06), 0 8px 24px rgba(0, 0, 0, .07); }
.hive-meta { font-size: 13px; display: flex; flex-wrap: wrap; gap: 6px 18px; margin-bottom: 6px; }
.kv.wide { grid-template-columns: 110px 1fr; background: var(--panel);
  border: 1px solid var(--line); border-radius: var(--radius); padding: 16px 18px;
  box-shadow: var(--shadow-card); }
button.ghost.ok { border-color: #bfe6cc; color: var(--ok-fg); }
button.ghost.ok:hover { background: var(--ok-bg); }
button.ghost.warn { border-color: #f2d9ae; color: var(--warn-fg); }
button.ghost.warn:hover { background: var(--warn-bg); }
button.ghost.danger { border-color: #f6c9c6; color: var(--err-fg); }
button.ghost.danger:hover { background: var(--err-bg); }
select.link { background: var(--panel); border: 1px solid var(--line); color: var(--muted);
  padding: 6px 10px; border-radius: 8px; font-size: 13px; }
.logbox { background: #fafafa; border: 1px solid var(--line); border-radius: 10px;
  padding: 14px 16px; font: 12px/1.6 ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  color: #3a3a3c; max-height: 520px; overflow: auto; white-space: pre-wrap;
  word-break: break-all; margin: 0; }

/* ---- overlay / modal ---- */
#overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, .32); z-index: 20; padding: 20px; }
#overlay:not([hidden]) { display: grid; place-items: center; }
/* max-width 用 vw 而非 100%：#overlay 是 place-items:center 的 grid，
   百分比对「由内容撑大的轨道」解析不出约束，440px 会在小屏溢出 */
.modal { width: 440px; max-width: calc(100vw - 40px); background: var(--panel); border: 1px solid var(--line);
  border-radius: 16px; padding: 24px; box-shadow: var(--shadow-pop);
  max-height: calc(100vh - 40px); overflow: auto; }
.modal h3 { margin: 0 0 6px; font-size: 18px; font-weight: 600; letter-spacing: -.01em; }
.modal p.hint { color: var(--muted); font-size: 13px; margin: 0 0 18px; }
.modal label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 16px; }
.modal input[type=text], .modal input[type=password], .modal input:not([type]), .modal select {
  display: block; width: 100%; margin-top: 6px; padding: 10px 12px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
  color: var(--text); font-size: 15px; }
.modal .row { display: flex; gap: 10px; justify-content: flex-end; margin-top: 6px; }
.modal button { padding: 9px 16px; border-radius: 9px; cursor: pointer; font-size: 14px; border: 0; }
.modal .cancel { background: var(--panel-2); color: var(--text); }
.modal .cancel:hover { background: #e7e7ec; }
.progress { display: flex; align-items: center; gap: 12px; padding: 16px 0; color: var(--muted); }
.spinner { width: 20px; height: 20px; border: 3px solid var(--line); border-top-color: var(--accent);
  border-radius: 50%; animation: spin 1s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.result-ok   { border: 1px solid #bfe6cc; background: var(--ok-bg);
  border-radius: 10px; padding: 14px; margin: 10px 0; }
.result-warn { border: 1px solid #f2d9ae; background: var(--warn-bg);
  border-radius: 10px; padding: 14px; margin: 10px 0; }
.result-err  { border: 1px solid #f6c9c6; background: var(--err-bg);
  border-radius: 10px; padding: 14px; margin: 10px 0; color: var(--err-fg); }
.kv { display: grid; grid-template-columns: 90px 1fr; gap: 6px 12px; font-size: 14px; margin: 8px 0; }
.kv .k { color: var(--muted); }
.secret { font-family: ui-monospace, monospace; background: var(--panel-2); border: 1px solid var(--line);
  padding: 8px 10px; border-radius: 8px; display: flex; align-items: center; gap: 8px; }
.secret code { flex: 1; word-break: break-all; color: var(--text); }
.copy { font-size: 12px; padding: 4px 10px; border-radius: 6px; border: 1px solid var(--line);
  background: var(--panel); color: var(--text); cursor: pointer; }
.copy:hover { background: var(--panel-2); }
.warn-note { color: var(--warn-fg); font-size: 12px; margin-top: 6px; }

/* ---- accounts / members ---- */
.pill.role-owner  { color: var(--warn-fg); background: var(--warn-bg); border-color: #f2d9ae; }
.pill.role-admin  { color: var(--accent); background: var(--accent-tint); border-color: #c6dff7; }
.pill.role-viewer { color: var(--muted); }
/* 账号名兼「修改密码」入口：宽屏显示名字，窄屏只留 🔑（见 templates.app_page） */
/* 账户入口是「我是谁」，不是一个动作按钮 —— 别给它按钮的边框和底色，
   悬停时才浮现一点背景，跟旁边的图标按钮区分开。 */
.topbar #whoami { font-size: 13px; margin-right: 4px; border-color: transparent;
  background: none; padding: 6px 8px; }
.topbar #whoami:hover { border-color: var(--line); background: var(--panel); }
.topbar a.link { color: var(--muted); text-decoration: none; font-size: 14px;
  padding: 6px 10px; border-radius: 8px; }
.topbar a.link:hover { color: var(--text); background: var(--panel-2); }

/* ---- onboarding wizard + bot config ---- */
.modal.wz-card { width: 560px; max-width: calc(100vw - 40px); }
.wz-head { display: flex; justify-content: space-between; align-items: center; }
.wz-head h3 { margin: 0; }
.wz-steps { display: flex; flex-wrap: wrap; gap: 4px; align-items: center;
  margin: 12px 0 16px; font-size: 12px; color: var(--muted); }
.wz-step b { display: inline-grid; place-items: center; width: 18px; height: 18px;
  border-radius: 50%; background: var(--panel-2); border: 1px solid var(--line);
  font-size: 11px; margin-right: 3px; }
.wz-step.done { color: var(--ok-fg); }
.wz-step.done b { background: var(--ok-bg); border-color: #bfe6cc; }
.wz-step.current { color: var(--text); font-weight: 600; }
.wz-step.current b { background: var(--accent); color: #fff; border-color: var(--accent); }
.wz-step.failed { color: var(--err-fg); }
.wz-sep { color: #c9c9ce; }
.wz-body label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 14px; }
.wz-body input:not([type=radio]):not([type=checkbox]), .wz-body select { display: block; width: 100%; margin-top: 6px; padding: 10px 12px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
  color: var(--text); font-size: 15px; }
/* 完成页上的补充说明：说清楚但不抢戏（例如「定时提醒还差一次授权」） */
.wz-optional { font-size: 13px; color: var(--muted); background: var(--panel-2);
  border-left: 3px solid var(--line); border-radius: 0 8px 8px 0;
  padding: 10px 12px; margin: 0 0 12px; }
.wz-body details { margin-top: 18px; }
.wz-body details summary { cursor: pointer; font-size: 13px; }
.wz-body h3 { margin: 0 0 10px; }
.btn-link { display: inline-block; padding: 8px 14px; border-radius: 9px;
  background: var(--accent-tint); border: 1px solid #c6dff7; color: var(--accent);
  text-decoration: none; font-size: 14px; }
.btn-link:hover { background: #ddedfb; text-decoration: none; }
.bh-editor { width: 100%; min-height: 260px; resize: vertical; padding: 12px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
  color: var(--text); font: 13px/1.6 ui-monospace, monospace; }
.bh-editor[readonly] { background: var(--panel-2); color: var(--muted); }
.danger-title { color: var(--err-fg); }
.danger-row { border-color: #f6c9c6; }
.danger-btn { background: #d93a35 !important; color: #fff !important; }
.danger-btn:disabled { opacity: .4; }

/* ---- Agent 面板：可选模型 chips（可点=钉住该模型） ---- */
.intel-chips { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.chip { font-size: 11px; padding: 2px 9px; border-radius: 6px; background: var(--panel-2);
  border: 1px solid var(--line); color: var(--muted); cursor: pointer;
  font-family: ui-monospace, monospace; }
.chip:hover { border-color: #c9c9ce; color: var(--text); }
.chip.active { color: var(--accent); background: var(--accent-tint); border-color: #c6dff7; }

/* ---- 用量图 / 费用徽章 ---- */
.usage-svg { display: block; background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); box-shadow: var(--shadow-card); }
#usage-meta:not(:empty) { font-size: 13px; margin: -4px 0 12px; }
.active-toggle { color: var(--accent); border-color: #c6dff7; background: var(--accent-tint); }
.intel-cost { color: var(--muted); }
.usage-table-wrap { margin-top: 12px; overflow-x: auto; background: var(--panel);
  border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow-card); }
.usage-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.usage-table th { text-align: left; font-weight: 600; color: var(--muted); font-size: 12px;
  padding: 10px 16px; border-bottom: 1px solid var(--line); }
.usage-table td { padding: 10px 16px; border-bottom: 1px solid var(--line); }
.usage-table tr:last-child td { border-bottom: 0; }

/* 表格标签：列与表头靠左，标签内部居中；引擎、状态、角色、共享共用宽度。 */
table :is(.badge, .pill, .engine-tag),
.agent-table :is(.badge, .pill, .engine-tag) {
  display: inline-block;
  min-width: var(--table-label-min-width);
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
}
.page-table th, .usage-table td, .pal-table td,
.agent-table-head, .agent-table-row { text-align: left; }
.page-table .table-actions { text-align: right; }

/* ---- 总览 dashboard：一排 stat 卡片 + 小趋势图 ---- */
/* 列数由 JS 按卡片张数定（--stat-cols），保证分行均衡；minmax(0,1fr) 让长
   数字在窄列里换行而不是把网格撑破 */
.stat-grid { display: grid; grid-template-columns: repeat(var(--stat-cols, 4), minmax(0, 1fr));
  gap: 12px; margin-bottom: 14px; }
.stat-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 14px 16px; box-shadow: var(--shadow-card); min-width: 0; }
.stat-label { font-size: 12px; color: var(--muted); }
.stat-num { font-size: 26px; font-weight: 700; letter-spacing: -.02em; margin: 2px 0;
  font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.stat-sub { font-size: 12px; color: var(--muted); }
.stat-bad { color: var(--err-fg); font-weight: 600; }

/* 额度（已用 / 上限）：蜂巢页 bot 列表上方一行小胶囊 + 一句提示。
   接近上限用琥珀（提醒），已超出用红（但不拦人——超出的一律放行，见 quota.py）。 */
.quota-line { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 12px; }
.quota-chip { font-size: 12px; padding: 3px 10px; border-radius: 20px;
  background: var(--panel-2); color: var(--muted); border: 1px solid var(--line); }
.quota-chip b { color: var(--text); font-weight: 600; }
.quota-chip.near { background: var(--warn-bg); color: var(--warn-fg); border-color: #f2d9ae; }
.quota-chip.near b { color: var(--warn-fg); }
.quota-chip.over { background: var(--err-bg); color: var(--err-fg); border-color: #f3cfcd; }
.quota-chip.over b { color: var(--err-fg); }
.quota-chip.spec { font-style: normal; }
.quota-note { flex-basis: 100%; font-size: 13px; color: var(--muted); }

/* 额度设置表单（超管）：一行一项，数字输入靠右对齐好比对 */
.limit-form { display: flex; flex-direction: column; gap: 10px; }
.limit-row { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.limit-label { flex: 1 1 auto; }
.limit-row input[type=number] { width: 140px; text-align: right; padding: 7px 10px;
  border: 1px solid var(--line); border-radius: 9px; font-size: 14px; background: var(--panel); }
.limit-row input:disabled { background: var(--panel-2); color: var(--muted); }
.limit-unit { width: 52px; color: var(--muted); font-size: 13px; }
.limit-none { display: inline-flex; align-items: center; gap: 4px; font-size: 13px;
  color: var(--muted); white-space: nowrap; }
.limit-sep { margin-top: 6px; padding-top: 12px; border-top: 1px solid var(--line);
  font-size: 13px; color: var(--muted); }
/* 「暂无数据」占的是数字的位置：弱化字重字号，别让空态看着像个大数 */
.stat-none { color: var(--muted); font-size: 17px; font-weight: 500; }
#dash { margin-bottom: 26px; }
#dash-trend:not(:empty) { margin-top: 2px; }
#dash-note { font-size: 12px; margin-top: 8px; }

/* ---- 新版本提示：安静的小圆点（不抢眼，点进蜂巢才见升级入口） ---- */
.dot-new { width: 8px; height: 8px; border-radius: 50%; background: var(--accent);
  display: inline-block; flex: none; }

/* ---- 蜂巢「设置」折叠区：低频/危险操作收在页面底部，默认收起，整体走灰 ---- */
.settings-fold { margin-top: 36px; }
.settings-fold > summary { color: var(--muted); font-size: 13px; cursor: pointer;
  width: fit-content; padding: 4px 6px; border-radius: 6px; list-style-position: inside; }
.settings-fold > summary:hover { color: var(--text); background: var(--panel-2); }
.danger-area { margin-top: 10px; border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--panel-2); padding: 4px 16px; }
.da-row { display: grid; grid-template-columns: 1fr auto; gap: 8px 16px; align-items: center;
  padding: 14px 2px; }
.da-row + .da-row { border-top: 1px solid var(--line); }
.da-row .h-name { font-size: 14px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.da-row .h-sub { color: var(--muted); font-size: 13px; margin-top: 2px; }
.da-row .h-actions { display: flex; gap: 8px; align-items: center; }

/* ---- 帮助页 ---- */
.help p, .help li { font-size: 14px; line-height: 1.7; }
.help p { margin: 0 0 10px; }
.help section { margin-bottom: 30px; }
.help .help-steps { margin: 0; padding-left: 22px; }
.help .help-steps > li { margin-bottom: 14px; }
.help .help-steps ul { margin: 6px 0; padding-left: 18px; }
.help .help-steps ul li { margin: 3px 0; }
.help .help-steps .muted, .help .help-list .muted { display: block; font-size: 13px; margin-top: 2px; }
.help .help-list { margin: 0; padding-left: 22px; }
.help .help-list li { margin-bottom: 8px; }
.help .help-faq details { background: var(--panel); border: 1px solid var(--line);
  border-radius: 10px; padding: 12px 16px; margin-bottom: 10px; }
.help .help-faq summary { cursor: pointer; font-size: 14px; font-weight: 600; }
.help .help-faq p { color: var(--muted); margin: 10px 0 2px; }
/* 答案也是短语清单，不是段落：一行一件事，扫一眼就能对号入座 */
.help .help-faq ul { color: var(--muted); margin: 10px 0 2px; padding-left: 20px; }
.help .help-faq li { margin: 4px 0; }
.help .help-faq li b { color: var(--text); font-weight: 600; }

/* ════════════════════════════════════════════════════════════════════════
   移动端适配 — 全部收在媒体查询里，桌面观感不变。
   两个断点：≤640px 手机（卡片改纵排、触控目标 ≥44px、顶栏收纳），
   ≤430px 竖屏小机再挤一挡（顶栏品牌只留 hivemind、按钮更紧）。
   平板（641–1024px）用桌面布局即可：main 本来就是内容列 + 自适应卡片。 */

@media (max-width: 640px) {
  :root { --control-height: 44px; }
  main { padding: 18px 14px 48px; }

  /* 顶栏：品牌占第一行，操作按钮换到第二行 —— 一行塞不下就会被挤出屏幕外
     (超管多两个入口时「退出」直接看不见了)。宁可高一点,也不能有点不到的东西。 */
  .topbar { padding: 6px 12px 8px; gap: 8px; row-gap: 6px; flex-wrap: wrap;
    align-items: center; }
  .topbar .brand { flex: 1 0 100%; font-size: 15px; }
  .topbar .spacer { display: none; }        /* 第二行按钮左对齐,不再需要撑开 */
  .topbar .btn-label { display: none; }

  /* 触控目标：主要可点元素 ≥44px 高 */
  button, select, .btn-link, .topbar a.link {
    min-height: 44px; }
  .btn-link, .topbar a.link { display: inline-flex; align-items: center; }
  .copy { min-height: 36px; }              /* 行内小按钮，够点但不撑破行 */

  /* 总览卡片：手机上固定两列一排（这条在文件后面，覆盖上面按张数定的列数） */
  .stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .stat-card { padding: 12px 14px; }
  .stat-num { font-size: 22px; }

  /* 列表卡片：操作按钮换到下一行，宽度留给名称与状态 */
  .hive { grid-template-columns: 1fr; padding: 14px 16px; }
  .hive .h-actions { justify-content: flex-start; flex-wrap: wrap; }
  .da-row { grid-template-columns: 1fr; }
  .da-row .h-actions { justify-content: flex-start; flex-wrap: wrap; }
  .section-head { flex-wrap: wrap; }
  .kv.wide { grid-template-columns: 88px 1fr; }
  .kv { grid-template-columns: 84px 1fr; }
  .h-sub span, .kv span { overflow-wrap: anywhere; }
  .limit-row { display: grid; grid-template-columns: minmax(0, 1fr) 90px 42px; gap: 8px; }
  .limit-row input[type=number] { width: 100%; min-width: 0; font-size: 16px; }
  .limit-row .limit-label { margin-right: 0; }
  .limit-unit { width: auto; }

  /* 登录页：卡片吃满宽度，留白收紧 */
  .login-wrap { padding: 32px 18px; gap: 28px; }
  .card.login { padding: 26px 20px; }

  /* 弹窗：小屏吃满可用宽度，按钮行允许换行 */
  #overlay { padding: 12px; }
  .modal, .modal.wz-card { max-width: calc(100vw - 24px); padding: 20px 16px; }
  .modal .row { flex-wrap: wrap; }
  .modal .row button { min-height: 44px; }

  /* iOS 聚焦不自动放大：输入控件字号 ≥16px（覆盖各处 15px/13px 定义） */
  input, select, textarea,
  .modal input:not([type]), .modal input[type=text], .modal input[type=password],
  .modal select, .wz-body input:not([type=radio]):not([type=checkbox]), .wz-body select,
  .card.login input[type=text], .card.login input[type=password], .card.login select { font-size: 16px; }
  .bh-editor { font-size: 16px; }

  /* 帮助页：列表缩进收紧 */
  .help .help-steps, .help .help-list { padding-left: 18px; }
  .help .help-faq ul { padding-left: 16px; }
}

@media (max-width: 430px) {
  .topbar { gap: 6px; padding: 6px 10px 8px; }
  .link { padding: 6px 9px; font-size: 12px; }
  .crumbs { font-size: 12px; }
}
/* 登录/注册切换：一句话+文字按钮，不做成第二个主行动按钮抢注意力 */
.card.login .switch { margin: 16px 0 0; font-size: 13px; color: var(--muted); text-align: center; }
.card.login button.linkish { width: auto; margin: 0; padding: 0; background: none; border: 0;
  color: var(--accent); font-size: 13px; font-weight: 500; cursor: pointer; }
.card.login button.linkish:hover { background: none; text-decoration: underline; }

/* ---- 平台状态 ------------------------------------------------------------- */
/* 同一套颜色语义：绿 = 正常, 琥珀 = 注意, 红 = 异常, 灰 = 未启用。整页只有一处
   颜色来源(状态本身)，所以扫一眼就能分出「要紧的」和「不要紧的」。 */
.ps-banner { display: flex; flex-direction: column; gap: 6px; padding: 16px 18px;
  border-radius: var(--radius); border-left: 4px solid var(--idle-fg); margin-bottom: 6px; }
.ps-banner.ok   { border-left-color: var(--ok-fg);   background: var(--ok-bg); }
.ps-banner.warn { border-left-color: var(--warn-fg); background: var(--warn-bg); }
.ps-banner.err  { border-left-color: var(--err-fg);  background: var(--err-bg); }
.ps-headline { font-size: 20px; font-weight: 700; letter-spacing: -.02em; }
.ps-meta { font-size: 13px; color: var(--muted); }
.ps-stale { color: var(--err-fg); }

.ps-list { display: flex; flex-direction: column; }
.ps-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px;
  border-bottom: 1px solid var(--line); font-size: 14px; }
.ps-row:last-child { border-bottom: none; }
.ps-row.down { background: var(--err-bg); }
.ps-row.warn { background: var(--warn-bg); }
.ps-row.off .ps-label, .ps-row.off .ps-detail { color: var(--muted); }
.ps-label { flex: 0 0 auto; font-weight: 600; max-width: 42%; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
.ps-detail { flex: 1 1 auto; color: var(--muted); }
.ps-since { flex: 0 0 auto; font-size: 12px; color: var(--muted); }
.ps-errs { margin: 0; padding-left: 20px; font-size: 13px; color: var(--warn-fg); }

/* 最近错误：一行一类,不是一行一条日志。次数排在最左边,因为「出了多少次」
   往往比「出了什么」先决定要不要管。 */
.pe-sum { font-size: 14px; color: var(--muted); margin-bottom: 10px; }
.pe-big { font-size: 20px; font-weight: 700; letter-spacing: -.02em; }
.pe-big.err { color: var(--err-fg); }
.pe-big.warn { color: var(--warn-fg); }
.pe-new { color: var(--warn-fg); }

.pe-list { display: flex; flex-direction: column; }
.pe-row { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px;
  border-bottom: 1px solid var(--line); font-size: 14px; }
.pe-row:last-child { border-bottom: none; }
.pe-row.err { background: var(--err-bg); }
.pe-row.warn { background: var(--warn-bg); }
.pe-count { flex: 0 0 auto; min-width: 52px; text-align: right; font-weight: 700;
  font-variant-numeric: tabular-nums; }
.pe-count.err { color: var(--err-fg); }
.pe-count.warn { color: var(--warn-fg); }
/* 已经不再出现的:灰着沉底,跟平台状态里的「未启用」同一个道理 */
.pe-row.quiet .pe-count, .pe-row.quiet .pe-msg { color: var(--muted); }
.pe-count.quiet { font-weight: 400; font-size: 12px; }
.pe-trend { flex: 0 0 auto; width: 12px; color: var(--muted); }
.pe-main { flex: 1 1 auto; min-width: 0; }
.pe-msg { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12.5px; word-break: break-word; }
.pe-stack { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 11.5px; color: var(--err-fg); margin-top: 3px; word-break: break-word; }
.pe-meta { font-size: 12px; color: var(--muted); margin-top: 4px;
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }

.ps-allow-list { display: flex; flex-wrap: wrap; gap: 8px 18px; margin: 12px 0; }
.ps-allow { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; }
.ps-allow input { accent-color: var(--accent); }
.ps-endpoints code { background: var(--panel-2); border-radius: 5px; padding: 1px 6px;
  font-size: 12.5px; }

/* 配置区里的折叠块：跟其它模块一样是一行，点开才展开 —— 编辑器默认摊开会
   把整页压垮，视觉上也比相邻模块重得多。 */
.zone-fold { margin-top: 4px; }
.zone-fold > summary { cursor: pointer; padding: 12px 16px; background: var(--panel);
  border: 1px solid var(--line); border-radius: var(--radius); color: var(--text);
  box-shadow: var(--shadow-card); list-style: none; }
.zone-fold > summary::-webkit-details-marker { display: none; }
.zone-fold > summary::before { content: '▸ '; color: var(--muted); }
.zone-fold[open] > summary::before { content: '▾ '; }
.zone-fold[open] > summary { border-radius: var(--radius) var(--radius) 0 0; border-bottom: 0; }
.zone-fold > div { border: 1px solid var(--line); border-top: 0;
  border-radius: 0 0 var(--radius) var(--radius); padding: 14px 16px; background: var(--panel); }
/* 区块底部那句小字：跟上面的卡片拉开，别粘着 */
.zone-foot { margin: 10px 0 0; font-size: 13px; }
/* 折叠块与上一块之间留一口气 */
.zone-fold { margin-top: 12px; }
/* 更新记录：一版一块，版本号和日期一行，要点用短句列表 */
.rel { padding: 12px 0; border-bottom: 1px solid var(--line); }
.rel:last-child { border-bottom: none; }
.rel-head { display: flex; gap: 10px; align-items: baseline; font-size: 14px; }
.rel-list { margin: 6px 0 0; padding-left: 20px; font-size: 13px; color: var(--text); }
.rel-list li { margin: 2px 0; }
/* Agent 区（REQ-0043）：每种 Agent 一张卡，正在用的那张展开；不兼容 / 版本不够的灰着 */
.agent-card { border: 1px solid var(--line); border-radius: var(--radius); background: var(--panel);
  padding: 12px 16px; margin-top: 8px; box-shadow: var(--shadow-card); }
.agent-card.on { border-color: var(--accent, var(--line)); }
.agent-card.grey { opacity: .6; }
.agent-card .ag-head { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.agent-card .ag-body { margin-top: 10px; display: grid; gap: 8px; }
.agent-card .ag-field { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.agent-card .ag-note { min-height: 1em; font-size: 13px; }
/* 下拉里一个能用的 AI 账号都没有时：下拉下方一行，说为什么、怎么办 */
.agent-card .ag-acct-hint { flex-basis: 100%; font-size: 13px; }
.status-bar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-top: 8px; }
.conv-row .h-sub span + span { margin-left: 10px; }
label.inline { display: inline-flex; gap: 6px; align-items: center; margin-right: 10px; }
label.inline.block { display: flex; margin: 4px 0; }

/* 添加 API Key 时没能验证：写在账号那一行上 */
.key-unverified { color: var(--warn-fg); }

/* REQ-0061：首页表格和蜂巢子页，沿用控制台浅色面板。 */
.summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: var(--shadow-card); margin: 14px 0 18px; overflow: hidden; }
.summary-cell { min-width: 0; padding: 16px 18px; border-right: 1px solid var(--line); }
.summary-cell:last-child { border-right: 0; }
.summary-cell .stat-num { font-size: 23px; }
.stat-num small { font-size: 13px; font-weight: 400; color: var(--muted); }
.quota-progress { height: 4px; background: var(--panel-2); border-radius: 3px; margin-top: 7px; overflow: hidden; }
.quota-progress span { display: block; height: 100%; background: var(--accent); border-radius: inherit; }
.summary-cell.near .quota-progress span { background: #d79520; }
.summary-cell.full .quota-progress span { background: var(--err-fg); }
.summary-cell.full .stat-num { color: var(--err-fg); }
.mini-trend { display: flex; gap: 5px; align-items: flex-end; height: 45px; margin-top: 10px; }
.mini-bar { flex: 1; min-width: 0; background: #62a5ed; border-radius: 1px 1px 0 0; }
.home-head h2 { font-size: 23px; }
.limit-label { font-size: 13px; margin-right: 8px; }
.page-card, .page-table-wrap { background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); box-shadow: var(--shadow-card); }
.page-card { padding: 18px; }
.page-table-wrap { overflow-x: auto; }
.page-table { width: 100%; border-collapse: collapse; font-size: 13px; text-align: left; }
.page-table th { color: var(--muted); font-weight: 400; padding: 10px 15px; white-space: nowrap; }
.page-table td { border-top: 1px solid var(--line); padding: 14px 15px; overflow-wrap: anywhere; }
.page-table .clickable { cursor: pointer; }
.page-table .clickable:hover { background: var(--accent-tint); }
.table-name { font-weight: 600; min-width: 120px; }
.table-actions { white-space: nowrap; text-align: right; position: relative; min-width: 66px; }
.row-chevron { color: #a5a5aa; display: inline-block; margin-left: 14px; }
.table-person { display: flex; align-items: center; gap: 9px; min-width: 92px; }
.table-person a { font-weight: 600; }
.initial-avatar { background: #648bf0; color: white; width: 21px; height: 21px;
  display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; flex-shrink: 0; font-size: 11px; }
.page-table tr:nth-child(4n+2) .initial-avatar { background: #e49645; }
.page-table tr:nth-child(4n+3) .initial-avatar { background: #55b382; }
.page-table tr:nth-child(4n+4) .initial-avatar { background: #a581dd; }
.empty-create { margin-top: 14px; }
.hive-page-head { position: sticky; top: var(--topbar-height, 58px); z-index: 3; background: var(--bg); padding: 4px 0 20px;
  border-bottom: 1px solid var(--line); }
.hive-page-head .section-head { margin: 12px 0 8px; }
.hive-page-head h2 { font-size: 22px; }
.hive-meta { font-size: 13px; }
.hive-layout { display: grid; grid-template-columns: 160px minmax(0, 1fr); min-height: 450px; }
.hive-sidebar { border-right: 1px solid var(--line); padding: 18px 10px 18px 0; }
.hive-sidebar a { display: block; padding: 9px 12px; margin-bottom: 3px; border-radius: 7px; font-size: 13px; color: var(--text); }
.hive-sidebar a:hover { background: var(--panel-2); text-decoration: none; }
.hive-sidebar a.selected { background: var(--accent-tint); color: var(--accent); font-weight: 600; }
.sidebar-group { color: var(--muted); font-size: 12px; margin: 28px 12px 8px; }
.hive-content { min-width: 0; padding: 10px 0 24px 24px; }
.hive-content > .section-head { margin: 12px 0 14px; }
.version-card { padding: 0 18px; }
.version-row { display: flex; align-items: center; gap: 18px; min-height: 68px; border-bottom: 1px solid var(--line); }
.version-row:last-child { border-bottom: 0; }
.version-row > :first-child { width: 86px; flex-shrink: 0; }
.version-row > button { margin-left: auto; }
.version-row select, .member-role { padding: 5px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--panel); color: var(--text); }
.delete-card { border-color: #efaaa6; }
.delete-card p { margin-top: 0; }
.row-menu { display: inline-block; text-align: left; margin-left: 10px; }
.row-menu summary { list-style: none; padding: 0 8px; border-radius: 6px; cursor: pointer; color: var(--muted); font-size: 19px; }
.row-menu summary::-webkit-details-marker { display: none; }
.row-menu[open] summary, .row-menu summary:hover { background: var(--panel-2); }
.menu-pop { position: fixed; right: 10px; z-index: 40; min-width: 120px; max-width: calc(100vw - 16px); max-height: calc(100vh - 16px); overflow: auto; padding: 5px; border: 1px solid var(--line);
  border-radius: 8px; background: var(--panel); box-shadow: var(--shadow-pop); }
.menu-item { display: block; border: 0; background: none; color: var(--text); cursor: pointer;
  width: 100%; text-align: left; border-radius: 5px; padding: 7px 10px; }
.menu-item:hover { background: var(--panel-2); }
.menu-item.danger { color: var(--err-fg); }
.menu-item.danger:first-of-type, .menu-item:not(.danger) + .menu-item.danger { border-top: 1px solid var(--line); border-radius: 0; margin-top: 4px; padding-top: 10px; }
.select-chevron { width:16px; height:16px; flex-shrink:0; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }
.member-roles { border: 0; padding: 0; margin: 15px 0; font-size: 13px; }
.member-roles legend { color: var(--muted); margin-bottom: 7px; }
.member-roles label { padding: 8px 10px; border: 1px solid var(--line); margin: 0 !important; }
.member-roles input { width: auto !important; display: inline !important; margin: 0 !important; accent-color: var(--accent); }
.usage-totals { display: flex; gap: 28px; margin-bottom: 12px; }
.usage-total { font-size: 21px; font-weight: 600; font-variant-numeric: tabular-nums; }
.console-build { font-size: 13px; margin: 8px 0 18px; }
.topbar #whoami #whoami-name { display: inline; }
@media (max-width: 640px) {
  .summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .summary-cell:nth-child(2) { border-right: 0; }
  .summary-cell:nth-child(-n+2) { border-bottom: 1px solid var(--line); }
  .summary-cell { padding: 12px; }
  .hive-layout { grid-template-columns: minmax(0, 1fr); align-content: start; }
  .hive-sidebar { display: flex; gap: 4px; flex-wrap: wrap; align-content: flex-start; align-items: center; border-right: 0; padding: 12px 0 0; }
  .hive-sidebar a { padding: 7px 10px; }
  .sidebar-group { flex-basis: 100%; margin: 5px 10px 0; }
  .hive-content { padding: 0 0 20px; }
  .hive-page-head { position: sticky; top: var(--topbar-height, 88px); }
  .topbar { gap: 6px; }
  .topbar #whoami { max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
  .page-table { min-width: 540px; }
  .hive-meta { line-height: 1.9; }
  .version-row { gap: 8px; }
  .version-row > :first-child { width: 62px; }
}

.empty.page-card { border: 1px solid var(--line); background: var(--panel); }
/* REQ-0057: Pal settings and Agent management. */
.pal-avatar { display:inline-flex; width:28px; height:28px; align-items:center; justify-content:center; border-radius:50%; color:white; font-size:14px; font-weight:600; flex-shrink:0; vertical-align:middle; }
.engine-tag { display:inline-block; border:1px solid var(--line); border-radius:6px; padding:2px 7px; color:var(--muted); font-size:12px; white-space:nowrap; }
.pal-settings { background:white; border:1px solid var(--line); border-radius:14px; padding:8px 24px; box-shadow:0 2px 8px #00000005; }
.setting-row { display:grid; grid-template-columns:130px minmax(0,1fr); gap:16px; align-items:center; padding:18px 0; border-bottom:1px solid var(--line); }
.setting-row:last-of-type { border-bottom:0; }
.setting-row > :first-child { color:var(--muted); }
.setting-row select { max-width:100%; }
.agent-note:empty, .model-note:empty, .list-note:empty { display:none; }
.agent-note, .model-note, .list-note { margin:8px 0; font-size:13px; }
.agent-picker { position:relative; width:min(100%,540px); }
.agent-trigger { display:flex; align-items:center; justify-content:space-between; width:100%; padding:12px 14px; background:white; border:1px solid var(--line); border-radius:9px; text-align:left; }
.agent-trigger > span:first-child { overflow-wrap:anywhere; }
.agent-menu { position:absolute; top:calc(100% + 6px); left:0; width:100%; max-height:360px; overflow:auto; padding:7px; z-index:20; background:white; border:1px solid var(--line); border-radius:12px; box-shadow:0 12px 32px #0002; }
.agent-menu button { display:flex; align-items:center; gap:8px; width:100%; background:white; border:0; border-radius:7px; text-align:left; padding:10px; }
.agent-menu button > span:first-child { flex:1; overflow-wrap:anywhere; }
.agent-menu button:hover, .agent-menu [aria-selected=true] { background:#edf5ff; }
.agent-menu .agent-separator { border-top:1px solid var(--line); border-radius:0; }
.agent-table { --agent-columns:minmax(100px,1.1fr) var(--table-label-min-width) minmax(90px,1.2fr) var(--table-label-min-width) minmax(75px,1fr) minmax(60px,1fr) 28px; border:1px solid var(--line); border-radius:12px; background:white; }
.agent-table-head, .agent-table-row { display:grid; grid-template-columns:var(--agent-columns); gap:10px; padding:15px 16px; align-items:center; }
.agent-table-head { color:var(--muted); font-size:12px; }
.agent-table-row { border-top:1px solid var(--line); }
.agent-table-row > * { min-width:0; overflow-wrap:anywhere; }
.agent-name { display:flex; flex-direction:column; gap:3px; }
.agent-name span { font-size:12px; }
.agent-model { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13px; }
.agent-users { display:flex; flex-wrap:wrap; gap:6px; }
.agent-user { display:inline-flex; align-items:center; gap:5px; max-width:100%; font-size:12px; }
.agent-actions { margin-left:0; }
.agent-actions > summary { cursor:pointer; list-style:none; text-align:center; font-size:22px; border-radius:7px; }
.agent-actions > summary:hover { background:#f5f5f7; }

.model-field { display:flex; flex-wrap:wrap; align-items:center; gap:8px; min-width:0; }
.model-field > select { width:min(100%,370px); min-width:0; }
.model-note { width:100%; }
.model-manual { display:flex; width:100%; gap:8px; }
.model-manual input { min-width:0; flex:1; }
.provider-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin:16px 0; }
.provider-choice { display:flex; flex-direction:column; gap:5px; align-items:flex-start; background:white; border:1px solid var(--line); border-radius:10px; padding:15px; }
.provider-choice.selected { border-color:var(--accent); background:#edf5ff; }
.provider-engine { margin:16px 0; }
.wizard-agent { display:flex; align-items:center; flex-wrap:wrap; gap:8px; padding:12px; border-bottom:1px solid var(--line); }
.wizard-agent input { width:auto; }
.wizard-agent > span:first-of-type { flex:1; }
.device-code { display:flex; align-items:center; gap:12px; margin:15px 0; }
.device-code > span { font:600 22px monospace; letter-spacing:2px; padding:12px; background:var(--bg); border-radius:8px; }
.agent-login .login-url { margin:12px 0; }
.agent-login .login-code { margin-top:16px; }
#sec-agent, #sec-agents { scroll-margin-top:24px; }
[hidden] { display:none !important; }
@media (max-width:1000px) {
  .agent-table-head { display:none; }
  .agent-table-row { grid-template-columns:minmax(0,1fr) minmax(0,1fr) 32px; }
  .agent-table-row > .agent-actions { grid-column:3; grid-row:1; }
  .agent-model { white-space:normal; }
}
@media (max-width:540px) {
  .pal-settings { padding:4px 14px; }
  .setting-row { grid-template-columns:1fr; gap:8px; padding:14px 0; }
  .agent-menu button { flex-wrap:wrap; }
  .agent-menu button > span:first-child { flex-basis:100%; }
  .model-field > select { width:100%; }
  .provider-grid { gap:8px; }
  .agent-table-row { gap:10px; padding:14px; }
}

.pal-settings select { border:1px solid var(--line); border-radius:9px; background:white; padding:11px 12px; font-size:14px; color:var(--text); }
.pal-settings .ag-effort { width:180px; }
.modal .provider-choice { border:1px solid var(--line); }
.modal .provider-choice.selected { border-color:var(--accent); }
.modal .ghost { background:white; border:1px solid var(--line); }

/* REQ-0061: the existing shared Agent list lives inside the hive content pane. */
#shared-agents .shared-agent-scroll { overflow-x:auto; padding-bottom:12px; }
#shared-agents .agent-table { min-width:calc(547px + 2 * var(--table-label-min-width)); }
#shared-agents .agent-table-head, #shared-agents .agent-table-row {
  grid-template-columns:var(--agent-columns);
}
#shared-agents .agent-table-head { display:grid; }
#shared-agents .agent-table-row > .agent-actions { grid-column:auto; grid-row:auto; }
#shared-agents summary[aria-disabled=true] { opacity:.4; cursor:default; }
.hive-agent-alert { margin:12px 0; overflow-wrap:anywhere; }
.pal-agent .badge { margin:2px 0; }

/* REQ-0057 design 12: Pal uses the hive navigation pattern. */
.pal-header { position:sticky; top:var(--topbar-height,58px); z-index:5; background:var(--bg); padding-bottom:18px; border-bottom:1px solid var(--line); }
.pal-header .section-head { margin:12px 0 6px; }
.pal-header h2 { display:flex; align-items:center; gap:8px; }
.pal-header .h-actions { display:flex; gap:8px; flex-shrink:0; }
.pal-header .h-actions .warn { color:var(--text); border-color:var(--line); }
.pal-header .h-actions .ok { background:var(--accent); color:white; border:0; }
.pal-subtitle { font-size:13px; }
.pal-layout { min-height:650px; }
.pal-sidebar { padding:16px 10px 16px 0; }
.pal-nav-group { font-size:12px; padding:14px 12px 5px; }
.pal-content { padding:18px 0 24px 24px; min-width:0; }
.pal-content section > .section-head { margin:0 0 14px; }
.pal-stats { display:flex; gap:36px; margin-top:16px; }
.pal-stats a { display:flex; flex-direction:column; color:var(--text); }
.pal-stats span { font-size:12px; }
.pal-stats b { font-size:22px; }
.pal-mobile-nav { display:none; }
.pal-banner { display:flex; align-items:center; gap:12px; padding:12px 16px; margin-top:12px; border:1px solid #f3d397; border-radius:10px; background:var(--warn-bg); color:var(--warn-fg); }
.pal-banner.err { border-color:#f6c9c6; background:var(--err-bg); color:var(--err-fg); }
.pal-banner > button:first-of-type { margin-left:auto; }
.pal-content .pal-settings { margin-top:0; }
.agent-icon, .feishu-icon { display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px; border-radius:5px; color:white; font-size:12px; font-weight:600; flex-shrink:0; }
.feishu-icon { background:#3974ff; }
.pal-page .agent-trigger { justify-content:flex-start; }
.pal-page .agent-trigger > .select-chevron { margin-left:auto; }
.pal-page .agent-menu { min-width:100%; width:max-content; max-width:calc(100vw - 60px); }
.pal-page .agent-menu button { gap:9px; }
.pal-page .agent-menu .engine-tag { margin-left:auto; }
.agent-check { color:var(--accent); }
.picker-account { font-size:12px; }
.pal-agent-table .agent-table-head, .pal-agent-table .agent-table-row { grid-template-columns:minmax(100px,1fr) var(--table-label-min-width) minmax(100px,1fr) minmax(130px,1.2fr) var(--table-label-min-width) 28px; gap:10px; padding:16px; }
.pal-agent-table .agent-name { flex-direction:row; align-items:center; gap:8px; }
.pal-agent-table { box-shadow:var(--shadow-card); font-size:13px; }
.pal-table { background:white; border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow-card); }
.pal-table table { border-collapse:collapse; width:100%; font-size:13px; }
.pal-table th { color:var(--muted); font-weight:400; text-align:left; font-size:12px; }
.pal-table th, .pal-table td { padding:14px; border-bottom:1px solid var(--line); white-space:nowrap; }
.pal-table tr:last-child td { border-bottom:0; }
.pal-table .chat-actions { display:flex; align-items:center; justify-content:flex-end; gap:8px; }
.pal-page .agent-actions > div { min-width:150px; }
.pal-page .agent-actions button:not(.menu-item) { text-align:left; border:0; background:white; color:var(--text); }
.channel-row { display:flex; align-items:center; gap:12px; font-size:13px; }
.channel-row > .badge { margin-left:auto; }
.behavior-footer { display:flex; justify-content:space-between; align-items:flex-start; gap:12px; margin-top:10px; }
.behavior-actions { display:flex; gap:8px; align-items:center; }
.platform-rules { flex:1; min-width:0; }
.platform-rules textarea { margin-top:12px; }
.pal-page .usage-totals { gap:36px; margin-bottom:8px; }
.pal-page .usage-totals b { font-size:24px; }
.pal-page .logbox { font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",monospace; font-size:12px; line-height:1.8; white-space:pre; }
.pal-page .danger-row { border-color:#f6c9c6; }
.pal-page button:disabled, .pal-page select:disabled, .pal-page input:disabled, .pal-page textarea:disabled { opacity:.5; cursor:default; background:var(--panel-2); }
/* 卡片布局中余量独占一行，避免自动排进窄小的菜单列。 */
@media (max-width:1000px) {
  .pal-agent-table .agent-table-head { display:none; }
  .pal-agent-table .agent-table-row { grid-template-columns:minmax(0,1fr) minmax(0,1fr) 28px; }
  .pal-agent-table .agent-name { grid-column:1 / 3; grid-row:1; }
  .pal-agent-table .agent-actions { grid-column:3; grid-row:1; }
  .pal-agent-table .agent-engine { grid-column:1; grid-row:2; }
  .pal-agent-table .agent-credential { grid-column:2 / 4; grid-row:2; }
  .pal-agent-table .row-allow { grid-column:1 / 4; grid-row:3; }
  .pal-agent-table .agent-status { grid-column:1 / 4; grid-row:4; }
}
@media (min-width:601px) {
  .pal-layout { grid-template-columns:160px minmax(0,1fr); }
  .pal-sidebar { display:block; border-right:1px solid var(--line); }
}
@media (max-width:600px) {
  body:has(.pal-page) main { padding:16px 12px 32px; }
  .pal-header { top:var(--topbar-height,52px); padding-bottom:12px; }
  .pal-header .section-head { flex-wrap:nowrap; gap:8px; }
  .pal-header h2 { font-size:17px; flex-wrap:wrap; gap:5px; min-width:0; }
  .pal-header #bot-label { max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .pal-header .h-actions { flex-wrap:nowrap; gap:6px; }
  .pal-header .h-actions button { padding:6px 9px; font-size:12px; }
  .pal-subtitle { font-size:12px; }
  .pal-sidebar { display:none; }
  .pal-layout { display:block; min-height:450px; }
  .pal-mobile-nav { display:block; width:100%; padding:9px 12px; margin:14px 0; border:1px solid var(--line); border-radius:8px; background:white; color:var(--text); font-size:14px; }
  .pal-content { padding:4px 0 20px; }
  .pal-page .pal-settings .setting-row { grid-template-columns:72px minmax(0,1fr); gap:10px; }
  .pal-page .pal-settings { padding:14px; }
  .pal-page .agent-menu { width:calc(100vw - 44px); max-width:calc(100vw - 44px); left:auto; right:0; }
  .pal-page .agent-menu button { flex-wrap:wrap; }
  .pal-page .agent-menu .engine-tag { margin-left:0; }
  .pal-agent-table .agent-table-head { display:none; }
  .pal-agent-table .agent-table-row { grid-template-columns:minmax(0,1fr) minmax(0,1fr) 28px; gap:10px; padding:14px; }
  .pal-agent-table .agent-table-row > .agent-actions { grid-column:3; grid-row:1; }
  .pal-agent-table .agent-name { grid-column:1 / 3; }
  .pal-table { overflow-x:auto; }
  .pal-table table { min-width:580px; }
  #cfg-tasks .pal-table table { min-width:340px; }
  .pal-table .agent-actions[open] > div { position:fixed; right:20px; }
  .pal-stats { gap:28px; padding:16px; }
  .pal-page .page-card { padding:14px; }
  .pal-page .usage-totals { gap:22px; }
  .pal-page .usage-totals b { font-size:21px; }
  .behavior-footer { flex-wrap:wrap; }
  .behavior-actions { margin-left:auto; }
  .platform-rules { flex-basis:100%; }
  .channel-row { flex-wrap:wrap; gap:8px; }
  .pal-banner { flex-wrap:wrap; padding:10px; font-size:13px; gap:8px; }
  .pal-banner button { padding:6px 8px; font-size:12px; }
  .pal-page .logbox { max-width:100%; overflow:auto; }
  .pal-page .danger-row { grid-template-columns:minmax(0,1fr) auto; }
}
.pal-sidebar a.danger-title { color:var(--err-fg); }
.pal-page .agent-trigger { gap:8px; }
.pal-page .agent-picker { width:min(100%,340px); }
.pal-page .agent-menu button > .agent-icon { flex:0 0 22px; }
.pal-page .agent-menu button > span:nth-child(2) { flex:1; }
.pal-page .model-field > select { width:min(100%,280px); }
.pal-page .ag-effort { width:120px; }
.pal-page .setting-row { padding:14px 0; }
.pal-page .setting-row:nth-child(4) { border-bottom:0; }
#own-agents > .section-head { margin:0 0 14px; }
.pal-page .usage-totals > div { display:flex; flex-direction:column; gap:2px; }
.pal-page .usage-svg { border:0; border-radius:0; box-shadow:none; }
.pal-table .chat-actions > .badge.ok { background:var(--accent-tint); color:var(--accent); }
#pal-state .badge::before, .pal-agent-table .badge::before, .channel-row .badge::before, .pal-table .badge::before { content:'●'; font-size:9px; margin-right:4px; }

/* Help anchors clear the measured sticky header on desktop and mobile. */
#sec-releases { scroll-margin-top: calc(var(--topbar-height, 88px) + 16px); }

/* 窄屏列表共用行内列名，关键信息与操作无需横滑。 */
@media (max-width:600px) {
  .mobile-table, #shared-agents .agent-table.mobile-table,
  .pal-table table.mobile-table { display:block; width:100%; min-width:0; }
  .mobile-table > tbody { display:block; }
  .mobile-table .mobile-table-head, #shared-agents .mobile-table-head { display:none; }
  .mobile-table .mobile-row, #shared-agents .mobile-row {
    display:block; padding:10px 0; border-top:1px solid var(--line);
  }
  .mobile-table .mobile-row:first-child { border-top:0; }
  .mobile-table .mobile-row > .mobile-cell {
    display:block; position:relative; width:auto; min-width:0; max-width:100%;
    padding:6px 14px 6px 108px; border:0; text-align:left;
    white-space:normal; overflow-wrap:anywhere;
  }
  .mobile-table .mobile-cell::before {
    content:attr(data-label); position:absolute; left:14px; top:6px;
    width:84px; color:var(--muted); font-size:12px; font-weight:400;
  }
  .mobile-table .mobile-cell:empty { display:none; }
  .mobile-table .agent-name > .muted { display:block; }
  .mobile-table .agent-actions > summary { width:38px; }
  .mobile-table .mobile-cell select { min-width:0; max-width:100%; }
  .modal .model-field { width:100%; }
  .modal .model-field > select { flex:1 1 100%; width:100%; min-width:0; }
  .wizard-agent > span { min-width:0; overflow-wrap:anywhere; }
  .wizard-agent > span:first-of-type { flex-basis:calc(100% - 32px); }
  .modal .row > button { max-width:100%; white-space:normal; }
}
