/* =============================================================================
   安妮花·中国成都 · 门户主题（Digital Workspace）
   -----------------------------------------------------------------------------
   本文件只服务门户，不改动共享 styles.css。
   品牌主色：安妮花橙 #EE741C（2026-10 起，与「网站页面设计 skill」规范一致）；
   旧的品牌绿 #7fcc3f 已废弃 —— 通过在本文件重映射 --brand-* 色阶，
   共享组件（按钮 / chip / 导航当前态等）自动跟随主色，无需逐个覆盖。

   规范要点：
   - 背景 #F7F9FB 冷灰白，卡片 #FFFFFF，文字 #15171A / #7F8792 / #A7ADB5；
   - 边框 #E9EDF1 / 分割线 #EEF1F4；
   - 圆角：大容器 24px · 卡片 20px · 小组件 14px（--r-xl/lg/md/sm）；
   - 阴影极轻：0 4px 20px rgba(20,30,45,.03) 系，禁止强阴影与玻璃拟态；
   - 图标一律使用 .af 线性 SVG（Lucide 风格），禁止 Emoji；
   - 动效只动 transform / opacity，并尊重 prefers-reduced-motion。

   加载顺序：styles.css → portal-brand.css → portal-theme.css（本文件最后，可覆盖）
   ============================================================================= */

/* ---------------- 基础色板重映射（品牌绿 → 安妮花橙，门户页面级覆盖） ---------------- */
:root{
  --brand-50:#FFF1E6; --brand-100:#FFE3CD; --brand-200:#FFC79A; --brand-300:#FFA458;
  --brand-400:#F28C28; --brand-500:#EE741C; --brand-600:#D9640F; --brand-700:#B65A0E;
  --brand:var(--brand-500); --brand-deep:var(--brand-700); --brand-soft:var(--brand-50);

  /* 表面 / 背景（Skill 规范：冷灰白 #F7F9FB，不纯白铺满） */
  --bg:#F7F9FB; --bg-soft:#F2F5F8; --card:#FFFFFF; --card-warm:#FDFEFF;
  --bg-cream:#F8FAFC; --bg-warm:#F0F3F7;

  /* 文字（Skill 规范三级灰阶） */
  --text:#15171A; --text-sub:#7F8792; --text-light:#A7ADB5;

  /* 边框 / 分割线 */
  --border:#E9EDF1; --border-soft:#EEF1F4;
}

/* ---------------- Design Token（语义层） ---------------- */
:root{
  /* 主色层级 */
  --color-primary:#EE741C;
  --color-primary-hover:#D9640F;
  --color-primary-active:#B65A0E;
  --color-primary-soft:#FFF1E6;
  --color-primary-soft-2:#FFE3CD;
  --color-primary-line:#FFD9BC;

  /* 表面 / 背景 */
  --color-bg:var(--bg);
  --color-surface:var(--card);
  --color-surface-soft:var(--bg-soft);
  --color-surface-warm:var(--card-warm);
  --color-hover:#F2F5F8;

  /* 文字 */
  --color-text-primary:var(--text);
  --color-text-secondary:var(--text-sub);
  --color-text-muted:var(--text-light);

  /* 边框 */
  --color-border:var(--border);
  --color-border-soft:var(--border-soft);

  /* 状态 */
  --color-success:var(--ok); --color-success-soft:#EAF6EE;
  --color-warning:var(--warn); --color-warning-soft:#FDF3E7;
  --color-danger:var(--risk); --color-danger-soft:#FDECEA;
  --color-info:var(--info); --color-info-soft:#EEF3FE;

  /* 业务空间识别色（低占比 10%—15%，仅作识别，不改变门户主色） */
  --tone-campus:#EE741C; --tone-campus-soft:#FFF1E6; --tone-campus-line:#FFD9BC;
  --tone-online:#5B7FE0; --tone-online-soft:#EEF2FD; --tone-online-line:#D9E2FA;
  --tone-team:#2E9E97;   --tone-team-soft:#E7F4F2;   --tone-team-line:#C6E4E0;
  --tone-brand:#D08A3C;  --tone-brand-soft:#FAF2E6;  --tone-brand-line:#F0DEBF;

  /* 圆角（Skill：大容器 24 / 卡片 20 / 小组件 14） */
  --r-sm:12px; --r-md:14px; --r-lg:20px; --r-xl:24px; --r-pill:999px;
  --radius-sm:var(--r-sm); --radius-md:var(--r-md); --radius-lg:var(--r-lg); --radius-xl:var(--r-xl);

  /* 阴影（冷色调极轻阴影，禁止强阴影） */
  --shadow-sm:0 1px 2px rgba(20,30,45,.04);
  --shadow-md:0 4px 20px rgba(20,30,45,.06),0 1px 3px rgba(20,30,45,.04);
  --shadow-lg:0 8px 30px rgba(20,30,45,.10);

  /* 动效 */
  --duration-fast:160ms; --duration-normal:200ms; --duration-slow:320ms;
  --ease-standard:var(--ease);
}

/* ---------------- 布局 ---------------- */
.wrap{max-width:1320px;padding:0 24px}
@media (min-width:768px){ .wrap{padding:0 28px} }
@media (min-width:1200px){ .wrap{padding:0 32px} }

/* ---------------- 账号弹窗 · 两级授权（勾选系统 → 该系统权限就地展开；无细分权限的系统开通即用） ---------------- */
.am-apps{display:flex;flex-direction:column;gap:8px;margin-top:8px;max-height:340px;overflow:auto;padding:2px}
.am-app-row{
  border:1px solid var(--color-border-soft);border-radius:var(--radius-md);
  background:var(--color-surface);overflow:hidden;flex:none;
  transition:border-color var(--duration-fast);
}
.am-app-row.on{border-color:var(--color-primary)}
.am-app{display:flex;align-items:center;gap:9px;padding:9px 11px;cursor:pointer}
.am-app:hover{background:var(--color-hover)}
.am-app-row.on .am-app{background:var(--color-primary-soft)}
.am-app input{width:auto;height:auto;margin:0;flex:none;cursor:pointer;accent-color:var(--color-primary)}
.am-app-ico{flex:none;display:grid;place-items:center;width:26px;height:26px;border-radius:8px;background:var(--color-primary-soft);color:var(--color-primary);font-size:14px}
.am-app-row.on .am-app-ico{background:var(--color-surface)}
.am-app-txt{min-width:0;display:flex;align-items:baseline;gap:8px;line-height:1.3}
.am-app-txt b{font-size:12.5px;color:var(--color-text-primary)}
.am-app-txt em{font-style:normal;font-size:10.5px;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.am-perm-block{border-top:1px solid var(--color-border-soft);padding:8px 10px 10px;background:var(--color-surface-soft)}
.am-app-note{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--color-text-muted);padding:8px 12px;border-top:1px solid var(--color-border-soft);background:var(--color-surface-soft)}
/* 角色带来的系统准入：锁定态（不可取消，随角色定义联动） */
.am-app-row.locked{border-style:dashed}
.am-app-row.locked .am-app{cursor:default}
.am-app-row.locked .am-app input{cursor:not-allowed;opacity:.85}
.am-app-tag{font-style:normal;font-size:10px;line-height:1.6;color:var(--color-primary);background:var(--color-primary-soft);border-radius:var(--r-pill);padding:1px 8px;white-space:nowrap}

/* 账号弹窗：角色摘要 + 高级授权折叠 */
.am-role-summary{margin-top:8px;font-size:11.5px;line-height:1.7;color:var(--color-text-secondary);
  background:var(--color-surface-soft);border:1px solid var(--color-border-soft);border-radius:var(--r-md,10px);padding:8px 12px}
.am-role-summary b{color:var(--color-text-primary);font-weight:600}
.am-role-summary .muted{color:var(--color-text-muted)}
.am-adv-toggle{display:flex;align-items:center;gap:7px;width:100%;text-align:left;cursor:pointer;
  font-size:12px;color:var(--color-text-secondary);background:transparent;border:1px dashed var(--color-border-soft);
  border-radius:var(--r-md,10px);padding:9px 12px;transition:.18s}
.am-adv-toggle:hover{background:var(--color-surface-soft);border-color:var(--color-primary)}
.am-adv-toggle .am-adv-caret{display:inline-block;transition:transform .18s;color:var(--color-text-muted)}
.am-adv-toggle.open .am-adv-caret{transform:rotate(90deg)}
.am-adv{margin-top:10px}
.am-adv-hint{margin:0 0 8px;font-size:11.5px;line-height:1.7;color:var(--color-text-muted)}
.am-adv-hint b{color:var(--color-text-secondary)}
.am-app-note-role{color:var(--color-text-secondary)}

/* ---------------- 顶栏：实色背景 + 极轻边框 / 阴影（不做过透磨砂） ---------------- */
.topbar{
  background:rgba(255,255,255,.96);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid var(--color-border-soft);
  box-shadow:0 1px 0 rgba(20,30,45,.02);
}
.topbar.scrolled{box-shadow:0 4px 16px rgba(20,30,45,.06)}
/* 导航当前态：橙底白字（Skill 规范），替代旧绿色高亮 */
.topnav a.on{background:var(--brand-500);color:#fff;box-shadow:0 4px 14px rgba(238,116,28,.26)}
.topbar-actions{display:flex;align-items:center;gap:8px;margin-left:auto}
.topbar-actions .auth-box{margin-left:0}
.tb-icon{
  width:38px;height:38px;flex:none;border-radius:var(--radius-sm);
  border:1px solid var(--color-border);background:#fff;color:var(--color-text-secondary);
  display:grid;place-items:center;font-size:17px;cursor:pointer;
  transition:background var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard);
}
.tb-icon:hover{background:var(--color-primary-soft);border-color:var(--color-primary-line);color:var(--color-primary-active);transform:translateY(-1px)}
.tb-icon kbd{display:none}
/* 移动端菜单按钮：字符 ☰ 已替换为 .af 线性图标 */
.menu-btn .af{font-size:19px}
/* 「搜索应用」是带文字的宽按钮：必须用 inline-flex 单行排列，
   否则 .tb-icon 的 grid 会把图标 / 文字 / 快捷键压成三行互相重叠（半成品观感）。 */
.tb-search{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:38px}
.tb-search .af{flex:none}
.tb-search kbd{display:none;flex:none}
.tb-search-label{display:none;font-size:13px;line-height:1;color:var(--color-text-muted);white-space:nowrap}
@media (min-width:768px){ .tb-search{width:auto;padding:0 12px;justify-content:flex-start} .tb-search kbd{display:inline-block} }
@media (min-width:900px){ .tb-search{padding:0 14px} .tb-search-label{display:inline} }
kbd{
  font-family:var(--font-num);font-size:11px;line-height:1;
  border:1px solid var(--color-border);border-radius:6px;padding:3px 6px;
  background:var(--color-surface-soft);color:var(--color-text-muted);
}

/* ---------------- 页面背景（B6 修复）：固定层铺满视口，随内容自然延伸，无硬边 ---------------- */
html{background:var(--bg)}
body{
  min-height:100vh;
  background:transparent;
}
body::before{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  /* 顶部橙色微光，向下自然过渡到冷灰白底色，任何页面高度都不出现断层 */
  background:
    radial-gradient(ellipse 90% 46% at 50% -8%,rgba(238,116,28,.10),transparent 68%),
    linear-gradient(180deg,#FBF4EE 0%,var(--bg) 320px,var(--bg) 100%);
}

/* ---------------- 问候条（一行 ≤64px，寄语小字跟随） ---------------- */
.greet-bar{
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  min-height:36px;padding:14px 0 2px;
}
.greet-hi{
  margin:0;font-size:19px;font-weight:800;letter-spacing:.2px;color:var(--color-text-primary);
  display:inline-flex;align-items:center;gap:7px;white-space:nowrap;
}
.greet-hi .af{color:var(--color-primary);font-size:17px}
@media (min-width:768px){ .greet-hi{font-size:21px} }
.greet-date{font-size:12.5px;color:var(--color-text-muted);white-space:nowrap}
.greet-quote{
  flex:1;min-width:0;font-size:12px;color:var(--color-text-light);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
@media (max-width:767px){ .greet-quote{display:none} }

/* ---------------- 分组快速跳转（吸顶；手机端横向滑动） ---------------- */
.cat-chips{
  position:sticky;top:57px;z-index:30;
  display:flex;gap:8px;margin:12px 0 4px;padding:8px 2px;
  overflow-x:auto;scrollbar-width:none;
  background:linear-gradient(180deg,rgba(247,249,251,.96) 82%,transparent);
}
.cat-chips::-webkit-scrollbar{display:none}
.cat-chip{
  flex:none;display:inline-flex;align-items:center;gap:6px;
  padding:6px 13px;border-radius:var(--r-pill);
  border:1px solid var(--color-border);background:#fff;
  font-family:inherit;font-size:12.5px;font-weight:600;color:var(--color-text-secondary);
  cursor:pointer;white-space:nowrap;
  transition:background var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard);
}
.cat-chip em{font-style:normal;font-size:10.5px;color:var(--color-text-light)}
.cat-chip:hover{background:var(--color-primary-soft);border-color:var(--color-primary-line);color:var(--color-primary-active)}

/* ---------------- 首页区块 / 磁贴网格 ---------------- */
.home-sec{margin-top:6px}
.sys-group{margin:22px 0 6px;scroll-margin-top:118px}
.sg-head{display:flex;align-items:center;gap:9px;margin:0 0 11px}
.sg-ico{
  width:28px;height:28px;flex:none;border-radius:9px;display:grid;place-items:center;font-size:14px;
  background:var(--color-primary-soft);color:var(--color-primary-active);
}
.sg-head h3{margin:0;font-size:15.5px;font-weight:800;letter-spacing:.2px;color:var(--color-text-primary)}
.sg-n{font-size:11px;font-weight:600;color:var(--color-text-light);background:var(--color-surface-soft);border-radius:var(--r-pill);padding:1px 8px}
.sys-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;
}
.sys-tile{
  position:relative;min-width:0;
  border-radius:var(--radius-md);background:var(--color-surface);
  border:1px solid var(--color-border-soft);box-shadow:var(--shadow-sm);
  transition:transform var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard);
}
.sys-tile:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--color-primary-line)}
.sys-tile.is-pin{background:linear-gradient(180deg,#FFFBF6,#fff)}
.st-main{
  display:flex;align-items:center;gap:11px;width:100%;min-width:0;
  padding:12px 30px 12px 13px;
  border:0;background:transparent;font-family:inherit;text-align:left;cursor:pointer;
  border-radius:var(--radius-md);
}
.st-main:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}
.st-ico{
  width:36px;height:36px;flex:none;border-radius:var(--r-sm);display:grid;place-items:center;font-size:17px;
  background:var(--color-primary-soft);color:var(--color-primary-active);
  transition:transform var(--duration-normal) var(--ease-standard);
}
.sys-tile:hover .st-ico{transform:scale(1.06)}
.st-txt{flex:1;min-width:0}
.st-txt b{
  display:block;font-size:13.5px;font-weight:700;color:var(--color-text-primary);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.st-txt span{
  display:block;font-size:11.5px;color:var(--color-text-muted);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.st-camp{
  position:absolute;right:8px;top:8px;z-index:1;
  font-size:10px;font-style:normal;font-weight:700;line-height:1.5;
  color:var(--color-primary-active);background:var(--color-primary-soft);
  border-radius:var(--r-pill);padding:0 7px;pointer-events:none;
}
.st-tag{
  position:absolute;right:8px;bottom:8px;z-index:1;
  font-size:9.5px;font-style:normal;font-weight:600;line-height:1.5;
  color:var(--color-text-muted);background:var(--color-surface-soft);
  border:1px solid var(--color-border-soft);border-radius:var(--r-pill);padding:0 6px;pointer-events:none;
}
.st-tag.ext{color:var(--color-info);border-color:var(--color-info-soft);background:var(--color-info-soft)}
.st-pin{
  position:absolute;right:4px;bottom:4px;z-index:2;
  width:24px;height:24px;border:0;border-radius:8px;background:transparent;
  font-family:inherit;font-size:13px;line-height:1;color:var(--color-text-light);cursor:pointer;
  opacity:0;transition:opacity var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard),background var(--duration-fast) var(--ease-standard);
}
.sys-tile:hover .st-pin,.st-pin:focus-visible,.st-pin.on{opacity:1}
.st-pin:hover{background:var(--color-primary-soft);color:var(--color-primary-active)}
.st-pin.on{color:var(--color-primary)}
.pin-grid .st-pin{opacity:1}

/* ---------------- 未登录：登录引导卡 + 公开站点 ---------------- */
.anon-card{
  margin-top:18px;padding:26px 26px;
  border-radius:var(--radius-xl);border:1px solid var(--color-border-soft);
  background:linear-gradient(118deg,var(--color-surface) 0%,var(--bg-cream) 60%,var(--color-primary-soft) 160%);
  box-shadow:var(--shadow-sm);text-align:center;
}
.anon-logo{display:block;height:34px;width:auto;margin:0 auto 12px}
.anon-card h2{margin:0;font-size:19px;font-weight:800;color:var(--color-text-primary)}
.anon-card p{margin:8px auto 0;max-width:460px;font-size:13px;color:var(--color-text-secondary);line-height:1.7}
.anon-card .btn{margin-top:16px}

/* ---------------- 系统动态弹层（最近更新，最多 5 条） ---------------- */
.feed{display:flex;flex-direction:column;gap:0}
.feed-item{display:flex;gap:14px;padding:12px 4px;border-bottom:1px solid var(--color-border-soft)}
.feed-item:last-child{border-bottom:none}
.feed-dot{width:8px;height:8px;border-radius:50%;background:var(--color-primary);flex:none;margin-top:7px;box-shadow:0 0 0 4px var(--color-primary-soft)}
.feed-main{flex:1;min-width:0}
.feed-app{font-size:12px;font-weight:700;color:var(--color-primary-active)}
.feed-title{font-size:14px;font-weight:700;color:var(--color-text-primary);margin-top:2px}
.feed-desc{font-size:12.5px;color:var(--color-text-secondary);margin-top:3px;line-height:1.6}
.feed-date{font-size:11.5px;color:var(--color-text-muted);white-space:nowrap;flex:none}
.feed-pop{border:0;box-shadow:none;border-radius:0;max-height:52vh;overflow:auto}
.feed-pop .feed-item:first-child{padding-top:4px}
.feed-pop .feed-item:last-child{padding-bottom:4px}

/* ---------------- 登录页：官方 logo（宽幅比例，等比放大以保持标语可读） ---------------- */
.login-card .lc-logo{width:220px}

/* ---------------- 区块标题（门户版：更清晰的标题体系） ---------------- */
.sec-head{margin:30px 0 14px}
.sec-head h2{font-size:20px;white-space:nowrap}
@media (min-width:768px){ .sec-head h2{font-size:23px} }
.sec-desc{font-size:12.5px;color:var(--color-text-muted)}

/* ---------------- 进入动画（错峰 40—80ms，总时长不拖沓） ---------------- */
@keyframes pt-rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.pt-enter{animation:pt-rise var(--duration-slow) var(--ease-standard) both;animation-delay:calc(var(--i,0)*60ms)}

/* ---------------- 全局搜索 Command Palette ---------------- */
.cmdk{position:fixed;inset:0;z-index:400;display:flex;justify-content:center;padding:12vh 16px 16px}
.cmdk[hidden]{display:none}
.cmdk-mask{position:absolute;inset:0;background:rgba(20,28,45,.42);backdrop-filter:blur(4px)}
.cmdk-box{
  position:relative;width:100%;max-width:620px;max-height:70vh;display:flex;flex-direction:column;
  background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);overflow:hidden;
  animation:pt-pop var(--duration-normal) var(--ease-standard);
}
@keyframes pt-pop{from{opacity:0;transform:translateY(-10px) scale(.985)}to{opacity:1;transform:none}}
.cmdk-input-row{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--color-border-soft)}
.cmdk-input-row .af{color:var(--color-primary);font-size:17px;flex:none}
.cmdk-input-row input{flex:1;min-width:0;border:0;outline:none;font-family:inherit;font-size:15px;color:var(--color-text-primary);background:transparent}
.cmdk-list{overflow:auto;padding:8px;flex:1 1 auto;min-height:0}
.cmdk-group{font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--color-text-muted);padding:10px 12px 4px}
.cmdk-item{
  display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--radius-sm);
  cursor:pointer;border:1px solid transparent;
}
.cmdk-item.on{background:var(--color-primary-soft);border-color:var(--color-primary-line)}
.cmdk-item .ci-ico{width:32px;height:32px;flex:none;border-radius:var(--r-sm);display:grid;place-items:center;font-size:15px;
  background:var(--color-surface-soft);color:var(--color-primary-active)}
.cmdk-item.on .ci-ico{background:#fff}
.cmdk-item .ci-txt{flex:1;min-width:0}
.cmdk-item .ci-txt b{display:block;font-size:13.5px;font-weight:700;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmdk-item .ci-txt span{display:block;font-size:11.5px;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmdk-item .ci-kind{font-size:11px;color:var(--color-text-muted);background:var(--color-surface-soft);border-radius:var(--r-pill);padding:2px 9px;flex:none}
.cmdk-item.on .ci-kind{background:#fff}
.cmdk-empty{padding:26px 16px;text-align:center;font-size:13px;color:var(--color-text-muted)}
.cmdk-empty .cmdk-empty-sub{display:block;margin-top:6px;font-size:11.5px;color:var(--color-text-light)}
.cmdk-foot{padding:10px 16px;border-top:1px solid var(--color-border-soft);font-size:11.5px;color:var(--color-text-muted);display:flex;gap:14px;flex-wrap:wrap}

/* ---------------- 账号 / 角色管理（RBAC） ----------------
   操作列固定为单行按钮组：旧写法用空格分隔 + 固定 180px 宽，
   三个按钮（编辑/停用/删除）实测需 ~195px，必然换行报错位，观感像半成品。
   改为 flex 单行 + gap，并给操作列足够宽度，永不换行。 */
.col-actions{width:200px;white-space:nowrap}
.row-actions{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;white-space:nowrap}
.row-actions .btn{flex:none;white-space:nowrap}
/* 账号 / 角色表格：补齐门户化细节，避免直接沿用共享表格的朴素观感 */
#acctPanelAccounts .table-card,#acctPanelRoles .table-card{border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
#acctBody .chip,#roleBody .chip{white-space:nowrap}
#acctBody td,#roleBody td{white-space:nowrap}
#acctBody td:nth-child(2),#roleBody td:nth-child(2){white-space:normal}
@media (max-width:640px){
  .col-actions{width:auto}
  .row-actions{flex-wrap:wrap;gap:6px}
}

/* 弹窗 / 抽屉关闭按钮：字符 × 已替换为 .af 线性图标，统一尺寸 */
.x .af,.dh-close .af{display:block;width:17px;height:17px;font-size:17px}

/* ---------------- 通用按钮 / 状态补充 ---------------- */
.chip.ok{background:var(--color-success-soft);color:var(--color-success)}
.chip.warn{background:var(--color-warning-soft);color:var(--color-warning)}
.chip.muted-chip{background:var(--color-surface-soft);color:var(--color-text-muted)}
.modal-sm{max-width:440px}
.cf-text{margin:0;font-size:14px;color:var(--color-text-secondary);line-height:1.7}
.cf-text b{color:var(--color-text-primary)}

/* 状态占位（无权限 / 空态）：自定义，不使用浏览器原生弹窗 */
.state-note{
  display:flex;align-items:center;gap:10px;padding:14px 16px;border-radius:var(--radius-md);
  background:var(--color-surface-soft);border:1px dashed var(--color-border);
  color:var(--color-text-muted);font-size:13px;
}
.state-note .af{color:var(--color-primary);font-size:16px}

/* 页脚（不再出现吉祥物，仅作信息落款） */
.foot{margin-top:44px;padding:22px 24px 30px;font-size:12px;color:var(--color-text-muted)}

/* ---------------- 页内小图形补充（search / grid / arrow / spark / menu / close） ---------------- */
.af-search{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6.4'/%3E%3Cpath d='M15.8 15.8 20 20'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6.4'/%3E%3Cpath d='M15.8 15.8 20 20'/%3E%3C/svg%3E")}
.af-grid{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='4' width='6.4' height='6.4' rx='1.6'/%3E%3Crect x='13.6' y='4' width='6.4' height='6.4' rx='1.6'/%3E%3Crect x='4' y='13.6' width='6.4' height='6.4' rx='1.6'/%3E%3Crect x='13.6' y='13.6' width='6.4' height='6.4' rx='1.6'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='4' width='6.4' height='6.4' rx='1.6'/%3E%3Crect x='13.6' y='4' width='6.4' height='6.4' rx='1.6'/%3E%3Crect x='4' y='13.6' width='6.4' height='6.4' rx='1.6'/%3E%3Crect x='13.6' y='13.6' width='6.4' height='6.4' rx='1.6'/%3E%3C/svg%3E")}
.af-arrow{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17 17 7'/%3E%3Cpath d='M9 7h8v8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17 17 7'/%3E%3Cpath d='M9 7h8v8'/%3E%3C/svg%3E")}
.af-spark{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3.5 13.7 9l5.5 1.7-5.5 1.7L12 18l-1.7-5.6L4.8 10.7 10.3 9z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3.5 13.7 9l5.5 1.7-5.5 1.7L12 18l-1.7-5.6L4.8 10.7 10.3 9z'/%3E%3C/svg%3E")}
.af-menu{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 6.5h16M4 12h16M4 17.5h16'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 6.5h16M4 12h16M4 17.5h16'/%3E%3C/svg%3E")}
.af-close{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E")}

/* ---------------- 动效收敛 / 性能 ---------------- */
/* 页面进入后台时暂停所有动画（JS 切换 .pt-paused） */
.pt-paused *,.pt-paused *::before,.pt-paused *::after{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){
  .greet-hi .af{animation:none!important}
  .pt-enter{animation:none!important;opacity:1!important;transform:none!important}
  .sys-tile:hover{transform:none!important}
}

/* ---------------- 响应式（B5：页面永不横向滚动） ----------------
   ≥1200px：磁贴 4 列左右（auto-fill 决定）；768–1199px：3 列；<768px：2 列紧凑磁贴 */
@media (max-width:767px){
  .sys-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
  .st-main{padding:10px 8px 10px 10px;gap:8px}
  .st-ico{width:32px;height:32px;font-size:15px}
  .st-txt b{font-size:12.5px}
  .st-txt span{display:none} /* 紧凑磁贴：简介隐藏 */
  .st-camp{right:6px;top:6px;font-size:9px;padding:0 5px}
  .st-tag{display:none}
  .st-pin{right:2px;bottom:2px;width:22px;height:22px}
  .sg-head h3{font-size:14.5px}
  .sec-head{margin:22px 0 10px}
  .greet-bar{padding-top:10px}
}

/* 移动端顶栏：搜索只留图标（点开全屏搜索），品牌名 / 用户名省略，避免挤压换行 */
@media (max-width:640px){
  .topbar{gap:8px;padding:8px 12px}
  .brand{gap:8px}
  .brand-text{min-width:0}
  .brand-text b{font-size:13px;overflow:hidden;text-overflow:ellipsis}
  .topbar-actions{gap:6px}
  .auth-box{gap:6px;flex:none}
  .auth-user{max-width:56px;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .auth-box .btn{flex:none;white-space:nowrap}
  .tb-search{width:38px;padding:0}
  .tb-search kbd{display:none}
}
