/**
 * AI 设置分组面板（网站设置 → AI设置）
 *
 * 【作用域收口】全部规则以 body.admin-SettingMng 开头，且只作用于 .ais-* 元素：
 *   admin2 的 body class 是 admin-{$action}，网站设置页即 body.admin-SettingMng；
 *   其它后台页、登录页、旧后台壳一条都不命中。
 * 颜色一律取 backend-modern.css 的设计令牌，暗色由 .night 重定义的同一批令牌自动跟随。
 */

body.admin-SettingMng .ais-wrap {
  display: block;
}

body.admin-SettingMng .ais-group {
  margin: 0 0 16px;
  padding: 16px 20px 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

body.admin-SettingMng .ais-group:last-of-type {
  margin-bottom: 0;
}

body.admin-SettingMng .ais-group-head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 6px;
}

body.admin-SettingMng .ais-group-title {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--color-text-strong);
}

/* 通道级「清空这一路」：与行操作按钮同一套视觉，hover 转成危险色 */
body.admin-SettingMng .ais-group-clear {
  margin-left: auto;
  flex: 0 0 auto;
  padding: 2px 8px;
  font-size: 12px;
  line-height: 18px;
  color: var(--color-text-muted);
  background: var(--color-surface);
  border: 1px solid var(--color-border-input);
  border-radius: 4px;
  cursor: pointer;
}

body.admin-SettingMng .ais-group-clear:hover {
  color: var(--ais-bad-text);
  border-color: var(--ais-bad-text);
}

/* 「写作助手在用」/「预留接口」状态徽章 */
body.admin-SettingMng .ais-tag {
  padding: 2px 8px;
  font-size: 12px;
  line-height: 18px;
  border-radius: 9px;
  white-space: nowrap;
}

body.admin-SettingMng .ais-tag-live {
  color: #0f7b3f;
  background: rgba(15, 123, 63, .12);
}

body.admin-SettingMng .ais-tag-reserved {
  color: var(--color-text-muted);
  background: var(--color-surface-muted);
  border: 1px solid var(--color-border);
}

body.admin-SettingMng .ais-group-desc {
  margin: 0 0 12px;
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text-muted);
}

/* 供应商预设工具条 */
body.admin-SettingMng .ais-toolbar {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 10px;
}

body.admin-SettingMng .ais-toolbar-label {
  flex: 0 0 auto;
  white-space: nowrap;
  font-size: 12px;
  color: var(--color-text-muted);
}

body.admin-SettingMng .ais-preset {
  min-width: 220px;
  max-width: 320px;
  height: 30px;
  padding: 0 8px;
  font-size: 12px;
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-border-input);
  border-radius: 4px;
}

body.admin-SettingMng .ais-preset:hover {
  border-color: var(--color-border-hover);
}

/* 表格沿用其它 tab 的样式，只收紧单元格留白 */
body.admin-SettingMng .ais-group table {
  border-collapse: collapse;
}

body.admin-SettingMng .ais-group td {
  vertical-align: top;
}

body.admin-SettingMng .ais-group b {
  display: block;
  padding-top: 6px;
  font-weight: 600;
  color: var(--color-text-strong);
}

/* 字段下方的灰字说明 */
body.admin-SettingMng .ais-hint {
  display: block;
  margin-top: 5px;
  font-size: 12px;
  line-height: 1.6;
  color: var(--color-text-muted);
  word-break: break-all;
}

/* Key 行：输入框 + 显隐切换按钮 */
body.admin-SettingMng .ais-keybox {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  width: 90%;
  max-width: 600px;
}

body.admin-SettingMng .ais-keybox input.input-90 {
  flex: 1 1 auto;
  width: auto;
  min-width: 0;
  margin: 0;
}

body.admin-SettingMng .ais-eye {
  flex: 0 0 auto;
  width: 30px;
  height: 30px;
  padding: 0;
  font-size: 13px;
  line-height: 1;
  color: var(--color-text-muted);
  background: var(--color-surface-muted);
  border: 1px solid var(--color-border-input);
  border-radius: 4px;
  cursor: pointer;
}

body.admin-SettingMng .ais-eye:hover {
  color: var(--color-text-strong);
  border-color: var(--color-border-hover);
}

/* 未点亮 = 当前是密文，点击显示；点亮 = 当前是明文，点击隐藏 */
body.admin-SettingMng .ais-eye::before {
  content: "\25CB";
}

body.admin-SettingMng .ais-keybox.is-shown .ais-eye::before {
  content: "\25CF";
}

body.admin-SettingMng .ais-keybox.is-shown .ais-eye {
  color: var(--color-primary);
  border-color: var(--color-primary);
}

/* 底部：测试连接按钮 + 结果 */
body.admin-SettingMng .ais-foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px dashed var(--color-border);
}

body.admin-SettingMng .ais-result {
  font-size: 12px;
  line-height: 1.6;
  color: var(--color-text-muted);
  word-break: break-all;
}

body.admin-SettingMng .ais-result.is-ok {
  color: #0f7b3f;
}

body.admin-SettingMng .ais-result.is-fail {
  color: #c0392b;
}

body.admin-SettingMng .ais-result .ais-preview {
  display: block;
  margin-top: 2px;
  font-size: 12px;
  color: var(--color-text-muted);
}

body.admin-SettingMng .ais-foot .button[disabled] {
  cursor: default;
  opacity: .6;
}

@media (max-width: 992px) {
  body.admin-SettingMng .ais-keybox,
  body.admin-SettingMng .ais-preset {
    width: 100%;
    max-width: none;
  }
}

/* ===== 动态行 / 明细表 / 记录表（U-011） ===== */

/* 成功/失败色没有全局令牌（--color-good-* / --color-bad-* 只在 .hint 作用域内定义，
   本面板不在 .hint 里，取不到），故在本页根上集中定义一次，不在各处写死；
   暗色用 .night 覆盖同一批令牌，与本项目其它令牌的跟随方式一致。 */
body.admin-SettingMng {
  --ais-ok-text: #0f7b3f;
  --ais-ok-bg: rgba(15, 123, 63, .12);
  --ais-bad-text: #c0392b;
  --ais-bad-bg: rgba(192, 57, 43, .1);
  --ais-on-primary: #ffffff;
}

body.admin-SettingMng.night {
  --ais-ok-text: #7ee2a8;
  --ais-ok-bg: rgba(126, 226, 168, .14);
  --ais-bad-text: #ff8a80;
  --ais-bad-bg: rgba(255, 138, 128, .14);
  --ais-on-primary: #0b1220;
}

/* HTML hidden 的语义必须压过下面那些由我设置了 display 的规则（作者样式会覆盖 UA 的 display:none），
   否则模板里带 hidden 的脏标记条、逐次明细区、行操作按钮会一上来就可见。作用域仅本页。 */
body.admin-SettingMng [hidden] {
  display: none !important;
}

/* 页面级说明（每页只出现一次） */
body.admin-SettingMng .ais-wrap-intro {
  margin: 0 0 12px;
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text-muted);
}

/* S-04 有未保存修改 / S-15 S-16 保存失败 / S-17 保存成功：同一条顶部提示条，按态换色 */
body.admin-SettingMng .ais-dirty-bar {
  display: block;
  margin: 0 0 12px;
  padding: 8px 12px;
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text);
  background: var(--color-surface-muted);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-primary);
  border-radius: 4px;
}

body.admin-SettingMng .ais-dirty-bar.is-error {
  color: var(--ais-bad-text);
  background: var(--ais-bad-bg);
  border-color: var(--ais-bad-text);
}

body.admin-SettingMng .ais-dirty-bar.is-ok {
  color: var(--ais-ok-text);
  background: var(--ais-ok-bg);
  border-color: var(--ais-ok-text);
}

/* S-20 零配置引导条（条内锚点链接复用全局 a 样式，不重复定义） */
body.admin-SettingMng .ais-guide {
  display: block;
  margin: 0 0 12px;
  padding: 10px 12px;
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text);
  background: var(--color-surface-muted);
  border: 1px dashed var(--color-border-input);
  border-radius: 6px;
}

/* 行列表：竖向堆叠，间距交给容器，避免每行各写 margin */
body.admin-SettingMng .ais-rows {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

body.admin-SettingMng .ais-row {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 6px;
}

/* 主行强调：左侧描边 + 徽章实心（S-01 / AC-03） */
body.admin-SettingMng .ais-row[data-ais-row-main] {
  border-left: 3px solid var(--color-primary);
}

body.admin-SettingMng .ais-row-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
}

/* S-03 收起态：行体整体隐藏，只留行头与摘要（摘要字段见 .ais-row-summary） */
body.admin-SettingMng .ais-row[data-ais-collapsed] .ais-row-body {
  display: none;
}

body.admin-SettingMng .ais-row:not([data-ais-collapsed]) .ais-row-head {
  border-bottom: 1px solid var(--color-border);
}

body.admin-SettingMng .ais-row-no {
  flex: 0 0 auto;
  min-width: 20px;
  height: 20px;
  padding: 0 5px;
  font-size: 12px;
  line-height: 20px;
  text-align: center;
  color: var(--color-text-muted);
  background: var(--color-surface-muted);
  border: 1px solid var(--color-border);
  border-radius: 10px;
}

body.admin-SettingMng .ais-row[data-ais-row-main] .ais-row-no {
  font-weight: 600;
  color: var(--ais-on-primary);
  background: var(--color-primary);
  border-color: var(--color-primary);
}

body.admin-SettingMng .ais-tag-main {
  font-weight: 600;
  color: var(--ais-on-primary);
  background: var(--color-primary);
}

body.admin-SettingMng .ais-tag-backup {
  color: var(--color-text-muted);
  background: var(--color-surface);
  border: 1px solid var(--color-border-input);
}

/* S-03 收起态唯一信息来源：单行省略，防止长域名把行操作按钮挤出去 */
body.admin-SettingMng .ais-row-summary {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 12px;
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* 行操作：↑ ↓ 收起 ✕ */
body.admin-SettingMng .ais-row-head [data-ais-move],
body.admin-SettingMng .ais-row-head [data-ais-toggle],
body.admin-SettingMng .ais-row-head [data-ais-del-row] {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  min-width: 24px;
  height: 24px;
  padding: 0 6px;
  font-size: 12px;
  line-height: 1;
  color: var(--color-text-muted);
  background: var(--color-surface);
  border: 1px solid var(--color-border-input);
  border-radius: 4px;
  cursor: pointer;
}

body.admin-SettingMng .ais-row-head [data-ais-move]:hover,
body.admin-SettingMng .ais-row-head [data-ais-toggle]:hover {
  color: var(--color-text-strong);
  border-color: var(--color-border-hover);
}

body.admin-SettingMng .ais-row-head [data-ais-del-row]:hover {
  color: var(--ais-bad-text);
  border-color: var(--ais-bad-text);
}

body.admin-SettingMng .ais-row-body {
  padding: 10px 12px 12px;
}

/* 字段标签用后代选择器：行体里若为每个字段再包一层容器，仍能命中 */
body.admin-SettingMng .ais-row-body label {
  display: block;
  margin: 10px 0 5px;
  font-size: 12px;
  font-weight: 600;
  color: var(--color-text-strong);
}

body.admin-SettingMng .ais-row-body input[type="text"],
body.admin-SettingMng .ais-row-body textarea {
  display: block;
  width: 100%;
  max-width: 720px;
  min-width: 0;
  padding: 6px 8px;
  font-size: 12px;
  line-height: 1.6;
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-border-input);
  border-radius: 4px;
}

body.admin-SettingMng .ais-row-body textarea {
  font-family: ui-monospace, Consolas, Menlo, monospace;
  resize: vertical;
}

body.admin-SettingMng .ais-row-body input[type="text"]:focus,
body.admin-SettingMng .ais-row-body textarea:focus {
  outline: 0;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
}

body.admin-SettingMng .ais-row-body [data-ais-preset] {
  margin: 0 0 5px;
}

/* Key 池：条目横排，条目之间用 → 表示「顺序即尝试顺序」 */
body.admin-SettingMng .ais-keys {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin: 0 0 6px;
  padding: 0;
  list-style: none;
}

body.admin-SettingMng .ais-keys > li {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 8px;
  font-size: 12px;
  color: var(--color-text);
  background: var(--color-surface-muted);
  border: 1px solid var(--color-border);
  border-radius: 4px;
}

body.admin-SettingMng .ais-keys > li + li::before {
  content: "\2192";
  margin-left: -2px;
  color: var(--color-text-muted);
}

body.admin-SettingMng .ais-keys .ais-mask {
  font-family: ui-monospace, Consolas, Menlo, monospace;
}

body.admin-SettingMng .ais-keys label {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  margin: 0;
  font-size: 12px;
  font-weight: 400;
  color: var(--color-text-muted);
  cursor: pointer;
}

/* 勾选「删除」= 该 Key 本次保存将被移除，先给删除线视觉反馈。
   两条分开写：不支持 :has() 的浏览器会整条丢弃选择器列表，合写会连带 .is-del 兜底一起失效 */
body.admin-SettingMng .ais-keys > li:has([data-ais-key-del]:checked) {
  color: var(--color-text-muted);
  text-decoration: line-through;
  opacity: .6;
}

body.admin-SettingMng .ais-keys > li.is-del {
  color: var(--color-text-muted);
  text-decoration: line-through;
  opacity: .6;
}

/* Key 池空态：「还没有 Key」 */
body.admin-SettingMng .ais-keys > li.ais-empty {
  color: var(--color-text-muted);
  background: none;
  border-style: dashed;
}

/* 计数 S-13：达上限标红；阈值类名由脚本加，CSS 无法从计数文本判断 */
body.admin-SettingMng [data-ais-keys-count],
body.admin-SettingMng [data-ais-row-count] {
  font-size: 12px;
  font-weight: 400;
  color: var(--color-text-muted);
}

body.admin-SettingMng [data-ais-keys-count].is-full,
body.admin-SettingMng [data-ais-row-count].is-full {
  color: var(--ais-bad-text);
}

/* S-05 / S-06 校验失败：行级红边 + 字段级红字，两者都只认 data-ais-error。
   属性在行上、提示元素在行内两种落法都覆盖；同样分开写，避免 :has() 不被支持时连带丢弃前一条 */
body.admin-SettingMng .ais-row[data-ais-error] {
  border-color: var(--ais-bad-text);
}

body.admin-SettingMng .ais-row:has([data-ais-error]) {
  border-color: var(--ais-bad-text);
}

body.admin-SettingMng [data-ais-error] {
  display: block;
  margin-top: 4px;
  font-size: 12px;
  line-height: 1.6;
  color: var(--ais-bad-text);
}

body.admin-SettingMng input[data-ais-error],
body.admin-SettingMng textarea[data-ais-error] {
  border-color: var(--ais-bad-text);
}

/* S-08 / S-09 结果区：红绿沿用既有 .is-ok / .is-fail，这里只补定位与进行中态 */
body.admin-SettingMng [data-ais-result] {
  display: inline-block;
  font-size: 12px;
  line-height: 1.6;
}

body.admin-SettingMng [data-ais-result]:empty {
  display: none;
}

/* S-07 / S-10 / S-12 / S-14 各类禁用态：只压视觉，不改基础按钮外观 */
body.admin-SettingMng .ais-wrap [data-ais-test-row][disabled],
body.admin-SettingMng .ais-wrap [data-ais-test-chain][disabled],
body.admin-SettingMng .ais-wrap [data-ais-add-row][disabled],
body.admin-SettingMng .ais-wrap [data-ais-del-row][disabled],
body.admin-SettingMng .ais-wrap [data-ais-move][disabled],
body.admin-SettingMng .ais-wrap .ais-row-body textarea[disabled] {
  cursor: default;
  opacity: .55;
}

body.admin-SettingMng .ais-group-foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px dashed var(--color-border);
}

/* S-11 全链路逐次明细：行号 / Key 掩码 / 分类 / 耗时 */
body.admin-SettingMng [data-ais-chain-detail] {
  flex: 1 1 100%;
  width: 100%;
  margin-top: 4px;
}

/* S-11 明细表与 S-18/S-19 记录表都是本页内的小表格，共用一套表格规则 */
body.admin-SettingMng [data-ais-chain-detail] table,
body.admin-SettingMng .ais-log table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
}

body.admin-SettingMng [data-ais-chain-detail] th,
body.admin-SettingMng [data-ais-chain-detail] td,
body.admin-SettingMng .ais-log th,
body.admin-SettingMng .ais-log td {
  padding: 5px 8px;
  text-align: left;
  border-bottom: 1px solid var(--color-border);
  word-break: break-word;
}

body.admin-SettingMng [data-ais-chain-detail] th,
body.admin-SettingMng .ais-log th {
  font-weight: 600;
  color: var(--color-text-muted);
  background: var(--color-surface-muted);
  white-space: nowrap;
}

/* S-18 / S-19 调用记录区 */
body.admin-SettingMng .ais-log {
  margin: 16px 0 0;
  padding: 16px 20px 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
}

body.admin-SettingMng .ais-log h3 {
  margin: 0 0 4px;
  font-size: 14px;
  font-weight: 600;
  color: var(--color-text-strong);
}

body.admin-SettingMng .ais-log p {
  margin: 0 0 10px;
  font-size: 12px;
  line-height: 1.7;
  color: var(--color-text-muted);
}

body.admin-SettingMng .ais-log [data-ais-log-empty] {
  margin: 0;
  padding: 14px 12px;
  font-size: 12px;
  line-height: 1.7;
  text-align: center;
  color: var(--color-text-muted);
  border: 1px dashed var(--color-border-input);
  border-radius: 6px;
}

@media (max-width: 992px) {
  body.admin-SettingMng .ais-row-body input[type="text"],
  body.admin-SettingMng .ais-row-body textarea {
    max-width: none;
  }

  body.admin-SettingMng .ais-toolbar {
    flex-wrap: wrap;
  }
}
