/* 科创项目全流程闭环 · 诺蓝科创后台同族（Vben Admin / Ant Design 视觉体系）
   布局=左侧菜单栏(224px)+顶栏(50px)+灰底白卡内容区；
   令牌=AntD：主蓝#1677ff / 6px控件圆角 / 8px卡片圆角 / 14px正文 / 32px控件高 */
:root{
  --accent:#1677ff;          /* AntD 主蓝 */
  --accent-hover:#4096ff;
  --accent-active:#0958d9;
  --accent-bg:#e6f4ff;
  --ink:rgba(0,0,0,.88);
  --muted:rgba(0,0,0,.55);
  --faint:rgba(0,0,0,.45);
  --line:#f0f0f0;            /* 分割线 */
  --border:#d9d9d9;          /* 控件边框 */
  --bg:#f5f5f5;              /* 内容区灰底 */
  --surface:#ffffff;
  /* 语义色（AntD 成套：主色/底/边框） */
  --pass:#389e0d;   --pass-bg:#f6ffed;   --pass-bd:#b7eb8f;
  --warn:#d48806;   --warn-bg:#fffbe6;   --warn-bd:#ffe58f;
  --block:#cf1322;  --block-bg:#fff2f0;  --block-bd:#ffccc7;
  --human:#1d39c4;  --human-bg:#f0f5ff;  --human-bd:#adc6ff;
  --shadow-card:0 6px 16px rgba(0,0,0,.08);
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,
    "PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;
  --mono:"SF Mono",Consolas,monospace;
}
*{box-sizing:border-box}
html{min-height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);
  font-size:14px;line-height:1.5715;overflow-x:hidden}
a{color:var(--accent);text-decoration:none}
a:hover{color:var(--accent-hover)}
b,.strong{font-weight:600}
.muted{color:var(--muted);font-weight:400}
.small{font-size:12px}
.num{text-align:right;font-variant-numeric:tabular-nums}
.ctr{text-align:center}
.text-bad{color:var(--block)}
button{font:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:1px}

/* ===== 后台骨架：侧栏 + 顶栏 + 内容 ===== */
.layout{display:flex;min-height:100vh}
.side{width:224px;flex:none;background:#fff;border-right:1px solid var(--line);
  position:sticky;top:0;height:100vh;display:flex;flex-direction:column;overflow-y:auto}
.side-logo{display:flex;align-items:center;gap:10px;height:50px;padding:0 16px;
  font-size:14px;font-weight:600;color:var(--ink);border-bottom:1px solid var(--line);white-space:nowrap}
.side-logo:hover{color:var(--accent);text-decoration:none}
.logo-badge{flex:none;width:28px;height:28px;border-radius:6px;background:var(--accent);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600}
.side-menu{padding:8px;display:flex;flex-direction:column;gap:2px}
.nav-sec{font-size:11px;color:var(--muted);letter-spacing:.06em;font-weight:600;
  padding:14px 12px 4px;text-transform:none}
.nav-sec:first-child{padding-top:4px}
.mi{display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;border-radius:6px;
  color:var(--ink);font-size:14px;transition:background .2s,color .2s}
.mi i{font-style:normal;font-size:16px;width:18px;text-align:center}
.mi:hover{background:rgba(0,0,0,.04);color:var(--ink);text-decoration:none}
.mi.active{background:var(--accent-bg);color:var(--accent);font-weight:500}
/* 待办数字：有几件事等着处理，不用挨个点进去看 */
.nb{margin-left:auto;min-width:18px;height:18px;padding:0 5px;border-radius:99px;
  background:var(--block,#d4380d);color:#fff;font-size:11px;font-weight:700;
  display:flex;align-items:center;justify-content:center;line-height:1}
.mi.active .nb{background:var(--accent)}
/* 设置类收进折叠：设好了就不常动，别占地方 */
.nav-more{margin-top:10px;border-top:1px solid var(--line)}
.nav-more>summary{font-size:12px;color:var(--muted);font-weight:600;cursor:pointer;
  padding:10px 12px 6px;list-style:none;user-select:none}
.nav-more>summary::-webkit-details-marker{display:none}
.nav-more>summary::after{content:" ▸";font-size:10px}
.nav-more[open]>summary::after{content:" ▾"}
.nav-more>summary:hover{color:var(--ink)}
.nav-more .mi{height:36px;font-size:13.5px}
/* 分组折叠导航：默认只露组名，当前页所在组/有待办的组自动展开 */
.nav-group>summary{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);font-weight:600;
  cursor:pointer;padding:10px 12px 6px;list-style:none;user-select:none}
.nav-group>summary::-webkit-details-marker{display:none}
.nav-group>summary::after{content:" ▸";font-size:10px;margin-left:auto}
.nav-group[open]>summary::after{content:" ▾"}
.nav-group>summary:hover{color:var(--ink)}
.nav-group .mi{height:36px;font-size:13.5px}
.layout-main{flex:1;min-width:0;display:flex;flex-direction:column}
.top{height:50px;flex:none;background:#fff;border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 16px;
  position:sticky;top:0;z-index:90}
.top-right{display:flex;align-items:center;gap:14px}
.top-user{font-size:14px;color:var(--ink)}
.top-logout{font-size:13px;color:var(--muted)}
.top-logout:hover{color:var(--accent)}
.content{flex:1;padding:16px;max-width:1200px;width:100%}
.content-bare{min-height:100vh;background:var(--bg);padding:16px}
.site-foot{color:var(--faint);font-size:12px;padding:14px 16px 18px;text-align:center}

/* ===== 标题层级（AntD 页头制式） ===== */
h1.page-title{font-size:20px;line-height:1.4;margin:0 0 4px;font-weight:600}
.section-title{font-size:16px;line-height:1.5;margin:24px 0 12px;font-weight:600;color:var(--ink)}
h3{font-size:14px;margin:18px 0 10px;font-weight:600}
.back{margin:0 0 8px;font-size:13px}
.hint{color:var(--muted);font-size:13px;margin:0 0 12px;line-height:1.55}
.lead{color:var(--muted);max-width:72ch;margin:0 0 4px;font-size:14px;line-height:1.6}
.page-head{margin:0 0 16px}
.eyebrow,.page-head .eyebrow{color:var(--accent);font-size:12px;font-weight:500;margin:0 0 4px}

/* hero：欢迎卡（Vben workspace 制式，白卡+统计行） */
.hero{background:var(--surface);border-radius:8px;border:1px solid var(--line);
  padding:20px 24px;margin:0 0 16px}
.hero h1{font-size:24px;line-height:1.35;margin:0 0 6px;font-weight:600;color:var(--ink)}
.hero .lead{color:var(--muted)}
.hero-stats{display:flex;gap:48px;flex-wrap:wrap;margin-top:16px}
.hero-stat{display:flex;flex-direction:column;gap:2px;text-decoration:none}
.hero-stat .n{font-size:30px;font-weight:600;color:var(--ink);line-height:1.2;font-variant-numeric:tabular-nums}
.hero-stat .l{font-size:13px;color:var(--muted)}
a.hero-stat:hover{text-decoration:none}
a.hero-stat:hover .n,a.hero-stat:hover .l{color:var(--accent)}
.hero-stat.hot .n{color:var(--accent)}

/* flash：AntD Alert */
.flash{padding:9px 12px;border-radius:8px;margin:0 0 14px;font-size:14px;border:1px solid}
.flash-ok{background:var(--pass-bg);border-color:var(--pass-bd);color:var(--ink)}
.flash-err{background:var(--block-bg);border-color:var(--block-bd);color:var(--ink)}

/* 卡片 */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin:0 0 8px}
.comp-card{display:flex;flex-direction:column;justify-content:space-between;gap:12px;min-height:100px;
  background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:16px 20px;
  transition:box-shadow .2s,border-color .2s}
.comp-card:hover{box-shadow:var(--shadow-card);text-decoration:none}
.comp-card.admin{background:#fafafa}
.comp-name{font-weight:600;font-size:15px;color:var(--ink)}
.comp-go{font-size:13px;color:var(--accent)}
.comp-go::after{content:" →"}
.comp-deadline{font-size:12px;color:var(--warn)}

/* 表格（AntD Table） */
.tbl-scroll{overflow-x:auto}
.tbl{border-collapse:separate;border-spacing:0;width:100%;font-size:14px;
  background:var(--surface);border:1px solid var(--line);border-radius:8px;overflow:hidden}
.tbl th,.tbl td{text-align:left;padding:11px 16px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl th{font-size:13px;color:var(--ink);font-weight:600;background:#fafafa}
.tbl tr:last-child td{border-bottom:none}
.tbl tbody tr:hover td{background:#fafafa}
.tbl th.num,.tbl td.num{text-align:right}
.tbl th.ctr,.tbl td.ctr{text-align:center}
/* 列多的表：单元格不换行，超宽靠 .tbl-scroll 横向滚动，避免日期/表头被挤成两行 */
.tbl-nowrap th,.tbl-nowrap td{white-space:nowrap}
/* 学生名单表：不横向滚动——收窄留白，长姓名/学校省略号截断（悬停显示全文） */
.tbl-fit th,.tbl-fit td{white-space:nowrap;padding:8px 9px}
.tbl-fit .clip{display:inline-block;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.row-bad{background:var(--block-bg)}
.row-bad:hover td{background:var(--block-bg)!important}

/* 按钮（AntD Button：32px 高 / 6px 圆角） */
.btn{display:inline-flex;align-items:center;justify-content:center;height:32px;padding:4px 15px;
  font-size:14px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--ink);
  cursor:pointer;font-family:var(--sans);box-shadow:0 2px 0 rgba(0,0,0,.02);
  transition:color .2s,border-color .2s,background .2s}
.btn:hover{color:var(--accent-hover);border-color:var(--accent-hover);text-decoration:none}
.btn:active{color:var(--accent-active);border-color:var(--accent-active)}
.btn:disabled{cursor:not-allowed;opacity:.5}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 2px 0 rgba(5,145,255,.1)}
.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff}
.btn-primary:active{background:var(--accent-active);border-color:var(--accent-active)}
.btn-sm{height:24px;padding:0 8px;font-size:13px;border-radius:4px}
.btn-danger{color:var(--block);border-color:var(--block-bd)}
.btn-danger:hover{color:#fff;background:#ff4d4f;border-color:#ff4d4f}
.actions{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap;align-items:center}
.actions form{margin:0}

/* 板块 */
.block{margin:20px 0 8px}

/* 判定标签（AntD Tag：彩底+彩边+彩字） */
.sev{display:inline-flex;align-items:center;font-size:12px;line-height:20px;padding:0 7px;
  border-radius:4px;border:1px solid;font-weight:400;white-space:nowrap}
.sev-block{background:var(--block-bg);border-color:var(--block-bd);color:var(--block)}
.sev-warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn)}
.sev-record{background:var(--pass-bg);border-color:var(--pass-bd);color:var(--pass)}
.sev-human{background:var(--human-bg);border-color:var(--human-bd);color:var(--human)}
.sev-award{background:#fff7e6;border-color:#ffd591;color:#d46b08}   /* 市级奖：金橙高亮 */

/* 学生档案：课题名跨整行 + 每个比赛的获奖登记行 */
.meta-card .meta-wide{flex-basis:100%}
.award-form{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}
.award-lab{font-size:13px;color:var(--muted)}
.award-form select{font-size:14px;padding:4px 10px;min-height:32px;border:1px solid var(--border);
  border-radius:6px;background:var(--surface);color:var(--ink)}
.kindtag{font-size:12px;line-height:20px;padding:0 7px;border-radius:4px;
  background:#fafafa;border:1px solid var(--border);color:var(--muted)}
.kind-hard{background:var(--accent-bg);border-color:#91caff;color:var(--accent)}

/* 规则 */
.rule-group{margin:0 0 20px}
.rule-group-title{font-size:14px;margin:16px 0 8px;color:var(--ink);font-weight:600}
.rule-row{display:flex;gap:14px;justify-content:space-between;align-items:flex-start;
  background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 16px;margin:0 0 8px}
.rule-row.disabled{opacity:.5}
.rule-main{min-width:0}
.rule-target{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 4px}
.rule-std{font-size:13px;color:var(--muted);line-height:1.55}
.rule-err{font-size:12px;color:var(--warn);margin-top:4px}
.rule-ops{display:flex;gap:6px;align-items:center;flex:none}
.rule-ops form{margin:0}
.empty{padding:6px 0}
.add-rule{margin-top:18px;border-top:1px solid var(--line);padding-top:16px}
.add-rule h3{margin:0 0 12px}

/* 表单（AntD Input：32px 高 / 6px 圆角 / 焦点蓝边+光环） */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 16px;background:var(--surface);
  border:1px solid var(--line);border-radius:8px;padding:20px 24px}
.form-grid label{display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--ink)}
.form-grid .full{grid-column:1 / -1}
.form-grid input[type=text],.form-grid input[type=password],.form-grid input[type=number],
.form-grid textarea,.form-grid select{
  font-family:var(--sans);font-size:14px;color:var(--ink);padding:4px 11px;min-height:32px;
  border:1px solid var(--border);border-radius:6px;background:#fff;width:100%;
  transition:border-color .2s,box-shadow .2s}
.form-grid textarea{resize:vertical;padding:6px 11px}
.form-grid input:focus,.form-grid textarea:focus,.form-grid select:focus{
  outline:none;border-color:var(--accent-hover);box-shadow:0 0 0 2px rgba(5,145,255,.1)}
.form-grid .ckbox{flex-direction:row;align-items:center;gap:8px}
.card-form{max-width:680px}
.in-sm{width:80px;font-size:14px;padding:4px 8px;min-height:28px;border:1px solid var(--border);border-radius:6px}
.in-wide{width:100%;min-width:180px;font-size:14px;padding:4px 10px;min-height:32px;border:1px solid var(--border);border-radius:6px}
input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent)}
.inline-form{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.inline-form input[type=file]{font-size:13px}
.inline-form input[type=text],.inline-form input[type=number]{font-size:14px;padding:4px 10px;min-height:32px;border:1px solid var(--border);border-radius:6px}
.ml-deadline{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink);margin-bottom:12px}
.ml-deadline input{font-size:14px;padding:4px 11px;min-height:32px;border:1px solid var(--border);border-radius:6px;max-width:200px}

/* 上传 */
.upload-form{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:20px 24px}
.fieldrow{display:grid;grid-template-columns:1fr 1fr;gap:14px 16px;margin:0 0 16px}
.fieldrow label{display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--ink)}
.fieldrow input,.fieldrow select{font-size:14px;padding:4px 11px;min-height:32px;border:1px solid var(--border);border-radius:6px;background:#fff;
  transition:border-color .2s,box-shadow .2s}
.fieldrow input:focus,.fieldrow select:focus{outline:none;border-color:var(--accent-hover);box-shadow:0 0 0 2px rgba(5,145,255,.1)}
.upload-list{display:flex;flex-direction:column;gap:10px;margin:0 0 12px}
.upload-item{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;justify-content:space-between;
  padding:12px 16px;border:1px solid var(--line);border-radius:8px;background:#fafafa}
.upload-main{display:flex;flex-direction:column;gap:3px;min-width:0}
.upload-label{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:14px}
.upload-spec{font-size:12px;color:var(--faint)}
.req{font-size:12px;line-height:20px;color:var(--block);background:var(--block-bg);border:1px solid var(--block-bd);padding:0 7px;border-radius:4px}
.req-inline{color:var(--block)}
.opt{font-size:12px;line-height:20px;color:var(--muted);background:#fafafa;border:1px solid var(--border);padding:0 7px;border-radius:4px}
.tpl-dl{font-size:12px;color:var(--accent);margin-left:6px;white-space:nowrap}
.upload-item input[type=file]{font-size:13px;max-width:100%}

/* 提交完成 / 报告 */
.done-banner{padding:10px 14px;border-radius:8px;border:1px solid;font-weight:600;font-size:14px;margin:0 0 16px}
.done-banner.ok{background:var(--pass-bg);border-color:var(--pass-bd);color:var(--pass)}
.done-banner.bad{background:var(--block-bg);border-color:var(--block-bd);color:var(--block)}
.sub-meta{display:flex;flex-wrap:wrap;gap:8px 20px;color:var(--muted);font-size:13px;margin:0 0 8px}
.verdict-bar{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}

/* 登录（灰底居中白卡） */
body.dark{background:var(--bg)}
.login-hero{max-width:400px;margin:10vh auto 18px;text-align:center}
.login-hero .eyebrow{color:var(--accent);font-size:13px}
.login-hero h1{font-size:26px;line-height:1.3;font-weight:600;color:var(--ink);margin:0 0 6px}
.login-hero .lead{color:var(--muted);font-size:14px}
.login-wrap{max-width:400px;margin:0 auto 12vh}
.login-wrap .card-form{max-width:none;box-shadow:var(--shadow-card)}
body.dark .flash{max-width:400px;margin:0 auto 14px}

/* 参赛登记复选 */
.chk-title{font-size:13px;color:var(--muted);font-weight:600;margin-bottom:8px}
.chk-grid{display:flex;flex-wrap:wrap;gap:8px 16px}
.chk{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--ink)}

/* 学生进度条 */
.prog-list{display:flex;flex-direction:column;gap:12px}
.prog-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:14px 16px}
.prog-head{display:flex;align-items:center;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.prog-actions{margin-left:auto}
.prog{display:flex;gap:6px;flex-wrap:wrap}
.prog .seg{flex:1;min-width:64px;text-align:center;font-size:12px;padding:6px 5px;border-radius:4px;
  background:#fafafa;border:1px solid var(--line);color:var(--faint)}
.prog .seg.done{background:var(--pass-bg);border-color:var(--pass-bd);color:var(--pass)}
.prog .seg.current{background:var(--accent-bg);border-color:#91caff;color:var(--accent);font-weight:500}
.prog .seg.warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn)}
.prog .seg.block{background:var(--block-bg);border-color:var(--block-bd);color:var(--block)}
.prog .seg.pending{background:#fafafa;color:var(--faint)}
.prog .seg small{opacity:.85}

/* 课前工具资质 */
.tools-form{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0}
.chk-sm{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--ink)}
.tool-status{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 16px;
  background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 16px}
.tool-status-label{font-weight:600;font-size:13px}

/* 上课云文档 */
.course-link{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:0 0 8px}
.pace-box{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.course-lbl{display:block;font-size:13px;color:var(--ink);font-weight:600;margin-bottom:6px}
.course-text{width:100%;padding:6px 11px;border:1px solid var(--border);border-radius:6px;
  font-family:var(--sans);font-size:14px;resize:vertical;margin-bottom:12px;
  transition:border-color .2s,box-shadow .2s}
.course-text:focus{outline:none;border-color:var(--accent-hover);box-shadow:0 0 0 2px rgba(5,145,255,.1)}

/* 材料采购 */
.cap-box{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-top:12px;
  background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 16px;font-size:14px}

/* 负责人终审 */
.finalize-form{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:16px 20px;max-width:640px}
.finalize-form label{display:block;font-size:13px;color:var(--ink);font-weight:600;margin-bottom:6px}
.finalize-form textarea{width:100%;font-size:14px;padding:6px 11px;border:1px solid var(--border);border-radius:6px;
  font-family:var(--sans);resize:vertical;margin-bottom:12px;transition:border-color .2s,box-shadow .2s}
.finalize-form textarea:focus{outline:none;border-color:var(--accent-hover);box-shadow:0 0 0 2px rgba(5,145,255,.1)}
.finalize-btns{display:flex;gap:8px;flex-wrap:wrap}

/* 截止标签 */
.deadline-tag{display:inline-flex;align-items:center;font-size:12px;line-height:20px;
  background:var(--warn-bg);border:1px solid var(--warn-bd);color:var(--warn);
  padding:0 7px;border-radius:4px;margin:0 0 12px}

/* 总览看板 */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:8px 0 4px}
.stat-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:18px 20px;
  display:flex;flex-direction:column;gap:4px}
.stat-card.hot{border-color:#91caff;background:var(--accent-bg)}
a.stat-card{transition:box-shadow .2s}
a.stat-card:hover{box-shadow:var(--shadow-card);text-decoration:none}
.stat-num{font-size:30px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.2}
.stat-label{font-size:13px;color:var(--muted)}
.warn-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px}
.warn-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:14px 16px}
.warn-head{font-weight:600;font-size:14px;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.warn-count{font-size:12px;line-height:20px;background:var(--block-bg);border:1px solid var(--block-bd);color:var(--block);padding:0 7px;border-radius:4px}
.warn-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.warn-list li{font-size:13px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  padding-bottom:6px;border-bottom:1px solid var(--line)}
.warn-list li:last-child{border-bottom:none}

/* ===== 架构组件 ===== */
.tile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;margin:8px 0}
.tile{display:flex;flex-direction:column;gap:5px;background:var(--surface);border:1px solid var(--line);
  border-radius:8px;padding:16px 20px;transition:box-shadow .2s}
.tile:hover{box-shadow:var(--shadow-card);text-decoration:none}
.tile .t-ico{font-size:24px;line-height:1}
.tile .t-name{font-weight:600;font-size:15px;color:var(--ink)}
.tile .t-desc{font-size:12px;color:var(--muted)}

.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 16px}
.toolbar .spacer{flex:1}

.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}

details.fold{background:var(--surface);border:1px solid var(--line);border-radius:8px;margin:0 0 12px;overflow:hidden}
details.fold>summary{cursor:pointer;list-style:none;padding:13px 20px;font-weight:600;font-size:14px;
  display:flex;align-items:center;gap:8px;color:var(--ink)}
details.fold>summary::-webkit-details-marker{display:none}
details.fold>summary::after{content:"+";margin-left:auto;font-size:18px;color:var(--faint);font-weight:400;line-height:1}
details.fold[open]>summary::after{content:"−"}
details.fold[open]>summary{border-bottom:1px solid var(--line)}
details.fold>.fold-body{padding:16px 20px 20px}
details.fold .form-grid{padding:0;border:0;background:transparent}
details.fold .inline-form{padding:2px 0 4px}
details.fold .hint{margin-top:0}

.meta-card{display:flex;flex-wrap:wrap;gap:8px 24px;background:var(--surface);border:1px solid var(--line);
  border-radius:8px;padding:12px 16px;font-size:13px;color:var(--muted);margin:0 0 16px}
.meta-card b{color:var(--ink);font-weight:600}

.step-list{display:flex;flex-direction:column;gap:12px;margin:8px 0}
.step{display:flex;gap:16px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:16px 20px}
.step-num{flex:none;width:30px;height:30px;border-radius:50%;background:var(--accent);color:#fff;
  font-weight:600;display:flex;align-items:center;justify-content:center;font-size:14px}
.step-body{min-width:0;flex:1}
.step-body h3{margin:2px 0 8px;font-size:15px}

/* 列头下拉筛选（校区列直接筛，Excel 式） */
.tbl th.th-filter{padding:0}
.tbl th.th-filter form{margin:0}
.tbl th.th-filter select{width:100%;border:0;background:transparent;font:inherit;font-size:13px;
  font-weight:600;color:var(--ink);padding:11px 15px;cursor:pointer;appearance:auto;-webkit-appearance:auto}
.tbl th.th-filter select:focus{outline:none;box-shadow:inset 0 0 0 2px rgba(5,145,255,.2)}
.tbl th.th-filter.active{background:var(--accent-bg)}
.tbl th.th-filter.active select{color:var(--accent)}

/* 章节切换标签（培训课件用） */
.filter-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 16px}
.fchip{display:inline-flex;align-items:center;height:30px;padding:0 14px;border-radius:6px;
  border:1px solid var(--border);background:#fff;color:var(--ink);font-size:13px}
.fchip:hover{border-color:var(--accent);color:var(--accent);text-decoration:none}
.fchip.on{background:var(--accent);border-color:var(--accent);color:#fff}

/* 上岗培训：课件 markdown 排版 */
.md-body{font-size:14px;line-height:1.75;color:var(--ink)}
.md-body h1{font-size:20px;margin:20px 0 10px;font-weight:600}
.md-body h2{font-size:17px;margin:18px 0 8px;font-weight:600}
.md-body h3{font-size:15px;margin:14px 0 6px;font-weight:600}
.md-body p{margin:9px 0}
.md-body ul,.md-body ol{margin:9px 0;padding-left:24px}
.md-body li{margin:4px 0}
.md-body blockquote{border-left:3px solid var(--accent);background:var(--accent-bg);
  margin:12px 0;padding:9px 15px;color:var(--ink);border-radius:0 6px 6px 0}
.md-body table{border-collapse:collapse;width:100%;margin:12px 0;font-size:13px;display:block;overflow-x:auto}
.md-body th,.md-body td{border:1px solid var(--line);padding:7px 11px;text-align:left;vertical-align:top}
.md-body th{background:#fafafa;font-weight:600}
.md-body img{max-width:100%;border-radius:8px;margin:8px 0}
.md-body code{background:#f0f0f0;padding:1px 6px;border-radius:4px;font-family:var(--mono);font-size:13px}
.md-body pre{background:#f6f8fa;padding:14px;border-radius:8px;overflow:auto;margin:12px 0}
.md-body pre code{background:none;padding:0}
.md-body strong{font-weight:600}
.course-section{margin:14px 0}

/* 考核答题 / 结果 */
.exam-q{padding:16px 18px;background:var(--surface);border:1px solid var(--line);border-radius:8px;margin:12px 0}
.exam-q-head{font-size:15px;line-height:1.65;margin-bottom:10px}
.exam-opts{display:flex;flex-direction:column;gap:9px;margin-top:8px}
.exam-opts .chk{align-items:flex-start;line-height:1.5}

.row-done{background:#fafcfa;color:var(--muted)}   /* 合同已结束的学生行，淡化 */

/* ===== 三级权限 / 课时 / AI监管 ===== */
.top-role{font-size:12px;color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:20px;padding:2px 10px}
.pill{display:inline-block;font-size:13px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:20px;padding:3px 12px;margin-right:8px}
.pill b{color:var(--accent);font-size:15px}
.inline-mini{display:inline-flex;gap:5px;align-items:center;margin-right:6px}
.inline-mini input[type=text]{font-size:13px;padding:3px 8px;min-height:28px;border:1px solid var(--border);border-radius:6px;width:110px}
.row-actions{white-space:nowrap}
.empty-note{background:var(--bg);border:1px dashed var(--line);border-radius:10px;padding:16px 18px}
.empty-note p{margin:0 0 6px}
.plain-list{margin:6px 0 0;padding-left:18px;line-height:1.9}
.small{font-size:12px}
/* 每节记录卡片 */
.rec-card{border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:12px;background:#fff}
.rec-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.rec-head .num{font-size:13px;color:var(--muted)}
.rec-actions{margin-left:auto;display:flex;gap:4px}
.rec-body{margin:8px 0 0;font-size:13px;line-height:1.6}
.review-box{margin-top:10px;padding:10px 12px;background:var(--bg);border-radius:8px;font-size:13px;line-height:1.65}
.rv-line{margin:4px 0}
.rv-line ul{margin:4px 0 4px 0;padding-left:20px}
.rv-bad{color:var(--block,#c0392b)}
.rv-warn{color:var(--warn,#b8860b)}
.tag{display:inline-block;font-size:12px;border-radius:5px;padding:1px 7px;margin:2px 4px 2px 0;border:1px solid var(--line)}
.tag-ok{background:var(--ok-bg,#eaf7ef);color:var(--ok,#1e874b);border-color:var(--ok-bd,#b6e3c6)}
.tag-warn{background:var(--warn-bg);color:var(--warn);border-color:var(--warn-bd)}
.tag-bad{background:var(--block-bg,#fdecea);color:var(--block,#c0392b);border-color:var(--block-bd,#f5c6cb)}

@media(max-width:640px){
  .rec-actions{margin-left:0;width:100%}
  .inline-mini input[type=text]{width:90px}
}

/* 响应式：窄屏侧栏转顶部横条 */
@media(max-width:900px){
  .layout{flex-direction:column}
  .side{width:100%;height:auto;position:static;border-right:none;border-bottom:1px solid var(--line)}
  .side-menu{flex-direction:row;overflow-x:auto;padding:6px 8px}
  .mi{height:36px;white-space:nowrap;flex:none}
  .grid-2{grid-template-columns:1fr}
}
@media(max-width:640px){
  .form-grid,.fieldrow{grid-template-columns:1fr}
  .rule-row{flex-direction:column}
  .rule-ops{align-self:flex-end}
  .hero-stats{gap:24px}
  .content{padding:12px}
}
