:root{
  --primary:#0e7490; --primary-dk:#155e75; --primary-lt:#e0f2f7;
  --bg:#f4f7f9; --card:#fff; --border:#e2e8f0; --text:#1e293b; --muted:#64748b;
  --ok:#047857; --warn:#b45309; --danger:#b91c1c; --accent:#7e22ce;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:"Microsoft YaHei","PingFang SC","Segoe UI",sans-serif;background:var(--bg);color:var(--text);font-size:14.5px;line-height:1.7}
button{font-family:inherit;cursor:pointer}
input,select,textarea{font-family:inherit}

/* ---------- 顶栏 ---------- */
.topbar{position:sticky;top:0;z-index:50;background:#fff;border-bottom:1px solid var(--border);padding:10px 22px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;box-shadow:0 1px 4px rgba(15,42,64,.06)}
.brand{display:flex;gap:10px;align-items:center}
.logo{width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,#0e7490,#155e75);color:#fff;font-size:20px;display:flex;align-items:center;justify-content:center;font-weight:700}
.brand .title{font-size:16.5px;font-weight:700;color:#0f3d4a}
.brand .subtitle{font-size:11.5px;color:var(--muted)}
.tabs{display:flex;gap:2px;flex-wrap:wrap;margin-left:auto}
.tabs button{border:none;background:transparent;padding:8px 14px;border-radius:8px;font-size:14px;color:#475569}
.tabs button:hover{background:#f1f7f9;color:var(--primary-dk)}
.tabs button.active{background:var(--primary);color:#fff;font-weight:600}
.top-right{display:flex;gap:10px;align-items:center}
.role-sel{padding:6px 10px;border:1px solid var(--border);border-radius:8px;background:#fff;font-size:13px}
.llm-badge{font-size:12px;padding:4px 12px;border-radius:999px;border:1px solid}
.llm-badge.offline{background:#f1f5f9;color:#475569;border-color:#cbd5e1}
.llm-badge.llm{background:#ecfdf5;color:var(--ok);border-color:#a7f3d0}
.llm-badge.lost{background:#fffbeb;color:var(--warn);border-color:#fde68a}

main{max-width:1180px;margin:0 auto;padding:26px 22px 70px}
.tab{display:none}
.tab.active{display:block;animation:fade .25s}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- 工作台 ---------- */
.hero{background:linear-gradient(135deg,#0e7490 0%,#155e75 55%,#0f3d4a 100%);color:#fff;border-radius:16px;padding:36px;display:flex;gap:30px;align-items:center;flex-wrap:wrap;margin-bottom:22px}
.hero-text{flex:1;min-width:300px}
.hero h1{font-size:24px;margin-bottom:8px}
.hero p{opacity:.85;font-size:13.5px;margin-bottom:18px}
.hero-actions{display:flex;gap:10px;flex-wrap:wrap}
.btn{border:1px solid var(--border);background:#fff;color:var(--text);padding:9px 18px;border-radius:9px;font-size:14px}
.btn:hover{border-color:var(--primary);color:var(--primary)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-dk);color:#fff}
.btn.danger{background:#fff;border-color:#fecaca;color:var(--danger)}
.btn.danger:hover{background:#fef2f2}
.btn.ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.4)}
.btn.ghost:hover{background:rgba(255,255,255,.12);color:#fff}
.hero-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;min-width:250px}
.hstat{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);border-radius:10px;padding:12px 18px}
.hstat b{display:block;font-size:22px}
.hstat span{font-size:12px;opacity:.85}
.module-cards{margin:20px 0}
.mcard{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:20px;cursor:pointer;transition:.18s}
.mcard:hover{transform:translateY(-3px);box-shadow:0 6px 18px rgba(15,42,64,.1);border-color:var(--primary)}
.mico{font-size:26px;margin-bottom:6px}
.mname{font-weight:700;color:#0f3d4a;margin-bottom:4px}
.mdesc{font-size:12.5px;color:var(--muted)}
.note{background:#fffbeb;border:1px solid #fde68a;border-left:4px solid #d97706;border-radius:8px;padding:12px 16px;font-size:13px;margin:16px 0}
code{background:#eef2f6;border:1px solid #dbe3ea;border-radius:4px;padding:1px 6px;font-size:12.5px;color:#b91c1c}

/* ---------- 通用 ---------- */
.page-head{margin-bottom:18px}
.page-head h2{font-size:20px;color:#0f3d4a;border-left:5px solid var(--primary);padding-left:12px}
.page-head p{color:var(--muted);font-size:13px;margin-top:4px;padding-left:17px}
.card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:20px;margin:14px 0}
.card h3{font-size:16px;color:var(--primary-dk);margin-bottom:12px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px}
.muted{color:var(--muted);font-size:12.5px}
.form-row{display:flex;align-items:center;gap:10px;margin:10px 0;flex-wrap:wrap}
.form-row label{min-width:70px;font-size:13.5px;color:#475569}
.input{padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;background:#fff}
.input:focus{outline:2px solid #b8dce6}
.check{font-size:13px;color:#475569;display:flex;align-items:center;gap:5px}
.radio{margin-right:12px;font-size:13.5px}

/* ---------- 聊天 ---------- */
.chat-layout{max-width:880px}
.chat-panel{background:var(--card);border:1px solid var(--border);border-radius:14px;display:flex;flex-direction:column;height:560px}
.chat-toolbar{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.quick-actions{display:flex;gap:6px;flex-wrap:wrap}
.qa-btn{border:1px solid #b8dce6;background:var(--primary-lt);color:var(--primary-dk);border-radius:999px;padding:5px 13px;font-size:12.5px}
.qa-btn:hover{background:#cfeaf1}
.chat-box{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:14px;background:#f8fafc}
.msg{max-width:82%;border-radius:12px;padding:11px 15px;white-space:pre-wrap;word-break:break-word;font-size:14px;position:relative}
.msg.user{align-self:flex-end;background:var(--primary);color:#fff;border-bottom-right-radius:3px}
.msg.ai{align-self:flex-start;background:#fff;border:1px solid var(--border);border-bottom-left-radius:3px}
.msg.npc{align-self:flex-start;background:#fdf4ff;border:1px solid #e9d5ff;border-bottom-left-radius:3px}
.msg.event{align-self:center;background:#fff7ed;border:1px solid #fdba74;color:#7c2d12;font-weight:600;border-radius:10px;text-align:center;max-width:90%}
.msg .cites{margin-top:10px;display:flex;gap:6px;flex-wrap:wrap}
.cite-chip{font-size:11.5px;background:var(--primary-lt);color:var(--primary-dk);border:1px solid #b8dce6;border-radius:999px;padding:2px 10px;cursor:pointer}
.cite-chip:hover{background:#cfeaf1}
.msg .recs{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.rec-chip{font-size:11.5px;background:#f0fdf4;color:var(--ok);border:1px solid #a7f3d0;border-radius:999px;padding:2px 10px;cursor:pointer}
.chat-input-row{display:flex;gap:10px;padding:12px 16px;border-top:1px solid var(--border)}
.chat-input-row .input{flex:1}
.typing{align-self:flex-start;color:var(--muted);font-size:12.5px;padding:4px 10px}

/* ---------- 法规引用卡 ---------- */
.law-cite{background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-top:8px;font-size:12.5px}
.law-cite b{color:#0f3d4a}
.law-cite .meta{color:var(--muted);font-size:11.5px;margin-top:2px}
.status-tag{font-size:11px;padding:1px 8px;border-radius:999px;margin-left:6px}
.status-tag.ok{background:#ecfdf5;color:var(--ok);border:1px solid #a7f3d0}
.status-tag.bad{background:#fef2f2;color:var(--danger);border:1px solid #fecaca}
.warn-line{background:#fffbeb;border-left:3px solid #d97706;padding:8px 12px;border-radius:6px;margin-top:8px;font-size:13px;color:#92400e}

/* ---------- 备课 ---------- */
.prep-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:16px;align-items:start}
.lp-result{margin-top:14px}
.lp-sec{border:1px solid var(--border);border-radius:8px;padding:10px 14px;margin:8px 0;background:#f8fafc}
.lp-sec b{color:var(--primary-dk)}
.q-card{border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin:10px 0;background:#fff}
.q-head{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;color:var(--muted);margin-bottom:6px}
.q-stem{font-weight:600;margin-bottom:8px}
.q-opt{margin:4px 0;font-size:13.5px}
.q-ans{margin-top:8px;border-top:1px dashed var(--border);padding-top:8px;font-size:13px}
.q-ans .tag-ok{color:var(--ok);font-weight:700}
.qz-actions{margin-top:10px;display:flex;gap:10px;align-items:center}

/* ---------- 实训 ---------- */
.scenario-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:18px;cursor:pointer;transition:.18s}
.scenario-card:hover{border-color:var(--primary);box-shadow:0 6px 18px rgba(15,42,64,.1)}
.sc-name{font-weight:700;color:#0f3d4a;font-size:15.5px;margin-bottom:6px}
.sc-meta{display:flex;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.sc-tag{font-size:11px;padding:2px 9px;border-radius:999px;background:var(--primary-lt);color:var(--primary-dk);border:1px solid #b8dce6}
.sc-desc{font-size:12.5px;color:var(--muted)}
.mode-card{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font-size:13.5px}
.train-head{display:flex;justify-content:space-between;align-items:center;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:14px 20px;margin-bottom:14px;gap:10px;flex-wrap:wrap}
.train-title{font-size:17px;font-weight:700;color:#0f3d4a}
.mode-badge{background:#fdf4ff;color:var(--accent);border:1px solid #e9d5ff;padding:4px 14px;border-radius:999px;font-size:12.5px;margin-right:10px}
.train-grid{display:grid;grid-template-columns:1fr 320px;gap:14px}
@media(max-width:960px){.train-grid{grid-template-columns:1fr}}
.train-side{display:flex;flex-direction:column;gap:12px}
.side-block{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:14px 16px}
.side-block h4{font-size:13.5px;color:var(--primary-dk);margin-bottom:8px}
.stage-flow{display:flex;gap:5px;flex-wrap:wrap}
.stage-tag{font-size:11px;padding:3px 10px;border-radius:999px;background:#f1f5f9;color:#64748b;border:1px solid #e2e8f0}
.stage-tag.cur{background:var(--primary);color:#fff;border-color:var(--primary)}
.stage-tag.done{background:#ecfdf5;color:var(--ok);border-color:#a7f3d0}
.check-list,.sop-list{list-style:none}
.check-list li,.sop-list li{font-size:12.8px;padding:5px 0;border-bottom:1px dashed #eef2f6;color:#475569}
.check-list li:last-child,.sop-list li:last-child{border-bottom:none}
.check-list li.done,.sop-list li.done{color:var(--ok)}
.check-list li.done::before,.sop-list li.done::before{content:"✓ "}
.check-list li:not(.done)::before,.sop-list li:not(.done)::before{content:"○ "}
.sop-list li.cur{color:var(--primary-dk);font-weight:700}
.sop-list li.cur::before{content:"▶ "}
.hint-block{background:#fffbeb;border-color:#fde68a}
.hint-block h4{color:#92400e}
#trHint{font-size:12.5px;color:#92400e;white-space:pre-wrap}

/* ---------- 管理后台 ---------- */
.admin-tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:16px}
.admin-tabs button{border:1px solid var(--border);background:#fff;padding:7px 16px;border-radius:8px;font-size:13.5px;color:#475569}
.admin-tabs button.active{background:var(--primary-dk);color:#fff;border-color:var(--primary-dk)}
.atab{display:none}
.atab.active{display:block}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:18px;text-align:center}
.stat-card b{display:block;font-size:26px;color:var(--primary)}
.stat-card span{font-size:12.5px;color:var(--muted)}
table{width:100%;border-collapse:collapse;background:#fff;font-size:13px;margin-top:8px}
th{background:var(--primary-dk);color:#fff;padding:8px 10px;text-align:left;font-weight:600;white-space:nowrap}
td{border:1px solid var(--border);padding:7px 10px;vertical-align:top}
tr:nth-child(even) td{background:#f6fafb}
.tbl-wrap{overflow-x:auto}
.qb-item{border:1px solid var(--border);border-radius:10px;padding:12px 16px;margin:8px 0;background:#fff;display:flex;gap:12px;align-items:flex-start}
.qb-item input{margin-top:5px}
.qb-body{flex:1}
.pending-mark{color:var(--warn);font-size:12px}

/* ---------- 弹窗 / 提示 ---------- */
.modal-mask{position:fixed;inset:0;background:rgba(15,42,64,.45);display:none;align-items:flex-start;justify-content:center;z-index:100;padding:40px 16px;overflow-y:auto}
.modal-mask.show{display:flex}
.modal{background:#fff;border-radius:14px;max-width:560px;width:100%;box-shadow:0 20px 60px rgba(15,42,64,.3);animation:fade .2s}
.modal-lg{max-width:820px}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 22px;border-bottom:1px solid var(--border)}
.modal-x{border:none;background:transparent;font-size:16px;color:var(--muted)}
.modal-body{padding:20px 24px;max-height:70vh;overflow-y:auto;font-size:13.5px}
.toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%) translateY(80px);background:#0f3d4a;color:#fff;padding:10px 22px;border-radius:999px;font-size:13.5px;opacity:0;transition:.3s;z-index:200;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%)}

/* ---------- 评估报告 ---------- */
.report-total{text-align:center;margin-bottom:14px}
.report-total b{font-size:44px;color:var(--primary)}
.report-dims{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin:14px 0}
.dim-bar{width:130px}
.dim-bar .lbl{display:flex;justify-content:space-between;font-size:12px;color:#475569;margin-bottom:3px}
.dim-bar .bar{height:8px;background:#eef2f6;border-radius:999px;overflow:hidden}
.dim-bar .fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#0e7490,#22b8cf)}
.radar-wrap{display:flex;justify-content:center;margin:10px 0}
.rep-sec{margin:14px 0}
.rep-sec h4{color:var(--primary-dk);margin-bottom:6px;font-size:14px}
.rep-sec ul{margin-left:20px;font-size:13px}
.rep-sec li{margin:4px 0}
.summary-box{background:#f0f9ff;border:1px solid #bae6fd;border-radius:10px;padding:14px 16px;font-size:13.5px}

.foot{text-align:center;color:var(--muted);font-size:12px;padding:24px}

/* ---------- 登录与用户 ---------- */
.login-card{width:400px;max-width:92vw;background:#fff;border-radius:16px;padding:34px 36px 28px;box-shadow:0 20px 60px rgba(2,32,44,.25)}
.login-brand{text-align:center;margin-bottom:22px}
.logo.big{width:54px;height:54px;font-size:26px;margin:0 auto 10px}
.login-title{font-size:17px;font-weight:700;color:#123c4a}
.login-sub{font-size:12.5px;color:#64748b;margin-top:4px}
.login-form label{display:block;font-size:12.5px;color:#475569;margin:10px 0 5px}
.captcha-row{display:flex;gap:10px;align-items:center}
.login-msg{min-height:18px;font-size:12.5px;color:#c0392b;margin:8px 0 2px}
.btn-block{width:100%;margin-top:6px;padding:11px}
.login-tip{margin-top:14px;font-size:11.5px;color:#94a3b8;text-align:center;line-height:1.6}
.user-box{display:inline-flex;align-items:center;gap:8px}
.user-box .link-btn{background:none;border:none;color:#e6f4f1;font-size:12.5px;cursor:pointer;padding:4px 6px;border-radius:6px}
.user-box .link-btn:hover{background:rgba(255,255,255,.15)}
#userBadge{font-size:13px;color:#fff;background:rgba(255,255,255,.14);padding:6px 12px;border-radius:999px}
.utable{width:100%;border-collapse:collapse;font-size:13px}
.utable th,.utable td{padding:9px 10px;border-bottom:1px solid #eef2f6;text-align:left}
.utable th{background:#f7fafc;color:#334155;font-weight:600}
.utable .op{background:none;border:1px solid #cbd5e1;border-radius:6px;padding:4px 10px;margin-right:5px;cursor:pointer;font-size:12px}
.utable .op:hover{background:#f1f5f9}
.utable .op.danger{border-color:#e8a5a5;color:#b03a3a}
.role-chip{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px}
.role-chip.r2{background:#fee2e2;color:#b03a3a}.role-chip.r1{background:#dcfce7;color:#2b8a3e}.role-chip.r0{background:#dbeafe;color:#1d4ed8}
.disabled-chip{color:#b03a3a;font-size:11.5px}

/* ---------- 备课中心新版式 ---------- */
.lp-actions{margin-top:12px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.sz-chip{display:inline-block;background:#fdf3d7;color:#8a5a00;border:1px solid #f0d9a0;padding:3px 12px;border-radius:999px;font-size:12.5px;font-weight:600}

/* ---------- 资料档案库 ---------- */
.arc-toolbar{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.arc-list{display:flex;flex-direction:column;gap:12px}
.arc-card{display:flex;gap:14px;align-items:center;background:#fff;border:1px solid #e6edf3;border-radius:12px;padding:16px 20px;cursor:pointer;transition:box-shadow .15s,transform .15s}
.arc-card:hover{box-shadow:0 6px 20px rgba(14,116,144,.12);transform:translateY(-1px)}
.arc-ico{font-size:30px;width:46px;height:46px;display:flex;align-items:center;justify-content:center;background:#eef7f9;border-radius:10px;flex:none}
.arc-main{flex:1;min-width:0}
.arc-title{font-weight:700;color:#123c4a;font-size:14.5px}
.arc-desc{color:#64748b;font-size:12.5px;margin:4px 0 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.arc-meta{display:flex;gap:8px;flex-wrap:wrap;font-size:11.5px;color:#94a3b8;align-items:center}
.arc-type{padding:2px 10px;border-radius:999px;font-weight:600}
.arc-type.at0{background:#dbeafe;color:#1d4ed8}
.arc-type.at1{background:#dcfce7;color:#2b8a3e}
.arc-type.at2{background:#fee2e2;color:#b03a3a}
.arc-type.at3{background:#f1f5f9;color:#475569}
.arc-tag{background:#f1f5f9;border-radius:6px;padding:1px 8px}
.arc-content{font-size:13.5px;line-height:1.9;color:#334155;white-space:normal;word-break:break-word;max-height:52vh;overflow-y:auto;padding-right:8px}
