/* ============================================================
   围手术期临床风险认知虚实结合模拟系统 V1 — 样式
   三套主题（CSS变量切换）：theme-medical 医疗蓝白（默认）
                           theme-dark    深色科技大屏
                           theme-teal    青绿生命感
   ============================================================ */
* { margin:0; padding:0; box-sizing:border-box; }
html,body { height:100%; }
body {
  font-family:"Microsoft YaHei","PingFang SC","Segoe UI",sans-serif;
  background:var(--bg); color:var(--ink); font-size:14px;
  transition:background .3s;
}

/* ---------- 主题变量 ---------- */
.theme-medical {
  --bg:#eef4fb; --bg2:#e2ecf7;
  --panel:#ffffff; --panel2:#f4f8fc; --panel3:#e8f1f9;
  --ink:#1c2b3a; --muted:#6b7f93; --line:#d5e2ee;
  --accent:#0e6fd8; --accent2:#3ba0f6; --accent-soft:#e3f0fd;
  --ok:#18a058; --warn:#e6a23c; --danger:#e5484d; --purple:#7c5cd6;
  --shadow:0 2px 10px rgba(30,80,140,.10);
  --shadow-lg:0 8px 30px rgba(30,80,140,.18);
  --monitor-bg:#04121f;
}
.theme-dark {
  --bg:#0b1526; --bg2:#0e1b30;
  --panel:#13233d; --panel2:#182b48; --panel3:#1e3353;
  --ink:#dce8f7; --muted:#8aa3c2; --line:#24406a;
  --accent:#37a6ff; --accent2:#63c7ff; --accent-soft:#10305a;
  --ok:#2fbf71; --warn:#f0b04b; --danger:#ff6b6e; --purple:#a48af0;
  --shadow:0 2px 12px rgba(0,0,0,.35);
  --shadow-lg:0 10px 34px rgba(0,0,0,.5);
  --monitor-bg:#04121f;
}
.theme-teal {
  --bg:#eef7f4; --bg2:#e2f1ec;
  --panel:#ffffff; --panel2:#f2faf7; --panel3:#e3f3ed;
  --ink:#17332c; --muted:#5f8377; --line:#cfe6dd;
  --accent:#0d9271; --accent2:#3ec9a4; --accent-soft:#dff5ee;
  --ok:#18a058; --warn:#e6a23c; --danger:#e5484d; --purple:#7c5cd6;
  --shadow:0 2px 10px rgba(20,110,90,.10);
  --shadow-lg:0 8px 30px rgba(20,110,90,.18);
  --monitor-bg:#03150f;
}

/* ---------- 通用 ---------- */
button { font-family:inherit; cursor:pointer; border:none; }
input,select,textarea { font-family:inherit; font-size:14px; }
.hidden { display:none !important; }
.card { background:var(--panel); border-radius:14px; box-shadow:var(--shadow); border:1px solid var(--line); }
.btn {
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  padding:9px 18px; border-radius:9px; font-size:14px; font-weight:600;
  background:var(--accent); color:#fff; transition:.15s;
  box-shadow:0 2px 6px rgba(14,111,216,.25);
}
.btn:hover { filter:brightness(1.08); transform:translateY(-1px); }
.btn:active { transform:translateY(0); }
.btn.ghost { background:var(--panel2); color:var(--ink); border:1px solid var(--line); box-shadow:none; }
.btn.warn { background:var(--warn); }
.btn.danger { background:var(--danger); }
.btn.sm { padding:5px 12px; font-size:12.5px; border-radius:7px; }
.btn:disabled { opacity:.45; cursor:not-allowed; transform:none; }
.tag { display:inline-flex; align-items:center; padding:2px 10px; border-radius:99px; font-size:12px; font-weight:600; }
.tag.blue { background:var(--accent-soft); color:var(--accent); }
.tag.green { background:rgba(24,160,88,.12); color:var(--ok); }
.tag.amber { background:rgba(230,162,60,.14); color:var(--warn); }
.tag.red { background:rgba(229,72,77,.12); color:var(--danger); }
.tag.purple { background:rgba(124,92,214,.12); color:var(--purple); }

/* 待审核徽章（内容待专业人员审核） */
.review-badge {
  display:inline-flex; align-items:center; gap:4px; cursor:help;
  background:repeating-linear-gradient(45deg,#e6a23c,#e6a23c 6px,#edbb6b 6px,#edbb6b 12px);
  color:#fff; font-size:11px; font-weight:700; padding:1px 8px; border-radius:99px;
  letter-spacing:.5px;
}
.review-badge::before { content:"⏳"; font-size:10px; }

/* ---------- 登录页 ---------- */
.login-wrap {
  min-height:100vh; display:flex; flex-direction:column;
  background:
    radial-gradient(1200px 500px at 80% -10%, var(--accent-soft), transparent 60%),
    radial-gradient(900px 400px at -10% 110%, var(--accent-soft), transparent 55%),
    var(--bg);
}
.login-top { display:flex; justify-content:space-between; align-items:center; padding:18px 28px; }
.brand { display:flex; align-items:center; gap:10px; font-weight:800; font-size:15px; color:var(--accent); }
.brand .logo {
  width:34px; height:34px; border-radius:10px; background:linear-gradient(135deg,var(--accent),var(--accent2));
  display:flex; align-items:center; justify-content:center; color:#fff; font-size:17px;
  box-shadow:0 4px 10px rgba(14,111,216,.3);
}
.login-hero { flex:1; display:flex; align-items:center; justify-content:center; gap:60px; padding:20px; flex-wrap:wrap; }
.hero-text { max-width:520px; }
.hero-text h1 { font-size:30px; line-height:1.4; margin-bottom:14px; }
.hero-text h1 b { color:var(--accent); }
.hero-text .slogan { font-size:16px; color:var(--muted); margin-bottom:22px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.hero-feats { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.feat { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:12px 14px; box-shadow:var(--shadow); }
.feat .fi { font-size:20px; margin-bottom:6px; }
.feat .ft { font-weight:700; font-size:13.5px; margin-bottom:3px; }
.feat .fd { font-size:12px; color:var(--muted); line-height:1.5; }
.login-card { width:380px; padding:30px 30px 24px; }
.login-card h2 { font-size:19px; margin-bottom:4px; }
.login-card .sub { color:var(--muted); font-size:12.5px; margin-bottom:18px; }
.role-tabs { display:flex; background:var(--panel2); border-radius:10px; padding:4px; margin-bottom:18px; }
.role-tabs button { flex:1; padding:8px; border-radius:8px; font-size:14px; font-weight:600; background:transparent; color:var(--muted); }
.role-tabs button.on { background:var(--panel); color:var(--accent); box-shadow:var(--shadow); }
.field { margin-bottom:14px; }
.field label { display:block; font-size:12.5px; color:var(--muted); margin-bottom:6px; font-weight:600; }
.field input {
  width:100%; padding:10px 12px; border-radius:9px; border:1px solid var(--line);
  background:var(--panel2); color:var(--ink); outline:none; transition:.15s;
}
.field input:focus { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft); }
.login-err { color:var(--danger); font-size:12.5px; min-height:18px; margin-bottom:6px; }
.demo-tip { margin-top:14px; background:var(--accent-soft); border-radius:10px; padding:10px 12px; font-size:12px; color:var(--muted); line-height:1.7; }
.demo-tip b { color:var(--accent); }
.login-foot { text-align:center; padding:16px; color:var(--muted); font-size:12px; }

/* ---------- 学员/教师主页 ---------- */
.page { min-height:100vh; display:flex; flex-direction:column; }
.topbar {
  display:flex; align-items:center; justify-content:space-between;
  padding:0 22px; height:58px; background:var(--panel); border-bottom:1px solid var(--line);
  position:sticky; top:0; z-index:20;
}
.topbar .tb-left { display:flex; align-items:center; gap:12px; font-weight:800; color:var(--accent); font-size:15px; }
.topbar .tb-right { display:flex; align-items:center; gap:10px; }
.avatar {
  width:32px; height:32px; border-radius:50%; background:linear-gradient(135deg,var(--accent),var(--accent2));
  color:#fff; display:flex; align-items:center; justify-content:center; font-size:14px; font-weight:700;
}
.main { flex:1; padding:26px 30px; max-width:1280px; width:100%; margin:0 auto; }
.page-title { font-size:21px; font-weight:800; margin-bottom:4px; display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.page-sub { color:var(--muted); font-size:13px; margin-bottom:22px; }

/* 模块卡片 */
.mods { display:grid; grid-template-columns:1fr 1fr; gap:20px; }
.mod-card { padding:22px; position:relative; overflow:hidden; transition:.2s; cursor:pointer; }
.mod-card:hover { transform:translateY(-3px); box-shadow:var(--shadow-lg); }
.mod-card .mi {
  width:52px; height:52px; border-radius:14px; display:flex; align-items:center; justify-content:center;
  font-size:26px; margin-bottom:12px; color:#fff;
  box-shadow:0 6px 14px rgba(14,111,216,.25);
}
.mod-card h3 { font-size:17px; margin-bottom:6px; }
.mod-card p { color:var(--muted); font-size:12.5px; line-height:1.7; margin-bottom:12px; }
.mod-meta { display:flex; gap:8px; flex-wrap:wrap; }
.mod-glow { position:absolute; right:-40px; top:-40px; width:150px; height:150px; border-radius:50%; opacity:.08; }

/* 开始实训页 */
.pre-grid { display:grid; grid-template-columns:1.4fr 1fr; gap:20px; align-items:start; }
.pre-card { padding:24px; }
.pre-card h3 { font-size:17px; margin-bottom:12px; }
.pre-card .row { display:flex; align-items:center; gap:10px; margin-bottom:14px; flex-wrap:wrap; }
.goals li, .brief-box { line-height:1.9; color:var(--ink); }
.brief-box { background:var(--panel2); border-radius:10px; padding:14px 16px; font-size:13px; line-height:1.9; }
.opt-group { display:flex; border:1px solid var(--line); border-radius:9px; overflow:hidden; }
.opt-group button { flex:1; padding:8px 10px; background:var(--panel2); color:var(--muted); font-size:13px; font-weight:600; }
.opt-group button.on { background:var(--accent); color:#fff; }

/* ---------- 实训场景 ---------- */
.sim { min-height:100vh; display:flex; flex-direction:column; background:var(--bg); }
.sim-top {
  display:flex; align-items:center; gap:14px; padding:0 18px; height:54px;
  background:var(--panel); border-bottom:1px solid var(--line); position:sticky; top:0; z-index:30;
}
.sim-top .sim-name { font-weight:800; font-size:15px; display:flex; align-items:center; gap:8px; }
.sim-clock { font-variant-numeric:tabular-nums; font-weight:800; font-size:16px; color:var(--accent); background:var(--accent-soft); padding:4px 14px; border-radius:9px; }
.sim-body { flex:1; display:grid; grid-template-columns:300px 1fr 330px; gap:14px; padding:14px; max-width:1500px; margin:0 auto; width:100%; }
@media (max-width:1150px){ .sim-body { grid-template-columns:1fr; } }

/* 床位卡 */
.beds { display:flex; flex-direction:column; gap:14px; }
.bed-card { padding:14px; cursor:pointer; border:2px solid transparent; transition:.15s; position:relative; }
.bed-card:hover { border-color:var(--accent2); }
.bed-card.focus { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft), var(--shadow); }
.bed-head { display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.bed-no { background:var(--accent); color:#fff; font-weight:800; border-radius:8px; padding:3px 10px; font-size:13px; }
.bed-name { font-weight:700; font-size:14px; }
.bed-diag { font-size:11.5px; color:var(--muted); }
.bed-vit { display:grid; grid-template-columns:1fr 1fr; gap:6px; }
.vpill { background:var(--panel2); border-radius:8px; padding:5px 8px; }
.vpill .k { font-size:10.5px; color:var(--muted); }
.vpill .v { font-weight:800; font-size:14px; font-variant-numeric:tabular-nums; }
.vpill .v.hr { color:#3ddc84; } .vpill .v.bp { color:#f2f5f7; }
.vpill .v.spo2 { color:#39c5f3; } .vpill .v.resp { color:#ffd85e; }
.theme-medical .vpill .v.bp, .theme-teal .vpill .v.bp { color:#1c2b3a; }
.bed-alert { position:absolute; top:10px; right:10px; }

/* 中央：监护仪 + 场景元素 */
.center-col { display:flex; flex-direction:column; gap:14px; }
.monitor-shell {
  background:var(--monitor-bg); border-radius:14px; padding:12px;
  box-shadow:inset 0 0 40px rgba(0,0,0,.5), var(--shadow-lg); border:1px solid #123;
}
.monitor-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; }
.monitor-bed { color:#7fd4ff; font-weight:800; font-size:14px; letter-spacing:1px; }
.monitor-alarm { color:#ff5a5f; font-weight:800; font-size:13px; animation:blink 1s infinite; display:none; }
.monitor-alarm.on { display:block; }
@keyframes blink { 50% { opacity:.25; } }
.mon-grid { display:grid; grid-template-columns:170px 1fr; gap:10px; }
.mon-nums { display:flex; flex-direction:column; gap:8px; }
.mnum { border:1px solid #12384f; border-radius:10px; padding:6px 10px; background:rgba(255,255,255,.02); }
.mnum .k { font-size:10.5px; color:#5f8fae; letter-spacing:1px; }
.mnum .v { font-size:26px; font-weight:800; font-variant-numeric:tabular-nums; line-height:1.15; }
.mnum .u { font-size:10px; color:#5f8fae; margin-left:3px; }
.mnum.hr .v { color:#3ddc84; } .mnum.bp .v { color:#f2f5f7; font-size:20px; }
.mnum.spo2 .v { color:#39c5f3; } .mnum.resp .v { color:#ffd85e; }
.mon-canvas-wrap { position:relative; }
#monCanvas { width:100%; height:100%; display:block; border-radius:8px; }
.scene-strip { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.scene-box { padding:12px; display:flex; gap:12px; align-items:center; }
.scene-label { font-size:12px; font-weight:800; color:var(--muted); margin-bottom:6px; }
.bottle-wrap { display:flex; align-items:flex-end; gap:14px; }
.bottle-svg { filter:drop-shadow(0 3px 6px rgba(0,0,0,.15)); }
.bubble { animation:bub 1.6s infinite ease-in; opacity:0; }
.blocked .bubble { display:none; }
@keyframes bub { 0%{ transform:translateY(0); opacity:0;} 15%{opacity:.85;} 100%{ transform:translateY(-46px); opacity:0; } }
.bubble.b2 { animation-delay:.5s; } .bubble.b3 { animation-delay:1s; }
.drain-info { font-size:12px; color:var(--muted); line-height:1.8; }
.drain-info b { color:var(--ink); font-size:13px; }
.hw-chip {
  display:inline-flex; align-items:center; gap:6px; padding:5px 12px; border-radius:99px;
  background:rgba(124,92,214,.12); color:var(--purple); font-weight:700; font-size:12px;
}
.hw-dot { width:8px; height:8px; border-radius:50%; background:var(--purple); animation:blink 1.4s infinite; }

/* 右侧：事件流 + 操作 */
.right-col { display:flex; flex-direction:column; gap:14px; }
.panel { padding:14px; }
.panel h4 { font-size:14px; margin-bottom:10px; display:flex; justify-content:space-between; align-items:center; }
.event-feed { display:flex; flex-direction:column; gap:10px; max-height:340px; overflow-y:auto; }
.event-card { border-radius:12px; padding:12px; border-left:4px solid var(--accent); background:var(--panel2); animation:slidein .25s; }
.event-card.keyinfo { border-left-color:var(--danger); background:linear-gradient(90deg, rgba(229,72,77,.07), var(--panel2) 55%); }
.event-card.task { border-left-color:var(--warn); }
.event-card .et { font-weight:800; font-size:13.5px; margin-bottom:4px; display:flex; gap:6px; align-items:center; }
.event-card .ed { font-size:12px; color:var(--muted); line-height:1.6; margin-bottom:8px; }
.event-card .ebtns { display:flex; gap:8px; }
.event-bar { height:4px; border-radius:99px; background:var(--line); margin-top:8px; overflow:hidden; }
.event-bar i { display:block; height:100%; background:var(--danger); transition:width 1s linear; }
@keyframes slidein { from { transform:translateX(20px); opacity:0; } }
.act-tabs { display:flex; gap:6px; margin-bottom:10px; flex-wrap:wrap; }
.act-tabs button { padding:5px 12px; border-radius:99px; background:var(--panel2); color:var(--muted); font-size:12.5px; font-weight:700; border:1px solid var(--line); }
.act-tabs button.on { background:var(--accent); color:#fff; border-color:var(--accent); }
.act-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.act-btn {
  padding:10px 8px; border-radius:10px; background:var(--panel2); border:1px solid var(--line);
  color:var(--ink); font-weight:700; font-size:13px; transition:.12s; text-align:center;
}
.act-btn:hover:not(:disabled) { border-color:var(--accent); color:var(--accent); background:var(--accent-soft); }
.act-btn:disabled { opacity:.4; cursor:not-allowed; }
.act-btn.hot { animation:pulse 1.2s infinite; border-color:var(--danger); color:var(--danger); }
@keyframes pulse { 50% { box-shadow:0 0 0 5px rgba(229,72,77,.15); } }
.steps-list { font-size:12.5px; line-height:2; }
.steps-list .ok { color:var(--ok); font-weight:700; }
.steps-list .no { color:var(--muted); }

/* 冲洗模拟（演示模式硬件） */
.wash-overlay { position:fixed; inset:0; background:rgba(8,20,35,.55); backdrop-filter:blur(3px); display:flex; align-items:center; justify-content:center; z-index:100; }
.wash-box { width:520px; padding:24px; background:var(--panel); border-radius:16px; box-shadow:var(--shadow-lg); }
.wash-box h3 { font-size:16px; margin-bottom:4px; }
.wash-note { font-size:12px; color:var(--muted); margin-bottom:14px; line-height:1.6; }
.gauge-wrap { display:flex; justify-content:center; margin-bottom:6px; }
.gauge-zone { fill:rgba(24,160,88,.15); }
.gauge-needle { transition:transform .08s linear; transform-origin:150px 130px; }
.wash-hold { width:100%; padding:16px; font-size:16px; font-weight:800; border-radius:12px; background:var(--accent); color:#fff; user-select:none; }
.wash-hold:active { background:var(--accent2); }
.wash-stats { display:flex; justify-content:space-between; margin:12px 0; font-size:12.5px; color:var(--muted); }
.wash-prog { height:10px; border-radius:99px; background:var(--panel3); overflow:hidden; margin-bottom:12px; }
.wash-prog i { display:block; height:100%; width:0; background:linear-gradient(90deg,var(--ok),var(--accent2)); transition:width .2s; }

/* 问卷 */
.quiz-wrap { max-width:760px; margin:0 auto; }
.quiz-card { padding:26px; margin-bottom:18px; }
.quiz-card h3 { margin-bottom:6px; }
.quiz-sub { color:var(--muted); font-size:12.5px; margin-bottom:18px; line-height:1.7; }
.q-item { margin-bottom:18px; padding-bottom:14px; border-bottom:1px dashed var(--line); }
.q-item .qt { font-weight:700; font-size:13.5px; margin-bottom:3px; }
.q-item .qd { font-size:11.5px; color:var(--muted); margin-bottom:8px; }
.q-opts { display:flex; gap:6px; }
.q-opts button {
  flex:1; padding:6px 2px; border-radius:8px; border:1.5px solid var(--line); background:var(--panel2);
  color:var(--muted); font-weight:700; font-size:12.5px;
}
.q-opts button.on { border-color:var(--accent); background:var(--accent-soft); color:var(--accent); }
.q-slider { display:flex; align-items:center; gap:12px; }
.q-slider input[type=range] { flex:1; accent-color:var(--accent); }
.q-slider .sv { width:52px; text-align:center; font-weight:800; color:var(--accent); font-size:15px; }
.q-slider .anchor { font-size:11px; color:var(--muted); width:120px; }

/* 报告 */
.report { max-width:860px; margin:0 auto; }
.report-head { padding:26px; text-align:center; margin-bottom:18px; }
.report-head h2 { font-size:22px; margin:8px 0 4px; }
.report-meta { display:flex; justify-content:center; gap:26px; flex-wrap:wrap; color:var(--muted); font-size:13px; margin-top:10px; }
.score-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin-bottom:18px; }
.score-cell { padding:16px; text-align:center; position:relative; }
.score-cell .sv { font-size:34px; font-weight:800; font-variant-numeric:tabular-nums; }
.score-cell .sk { font-size:12.5px; color:var(--muted); margin-top:2px; }
.score-cell.hero { grid-column:span 3; display:flex; align-items:center; justify-content:center; gap:30px; }
.score-cell.hero .sv { font-size:52px; }
.ring { width:110px; height:110px; border-radius:50%; display:flex; align-items:center; justify-content:center; position:relative; }
.ring::after { content:""; position:absolute; inset:8px; border-radius:50%; background:var(--panel); }
.ring .rv { position:relative; z-index:1; font-size:26px; font-weight:800; }
.r-section { padding:22px; margin-bottom:18px; }
.r-section h3 { font-size:15px; margin-bottom:12px; }
.tl-table { width:100%; border-collapse:collapse; font-size:12.5px; }
.tl-table th { text-align:left; color:var(--muted); font-weight:700; padding:6px 8px; border-bottom:2px solid var(--line); }
.tl-table td { padding:6px 8px; border-bottom:1px solid var(--line); vertical-align:top; line-height:1.6; }
.tl-table .t { color:var(--accent); font-weight:700; white-space:nowrap; font-variant-numeric:tabular-nums; }
.r-foot { font-size:11.5px; color:var(--muted); line-height:1.9; padding:0 6px 30px; }

/* 教师后台 */
.tabs { display:flex; gap:8px; margin-bottom:20px; border-bottom:1px solid var(--line); padding-bottom:0; }
.tabs button { padding:10px 18px; font-size:14px; font-weight:700; color:var(--muted); background:none; border-bottom:3px solid transparent; border-radius:0; }
.tabs button.on { color:var(--accent); border-bottom-color:var(--accent); }
.stat-cards { display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:22px; }
.stat-c { padding:18px; }
.stat-c .sv { font-size:30px; font-weight:800; color:var(--accent); }
.stat-c .sk { font-size:12.5px; color:var(--muted); margin-top:2px; }
.data-table { width:100%; border-collapse:collapse; font-size:13px; }
.data-table th { text-align:left; padding:10px; color:var(--muted); border-bottom:2px solid var(--line); font-size:12.5px; }
.data-table td { padding:10px; border-bottom:1px solid var(--line); }
.data-table tr:hover td { background:var(--panel2); }
.bar-mini { height:8px; border-radius:99px; background:var(--panel3); overflow:hidden; min-width:80px; }
.bar-mini i { display:block; height:100%; background:var(--accent); border-radius:99px; }

/* 架构图（参考） */
.arch { display:flex; flex-direction:column; gap:12px; }
.arch-layer { padding:14px 18px; border-left:5px solid var(--accent); position:relative; }
.arch-layer h4 { font-size:14px; margin-bottom:6px; }
.arch-layer p { font-size:12.5px; color:var(--muted); line-height:1.8; }
.arch-arrow { text-align:center; color:var(--muted); font-size:18px; }
.arch-flow { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.arch-flow .afn { padding:8px 14px; background:var(--panel2); border:1px solid var(--line); border-radius:10px; font-size:12.5px; font-weight:700; }
.arch-flow .afa { color:var(--accent); font-weight:800; }

/* 通用弹窗/提示 */
.modal-overlay { position:fixed; inset:0; background:rgba(10,22,38,.5); backdrop-filter:blur(2px); display:flex; align-items:center; justify-content:center; z-index:90; }
.modal-box { width:460px; max-height:80vh; overflow-y:auto; padding:24px; background:var(--panel); border-radius:16px; box-shadow:var(--shadow-lg); }
.modal-box h3 { margin-bottom:10px; }
.modal-box .mb { font-size:13px; color:var(--muted); line-height:1.9; }
#toast-root { position:fixed; top:70px; right:20px; z-index:200; display:flex; flex-direction:column; gap:8px; }
.toast {
  padding:10px 16px; border-radius:10px; background:var(--panel); border-left:4px solid var(--accent);
  box-shadow:var(--shadow-lg); font-size:13px; font-weight:600; animation:slidein .25s; max-width:320px;
}
.toast.ok { border-color:var(--ok); } .toast.warn { border-color:var(--warn); } .toast.err { border-color:var(--danger); }

/* 结束横幅 */
.end-banner { text-align:center; padding:50px 20px; }
.end-banner .big { font-size:34px; font-weight:800; margin-bottom:10px; }
.end-sub { color:var(--muted); font-size:14px; margin-bottom:24px; }

/* 打印（导出PDF用） */
@media print {
  body { background:#fff; }
  .topbar,.tabs,.no-print,#toast-root { display:none !important; }
  .card { box-shadow:none; border:1px solid #ccc; }
  .main { padding:0; max-width:100%; }
}
