/* ============================================================
   考试系统前端样式（Vue3 + Bootstrap 适配）
   Bootstrap 提供：.card .btn .table .form-* .badge .modal .pagination .row .col-* .alert 等
   此处仅补充布局、侧栏、答题、圆环等自定义样式
   ============================================================ */
:root{
  --primary:#1677ff; --primary-hover:#0958d9; --primary-bg:#e6f4ff;
  --success:#52c41a; --danger:#ff4d4f; --warning:#faad14;
  --text:#1f1f1f; --text-muted:#999; --text-secondary:#606266; --muted:#8a93a3;
  --border:#e8e8e8; --border-light:#f0f0f0;
  --bg:#f5f7fa; --card-bg:#fff; --side-bg:#ffffff;
  --shadow:0 2px 8px rgba(0,0,0,.06); --radius:12px; --radius-sm:8px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{font-size:16px;-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-x:clip}
body{font-family:-apple-system,"SF Pro Display","Microsoft YaHei","PingFang SC",sans-serif;background:var(--bg);color:var(--text);min-height:100vh;line-height:1.5;-webkit-tap-highlight-color:transparent}
button,input,select,textarea{font-family:inherit}

.muted{color:var(--text-muted);font-size:13px}
.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.text-muted{color:var(--text-muted)!important}

/* ============ 登录 ============ */
.login-wrap{position:relative;min-height:100vh;display:flex;overflow:hidden;
  background-color:var(--bg);background-size:cover;background-position:center;background-repeat:no-repeat}
.login-fade{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(to right, transparent 0%, transparent 50%, var(--bg) 100%)}
.login-split{position:relative;z-index:1;display:flex;width:100%;min-height:100vh}
.login-left{flex:2;position:relative;padding:0 6%}
.login-brand-title{position:absolute;top:17%;left:0;right:0;transform:translateY(-50%);
  font-family:'ZCOOL QingKe HuangYou','Ma Shan Zheng',sans-serif;
  font-size:clamp(42px,6vw,80px);font-weight:400;color:var(--login-ink,#fff);letter-spacing:2px;text-align:center;
  text-shadow:0 6px 30px rgba(0,0,0,.5),0 2px 6px rgba(0,0,0,.4)}
.login-slogan{position:absolute;top:58.5%;left:50%;transform:translate(-50%,-50%);
  width:66.66%;height:33vh;
  display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;
  gap:.4em;padding:18px 26px;
  border:1px solid rgba(255,255,255,.5);border-radius:14px;
  background:rgba(255,255,255,.08);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:0 8px 32px rgba(0,0,0,.25);overflow:auto}
.login-slogan .col{flex:0 0 auto;writing-mode:vertical-rl;text-orientation:upright;
  width:auto;max-height:100%;
  font-family:'Ma Shan Zheng','Zhi Mang Xing','STKaiti','KaiTi',serif;
  font-size:clamp(20px,2.6vw,32px);color:var(--login-ink,#fff);letter-spacing:.12em;line-height:1.5;
  text-shadow:0 4px 18px rgba(0,0,0,.55),0 1px 3px rgba(0,0,0,.4)}
.login-right{flex:1;display:flex;align-items:center;justify-content:center;padding:24px;position:relative}
.login-theme{position:absolute;top:18px;right:24px;width:40px;height:40px;border-radius:50%;border:1px solid var(--border,#e3e8f0);background:var(--surface,#fff);color:var(--text);display:inline-flex;align-items:center;justify-content:center;font-size:18px;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,background .15s ease;z-index:5;box-shadow:var(--shadow)}
.login-theme:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(0,0,0,.14)}
.login-theme:active{transform:translateY(0)}
.login-card{width:100%;max-width:440px;min-height:380px;border-radius:16px;padding:56px 38px;display:flex;flex-direction:column;justify-content:center}
.login-brand{font-size:24px;font-weight:700;text-align:center;color:var(--primary);margin-bottom:4px}
.login-title{font-size:26px;font-weight:700;text-align:center;color:var(--text);margin:0 0 62px;line-height:1.2}
.login-card form button[type="submit"]{margin-top:18px}
.input-icon-wrap{position:relative}
.input-icon-wrap .input-icon{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--text-muted);font-size:23px;pointer-events:none;z-index:2}
.form-control::placeholder{color:#c3c8d2}
.input-icon-wrap .form-control{padding-left:44px}
.login-err{color:var(--danger);font-size:13px;margin-bottom:10px;text-align:center}
.login-oauth{margin-top:18px}
.login-oauth-divider{display:flex;align-items:center;color:var(--text-muted);font-size:12px;margin:6px 0}
.login-oauth-divider::before,.login-oauth-divider::after{content:'';flex:1;height:1px;background:var(--border,#e3e8f0)}
.login-oauth-divider span{padding:0 10px;white-space:nowrap}
.login-oauth-btns{display:flex;flex-direction:column;gap:8px}
@media (max-width:768px){
  .login-left{display:none}
  .login-right{flex:1 1 100%;padding:16px}
  .login-fade{background:linear-gradient(to right, var(--bg) 0%, var(--bg) 100%)}
}

/* ============ 主框架（标题栏横跨整页 + 独立滚动侧栏/内容） ============ */
.app-layout{height:100vh;display:flex;flex-direction:column;overflow:hidden}
.app-header{flex:0 0 60px;display:flex;align-items:center;background:#fff;
  border-bottom:1px solid var(--border);box-shadow:0 1px 4px rgba(0,0,0,.04);z-index:30}
.hdr-inner{flex:1 1 auto;width:100%;max-width:1600px;margin:0 auto;display:flex;align-items:center;gap:12px;padding:0 24px}
.hdr-brand{display:flex;align-items:center;gap:9px;font-size:19px;font-weight:700;color:var(--text);white-space:nowrap}
.hdr-logo{font-size:26px;line-height:1}
.hdr-right{margin-left:auto;display:flex;align-items:center;gap:10px}

/* 标题栏用户信息（悬停/点击下拉） */
.hdr-user-wrap{position:relative;display:flex;align-items:center}
.hdr-user{display:flex;align-items:center;gap:8px;background:transparent;border:none;cursor:pointer;
  padding:6px 10px;border-radius:8px;color:var(--text);font-size:14px;transition:background .15s}
.hdr-user:hover{background:#f0f4f8}
.hdr-avatar{width:30px;height:30px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}
.hdr-uname{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.hdr-user{gap:4px}
.caret-down{font-size:15px;color:var(--text);margin-left:2px;line-height:1;vertical-align:-1px;transition:transform .2s}
.caret-down.open{transform:rotate(180deg)}
.hdr-usermenu{position:absolute;top:calc(100% + 8px);right:0;width:230px;background:#fff;
  border:1px solid var(--border);border-radius:10px;box-shadow:0 6px 24px rgba(0,0,0,.12);padding:10px;z-index:50}
/* 透明悬停桥：覆盖触发按钮与弹窗之间的 8px 死区，避免鼠标移入时弹窗误关闭 */
.hdr-usermenu::before{content:"";position:absolute;left:0;right:0;top:-12px;height:12px}
/* 标题栏三段主题滑块：椭圆轨道 + 滑动圆 */
.hdr-theme{position:relative;display:flex;align-items:center;gap:0;height:30px;padding:3px;
  background:rgba(128,128,128,.18);border-radius:999px;flex-shrink:0}
.ht-seg{position:relative;z-index:1;flex:1 1 0;min-width:0;height:24px;width:30px;border:none;background:transparent;
  cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;font-size:14px;
  border-radius:999px;padding:0;transition:color .2s}
.ht-seg.active{color:var(--primary)}
.ht-knob{position:absolute;top:3px;left:3px;width:calc((100% - 6px)/3);height:24px;border-radius:999px;
  background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.25);pointer-events:none;
  transition:transform .22s cubic-bezier(.4,0,.2,1)}
.hdr-theme.t-system .ht-knob{transform:translateX(0)}
.hdr-theme.t-light .ht-knob{transform:translateX(100%)}
.hdr-theme.t-dark .ht-knob{transform:translateX(200%)}
.hum-head{display:flex;align-items:center;gap:10px;padding:6px 4px 10px;border-bottom:1px solid var(--border-light);margin-bottom:8px}
.hum-avatar{width:36px;height:36px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700;flex-shrink:0}
.hum-id{min-width:0}
.hum-name{font-weight:700;font-size:15px;line-height:1.3}
.hum-role{display:inline-block;margin-top:3px;font-size:11px;color:#fff;background:var(--primary);border-radius:10px;padding:1px 8px}
.hum-row{display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:5px 4px}
.hum-k{color:var(--text-muted)}
.hum-v{font-weight:600;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hum-actions{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.hum-theme{border-top:1px solid var(--border-light);margin-top:10px;padding-top:10px}
.hum-theme-label{font-size:11px;color:var(--text-muted);margin-bottom:6px}
.hum-theme-opts{display:flex;flex-wrap:wrap;gap:6px}
.th-opt{flex:1 1 auto;min-width:64px;border:1px solid var(--border);background:var(--bg);color:var(--text);
  border-radius:8px;padding:6px 8px;font-size:12px;cursor:pointer;transition:all .15s;white-space:nowrap}
.th-opt:hover{border-color:var(--primary)}
.th-opt.active{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-menu{display:none;align-items:center;justify-content:center;width:38px;height:38px;margin-right:4px;
  border:none;background:transparent;font-size:22px;line-height:1;cursor:pointer;color:var(--text);border-radius:8px;flex-shrink:0}
.btn-menu:hover{background:#f0f0f0}

.app-body{flex:1 1 auto;display:flex;min-height:0;overflow:hidden}
.app-shell.container-fluid{flex:1 1 auto;width:100%;max-width:1600px;margin:0 auto;min-height:0;display:flex;padding:0 24px}
.app-aside{width:230px;flex:0 0 230px;background:var(--side-bg);border-right:1px solid var(--border-light);overflow-x:hidden;overflow-y:auto;transition:width .2s}
.app-main{flex:1 1 auto;min-width:0;overflow-y:auto;background:var(--bg);padding:18px;position:relative}

/* ============ 侧栏导航（左对齐 + 图标） ============ */
.side-nav{padding:10px 0}
.side-link,.side-sublink{display:flex;align-items:center;gap:12px;padding:11px 18px;color:#475066;text-decoration:none;cursor:pointer;
  font-size:14px;border-left:3px solid transparent;transition:all .15s}
.side-link .mi,.side-sublink .mi{width:20px;text-align:center;flex:none;font-size:16px;line-height:1;opacity:.85}
.side-link .mi .bi,.side-sublink .mi .bi,.side-group-title .mi .bi{vertical-align:-.05em}
.side-link:hover,.side-sublink:hover{background:var(--primary-bg);color:var(--primary)}
.side-link.active,.side-sublink.active{background:var(--primary-bg);color:var(--primary);border-left-color:var(--primary)}
.side-group-title{display:flex;align-items:center;gap:12px;padding:11px 18px;color:#475066;
  cursor:pointer;font-size:14px;font-weight:600;border-left:3px solid transparent;transition:all .15s}
.side-group-title .mi{width:20px;text-align:center;flex:none;font-size:16px;line-height:1;opacity:.85}
.side-group-title:hover{color:var(--primary)}
.side-group-title.active{color:var(--primary)}
.side-group-title .caret{margin-left:6px;transition:transform .2s;font-size:14px;color:var(--text);line-height:1;vertical-align:-1px}
.side-group-title .caret.open{transform:rotate(90deg)}
.side-sublinks .side-sublink{font-size:13px;padding-left:44px}

/* 移动端抽屉 */
.mobile-drawer{display:none}
.drawer-backdrop{display:none}

/* ============ 通用页面元素 ============ */
.page-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.page-head h2{font-size:18px;font-weight:700;margin:0}
.empty{padding:48px 16px;text-align:center;color:var(--text-muted)}
.empty .big{font-size:40px;margin-bottom:10px}
.big-num{font-size:26px;font-weight:700;color:var(--text);line-height:1.3}
.table-wrap{overflow-x:auto;border-radius:var(--radius-sm)}
.table-wrap table{min-width:560px}
.card .table-wrap{border-radius:0}

/* 题目/表单辅助 */
.opt-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.opt-idx{width:28px;height:28px;border:2px solid var(--border);border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:700;color:var(--text-muted);flex-shrink:0}
.opt-list{display:flex;flex-direction:column;gap:4px;margin:6px 0}
.fill-row{display:flex;align-items:center;gap:8px;margin:8px 0}

/* 自定义选项卡（导入/考生端） */
.tabs{display:flex;border-bottom:2px solid var(--border-light);margin-bottom:16px}
.tab{flex:1;text-align:center;padding:10px;font-size:14px;font-weight:500;color:var(--text-muted);cursor:pointer;
  border-bottom:2px solid transparent;margin-bottom:-2px}
.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}

/* 上传框 */
.upload-box{border:1px dashed #ccc;border-radius:8px;padding:18px;text-align:center;background:#fafbfc;margin-bottom:12px}
.upload-box .hint{font-size:12px;color:var(--text-muted);margin-top:6px}

/* 成绩快照 */
.snap-q{padding:12px 0;border-bottom:1px dashed var(--border)}
.snap-q:last-child{border-bottom:none}
.snap-q-text{font-weight:600;margin-bottom:6px}
.snap-ans{font-size:13px;color:var(--text-secondary);margin:3px 0;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.snap-ans b{display:inline-block;min-width:64px;color:var(--text-muted);font-weight:500}
.snap-ans .hl-right{background:rgba(103,194,58,.16);color:#2e7d1f;border-radius:4px;padding:1px 6px}
.snap-ans .hl-wrong{background:rgba(245,108,108,.16);color:#c0392b;border-radius:4px;padding:1px 6px}
.ok{color:var(--success);font-weight:600}
.no{color:var(--danger);font-weight:600}

/* 键值网格（考试详情） */
.kv-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 18px;margin-bottom:6px}
.kv{display:flex;gap:10px;font-size:14px}
.kv-k{color:var(--text-muted);min-width:72px}
.kv-v{font-weight:600}

/* ============ Toast 提示 ============ */
.toast-host{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:2000;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.app-toast{background:rgba(0,0,0,.82);color:#fff;padding:10px 22px;border-radius:10px;font-size:14px;
  max-width:90vw;text-align:center;box-shadow:0 4px 16px rgba(0,0,0,.2);border-left:4px solid #555;opacity:0;transform:translateY(-8px);transition:all .25s}
.app-toast.show{opacity:1;transform:translateY(0)}
.app-toast-success{border-left-color:#52c41a}
.app-toast-danger{border-left-color:#ff4d4f}
.app-toast-warning{border-left-color:#faad14}
.app-toast-info{border-left-color:#1677ff}

/* ============ 考生答题全屏层 ============ */
.exam-overlay{position:absolute;inset:0;background:var(--bg);display:flex;flex-direction:column}
.exam-top{display:flex;align-items:center;gap:14px;padding:12px 20px;background:#fff;
  border-bottom:1px solid var(--border);box-shadow:0 2px 8px rgba(0,0,0,.05);flex-wrap:wrap}
.exam-meta{color:var(--text-muted);font-size:13px}
.exam-timer{margin-left:auto;font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;
  color:var(--primary);background:var(--primary-bg);padding:4px 14px;border-radius:8px}
.exam-timer.danger{color:var(--danger);background:#fff2f0}
.exam-body2{flex:1;display:flex;overflow:hidden}
.exam-nav{width:200px;padding:16px;background:#fff;border-left:1px solid var(--border);
  overflow-y:auto;display:flex;flex-wrap:wrap;gap:8px;align-content:flex-start}
.nav-chip{width:38px;height:38px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--border);border-radius:8px;cursor:pointer;font-size:14px;transition:all .15s;background:#fff}
.nav-chip:hover{border-color:var(--primary)}
.nav-chip.active{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-bg)}
.nav-chip.done{background:var(--primary);color:#fff;border-color:var(--primary)}
.exam-q{flex:1;overflow-y:auto;padding:20px 28px 20px 0}
.q-card2{background:#fff;border-radius:12px;padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow)}
.q-head2{display:flex;justify-content:flex-start;align-items:center;gap:10px;margin-bottom:10px}
.q-num2{font-weight:700}
.q-points2{color:var(--text-muted);font-size:13px}
.q-badges{display:inline-flex;gap:6px;align-items:center}
.q-text2{font-size:15px;line-height:1.7;margin-bottom:14px;white-space:pre-wrap}
/* 填空题：题干内联可点击输入的下划线填空框 */
.fill-inline{display:inline-block;width:auto;min-width:2ch;max-width:240px;padding:0 6px;margin:0 4px;
  border:none;border-bottom:1.5px solid var(--primary);background:rgba(22,119,255,.06);color:var(--text);
  font:inherit;text-align:center;outline:none;transition:border-color .15s,box-shadow .15s}
.fill-inline:focus{border-bottom-color:var(--primary);box-shadow:0 2px 6px rgba(22,119,255,.18)}
[data-theme="dark"] .fill-inline{background:rgba(22,119,255,.14)}
.exam-result{flex:1;overflow-y:auto;padding:24px;max-width:820px;margin:0 auto;width:100%}
.result-detail{background:#fff;border-radius:12px;padding:20px 24px;margin-top:12px;box-shadow:var(--shadow)}

/* ============ 概览卡片（单列全宽 + 图文圆环） ============ */
.waterfall{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;width:100%}
.exam-card{display:block;width:100%;margin:0;padding:15px;background:#fff;border:1px solid var(--border-light);
  border-top:3px solid var(--border);border-radius:12px;box-shadow:var(--shadow);transition:transform .15s,box-shadow .15s}
.wf-sentinel{text-align:center;padding:18px 0 8px;width:100%}
.exam-card:hover{transform:translateY(-2px)}
.exam-card.clickable{cursor:pointer}
.exam-card.clickable:hover{box-shadow:0 10px 26px rgba(0,0,0,.12);border-top-color:var(--primary)}
.exam-card.tone-good{border-top-color:#67c23a}
.exam-card.tone-mid{border-top-color:#409eff}
.exam-card.tone-low{border-top-color:#f56c6c}
.exam-card.tone-idle{border-top-color:#e4a96a}
.ec-head{position:relative;display:flex;align-items:flex-start;justify-content:center;gap:10px;margin-bottom:10px}
.ec-head>.badge{position:absolute;top:0;right:0}
.ec-name-row{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0;flex:0 1 auto;max-width:100%;text-align:center}
.ec-name{font-weight:700;font-size:18px;color:#303133;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;width:100%}
.ec-pub{color:#c0c4cc;font-size:13px;white-space:nowrap;flex:none}
.ec-time{display:flex;align-items:center;justify-content:center;gap:8px;font-size:13px;margin-bottom:10px;flex-wrap:wrap;text-align:center}
.ec-tdot{color:#dcdfe6}
.ec-tlabel{margin-left:6px;font-weight:600;font-size:12px}
.ec-cols{display:flex;gap:10px;margin-bottom:15px;align-items:stretch}
.ec-col{flex:1;min-width:0;display:flex;flex-direction:column}
.ec-gtitle{display:flex;justify-content:center;align-items:center;gap:6px;font-size:14px;font-weight:700;color:#303133;margin-bottom:8px;text-align:center}
.ec-gic{font-size:16px;line-height:1}
.ec-ringwrap{display:flex;flex-direction:column;align-items:center;flex:1;background:#f7f8fa;border-radius:12px;padding:12px 10px}
.ec-ring{position:relative;width:100px;height:100px;flex:none}
.ec-donut{width:100px;height:100px;transform:rotate(-90deg)}
.ec-donut-t{fill:none;stroke:#ebeef5;stroke-width:8}
.ec-donut-p{fill:none;stroke-width:8;stroke-linecap:round;transition:stroke-dashoffset .6s ease}
.ec-ring-c{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.ec-ring-num{font-size:23px;font-weight:700;line-height:1}
.ec-ring-lb{font-size:12px;color:#909399;margin-top:4px}
.ec-stats{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;width:100%;margin-top:10px}
.ec-stats-grid{gap:6px 6px}
.ec-stat{display:flex;flex-direction:column;align-items:center;gap:3px;background:#fff;border:1px solid #ebeef5;border-radius:9px;padding:7px 4px;min-width:54px;flex:1 1 38%}
.ec-ic{font-size:17px;line-height:1}
.ec-gic .bi,.ec-ic .bi{vertical-align:middle}
.empty .big .bi{vertical-align:middle}
.ec-num{font-size:19px;font-weight:700;color:#303133;line-height:1.2}
.ec-lb{font-size:11px;color:#909399}
.ec-foot{margin-top:4px;text-align:right;border-top:1px solid #ebeef5;padding-top:8px}

/* ============ 题库卡片网格 ============ */
.bank-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;padding:2px}
.bank-card{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);padding:18px 18px 16px;cursor:pointer;
  display:flex;flex-direction:column;min-height:132px;transition:transform .15s,box-shadow .15s,border-color .15s;position:relative}
.bank-card:hover{box-shadow:0 8px 22px rgba(0,0,0,.1);transform:translateY(-2px);border-color:var(--primary)}
.bank-card-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:6px}
.bank-ic{font-size:28px;color:var(--primary);line-height:1}
.bank-del{padding:0;font-size:12px;opacity:.7}
.bank-del:hover{opacity:1}
.bank-name{font-size:16px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}
.bank-meta{color:var(--text-muted);font-size:13px;margin-top:6px;display:flex;align-items:baseline;gap:5px}
.bank-count{font-size:22px;font-weight:800;color:var(--text)}
.bank-go{margin-top:auto;padding-top:14px;color:var(--primary);font-size:13px;font-weight:600;display:flex;align-items:center;gap:4px}
.bank-card:hover .bank-go i{transform:translateX(3px);transition:transform .15s}

/* ============ 通用面板卡片（详情页等） ============ */
.panel-card{background:#fff;border:1px solid var(--border-light);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.panel-card-h{padding:12px 16px;font-weight:700;font-size:15px;color:#303133;border-bottom:1px solid #ebeef5;background:#fafbfc}
.panel-card .kv-grid{padding:14px 16px}
.panel-card-h-toggle{display:flex;align-items:center;cursor:pointer;user-select:none}
.panel-card-h-toggle:hover{background:#f0f2f5}
.panel-card-h-toggle .caret{margin-left:auto;font-size:12px;transition:transform .2s}
.panel-card-h-toggle .caret.open{transform:rotate(90deg)}
.panel-fold-hint{padding:10px 16px;color:var(--text-muted);font-size:13px;background:#fff;border-bottom:1px solid #ebeef5}
.exam-desc{padding:0 16px 14px;color:#606266;font-size:13px;line-height:1.6}
.q-row{cursor:pointer;transition:background .12s}
.q-row:hover{background:#f5f7fa}

/* ============ 考试编辑器 ============ */
.exam-editor-layout{display:flex;height:100%;min-height:0;background:#f0f2f5}
.ee-sidebar{width:270px;flex:0 0 270px;background:#fff;border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}
.ee-tabs{display:flex;border-bottom:1px solid var(--border)}
.ee-tabs button{flex:1;border:none;background:#f8f9fa;padding:12px 8px;font-size:14px;font-weight:600;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px}
.ee-tabs button.active{background:#fff;color:var(--primary);box-shadow:inset 0 -2px 0 var(--primary)}
.ee-panel-body{flex:1;overflow-y:auto;padding:14px}
.ee-group-title{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#555;margin:16px 0 10px}
.ee-group-title:first-child{margin-top:0}
.ee-type-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ee-type-card{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:14px 8px;border:1px solid var(--border);border-radius:10px;cursor:pointer;background:#fff;transition:all .15s;font-size:13px;color:#444}
.ee-type-card:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-bg)}
.ee-type-card.disabled{opacity:.45;cursor:not-allowed;background:#f8f9fa}
.ee-type-card i{font-size:20px}
.ee-bank-list{max-height:440px;overflow-y:auto;border:1px solid var(--border-light);border-radius:8px;padding:6px;margin-bottom:10px;background:#fafafa}
.ee-bank-item{display:flex;align-items:flex-start;gap:8px;padding:6px;border-radius:6px;cursor:pointer}
.ee-bank-item:hover{background:#f0f4ff}
.ee-bank-meta{flex:1;min-width:0}
.ee-bank-content{font-size:13px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ee-bank-type{font-size:11px;margin-top:3px;display:inline-block}
.ee-main{flex:1;overflow-y:auto;padding:20px 24px}
.ee-canvas{max-width:900px;margin:0 auto;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);min-height:calc(100vh - 120px);padding:20px 28px 28px;display:flex;flex-direction:column}
.ee-canvas-head{display:flex;align-items:center;margin-bottom:10px}
.ee-canvas-foot{margin-top:auto;display:flex;justify-content:center;gap:12px;padding-top:20px}
.ee-title-input{width:100%;max-width:560px;border:none;border-bottom:2px solid transparent;font-size:26px;font-weight:700;text-align:center;color:#1677ff;background:transparent;padding:8px 12px;outline:none}
.ee-title-input:focus{border-bottom-color:var(--primary)}
.ee-title-input::placeholder{color:#b0c4de;font-weight:400}
.ee-desc-input{width:100%;max-width:560px;margin:0 auto;display:block;border:1px solid var(--border-light);border-radius:8px;padding:10px 12px;resize:vertical;font-size:14px}
.ee-toolbar{display:flex;justify-content:center;gap:12px;margin:18px 0 24px;flex-wrap:wrap}
.ee-toolbar .btn{display:flex;align-items:center;gap:6px}
.ee-question-list{display:flex;flex-direction:column;gap:16px}
.ee-q-card{border:1px solid var(--border);border-radius:12px;padding:16px;background:#fff;transition:box-shadow .15s}
.ee-q-card:hover{box-shadow:0 4px 14px rgba(0,0,0,.06)}
.ee-q-header{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.ee-q-no{width:28px;height:28px;border-radius:50%;background:var(--primary-bg);color:var(--primary);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}
.ee-options{display:flex;flex-direction:column;gap:8px}
.ee-option{display:flex;align-items:center;gap:10px}
.ee-option .form-control{flex:1;min-width:0}

/* 抽题设置（题库随机） */
.ee-draw-row{border:1px solid var(--border-light);border-radius:8px;padding:8px 10px;margin-bottom:8px;background:#fff}

/* 封面色板 / 预览 */
.cover-preview{border-radius:10px;min-height:120px;padding:18px 20px;color:#fff;display:flex;flex-direction:column;justify-content:flex-end;box-shadow:inset 0 0 0 1px rgba(255,255,255,.15)}
.cover-preview .cp-title{font-size:20px;font-weight:700;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.cover-preview .cp-desc{font-size:13px;opacity:.92;margin-top:4px;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.cover-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:10px}
.cover-swatch{height:64px;border-radius:10px;cursor:pointer;border:2px solid transparent;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:600;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);transition:transform .1s,border-color .1s;background:#f1f3f5}
.cover-swatch:hover{transform:translateY(-2px)}
.cover-swatch.active{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg)}
.cover-swatch .cs-label{text-shadow:0 1px 3px rgba(0,0,0,.3)}

/* 效果示例（考生端卡片预览） */
.exam-card-preview{overflow:hidden}
.exam-card-preview .ecp-cover{min-height:130px;padding:20px;color:#fff;display:flex;flex-direction:column;justify-content:flex-end;box-shadow:inset 0 0 0 1px rgba(255,255,255,.15)}
.exam-card-preview .ecp-cover-title{font-size:20px;font-weight:700;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.exam-card-preview .ecp-cover-desc{font-size:13px;opacity:.92;margin-top:4px;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.exam-card-preview .ecp-body{padding:16px}
.exam-card-preview .ecp-meta{font-size:13px;color:var(--muted);line-height:1.9}

/* 考生端封面横幅 */
.portal-cover{min-height:96px;padding:18px 16px;color:#fff;display:flex;flex-direction:column;justify-content:flex-end;border-radius:8px 8px 0 0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.portal-cover-title{font-size:18px;font-weight:700;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.portal-cover-desc{font-size:12px;opacity:.92;margin-top:2px;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.detail-cover{min-height:110px;padding:20px;color:#fff;display:flex;flex-direction:column;justify-content:flex-end;margin-bottom:16px;border-radius:12px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.detail-cover-title{font-size:22px;font-weight:700;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.detail-cover-desc{font-size:13px;opacity:.92;margin-top:4px;text-shadow:0 1px 3px rgba(0,0,0,.25)}
.exam-cover{color:#fff;display:flex;align-items:flex-end;padding:14px 20px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.exam-cover-title{font-size:18px;font-weight:700;text-shadow:0 1px 3px rgba(0,0,0,.25)}

/* ============ 弹窗：垂直居中 + 统一宽度（菜单栏+内容页总宽的 1/2，总宽≈min(视口,1600px)）+ 高度自适应 ============ */
.modal.ee-modal{display:flex !important;align-items:center;justify-content:center}
/* 所有弹窗（无论 size=sm/md/lg/xl/big）统一为总宽的 1/2，最小不低于 92vw 避免窄屏过窄 */
.ee-modal .modal-dialog{
  --ee-mw: calc((min(100vw, 1600px) - 48px) / 2); /* 菜单栏(230)+内容页 总宽的 1/2，大屏≈776px */
  width: min(92vw, var(--ee-mw));
  max-width: min(92vw, var(--ee-mw));
  margin: 1.75rem auto;
}
/* 高度自适应：最小不低于宽度一半，最大不超过宽度的黄金分割线(0.618)，超出出滚动条 */
.ee-modal .modal-content{
  min-height: calc(var(--ee-mw) * 0.5);
  max-height: calc(var(--ee-mw) * 0.618);
  display:flex; flex-direction:column;
}
.ee-modal .modal-header,.ee-modal .modal-footer{flex:0 0 auto}
.ee-modal .modal-body{flex:1 1 auto; min-height:0; overflow-y:auto; padding:1rem 1.25rem}

/* 海报弹窗：宽约为两部手机（≈840px），高接近一部手机高度 */
.modal-poster .modal-dialog{width:min(94vw,840px);max-width:min(94vw,840px);margin:1.5rem auto}
.modal-poster .modal-content{max-height:90vh}
.modal-poster .modal-body{display:block}

/* 预览：手机 / PC 两种外壳 */
.poster-stage{display:flex;justify-content:center;align-items:flex-start;padding-top:4px}
.poster-frame{position:relative;transition:all .2s}
.poster-frame.phone{width:300px;padding:18px 12px 20px;background:#0b0e13;border-radius:32px;box-shadow:0 10px 30px rgba(0,0,0,.35);border:2px solid #2a2f3a}
.poster-frame.phone .pf-notch{position:absolute;top:9px;left:50%;transform:translateX(-50%);width:92px;height:14px;background:#0b0e13;border-radius:0 0 12px 12px;z-index:2}
.poster-frame.pc{width:100%;max-width:480px;border:1px solid #d4d9e2;border-radius:10px;overflow:hidden;box-shadow:0 10px 30px rgba(0,0,0,.2)}
.poster-frame.pc .pf-bar{display:flex;align-items:center;gap:6px;padding:8px 10px;background:#edeff3;border-bottom:1px solid #dde1e8}
.poster-frame.pc .pf-dot{width:10px;height:10px;border-radius:50%;background:#ff5f57}
.poster-frame.pc .pf-dot+.pf-dot{background:#febc2e}
.poster-frame.pc .pf-dot+.pf-dot+.pf-dot{background:#28c840}
.poster-frame.pc .pf-url{flex:1;margin-left:8px;font-size:12px;color:#555;background:#fff;border-radius:6px;padding:2px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.poster-canvas{display:block;width:100%;height:auto;border-radius:6px;touch-action:none;cursor:grab}
.poster-canvas:active{cursor:grabbing}
.poster-frame.phone .poster-canvas{border-radius:10px}

/* 配置项：色盘 / 推荐渐变 / 推荐图片 */
.poster-color{width:38px;height:34px;padding:2px;border:1px solid #d0d7de;border-radius:8px;background:#fff;cursor:pointer}
.poster-swatch{width:40px;height:54px;border:0;border-radius:8px;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.poster-swatch.active{outline:2px solid var(--primary,#3c8aff);outline-offset:2px}
.poster-rec{width:48px;height:64px;border:0;border-radius:8px;overflow:hidden;cursor:pointer;padding:0;background:#eef0f3}
.poster-rec img{width:100%;height:100%;object-fit:cover;display:block}
.poster-rec.active{outline:2px solid var(--primary,#3c8aff);outline-offset:2px}
.poster-rec-up{display:flex;align-items:center;justify-content:center;color:#94a3b8;border:1px dashed #cbd5e1}

/* 批量添加：解析预览 */
.batch-preview-list{max-height:280px;overflow-y:auto;border:1px solid var(--border-light);border-radius:8px;padding:6px;background:#fafafa;margin-top:4px}
.batch-preview-item{display:flex;gap:8px;align-items:flex-start;padding:6px 6px;border-bottom:1px solid #eee}
.batch-preview-item:last-child{border-bottom:none}
.batch-preview-content{flex:1;min-width:0;font-size:13px;line-height:1.4}

/* 成绩与统计：考试维度表格可点击行 */
.table-hover tbody .clickable-row{cursor:pointer}
.table-hover tbody .clickable-row:hover{background:#f4f8ff}

/* ============ 响应式 ============ */
@media (max-width:992px){
  .waterfall{grid-template-columns:1fr}
  .ec-cols{flex-direction:column;gap:14px}
}
@media (max-width:768px){
  .hdr-inner{padding:0 14px}
  .app-main{padding:12px}
  .btn-menu{display:inline-flex}
  .mobile-drawer{display:block;position:fixed;top:0;bottom:0;left:0;width:80%;max-width:280px;z-index:1060;
    background:var(--side-bg);transform:translateX(-100%);transition:transform .25s ease;box-shadow:2px 0 14px rgba(0,0,0,.18)}
  .mobile-drawer.open{transform:translateX(0)}
  .drawer-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1055}
  .ec-name{font-size:16px}
  .exam-top{gap:8px;padding:10px 12px;flex-wrap:wrap}
  .exam-meta{width:100%;order:3}
  .exam-timer{font-size:17px;padding:3px 10px}
  .exam-body2{flex-direction:column}
  .exam-nav{width:100%;max-height:96px;border-right:none;border-bottom:1px solid var(--border);padding:10px}
  .exam-q{padding:12px}
  .q-card2{padding:16px}
  .kv-grid{grid-template-columns:1fr}
}

/* ============ 暗色主题（data-theme="dark"） ============ */
[data-theme="dark"]{
  --primary:#3c8aff; --primary-hover:#5a9bff; --primary-bg:rgba(60,138,255,.16);
  --success:#52c41a; --danger:#ff4d4f; --warning:#faad14;
  --text:#e6e9ef; --text-muted:#8a93a3; --text-secondary:#aab2c0; --muted:#9aa3b2;
  --border:#2c313c; --border-light:#23272f;
  --bg:#0e1116; --card-bg:#171b22; --side-bg:#0b0e13;
  --shadow:0 2px 8px rgba(0,0,0,.45);
  --surface:#171b22; --surface-2:#1e232c; --hover:#262c37; --ring-track:#2a2f3a;
  /* 同步 Bootstrap 5 核心颜色变量，使 .table / .text-muted / .form-* / 链接等暗色适配 */
  --bs-body-color:#e6e9ef; --bs-body-color-rgb:230,233,239; --bs-body-bg:#0e1116;
  --bs-emphasis-color:#f0f3f8; --bs-emphasis-color-rgb:240,243,248;
  --bs-secondary-color:rgba(230,233,239,.72); --bs-tertiary-color:rgba(230,233,239,.5);
  --bs-border-color:#2c313c; --bs-border-color-translucent:rgba(255,255,255,.15);
  --bs-table-color:#e6e9ef; --bs-table-border-color:#2c313c;
  --bs-table-striped-color:#e6e9ef; --bs-table-hover-color:#e6e9ef;
  --bs-heading-color:#f0f3f8; --bs-link-color:#6fb1ff; --bs-link-hover-color:#9cc8ff;
  --bs-muted-color:rgba(230,233,239,.72);
}
[data-theme="dark"] .app-header{background:var(--surface-2)}
[data-theme="dark"] .hdr-user:hover{background:var(--hover)}
[data-theme="dark"] .hdr-usermenu{background:var(--surface-2);border-color:var(--border)}
[data-theme="dark"] .btn-menu:hover{background:var(--hover)}
[data-theme="dark"] .exam-top{background:var(--surface-2)}
[data-theme="dark"] .exam-timer.danger{background:rgba(255,77,79,.16)}
[data-theme="dark"] .exam-nav{background:var(--surface)}
[data-theme="dark"] .nav-chip{background:var(--surface);color:var(--text)}
[data-theme="dark"] .q-card2,[data-theme="dark"] .result-detail,[data-theme="dark"] .exam-card{background:var(--surface);color:var(--text)}
/* Bootstrap .card 在暗色下变深（考试管理列表、角色卡片等） */
[data-theme="dark"] .card{background:var(--surface);border-color:var(--border);color:var(--text)}
[data-theme="dark"] .card .text-muted{color:var(--text-muted)!important}
[data-theme="dark"] .ee-q-card{background:var(--surface);border-color:var(--border)}
[data-theme="dark"] .ee-q-card:hover{box-shadow:0 4px 14px rgba(0,0,0,.4)}
[data-theme="dark"] .input{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:6px}
[data-theme="dark"] .input::placeholder{color:var(--text-muted)}
[data-theme="dark"] .pick-item{background:var(--surface-2);border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:8px}
[data-theme="dark"] .pick-q{color:var(--text)}
[data-theme="dark"] .ec-name,[data-theme="dark"] .ec-gtitle,[data-theme="dark"] .ec-num{color:var(--text)}
[data-theme="dark"] .ec-pub,[data-theme="dark"] .ec-tdot,[data-theme="dark"] .ec-lb{color:var(--text-muted)}
/* ec-time 用了 inline style 的深色（如 #909399），暗色下强制覆盖为浅色；环形图彩色数字 ec-ring-num 不受影响 */
[data-theme="dark"] .ec-time{color:var(--text-secondary)!important}
[data-theme="dark"] .ec-tlabel{color:var(--text-muted)!important}
[data-theme="dark"] .ec-ringwrap{background:var(--surface-2)}
[data-theme="dark"] .ec-donut-t{stroke:var(--ring-track)}
[data-theme="dark"] .ec-stat{background:var(--surface);border-color:var(--border)}
[data-theme="dark"] .ec-foot{border-top-color:var(--border)}
[data-theme="dark"] .panel-card{background:var(--surface)}
[data-theme="dark"] .panel-card-h{color:var(--text);background:var(--surface-2);border-bottom-color:var(--border)}
[data-theme="dark"] .panel-card-h-toggle:hover{background:var(--hover)}
[data-theme="dark"] .panel-fold-hint{background:var(--surface);border-bottom-color:var(--border)}
[data-theme="dark"] .exam-desc{color:var(--text-secondary)}
[data-theme="dark"] .q-row:hover{background:var(--hover)}
[data-theme="dark"] .exam-editor-layout{background:var(--bg)}
[data-theme="dark"] .ee-sidebar{background:var(--surface)}
[data-theme="dark"] .ee-tabs button{background:var(--surface-2);color:var(--text-muted)}
[data-theme="dark"] .ee-tabs button.active{background:var(--surface);color:var(--primary)}
[data-theme="dark"] .ee-type-card{background:var(--surface);color:var(--text-secondary)}
[data-theme="dark"] .ee-type-card.disabled{background:var(--surface-2)}
[data-theme="dark"] .ee-bank-list{background:var(--surface-2)}
[data-theme="dark"] .ee-bank-item:hover{background:var(--hover)}
[data-theme="dark"] .ee-canvas{background:var(--surface)}
[data-theme="dark"] .ee-draw-row{background:var(--surface)}
[data-theme="dark"] .upload-box{background:var(--surface-2);border-color:var(--border)}
[data-theme="dark"] .batch-preview-list{background:var(--surface-2)}
[data-theme="dark"] .batch-preview-item{border-bottom-color:var(--border-light)}
[data-theme="dark"] .table-hover tbody .clickable-row:hover{background:var(--hover)}
[data-theme="dark"] .login-card{background:var(--surface);color:var(--text)}

/* 暗色下侧栏保持深色，恢复浅色文字 */
[data-theme="dark"] .app-aside{border-right-color:var(--border)}
[data-theme="dark"] .side-link,[data-theme="dark"] .side-sublink{color:#cbd5e1}
[data-theme="dark"] .side-link .mi,[data-theme="dark"] .side-sublink .mi,[data-theme="dark"] .side-group-title .mi{opacity:.92}
[data-theme="dark"] .side-link:hover,[data-theme="dark"] .side-sublink:hover{background:rgba(255,255,255,.06);color:#fff}
[data-theme="dark"] .side-link.active,[data-theme="dark"] .side-sublink.active{background:rgba(60,138,255,.18);color:#fff;border-left-color:var(--primary)}
[data-theme="dark"] .side-group-title{color:#cbd5e1}
[data-theme="dark"] .side-group-title:hover,[data-theme="dark"] .side-group-title.active{color:#fff}

/* Bootstrap 组件暗色适配 */
[data-theme="dark"] .modal-content{background:var(--surface);color:var(--text)}
[data-theme="dark"] .modal-header{border-bottom-color:var(--border)}

/* 试卷编辑器·状态徽章 */
.ee-status-badge{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;margin-left:10px}
.ee-status-badge.published{background:rgba(82,196,26,.12);color:var(--success)}
.ee-status-badge.draft{background:rgba(140,147,163,.16);color:var(--text-muted)}
.ee-status-badge.ended{background:rgba(140,147,163,.16);color:var(--text-muted)}
.ee-status-badge.paused{background:rgba(250,173,20,.14);color:var(--warning)}

/* 试卷海报·二维码 */
.poster-qr-wrap{display:inline-block;padding:14px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);margin-top:8px}
.poster-qr{display:block;width:260px;height:260px}
[data-theme="dark"] .modal-footer{border-top-color:var(--border)}
[data-theme="dark"] .modal-backdrop{opacity:.6}
[data-theme="dark"] .form-control,[data-theme="dark"] .form-select{background:var(--surface-2);color:var(--text);border-color:var(--border)}
[data-theme="dark"] .form-control:focus,[data-theme="dark"] .form-select:focus{background:var(--surface-2);color:var(--text);border-color:var(--primary);box-shadow:0 0 0 .2rem rgba(60,138,255,.25)}
[data-theme="dark"] .form-control::placeholder{color:var(--text-muted)}
[data-theme="dark"] .form-label,[data-theme="dark"] .form-check-label{color:var(--text)}
[data-theme="dark"] .form-check-input{background-color:var(--surface-2);border-color:var(--border)}
[data-theme="dark"] .form-check-input:checked{background-color:var(--primary);border-color:var(--primary)}
[data-theme="dark"] .btn-close{filter:invert(1) grayscale(1)}
[data-theme="dark"] .table{color:var(--text);--bs-table-bg:transparent;background:transparent}
[data-theme="dark"] .table th,[data-theme="dark"] .table td{border-color:var(--border)}
[data-theme="dark"] .table thead th{color:var(--text-muted)}
[data-theme="dark"] .table-hover>tbody>tr:hover,[data-theme="dark"] .table tbody tr:hover{background:var(--hover)}
/* .text-muted 等工具类被 Bootstrap 用 !important 写死亮色，必须同样用 !important 压过 */
[data-theme="dark"] .text-muted,[data-theme="dark"] .text-secondary,[data-theme="dark"] .text-body,[data-theme="dark"] .text-body-secondary{color:var(--text-muted)!important}
[data-theme="dark"] .text-white-50,[data-theme="dark"] .text-black-50{color:var(--text-muted)!important}
/* 暗色滚动条（Firefox 用 scrollbar-color，WebKit 用伪元素） */
[data-theme="dark"]{scrollbar-color:#2c313c var(--bg);scrollbar-width:thin}
[data-theme="dark"] ::-webkit-scrollbar{width:10px;height:10px}
[data-theme="dark"] ::-webkit-scrollbar-track{background:var(--bg)}
[data-theme="dark"] ::-webkit-scrollbar-thumb{background:#2c313c;border-radius:6px;border:2px solid var(--bg)}
[data-theme="dark"] ::-webkit-scrollbar-thumb:hover{background:#3a4150}
[data-theme="dark"] .nav-tabs{border-bottom-color:var(--border)}
[data-theme="dark"] .nav-tabs .nav-link{color:var(--text-muted)}
[data-theme="dark"] .nav-tabs .nav-link.active{color:var(--text);background:transparent;border-color:var(--border) var(--border) var(--surface)}
[data-theme="dark"] .pagination .page-link{background:var(--surface-2);color:var(--text);border-color:var(--border)}
[data-theme="dark"] .pagination .page-item.disabled .page-link{color:var(--text-muted);background:var(--surface)}
[data-theme="dark"] .btn-outline-secondary{color:var(--text);border-color:var(--border)}
[data-theme="dark"] .btn-outline-secondary:hover{background:var(--hover);color:var(--text)}
[data-theme="dark"] .text-secondary{color:var(--text-muted)!important}

/* ============ 考试管理操作列按钮：保留语义色但极淡 ============ */
.exam-ops .btn{box-shadow:none;background-color:rgba(64,150,255,.10);border-color:rgba(64,150,255,.25);color:#1677ff}
.exam-ops .btn-secondary{color:#6b7280;background-color:rgba(140,145,155,.10);border-color:rgba(140,145,155,.25)}
.exam-ops .btn-dark{color:#3c4250;background-color:rgba(90,96,114,.10);border-color:rgba(90,96,114,.25)}
.exam-ops .btn-danger{color:#f5343a;background-color:rgba(255,120,117,.10);border-color:rgba(255,120,117,.25)}
.exam-ops .btn-info{color:#0e9b96;background-color:rgba(54,207,201,.10);border-color:rgba(54,207,201,.25)}
.exam-ops .btn-warning{color:#b87a06;background-color:rgba(255,197,61,.12);border-color:rgba(255,197,61,.28)}
.exam-ops .btn:hover{filter:brightness(.97)}
.exam-ops .btn:disabled{opacity:.5;filter:grayscale(1);cursor:not-allowed}
[data-theme="dark"] .exam-ops .btn{background-color:rgba(64,150,255,.16);border-color:rgba(64,150,255,.35);color:#4096ff}
[data-theme="dark"] .exam-ops .btn-secondary{color:#aeb3bd;background-color:rgba(140,145,155,.16);border-color:rgba(140,145,155,.35)}
[data-theme="dark"] .exam-ops .btn-dark{color:#c2c7d4;background-color:rgba(90,96,114,.18);border-color:rgba(90,96,114,.4)}
[data-theme="dark"] .exam-ops .btn-danger{color:#ff7875;background-color:rgba(255,120,117,.16);border-color:rgba(255,120,117,.35)}
[data-theme="dark"] .exam-ops .btn-info{color:#36cfc9;background-color:rgba(54,207,201,.16);border-color:rgba(54,207,201,.35)}
[data-theme="dark"] .exam-ops .btn-warning{color:#ffc53d;background-color:rgba(255,197,61,.18);border-color:rgba(255,197,61,.4)}

/* ============ 考试管理：与内容同宽的长条卡片 ============ */
.exam-bars{display:flex;flex-direction:column;gap:12px;width:100%}
.exam-bar{display:flex;align-items:center;gap:20px;width:100%;padding:16px 20px;
  background:#fff;border:1px solid var(--border-light);border-radius:10px;
  box-shadow:var(--shadow);transition:box-shadow .15s,border-color .15s}
.exam-bar:hover{box-shadow:0 3px 14px rgba(0,0,0,.08);border-color:var(--border)}
.eb-main{flex:1 1 auto;min-width:0}
.eb-head{display:flex;align-items:center;gap:10px}
.eb-name{font-size:16px;font-weight:600;color:#303133;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:460px}
.eb-time{margin-top:6px;font-size:13px;color:#909399;display:flex;align-items:center;gap:8px}
.eb-time i{font-size:12px}
.eb-tip{margin-left:2px;padding:1px 8px;border-radius:10px;background:#f4f4f5;color:#909399;font-size:12px}
.eb-sub{margin-top:4px;font-size:12px;color:#c0c4cc}
.eb-stats{display:flex;gap:22px;flex:0 0 auto}
.eb-stat{display:flex;flex-direction:column;align-items:center;min-width:54px}
.eb-num{font-size:18px;font-weight:700;color:#303133;line-height:1.1}
.eb-lb{font-size:12px;color:#909399;margin-top:2px}
.eb-ops{flex:0 0 auto;display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;max-width:340px}

/* 暗色模式适配 */
[data-theme="dark"] .exam-bar{background:var(--surface);border-color:var(--border);color:var(--text)}
[data-theme="dark"] .exam-bar .eb-name{color:var(--text)}
[data-theme="dark"] .exam-bar .eb-sub{color:var(--muted)}
[data-theme="dark"] .exam-bar .eb-time{color:var(--muted)}
[data-theme="dark"] .exam-bar .eb-tip{background:var(--surface);color:var(--muted)}

/* 窄屏：纵向堆叠，统计换行 */
@media (max-width:1100px){
  .exam-bar{flex-wrap:wrap}
  .eb-stats{order:3;width:100%;justify-content:flex-start;flex-wrap:wrap;gap:16px}
  .eb-ops{order:2;max-width:none;flex:1 1 100%;justify-content:flex-start}
}

/* ===== 通用长条卡片：题库/用户/角色/群组列表统一风格 ===== */
.list-cards{display:flex;flex-direction:column;gap:12px;width:100%}
.lc-bar{display:flex;align-items:center;gap:20px;width:100%;padding:16px 20px;background:#fff;border:1px solid var(--border-light);border-radius:12px;box-shadow:var(--shadow);transition:box-shadow .15s ease,border-color .15s ease}
.lc-bar:hover{box-shadow:0 3px 14px rgba(0,0,0,.08);border-color:var(--border)}
.lc-bar.clickable{cursor:pointer}
.lc-main{flex:1 1 auto;min-width:0}
.lc-head{display:flex;align-items:center;gap:10px}
.lc-name{font-size:16px;font-weight:600;color:#303133;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:480px}
.lc-sub{margin-top:5px;font-size:13px;color:#909399;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lc-sub b{color:#606266;font-weight:600}
.lc-tip{margin-right:6px;padding:1px 8px;border-radius:10px;background:#f4f4f5;color:#909399;font-size:12px}
.lc-go{font-size:13px;color:#1677ff}
.lc-stats{display:flex;gap:22px;flex:0 0 auto}
.lc-stat{display:flex;flex-direction:column;align-items:center;min-width:48px}
.lc-num{font-size:18px;font-weight:700;color:#303133;line-height:1.1}
.lc-lb{font-size:12px;color:#909399;margin-top:2px}
.lc-ops{flex:0 0 auto;display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;max-width:360px}
[data-theme="dark"] .lc-bar{background:var(--surface);border-color:var(--border);color:var(--text)}
[data-theme="dark"] .lc-bar .lc-name{color:var(--text)}
[data-theme="dark"] .lc-bar .lc-sub{color:var(--muted)}
[data-theme="dark"] .lc-bar .lc-tip{background:var(--surface);color:var(--muted)}
[data-theme="dark"] .lc-num{color:var(--text)}
@media (max-width:1100px){
  .lc-bar{flex-wrap:wrap}
  .lc-stats{order:3;width:100%;justify-content:flex-start;flex-wrap:wrap;gap:16px}
  .lc-ops{order:2;max-width:none;flex:1 1 100%;justify-content:flex-start}
}
.role-check-group{border:1px solid var(--border-light);border-radius:8px;padding:10px 12px;background:#fff;max-height:160px;overflow:auto}
[data-theme="dark"] .role-check-group{background:#1f2937;border-color:#374151}
.exam-toolbar{display:flex;align-items:center;gap:12px;width:100%}
.exam-search{flex:1 1 auto;max-width:320px}
.exam-count{font-size:13px;color:#909399;margin-left:auto}

/* ============ 确认对话框（confirm-box）：小尺寸 + 内容居中 ============ */
.ee-modal .modal-dialog.confirm-box{width:min(92vw,300px);max-width:min(92vw,300px);margin:.4rem auto}
.ee-modal .modal-content.confirm-box{text-align:center;padding:.4rem;min-height:0;max-height:none;width:auto;aspect-ratio:1.618 / 1;display:flex;flex-direction:column;justify-content:space-between}
.ee-modal .modal-content.confirm-box .modal-header,.ee-modal .modal-content.confirm-box .modal-body,.ee-modal .modal-content.confirm-box .modal-footer{flex:0 0 auto}
.ee-modal .modal-content.confirm-box .modal-header{justify-content:center;border-bottom:none;padding:.5rem .9rem .2rem}
.ee-modal .modal-content.confirm-box .modal-title{width:100%;text-align:center;font-size:18px;line-height:1.25;margin:0}
.ee-modal .modal-content.confirm-box .modal-body{text-align:center;padding:.35rem 1rem .25rem;font-size:14.5px;line-height:1.4;overflow-y:auto}
.ee-modal .modal-content.confirm-box .modal-footer{justify-content:center;border-top:none;padding:.25rem .9rem .5rem;gap:.5rem}
.ee-modal .modal-content.confirm-box .btn{padding:.32rem .9rem;font-size:14px}

/* ============ 分页器 ============ */
.pager { display:flex; align-items:center; justify-content:flex-end; gap:14px; padding:14px 2px 4px; flex-wrap:wrap; }
.pager-single { justify-content:flex-start; }
.pager-info { color:var(--text-muted); font-size:13px; }
.pager .btn[disabled] { opacity:.45; cursor:not-allowed; }

/* ============ 启动加载占位（me() 返回前显示，避免刷新闪现登录页） ============ */
.boot-splash{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:var(--bg);color:var(--text)}
.boot-splash .boot-text{font-size:14px}

