/* ===== Pro 企业级界面主题 v2（按 Ant Design 5 真实设计 token 构建） =====
   设计依据（全部取自 Ant Design 5.29 源码，非凭印象）：
     seed token —— colorPrimary #1677ff / colorSuccess #52c41a / colorWarning #faad14 / colorError #ff4d4f
                   fontSize 14 / borderRadius 6 / sizeUnit 4 / controlHeight 32
                   fontFamily -apple-system,...  fontFamilyCode SFMono-Regular, Consolas, Menlo
                   motionEaseOut cubic-bezier(0.215, 0.61, 0.355, 1)
     中性色 —— colorText rgba(0,0,0,.88) / Secondary .65 / Tertiary .45 / Quaternary .25
                colorFill .15 / .06 / .04 / .02
                colorBgLayout #f5f5f5  colorBgContainer #fff
                colorBorder #d9d9d9   colorBorderSecondary #f0f0f0
     预设色板 —— blue #1677FF / purple #722ED1 / cyan #13C2C2 / green #52C41A / red #F5222D
                  orange #FA8C16 / gold #FAAD14 / volcano #FA541C / geekblue #2F54EB / lime #A0D911
   适用范围：页面级引用（当前仅 std-model.html）。不改 DOM 逻辑，仅覆盖样式。 */

:root{
  /* —— 主色与语义色（AntD seed token）—— */
  --c-primary:#1677FF;--c-primary-h:#4096FF;--c-primary-a:#0958D9;
  --c-primary-bg:#E6F4FF;--c-primary-bd:#91CAFF;--c-primary-ring:rgba(5,145,255,.12);
  --c-success:#52C41A;--c-success-bg:#F6FFED;--c-success-bd:#B7EB8F;
  --c-warning:#FAAD14;--c-warning-bg:#FFFBE6;--c-warning-bd:#FFE58F;
  --c-error:#FF4D4F;--c-error-bg:#FFF2F0;--c-error-bd:#FFCCC7;
  --c-purple:#722ED1;--c-purple-bg:#F9F0FF;--c-purple-bd:#D3ADF7;
  --c-cyan:#13C2C2;--c-cyan-bg:#E6FFFB;--c-cyan-bd:#87E8DE;
  --c-orange:#FA8C16;--c-orange-bg:#FFF7E6;--c-orange-bd:#FFD591;
  /* —— 中性色（AntD 透明度体系）—— */
  --t-1:rgba(0,0,0,.88);--t-2:rgba(0,0,0,.65);--t-3:rgba(0,0,0,.45);--t-4:rgba(0,0,0,.25);
  --f-1:rgba(0,0,0,.15);--f-2:rgba(0,0,0,.06);--f-3:rgba(0,0,0,.04);--f-4:rgba(0,0,0,.02);
  --bg-layout:#F5F5F5;--bg-container:#FFFFFF;--bg-elevated:#FFFFFF;--bg-spotlight:rgba(0,0,0,.85);
  --bd:#D9D9D9;--bd-2:#F0F0F0;
  /* 可被深色模式整体覆盖的派生变量 */
  --table-head-bg:#FAFAFA;--table-row-hover:#FAFAFA;--bg-subtle:#FAFAFA;
  --tag-blue-text:#0958D9;--tag-green-text:#389E0D;--tag-red-text:#CF1322;--tag-orange-text:#D46B08;
  --btn-shadow:0 2px 0 rgba(0,0,0,.02);--btn-primary-shadow:0 2px 0 rgba(5,145,255,.1);
  --seg-shadow:0 1px 2px rgba(0,0,0,.06);--seg-active-bg:#FFFFFF;
  --topbar-shadow:0 1px 2px rgba(0,0,0,.02);--mask-bg:rgba(0,0,0,.45);
  --select-arrow:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2.6 4.6L6 8l3.4-3.4' fill='none' stroke='rgba(0,0,0,.45)' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  /* —— 圆角 / 尺寸 / 动效 —— */
  --r-lg:8px;--r:6px;--r-sm:4px;--r-pill:100px;
  --ctrl:32px;--ctrl-lg:36px;
  --sh-1:0 1px 2px 0 rgba(0,0,0,.03),0 1px 6px -1px rgba(0,0,0,.02),0 2px 4px 0 rgba(0,0,0,.02);
  --sh-2:0 6px 16px 0 rgba(0,0,0,.08),0 3px 6px -4px rgba(0,0,0,.12),0 9px 28px 8px rgba(0,0,0,.05);
  --sh-3:0 6px 16px 0 rgba(0,0,0,.08),0 3px 6px -4px rgba(0,0,0,.12),0 9px 28px 8px rgba(0,0,0,.05);
  --t-fast:.1s cubic-bezier(.215,.61,.355,1);
  --t-base:.2s cubic-bezier(.215,.61,.355,1);
  --font:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;
  --mono:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,Courier,monospace;
}

/* ---------- 全局字体与画布 ---------- */
body{font-family:var(--font);-webkit-font-smoothing:antialiased}
.content{background:var(--bg-layout);padding:24px}

/* ---------- 页面标题区 ---------- */
.pro-page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.pro-page-head h1{margin:0;font-size:20px;line-height:1.4;font-weight:600;color:var(--t-1)}
.pro-page-head p{margin:4px 0 0;font-size:14px;line-height:1.6;color:var(--t-3)}
.pro-page-head .pro-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;padding-top:2px}

/* ---------- 信息提示条（AntD Alert 风格） ---------- */
.pro-alert{display:flex;gap:10px;padding:9px 14px;background:var(--c-primary-bg);border:1px solid var(--c-primary-bd);
  border-radius:var(--r-lg);font-size:14px;line-height:1.65;color:var(--t-2);margin-bottom:16px}
.pro-alert .pro-alert-ico{flex-shrink:0;width:16px;height:16px;margin-top:3px;color:var(--c-primary)}
.pro-alert b{color:var(--t-1);font-weight:600}

/* ---------- 统计卡（点击切换元素类型） ---------- */
.pro-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:16px}
.pro-stat{display:flex;align-items:flex-start;gap:14px;padding:18px 20px;background:var(--bg-container);
  border:1px solid var(--bd-2);border-radius:var(--r-lg);box-shadow:var(--sh-1);cursor:pointer;
  transition:border-color var(--t-base),box-shadow var(--t-base),transform var(--t-base);position:relative;overflow:hidden}
.pro-stat:hover{box-shadow:var(--sh-2);transform:translateY(-1px)}
.pro-stat::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent;transition:background var(--t-base)}
.pro-stat.active::after{background:var(--c-primary)}
.pro-stat.active{border-color:var(--c-primary-bd);box-shadow:0 0 0 2px var(--c-primary-ring),var(--sh-1)}
.pro-stat-ico{width:40px;height:40px;border-radius:var(--r-lg);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.pro-stat-ico svg{width:20px;height:20px}
.pro-stat-main{min-width:0;flex:1}
.pro-stat-label{font-size:14px;color:var(--t-2);display:flex;align-items:center;gap:6px;line-height:1.5}
.pro-stat-num{font-size:28px;font-weight:600;color:var(--t-1);line-height:1.25;letter-spacing:-.5px;
  font-variant-numeric:tabular-nums;margin:2px 0 2px}
.pro-stat-num small{font-size:13px;font-weight:400;color:var(--t-3);margin-left:4px;letter-spacing:0}
.pro-stat-desc{font-size:12px;color:var(--t-3);line-height:1.5}
.pro-stat.active .pro-stat-label{color:var(--c-primary)}
.stat-attr .pro-stat-ico{background:var(--c-primary-bg);color:var(--c-primary)}
.stat-event .pro-stat-ico{background:var(--c-orange-bg);color:var(--c-orange)}
.stat-service .pro-stat-ico{background:var(--c-purple-bg);color:var(--c-purple)}
.stat-on .pro-stat-ico{background:var(--c-success-bg);color:var(--c-success)}
.stat-off .pro-stat-ico{background:var(--f-3);color:var(--t-2)}
.stat-attr.active::after{background:var(--c-primary)}
.stat-event.active::after{background:var(--c-orange)}
.stat-event.active{border-color:var(--c-orange-bd);box-shadow:0 0 0 2px rgba(250,140,22,.12),var(--sh-1)}
.stat-event.active .pro-stat-label{color:var(--c-orange)}
.stat-service.active::after{background:var(--c-purple)}
.stat-service.active{border-color:var(--c-purple-bd);box-shadow:0 0 0 2px rgba(114,46,209,.1),var(--sh-1)}
.stat-service.active .pro-stat-label{color:var(--c-purple)}
.stat-on.active::after{background:var(--c-success)}
.stat-on.active{border-color:var(--c-success-bd);box-shadow:0 0 0 2px rgba(82,196,26,.12),var(--sh-1)}
.stat-on.active .pro-stat-label{color:var(--c-success)}
.stat-off.active::after{background:var(--t-2)}
.stat-off.active{border-color:var(--bd);box-shadow:0 0 0 2px var(--f-3),var(--sh-1)}
.stat-off.active .pro-stat-label{color:var(--t-1)}

/* ---------- 辅助类（供页面 JS 生成内容使用，避免内联硬编码色） ---------- */
.pro-sep{color:var(--bd)!important;padding:0 2px}
.pro-muted-sm{font-size:12px;color:var(--t-3)}
.pro-empty{text-align:center;color:var(--t-3);padding:36px}

/* ---------- 卡片 ---------- */
.card{background:var(--bg-container);border:1px solid var(--bd-2);border-radius:var(--r-lg);box-shadow:var(--sh-1);margin-bottom:0;overflow:hidden}
.card-head{padding:16px 24px;border-bottom:1px solid var(--bd-2);display:flex;align-items:center;justify-content:space-between;min-height:auto}
.card-title{font-size:16px;font-weight:600;color:var(--t-1)}
.card-title small{font-size:14px;font-weight:400;color:var(--t-3);margin-left:8px}
.card-body{padding:0}

/* ---------- 工具栏（筛选区） ---------- */
.pro-filters{padding:16px 24px;border-bottom:1px solid var(--bd-2);display:flex;flex-direction:column;gap:12px}
.pro-filter-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.pro-filter-row .spacer{flex:1}
.pro-filter-label{font-size:14px;color:var(--t-3);flex-shrink:0}
.pro-filters .input{height:var(--ctrl)}
.pro-filters .search{width:280px}

/* 筛选标签组（分类） */
.pro-chips{display:flex;gap:8px;flex-wrap:wrap}
.pro-chip{padding:3px 12px;border:1px solid var(--bd);border-radius:var(--r);background:var(--bg-container);
  color:var(--t-2);font-size:14px;line-height:22px;cursor:pointer;font-family:var(--font);
  transition:all var(--t-base)}
.pro-chip:hover{color:var(--c-primary);border-color:var(--c-primary-bd);background:var(--c-primary-bg)}
.pro-chip.active{color:var(--c-primary);border-color:var(--c-primary);background:var(--c-primary-bg);font-weight:500}

/* 分段控件（状态） */
.pro-seg{display:inline-flex;padding:2px;background:var(--f-3);border-radius:var(--r);gap:2px}
.pro-seg button{padding:3px 14px;border:none;background:transparent;border-radius:var(--r-sm);color:var(--t-2);
  font-size:14px;line-height:22px;cursor:pointer;font-family:var(--font);transition:all var(--t-base)}
.pro-seg button:hover{color:var(--t-1)}
.pro-seg button.active{background:var(--seg-active-bg);color:var(--t-1);font-weight:500;box-shadow:var(--seg-shadow)}

/* ---------- 表格（AntD Table 风格） ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{background:var(--table-head-bg);color:var(--t-1);font-size:14px;font-weight:600;text-align:left;
  padding:12px 16px;border-bottom:1px solid var(--bd-2);white-space:nowrap;line-height:1.57}
.tbl td{padding:16px;border-bottom:1px solid var(--bd-2);color:var(--t-1);font-size:14px;
  vertical-align:middle;white-space:nowrap;line-height:1.57}
.tbl tbody tr{transition:background var(--t-base)}
.tbl tbody tr:hover{background:var(--table-row-hover)}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl .num{font-family:var(--mono);font-size:13px;color:var(--t-2);font-variant-numeric:tabular-nums}
.tbl .idf,.tbl code{font-family:var(--mono);font-size:13px;color:var(--c-primary);
  background:var(--c-primary-bg);padding:2px 8px;border-radius:var(--r-sm);border:1px solid var(--c-primary-bd)}
.actions{display:flex;gap:14px;align-items:center}
.actions a{margin-right:0;font-size:14px}

/* ---------- 标签（AntD Tag 风格：无圆点、方角小圆角） ---------- */
.tag{display:inline-flex;align-items:center;padding:1px 8px;border-radius:var(--r-sm);font-size:12px;
  line-height:20px;font-weight:400;border:1px solid transparent;white-space:nowrap}
.tag-blue{background:var(--c-primary-bg);color:var(--tag-blue-text);border-color:var(--c-primary-bd)}
.tag-green{background:var(--c-success-bg);color:var(--tag-green-text);border-color:var(--c-success-bd)}
.tag-gray{background:var(--f-3);color:var(--t-2);border-color:var(--bd)}
.tag-red{background:var(--c-error-bg);color:var(--tag-red-text);border-color:var(--c-error-bd)}
.tag-orange{background:var(--c-orange-bg);color:var(--tag-orange-text);border-color:var(--c-orange-bd)}
.chip{display:inline-flex;align-items:center;padding:1px 8px;border-radius:var(--r-sm);font-size:12px;
  background:var(--f-3);color:var(--t-2);border:1px solid var(--bd)}

/* ---------- 按钮（AntD Button 风格） ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--ctrl);padding:0 15px;
  border:1px solid var(--bd);border-radius:var(--r);background:var(--bg-container);color:var(--t-1);
  font-size:14px;font-weight:400;font-family:var(--font);cursor:pointer;
  box-shadow:var(--btn-shadow);transition:all var(--t-base)}
.btn:hover{color:var(--c-primary);border-color:var(--c-primary);background:var(--bg-container)}
.btn:active{color:var(--c-primary-a);border-color:var(--c-primary-a)}
.btn svg{width:14px;height:14px;flex-shrink:0}
.btn-primary{background:var(--c-primary);border-color:var(--c-primary);color:#fff;box-shadow:var(--btn-primary-shadow)}
.btn-primary:hover{background:var(--c-primary-h);border-color:var(--c-primary-h);color:#fff}
.btn-primary:active{background:var(--c-primary-a);border-color:var(--c-primary-a)}
.btn-danger{color:var(--c-error);border-color:var(--c-error-bd);background:var(--bg-container)}
.btn-danger:hover{color:#fff;background:var(--c-error);border-color:var(--c-error)}
.btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:var(--r-sm);box-shadow:none}
.btn[disabled],.btn[disabled]:hover{color:var(--t-4);border-color:var(--bd);background:var(--f-3);
  cursor:not-allowed;box-shadow:none;transform:none}
.link{color:var(--c-primary);cursor:pointer;font-size:14px;transition:color var(--t-base)}
.link:hover{color:var(--c-primary-h)}
.link.danger{color:var(--c-error)}
.link.danger:hover{color:#FF7875}
.req{color:var(--c-error);margin-left:4px;font-family:SimSun,sans-serif}

/* ---------- 输入与下拉 ---------- */
.input,.select{height:var(--ctrl);border:1px solid var(--bd);border-radius:var(--r);padding:0 11px;
  font-size:14px;font-family:var(--font);color:var(--t-1);background:var(--bg-container);outline:none;
  transition:border-color var(--t-base),box-shadow var(--t-base)}
.input::placeholder{color:var(--t-4)}
.input:hover,.select:hover{border-color:var(--c-primary-h)}
.input:focus,.select:focus{border-color:var(--c-primary);box-shadow:0 0 0 2px var(--c-primary-ring)}
.select{cursor:pointer;padding-right:26px;appearance:none;
  background-image:var(--select-arrow);
  background-repeat:no-repeat;background-position:right 9px center}
.input[readonly]{background:var(--f-3);color:var(--t-2)}
.pro-hidden{display:none!important}

/* ---------- 弹窗（AntD Modal 风格） ---------- */
.mask{background:var(--mask-bg)}
/* ---------- 弹窗宽度规范（平台统一） ----------
   常规表单/详情 680px；.dialog-sm 小工具（确认/预览/查询/单条只读详情）460px；
   .dialog-lg 宽内容（表格/图表/组态/矩阵）自适应到 1080px；均不超出视口。 */
html .dialog{width:min(680px,calc(100vw - 40px))}
html .dialog-sm{width:min(460px,calc(100vw - 40px))}
html .dialog-lg{width:min(1080px,calc(100vw - 40px))}
.dialog{border:none;border-radius:var(--r-lg);box-shadow:var(--sh-2);overflow:hidden;background:var(--bg-elevated)}
.dialog-head{padding:16px 24px;border-bottom:1px solid var(--bd-2);font-size:16px;font-weight:600;color:var(--t-1)}
.dialog-close{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-sm);
  color:var(--t-3);font-size:16px;line-height:1;transition:all var(--t-base)}
.dialog-close:hover{background:var(--f-2);color:var(--t-1)}
.dialog-body{padding:20px 24px}
.dialog-foot{padding:12px 24px;border-top:1px solid var(--bd-2);display:flex;justify-content:flex-end;gap:8px}
.form-row{margin-bottom:20px}
.form-row label{display:block;margin-bottom:6px;font-size:14px;color:var(--t-1);line-height:1.5}
.form-row .input,.form-row .select{width:100%}
.form-row .input + span,.form-row span[style*="12px"]{display:block;margin-top:6px;color:var(--t-3)!important;font-size:12px!important}
.std-card{border:1px solid var(--bd-2);border-radius:var(--r-lg);padding:16px;background:var(--bg-subtle)}
.std-kv{display:flex;gap:16px;flex-wrap:wrap;font-size:14px;margin:8px 0;color:var(--t-2)}
.std-kv .k{color:var(--t-3);font-size:14px}
.parm-row{display:flex;gap:8px;margin-bottom:8px}

/* ---------- 其它 ---------- */
.pager{gap:8px}
.pager .pg{min-width:var(--ctrl);height:var(--ctrl);border:1px solid var(--bd);border-radius:var(--r);
  background:var(--bg-container);color:var(--t-2);font-size:14px;transition:all var(--t-base)}
.pager .pg:hover:not(.active){border-color:var(--c-primary);color:var(--c-primary)}
.pager .pg.active{background:var(--c-primary);border-color:var(--c-primary);color:#fff}
.empty{color:var(--t-3);padding:56px 0;text-align:center;font-size:14px}
.content::-webkit-scrollbar{width:8px;height:8px}
.content::-webkit-scrollbar-thumb{background:var(--f-1);border-radius:var(--r-pill)}
.content::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.25)}
.content::-webkit-scrollbar-track{background:transparent}

/* ---------- 顶栏 ---------- */
.topbar{background:var(--bg-container);border-bottom:1px solid var(--bd-2);box-shadow:var(--topbar-shadow)}
.top-right{gap:12px}
.crumb{color:var(--t-3);font-size:14px}
.crumb b{color:var(--t-1);font-weight:600}
.crumb .btn-back{color:var(--t-3);cursor:pointer;transition:color var(--t-base)}
.crumb .btn-back:hover{color:var(--c-primary)}
.top-right .proj{background:var(--f-3);border:1px solid var(--bd-2);color:var(--t-2);
  padding:2px 10px;border-radius:var(--r-sm);font-size:13px}
.top-right .noti{position:relative;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  border-radius:var(--r);color:var(--t-2);cursor:pointer;transition:all var(--t-base)}
.top-right .noti:hover{background:var(--f-3);color:var(--t-1)}
.top-right .noti svg{width:16px;height:16px}
.top-right .noti-badge{position:absolute;top:1px;right:0;min-width:15px;height:15px;padding:0 4px;border-radius:var(--r-pill);
  background:var(--c-error);color:#fff;font-size:10px;line-height:15px;text-align:center;
  box-shadow:0 0 0 1.5px var(--bg-container)}
.top-right .user{display:inline-flex;align-items:center;gap:8px;padding:2px 8px 2px 2px;border-radius:var(--r-pill);
  transition:background var(--t-base);color:var(--t-2);font-size:14px}
.top-right .user:hover{background:var(--f-3)}
.avatar{width:28px;height:28px;border-radius:50%;background:var(--c-primary);font-size:12px;font-weight:600;
  display:flex;align-items:center;justify-content:center;color:#fff}

/* ================= 左侧菜单栏（现代化重设计） ================= */
.sidebar{width:224px;background:var(--bg-container);border-right:1px solid var(--bd-2);color:var(--t-2);
  box-shadow:none}
/* 覆盖 appshell 生成的大量内联白字/半透明白底 */
.sidebar :where(*):where(:not(.brand)):where(:not(.brand *)){color:inherit!important}
.sidebar [style*="rgba(255,255,255.45)"],.sidebar [style*="rgba(255, 255, 255, 0.45)"]{color:var(--t-3)!important}
.sidebar [style*="rgba(255,255,255.3)"],.sidebar [style*="rgba(255, 255, 255, 0.3)"]{color:var(--t-4)!important}
.sidebar [style*="rgba(255,255,255.14)"],.sidebar [style*="rgba(255, 255, 255, 0.14)"]{border-color:var(--bd-2)!important}
.sidebar [style*="rgba(255,255,255.18)"],.sidebar [style*="rgba(255, 255, 255, 0.18)"]{border-color:var(--bd)!important;background:var(--bg-container)!important}
.sidebar [style*="rgba(255,255,255.08)"],.sidebar [style*="rgba(255, 255, 255, 0.08)"]{background:var(--f-3)!important}
.sidebar [style*="rgba(255,255,255.06)"],.sidebar [style*="rgba(255, 255, 255, 0.06)"]{background:transparent!important}

/* 品牌区 */
.sidebar .brand{height:56px;padding:0 16px;background:var(--bg-container);border-bottom:1px solid var(--bd-2);gap:10px}
.sidebar .brand .name{font-size:15px;font-weight:600;color:var(--t-1);line-height:1.25}
.sidebar .brand .name small{display:block;font-size:11px;font-weight:400;color:var(--t-3);letter-spacing:.2px;margin-top:1px}

/* 导航 */
.sidebar .nav{padding:8px 0 16px;flex:1;overflow-y:auto;overflow-x:hidden}
.sidebar .nav::-webkit-scrollbar{width:6px}
.sidebar .nav::-webkit-scrollbar-thumb{background:var(--f-1);border-radius:3px}
.sidebar .nav::-webkit-scrollbar-track{background:transparent}
.sidebar .nav-title{padding:14px 16px 6px;font-size:12px;font-weight:500;color:var(--t-3)!important;letter-spacing:.2px}

/* 菜单项（AntD Menu 风格：圆角选中 + 浅底主色文字） */
.sidebar .nav-item{position:relative;display:flex;align-items:center;gap:10px;height:40px;margin:2px 8px;
  padding:0 12px;border-left:none!important;border-radius:var(--r);font-size:14px;color:var(--t-2)!important;
  transition:background var(--t-base),color var(--t-base)}
.sidebar .nav-item:hover{background:var(--f-3)!important;color:var(--t-1)!important}
.sidebar .nav-item.active{background:var(--c-primary-bg)!important;color:var(--c-primary)!important;font-weight:500;text-shadow:none}
.sidebar .nav-item.active::before{content:"";position:absolute;left:-8px;top:50%;transform:translateY(-50%);
  width:3px;height:18px;border-radius:0 2px 2px 0;background:var(--c-primary)}
.sidebar .nav-item .ico{width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;
  flex-shrink:0;opacity:.75}
.sidebar .nav-item:hover .ico{opacity:.95}
.sidebar .nav-item.active .ico{opacity:1}
.sidebar .nav-item.asw-child{padding-left:34px}

/* 应用切换器 */
.sidebar #aswSwitcher{margin:10px 10px 6px!important}
.sidebar #aswBtn{border:1px solid var(--bd-2)!important;background:var(--f-3)!important;
  border-radius:var(--r)!important;padding:8px 10px!important;transition:all var(--t-base)}
.sidebar #aswBtn:hover{background:var(--f-2)!important;border-color:var(--bd)!important}
.sidebar #aswBtn b{color:var(--t-1)!important;font-size:13px!important;font-weight:600!important}
.sidebar #aswBtn span{color:var(--t-3)!important}
.sidebar #aswBtn > span:last-child{color:var(--t-4)!important}
.sidebar .asw-cur-ico{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
  border-radius:var(--r-sm);background:var(--c-primary-bg);color:var(--c-primary);flex-shrink:0}
.sidebar #aswMenu{border-radius:var(--r-lg)!important;border:1px solid var(--bd-2)!important;
  box-shadow:var(--sh-2)!important;padding:6px!important}
.sidebar .asw-item-ico{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border-radius:var(--r-sm);background:var(--f-3);color:var(--t-2);flex-shrink:0}

/* 目录分组标题 */
.sidebar .asw-dir{padding:8px 12px!important;font-size:12px!important;color:var(--t-3)!important;
  font-weight:500!important;letter-spacing:.2px;transition:color var(--t-base)}
.sidebar .asw-dir:hover{color:var(--t-1)!important}
.sidebar .asw-dir-ico,.sidebar .asw-dir > span:first-child{display:inline-flex;align-items:center;opacity:.8}
.sidebar .asw-arrow{color:var(--t-4)!important;font-size:10px!important}
.sidebar .asw-kids{padding:0 0 2px}

/* 底部：应用/身份区 */
.sidebar #rbacIdSel{border:1px solid var(--bd)!important;background:var(--bg-container)!important;
  color:var(--t-1)!important;border-radius:var(--r)!important;font-size:13px!important;padding:5px 8px!important;
  transition:border-color var(--t-base),box-shadow var(--t-base)}
.sidebar #rbacIdSel:hover{border-color:var(--c-primary-h)!important}
.sidebar #rbacIdSel:focus{border-color:var(--c-primary)!important;box-shadow:0 0 0 2px var(--c-primary-ring)!important;outline:none}
.sidebar select option{background:var(--bg-container);color:var(--t-1)}

/* ---------- 主题切换按钮（顶栏右上角） ---------- */
.theme-toggle{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:var(--r);border:1px solid var(--bd);background:var(--bg-container);color:var(--t-2);font-size:12px;line-height:1.4;cursor:pointer;transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}
.theme-toggle:hover{color:var(--c-primary);border-color:var(--c-primary-bd);background:var(--c-primary-bg)}
.theme-toggle svg{flex-shrink:0}

/* ===== 按钮可读性修正（2026-10-08）=====
   1) 主按钮 hover/active 原用亮蓝（--c-primary-h:#4096FF）配白字，对比度仅约 2.9，视觉上「蓝底看不清文字」；
      改为更深的蓝（#0958D9 / #003EB3），白字对比度约 6.3。
   2) 禁用按钮原为 opacity:.5 + 极浅文字（rgba(0,0,0,.25) on rgba(0,0,0,.04)，对比度约 1，几乎看不到字）；
      改为不透明 + 明确的中灰文字，仍保持禁用观感。 */
.btn-primary:hover{background:#0958D9;border-color:#0958D9;color:#fff}
.btn-primary:active{background:#003EB3;border-color:#003EB3;color:#fff}
.btn[disabled],.btn[disabled]:hover{opacity:1;color:rgba(0,0,0,.55);background:rgba(0,0,0,.05);border-color:rgba(0,0,0,.14)}
.btn[disabled]:hover{background:rgba(0,0,0,.06)}
