
* { margin:0; padding:0; box-sizing:border-box; }
:root {
  --primary:#4a90d9; --primary-dark:#357abd;
  --success:#52c41a; --success-bg:#f6ffed;
  --error:#ff4d4f; --error-bg:#fff2f0;
  --warning:#faad14; --warning-bg:#fffbe6;
  --text:#333; --text-sec:#666; --text-light:#999;
  --bg:#f0f4f8; --card:#fff; --border:#e8e8e8;
  --code-bg:#f5f5f5; --nav-bg:#001529;
}
body { font-family:"Microsoft YaHei","PingFang SC","Helvetica Neue",Arial,sans-serif; background:var(--bg); color:var(--text); min-height:100vh; }

/* ===== 通用 ===== */
.hidden { display:none !important; }

/* ===== 开始界面 ===== */
.start-wrap { max-width:720px; margin:0 auto; padding:40px 20px; min-height:calc(100vh - 62px); display:flex; flex-direction:column; justify-content:center; }
.start-title { text-align:center; font-size:36px; font-weight:bold; color:var(--primary); margin-bottom:6px; }
.start-sub { text-align:center; font-size:14px; color:var(--text-sec); margin-bottom:35px; }
.config-card { background:var(--card); border-radius:14px; padding:35px; box-shadow:0 2px 12px rgba(0,0,0,.06); }
.config-row { display:flex; align-items:flex-start; margin-bottom:22px; gap:20px; }
.config-label { font-size:14px; font-weight:bold; color:var(--text); min-width:80px; text-align:right; padding-top:6px; }
.config-control { flex:1; }
select { width:100%; padding:10px 14px; border:1px solid var(--border); border-radius:8px; font-size:14px; font-family:inherit; background:#fff; cursor:pointer; }
select:focus { outline:none; border-color:var(--primary); }

/* 语言/级别按钮组 */
.btn-group { display:flex; flex-wrap:wrap; gap:10px; }
.btn-tag { padding:8px 22px; border:2px solid var(--border); border-radius:20px; font-size:14px; font-weight:bold; cursor:pointer; background:#fff; color:var(--text-sec); transition:all .2s; user-select:none; }
.btn-tag:hover { border-color:var(--primary); color:var(--primary); }
.btn-tag.active { background:var(--primary); color:#fff; border-color:var(--primary); }
.btn-tag.active.lang-cpp { background:#f5522b; border-color:#f5522b; }
.btn-tag.disabled { opacity:.38; cursor:not-allowed; }
.btn-tag.disabled:hover { border-color:var(--border); color:var(--text-sec); }
.org-hint { font-size:12px; color:var(--text-sec); margin-top:6px; min-height:14px; }
/* 题型模式胶囊按钮 */
.exam-type-tag { padding:9px 20px; border:2px solid var(--border); border-radius:14px; font-size:14px; font-weight:bold; cursor:pointer; background:#fff; color:var(--text-sec); transition:all .2s; user-select:none; display:flex; align-items:center; gap:8px; }
.exam-type-tag input[type="radio"] { display:none; }
.exam-type-tag .et-main { font-size:15px; }
.exam-type-tag .et-sub { font-size:12px; font-weight:normal; opacity:.7; }
.exam-type-tag:hover { border-color:var(--primary); color:var(--primary); }
.exam-type-tag:hover .et-sub { opacity:.85; }
.exam-type-tag.active { background:var(--primary); color:#fff; border-color:var(--primary); box-shadow:0 4px 12px rgba(64,120,255,.28); }
.exam-type-tag.active .et-sub { opacity:.85; color:#fff; }

/* 错题/收藏入口按钮组 */
.mode-actions { display:flex; gap:12px; flex-wrap:wrap; align-items:center; }
.mode-btn { padding:8px 18px; border:2px solid var(--border); border-radius:20px; font-size:14px; font-weight:bold; cursor:pointer; background:#fff; color:var(--text); transition:all .2s; user-select:none; display:inline-flex; align-items:center; gap:6px; }
.mode-btn:hover { border-color:var(--primary); color:var(--primary); }
.mode-btn .badge { background:var(--error); color:#fff; border-radius:10px; padding:1px 8px; font-size:12px; min-width:22px; text-align:center; }
.mode-btn.fav .badge { background:var(--warning); }
.mode-btn:disabled { opacity:.5; cursor:not-allowed; }

/* 收藏按钮（答题界面左上） */
.fav-btn { display:inline-flex; align-items:center; gap:5px; background:#fff; border:2px solid var(--warning); border-radius:16px; color:var(--warning); font-size:15px; font-weight:bold; cursor:pointer; padding:5px 13px; line-height:1; transition:all .15s; user-select:none; }
.fav-btn:hover { background:var(--warning); color:#fff; transform:scale(1.04); }
.fav-btn.active { background:var(--warning); color:#fff; border-color:var(--warning); box-shadow:0 2px 8px rgba(250,173,20,.4); }

/* 滑竿 */
.slider-wrap { display:flex; align-items:center; gap:12px; }
input[type="range"] { -webkit-appearance:none; appearance:none; width:100%; height:8px; border-radius:4px; background:var(--border); outline:none; cursor:pointer; }
input[type="range"]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; width:22px; height:22px; border-radius:50%; background:var(--primary); cursor:pointer; border:3px solid #fff; box-shadow:0 2px 6px rgba(74,144,217,.4); }
input[type="range"]::-webkit-slider-thumb:hover { transform:scale(1.15); }
input[type="range"]::-moz-range-thumb { width:22px; height:22px; border-radius:50%; background:var(--primary); cursor:pointer; border:3px solid #fff; }
.slider-val { font-size:16px; font-weight:bold; color:var(--primary); min-width:50px; text-align:center; background:#e6f7ff; padding:4px 10px; border-radius:6px; }
.slider-val-input { width:70px; padding:5px 8px; font-size:14px; font-weight:bold; color:var(--primary); text-align:center; background:#e6f7ff; border:1px solid var(--primary); border-radius:6px; outline:none; }
.slider-val-input:focus { background:#fff; box-shadow:0 0 0 3px rgba(74,144,217,.2); }
.slider-hint { font-size:12px; color:var(--text-light); margin-top:6px; }

.radio-group { display:flex; flex-direction:column; gap:8px; }
.radio-group label { display:flex; align-items:center; gap:8px; cursor:pointer; font-size:14px; }
.radio-group input[type="radio"] { width:18px; height:18px; cursor:pointer; }
.checkbox-row { display:flex; align-items:center; gap:8px; font-size:14px; cursor:pointer; }
.checkbox-row input[type="checkbox"] { width:18px; height:18px; cursor:pointer; }

.stat-info { text-align:center; color:var(--text-light); font-size:13px; margin-top:15px; padding-top:15px; border-top:1px solid var(--border); }
.start-btn { display:block; width:100%; padding:15px; margin-top:25px; background:var(--primary); color:#fff; border:none; border-radius:10px; font-size:18px; font-weight:bold; cursor:pointer; transition:background .3s; font-family:inherit; }
.start-btn:hover { background:var(--primary-dark); }
.start-btn:disabled { background:#ccc; cursor:not-allowed; }

/* ===== 答题界面 ===== */
.quiz-wrap { max-width:820px; margin:0 auto; min-height:calc(100vh - 62px); display:flex; flex-direction:column; }
.quiz-topbar { background:var(--nav-bg); color:#fff; padding:10px 24px; display:flex; align-items:center; justify-content:space-between; position:sticky; top:0; z-index:100; }
.quiz-topbar-left { display:flex; align-items:center; gap:12px; }
.q-counter { font-size:16px; font-weight:bold; }
.type-badge { padding:3px 12px; border-radius:12px; font-size:12px; font-weight:bold; }
.type-badge.choice { background:#1890ff; }
.type-badge.judge { background:#52c41a; }
.src-badge { font-size:12px; color:#aaa; }
.lang-badge { padding:3px 12px; border-radius:12px; font-size:12px; font-weight:bold; color:#fff; }
.lang-badge.lang-python { background:#3776ab; }   /* Python 蓝 */
.lang-badge.lang-cpp { background:#e8730c; }      /* C++ 橙 */
.lang-badge.lang-other { background:#722ed1; }
.quiz-topbar-right { display:flex; align-items:center; gap:15px; }
.timer { font-family:"Consolas",monospace; font-size:18px; font-weight:bold; }
.home-btn { padding:6px 16px; background:rgba(255,77,79,.15); color:#ff7875; border:1px solid rgba(255,77,79,.3); border-radius:8px; font-size:13px; font-weight:bold; cursor:pointer; font-family:inherit; transition:all .2s; }
.home-btn:hover { background:rgba(255,77,79,.25); }

.progress-bar-wrap { background:var(--bg); padding:10px 24px; display:flex; align-items:center; gap:15px; }
.progress-bar { flex:1; height:8px; background:var(--border); border-radius:4px; overflow:hidden; }
.progress-fill { height:100%; background:var(--primary); border-radius:4px; transition:width .3s; }
.progress-text { font-size:13px; color:var(--text-sec); white-space:nowrap; }

.quiz-body { flex:1; padding:20px 24px; }
.q-card { background:var(--card); border-radius:12px; padding:28px; box-shadow:0 2px 12px rgba(0,0,0,.06); }
.q-num { font-size:18px; font-weight:bold; color:var(--primary); margin-bottom:12px; }
.q-text { font-size:15px; line-height:1.8; color:var(--text); margin-bottom:20px; white-space:pre-wrap; }
.q-text .code-block { display:block; background:var(--code-bg); padding:12px 16px 12px 40px; border-radius:6px; font-family:"Consolas","Courier New",monospace; font-size:14px; margin:8px 0; border-left:3px solid var(--primary); white-space:pre-wrap; word-break:break-word; line-height:1.3; position:relative; }
.q-text .code-block .code-line { display:block; padding:0; margin:0; border:none; background:none; }
/* 代码块行号（CSS计数器） */
.q-text .code-block { counter-reset:codeline; counter-increment:codeblock 0; }
.q-text .code-block .code-line { counter-increment:codeline; }
.q-text .code-block .code-line::before { content:counter(codeline); position:absolute; left:8px; width:24px; text-align:right; color:#999; font-size:12px; user-select:none; }
/* ===== C++ 语法高亮（浅色主题，配色对齐常见 C++ 编辑器 / Visual Studio Light 风格）=====
   控制语句  → 蓝色   #0000ff
   数据类型  → 青色   #0e7c86
   其他关键字→ 紫色   #9b2393
   预处理指令→ 红褐   #c00000
   字符串/字符→红褐  #a31515
   数字      → 绿色   #098658
   注释      → 灰色(斜体) #008000
*/
.q-text .code-block .tok-control  { color:#0000ff; }
.q-text .code-block .tok-type     { color:#0e7c86; }
.q-text .code-block .tok-keyword  { color:#9b2393; }
.q-text .code-block .tok-preproc  { color:#c00000; }
.q-text .code-block .tok-string   { color:#a31515; }
.q-text .code-block .tok-number   { color:#098658; }
.q-text .code-block .tok-comment  { color:#008000; font-style:italic; }
/* Python 专用：内置函数 / def·class 定义的名字（深黄 #795E26，与常见 Python 编辑器一致） */
.q-text .code-block .tok-builtin  { color:#795E26; }
.q-text .code-block .tok-funcname { color:#795E26; }
/* ===== 实操题(填空)代码块 / 复盘页代码块：同一套 token 配色 ===== */
.q-fill-code .tok-control, .review-fill-code .tok-control   { color:#0000ff; }
.q-fill-code .tok-type,    .review-fill-code .tok-type      { color:#0e7c86; }
.q-fill-code .tok-keyword, .review-fill-code .tok-keyword   { color:#9b2393; }
.q-fill-code .tok-preproc, .review-fill-code .tok-preproc   { color:#c00000; }
.q-fill-code .tok-string,  .review-fill-code .tok-string    { color:#a31515; }
.q-fill-code .tok-number,  .review-fill-code .tok-number    { color:#098658; }
.q-fill-code .tok-comment, .review-fill-code .tok-comment   { color:#008000; font-style:italic; }
.q-fill-code .tok-builtin, .review-fill-code .tok-builtin   { color:#795E26; }
.q-fill-code .tok-funcname,.review-fill-code .tok-funcname  { color:#795E26; }
/* 题干/选项中的内嵌图片（data URI） */
.q-text img, .option-text img { max-width:80%; max-height:320px; height:auto; border:1px solid var(--border); border-radius:6px; margin:6px 0; display:inline-block; vertical-align:middle; background:#fff; cursor:zoom-in; transition:transform .2s, box-shadow .2s; object-fit:contain; }
/* 题干里"文字 … 图片 … 文字"混排的题（Scratch 很多）：图片与文字同行显示，不再把句子截断 */
.q-text img:hover, .option-text img:hover { box-shadow:0 4px 12px rgba(0,0,0,.15); }
/* 图片放大模态框（全屏遮罩 + 居中显示） */
.img-zoom-modal { position:fixed; inset:0; background:rgba(0,0,0,.85); display:none; align-items:center; justify-content:center; z-index:9999; cursor:zoom-out; animation:fadeIn .2s ease-out; }
.img-zoom-modal.show { display:flex; }
.img-zoom-modal img { max-width:95vw; max-height:95vh; object-fit:contain; cursor:default; box-shadow:0 8px 32px rgba(0,0,0,.5); border-radius:8px; user-select:none; -webkit-user-drag:none; }
.img-zoom-modal .zoom-close-hint { position:absolute; top:20px; right:24px; color:#fff; font-size:14px; background:rgba(0,0,0,.5); padding:6px 14px; border-radius:6px; pointer-events:none; }
@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
.code-image-wrap { margin-bottom:18px; }
.code-image-label { font-size:12px; color:#888; margin-bottom:6px; font-weight:bold; }
.code-image { width:100%; max-width:560px; border-radius:8px; border:1px solid #ddd; box-shadow:0 2px 8px rgba(0,0,0,0.08); display:block; }

.options-list { display:flex; flex-direction:column; gap:10px; }
.option-item { display:flex; align-items:flex-start; padding:14px 18px; border:2px solid var(--border); border-radius:10px; cursor:pointer; transition:all .2s; gap:12px; }
.option-item:hover { border-color:var(--primary); background:#f0f7ff; }
.option-item.selected { border-color:var(--primary); background:#e6f7ff; }
.option-item.correct { border-color:var(--success); background:var(--success-bg); }
.option-item.wrong { border-color:var(--error); background:var(--error-bg); }
.option-letter { font-size:16px; font-weight:bold; color:var(--primary); min-width:24px; }
.option-item.correct .option-letter { color:var(--success); }
.option-item.wrong .option-letter { color:var(--error); }
.option-text { font-size:14px; line-height:1.6; white-space:pre-wrap; flex:1; letter-spacing:0.5px; }

/* ===== 组合题整组一页（阅读程序/完善程序：材料 + 各小问 + 各自选项同页纵向排布） ===== */
.grp-material { border:2px solid var(--primary); border-radius:12px; padding:14px 16px; margin-bottom:20px; background:linear-gradient(180deg,#f4f9ff,#fff); }
.grp-material-title { font-size:13px; font-weight:bold; color:var(--primary); margin-bottom:10px; letter-spacing:1px; }
.grp-member { border:2px solid var(--border); border-left:4px solid var(--primary); border-radius:12px; padding:16px 18px; margin-bottom:18px; background:#fff; box-shadow:0 2px 8px rgba(0,0,0,0.04); }
.grp-member:last-child { margin-bottom:0; }
.grp-member-head { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-bottom:12px; padding-bottom:10px; border-bottom:1px dashed #c8cdd3; }
.grp-member-num { font-size:15px; font-weight:bold; color:var(--primary); }
.grp-member-tag { font-size:12px; font-weight:bold; color:#666; background:#f0f1f3; border-radius:10px; padding:2px 10px; }
.grp-stem { font-size:15px; line-height:1.7; }
.grp-stem .code-block { margin:8px 0; }
.member-opts { display:flex; flex-direction:column; gap:8px; margin-top:14px; padding-top:4px; }
.grp-fb { margin-top:12px; padding:9px 14px; border-radius:8px; font-size:14px; font-weight:bold; }
.grp-fb.correct { background:var(--success-bg); color:var(--success); border:1px solid var(--success); }
.grp-fb.wrong { background:var(--error-bg); color:var(--error); border:1px solid var(--error); }
.grp-exp { margin-top:10px; padding:10px 14px; background:#f7f8fa; border-radius:8px; font-size:13.5px; line-height:1.7; white-space:pre-wrap; word-break:break-word; }
.grp-exp img { max-width:70%; height:auto; border-radius:6px; margin:4px 0; display:block; }

.feedback-box { margin-top:15px; padding:14px 18px; border-radius:8px; font-size:14px; font-weight:bold; }
.feedback-box.correct { background:var(--success-bg); color:var(--success); border:1px solid var(--success); }
.feedback-box.wrong { background:var(--error-bg); color:var(--error); border:1px solid var(--error); }

/* 解析区域 */
.explanation-box { margin-top:15px; padding:16px 20px; background:#f0f5ff; border-radius:10px; border:1px solid #adc6ff; }
.explanation-title { font-size:14px; font-weight:bold; color:var(--primary); margin-bottom:8px; display:flex; align-items:center; gap:6px; }
.explanation-text { font-size:13px; line-height:1.7; color:var(--text); white-space:pre-wrap; }

.quiz-footer { padding:15px 24px; display:grid; grid-template-columns:1fr 1fr 1fr auto 1fr; align-items:center; background:var(--bg); gap:10px; position:sticky; bottom:0; z-index:90; }
.footer-score { display:inline-flex; align-items:center; gap:8px; font-weight:600; color:var(--text-sec); font-size:14px; padding:0 6px; }
.footer-score.hidden { display:none; }
.footer-score .fill-badge { min-width:34px; height:34px; border-radius:50%; font-size:14px; font-weight:700; color:#fff; background:var(--text-light); display:inline-flex; align-items:center; justify-content:center; }
.footer-score .fill-badge.ok { background:var(--success); }
.footer-score .fill-badge.err { background:var(--error); }
.nav-btn { padding:10px 24px; border:none; border-radius:8px; font-size:15px; font-weight:bold; cursor:pointer; transition:all .3s; font-family:inherit; }
.nav-btn.secondary { background:var(--card); color:var(--text); border:1px solid var(--border); }
.nav-btn.secondary:hover { border-color:var(--primary); color:var(--primary); }
.nav-btn.primary { background:var(--primary); color:#fff; }
.nav-btn.primary:hover { background:var(--primary-dark); }
.nav-btn.success { background:var(--success); color:#fff; }
.nav-btn.exam-submit { background:#fa8c16; color:#fff; border:1px solid #fa8c16; }
.nav-btn.exam-submit:hover { background:#d46b08; border-color:#d46b08; transform:translateY(-1px); box-shadow:0 3px 8px rgba(212,107,8,.3); }
.nav-btn:disabled { opacity:.4; cursor:not-allowed; }

/* ===== 答题卡弹窗 ===== */
.modal-overlay { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,.45); display:flex; align-items:center; justify-content:center; z-index:1000; }
.modal-content { background:#fff; border-radius:12px; padding:30px; max-width:550px; width:90%; max-height:80vh; overflow-y:auto; }
.modal-title { font-size:22px; font-weight:bold; color:var(--primary); text-align:center; margin-bottom:10px; }
.modal-sub { text-align:center; font-size:14px; color:var(--text-sec); margin-bottom:20px; }
.answer-grid { display:grid; grid-template-columns:repeat(8,1fr); gap:8px; margin-bottom:20px; }
.ans-cell { aspect-ratio:1; display:flex; align-items:center; justify-content:center; border-radius:8px; font-size:16px; font-weight:bold; cursor:pointer; transition:all .2s; }
.ans-cell.unanswered { background:var(--bg); color:var(--text-light); border:2px solid var(--border); }
.ans-cell.answered { background:var(--success); color:#fff; border:2px solid var(--success); }
.ans-cell.wrong { background:var(--error); color:#fff; border:2px solid var(--error); }
.ans-cell.current { background:var(--primary); color:#fff; border:2px solid var(--primary); transform:scale(1.1); }
.ans-cell.answered-exam { background:#e6f0ff; color:var(--primary); border:2px solid var(--primary); }
.ans-cell:hover { transform:scale(1.05); }
.legend { display:flex; justify-content:center; gap:25px; font-size:13px; color:var(--text-sec); margin-bottom:15px; }
.legend-item { display:flex; align-items:center; gap:6px; }
.legend-dot { width:16px; height:16px; border-radius:4px; }
.modal-close-btn { display:block; width:100%; padding:12px; background:var(--primary); color:#fff; border:none; border-radius:8px; font-size:15px; font-weight:bold; cursor:pointer; font-family:inherit; }

/* ===== 顶部导航栏（与主站一致） ===== */
.site-nav { position:sticky; top:0; z-index:400; background:#fff; box-shadow:0 6px 24px -14px rgba(14,42,110,.45); }
.site-nav-inner { max-width:1200px; margin:0 auto; padding:12px 16px; display:flex; align-items:center; justify-content:space-between; gap:12px; position:relative; }
.site-nav-logo { display:flex; align-items:center; flex-shrink:0; }
.site-nav-logo img { height:40px; width:auto; display:block; }
.site-nav-links { display:flex; align-items:center; gap:32px; margin:0 auto; }
.site-nav-links a { color:#212121; font-size:16px; font-weight:500; text-decoration:none; white-space:nowrap; transition:color .2s; }
.site-nav-links a:hover { color:#153FC6; }
.site-nav-links a.active { color:#153FC6; font-weight:700; border-bottom:2px solid #153FC6; padding-bottom:4px; }
.site-nav-right { display:flex; align-items:center; gap:10px; margin-left:auto; }
.site-nav-user { font-size:14px; color:#666; white-space:nowrap; }
.site-nav-user b { color:#333; }
.site-nav-logout { font-size:12px; color:#999; text-decoration:underline; background:none; border:none; cursor:pointer; font-family:inherit; padding:0; }
.site-nav-logout:hover { color:#ff4d4f; }
.site-nav-toggle { display:none; background:none; border:none; font-size:22px; line-height:1; color:#212121; cursor:pointer; padding:2px 6px; font-family:inherit; }
.site-nav-mobile { display:none; background:#fff; box-shadow:0 8px 20px -12px rgba(0,0,0,.3); padding:8px 20px 16px; }
.site-nav-mobile.open { display:block; }
.site-nav-mobile a { display:block; padding:11px 0; color:#212121; font-size:16px; font-weight:500; text-decoration:none; border-bottom:1px solid #F0F0F4; }
.site-nav-mobile a:last-child { border-bottom:none; }
.site-nav-mobile a.active { color:#153FC6; font-weight:700; }
/* 窄屏（平板区段）：收紧导航间距，避免右侧徽标/按钮挤压重叠 */
@media (max-width:1240px){
  .site-nav-links { gap:16px; }
  .site-nav-links a { font-size:15px; }
  .site-nav-links a.active { padding-bottom:3px; }
  .site-nav-right { gap:8px; }
}
@media (max-width:1180px){
  .site-nav-links { gap:10px; }
  .site-nav-links a { font-size:14px; }
  .redeem-fab { padding:7px 12px; font-size:13px; }
}
@media (max-width:900px){
  .site-nav-links { display:none; }
  .site-nav-toggle { display:block; }
  .site-nav-user { display:none; }
}
/* ===== 兑换码按钮（置于导航栏右侧） ===== */
.redeem-fab { background:linear-gradient(135deg,#fa8c16,#d46b08); color:#fff; border:none; border-radius:22px; padding:8px 16px; font-size:14px; font-weight:bold; cursor:pointer; box-shadow:0 3px 10px rgba(212,107,8,.3); font-family:inherit; display:inline-flex; align-items:center; gap:5px; white-space:nowrap; transition:transform .2s, box-shadow .2s; }
.redeem-fab:hover { transform:translateY(-1px); box-shadow:0 5px 14px rgba(212,107,8,.42); }
/* 级别未解锁样式 */
.level-locked { opacity:.5; position:relative; }
.level-locked::after { content:'🔒'; position:absolute; top:-8px; right:-8px; font-size:13px; }

/* ===== 顶部导航「课程」下拉（桌面 hover 展开） ===== */
.site-nav-links .nav-dropdown { position:relative; }
.site-nav-links .nav-dropdown > a { display:inline-flex; align-items:center; gap:4px; cursor:pointer; }
.site-nav-links .nav-dropdown .caret { font-size:10px; line-height:1; transition:transform .2s; }
.site-nav-links .nav-dropdown:hover .caret,
.site-nav-links .nav-dropdown:focus-within .caret { transform:rotate(180deg); }
.site-nav-links .nav-dropdown-menu {
  display:none; position:absolute; top:100%; left:0; margin-top:8px;
  min-width:172px; background:#fff; border:1px solid #ECECFF; border-radius:12px;
  box-shadow:0 14px 34px rgba(20,30,80,.16); padding:8px 0; z-index:60;
}
.site-nav-links .nav-dropdown:hover .nav-dropdown-menu,
.site-nav-links .nav-dropdown:focus-within .nav-dropdown-menu { display:block; }
.site-nav-links .nav-dropdown-menu a {
  display:block; padding:9px 18px; white-space:nowrap; color:#212121; font-size:15px; font-weight:500;
  text-decoration:none; border-bottom:none;
}
.site-nav-links .nav-dropdown-menu a:hover { background:#F2F3FF; color:#153FC6; }
/* 移动端：课程分组直接平铺、子项缩进 */
.site-nav-mobile .nav-mobile-group-label { padding:11px 0 4px; color:#153FC6; font-size:14px; font-weight:700; }
.site-nav-mobile .nav-mobile-sub { padding-left:1.6rem; }
.level-locked.active { opacity:.65; }
/* 兑换弹窗字段 */
.redeem-field { margin-bottom:16px; text-align:left; }
.redeem-field label { display:block; font-size:14px; color:var(--text-sec); margin-bottom:6px; }
.redeem-field select, .redeem-field input { width:100%; padding:10px 12px; border:1px solid var(--border); border-radius:8px; font-size:15px; font-family:inherit; box-sizing:border-box; }
.redeem-msg { font-size:14px; margin:8px 0 4px; min-height:20px; text-align:center; }
.redeem-msg.ok { color:var(--success); }
.redeem-msg.err { color:var(--error); }
.unlocked-list { font-size:13px; color:var(--text-sec); margin-top:14px; text-align:left; background:var(--bg); padding:10px 12px; border-radius:8px; line-height:1.8; }

/* ===== 确认弹窗 ===== */
.confirm-overlay { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,.45); display:flex; align-items:center; justify-content:center; z-index:2000; }
.confirm-box { background:#fff; border-radius:12px; padding:30px; max-width:400px; width:90%; text-align:center; }
.confirm-icon { font-size:48px; margin-bottom:10px; }
.confirm-title { font-size:18px; font-weight:bold; margin-bottom:8px; }
.confirm-msg { font-size:14px; color:var(--text-sec); margin-bottom:20px; line-height:1.6; }
.confirm-btns { display:flex; gap:12px; justify-content:center; }
.confirm-btns .nav-btn { min-width:100px; }

/* ===== 结果界面 ===== */
.result-wrap { max-width:820px; margin:0 auto; padding:30px 20px 100px; }
.result-title { text-align:center; font-size:28px; font-weight:bold; color:var(--primary); margin-bottom:25px; }
.score-card { background:var(--card); border-radius:12px; padding:40px; text-align:center; box-shadow:0 2px 12px rgba(0,0,0,.06); margin-bottom:20px; }
.score-num { font-size:72px; font-weight:bold; line-height:1; }
.score-num.pass { color:var(--success); }
.score-num.fail { color:var(--error); }
.score-unit { font-size:20px; color:var(--text-sec); margin-top:5px; }
.score-status { font-size:18px; font-weight:bold; margin-top:12px; }
.score-status.pass { color:var(--success); }
.score-status.fail { color:var(--error); }
.stats-row { display:flex; justify-content:center; gap:40px; margin-top:25px; padding-top:25px; border-top:1px solid var(--border); flex-wrap:wrap; }
.stat-item { text-align:center; }
.stat-val { font-size:28px; font-weight:bold; }
.stat-val.correct { color:var(--success); }
.stat-val.wrong { color:var(--error); }
.stat-val.unanswered { color:var(--warning); }
.stat-val.time { color:var(--text-sec); }
.stat-lbl { font-size:13px; color:var(--text-light); margin-top:5px; }
.review-title { font-size:20px; font-weight:bold; margin:30px 0 15px; }
.review-item { background:var(--card); border-radius:10px; padding:20px; margin-bottom:12px; border-left:4px solid var(--border); }
.review-item.correct { border-left-color:var(--success); }
.review-item.wrong { border-left-color:var(--error); }
.review-item.unanswered { border-left-color:var(--warning); }
.review-header { display:flex; align-items:center; gap:12px; margin-bottom:8px; flex-wrap:wrap; }
.review-q-num { font-size:15px; font-weight:bold; }
.review-status { padding:2px 10px; border-radius:10px; font-size:12px; font-weight:bold; color:#fff; }
.review-status.correct { background:var(--success); }
.review-status.wrong { background:var(--error); }
.review-status.unanswered { background:var(--warning); }
.review-src { font-size:12px; color:var(--text-light); margin-left:auto; }
.review-question { font-size:14px; line-height:1.6; color:var(--text); margin-bottom:8px; white-space:pre-wrap; }
/* 复盘页题干配图（交卷/练习后回顾时同样要显示，并可点击放大） */
.review-question img, .review-answer img { max-width:100%; max-height:300px; width:auto; height:auto; object-fit:contain; background:#fff; border:1px solid var(--border); border-radius:6px; margin:6px 0; cursor:zoom-in; vertical-align:middle; }
.review-opt .opt-text img { max-width:100%; max-height:260px; width:auto; height:auto; object-fit:contain; vertical-align:middle; cursor:zoom-in; }
.review-answer { font-size:14px; font-weight:bold; margin-bottom:8px; }
.review-answer.correct { color:var(--success); }
.review-answer.wrong { color:var(--error); }
.review-explanation { font-size:13px; line-height:1.6; color:var(--text-sec); background:#f0f5ff; padding:10px 14px; border-radius:8px; margin-top:8px; }
.review-explanation .exp-label { font-weight:bold; color:var(--primary); }
/* 复盘/错题卡中的选项区块 */
.review-options { margin:8px 0; border:1px solid var(--border); border-radius:8px; overflow:hidden; }
.review-opt { display:flex; align-items:flex-start; gap:8px; padding:7px 12px; font-size:13.5px; line-height:1.5; border-bottom:1px solid var(--border); }
.review-opt:last-child { border-bottom:none; }
.review-opt .opt-letter { flex:0 0 auto; font-weight:bold; color:var(--text-light); }
.review-opt .opt-text { flex:1 1 auto; white-space:pre-wrap; }
.review-opt .opt-text img { max-width:20%; height:auto; display:block; border-radius:6px; }
.review-opt.is-correct { background:rgba(82,196,26,.12); }
.review-opt.is-correct .opt-letter { color:var(--success); }
.review-opt.is-your.is-wrong { background:rgba(245,34,45,.10); }
.review-opt.is-your.is-wrong .opt-letter { color:var(--error); }
.review-opt .opt-mark { flex:0 0 auto; font-size:12px; font-weight:bold; }
.review-opt.is-correct .opt-mark { color:var(--success); }
.review-opt.is-your.is-wrong .opt-mark { color:var(--error); }
.result-actions { position:fixed; left:0; right:0; bottom:0; background:var(--bg); padding:12px 16px; display:flex; gap:12px; justify-content:center; flex-wrap:wrap; box-shadow:0 -2px 10px rgba(0,0,0,.08); z-index:100; }

/* ===== 响应式：手机适配 ===== */
@media(max-width:768px) {
  .start-wrap{padding:30px 16px;}
  .start-title{font-size:28px;}
  .config-card{padding:22px;}
  .config-row{flex-direction:column;align-items:stretch;gap:8px;}
  .config-label{text-align:left;min-width:auto;padding-top:0;}
  .btn-group{gap:8px;} .btn-tag{padding:7px 16px;font-size:13px;}
  .exam-type-tag{padding:7px 14px;} .exam-type-tag .et-main{font-size:14px;} .exam-type-tag .et-sub{font-size:11px;}

  .quiz-topbar{padding:8px 12px;flex-wrap:wrap;gap:6px;}
  .quiz-topbar-left,.quiz-topbar-right{flex-wrap:wrap;gap:8px;}
  .q-counter{font-size:14px;}
  .timer{font-size:16px;}
  .quiz-body{padding:12px;} .q-card{padding:18px;}
  .q-text{font-size:15px;} .q-text .code-block{font-size:13px;padding:10px 12px 10px 34px;}
  .option-item{padding:12px 14px;gap:10px;}
  .option-text{font-size:14px;letter-spacing:.3px;}
  .explanation-box{padding:14px 16px;}
  .quiz-footer{padding:12px;grid-template-columns:repeat(4,1fr);} .quiz-footer .nav-btn{min-width:0;text-align:center;}
  .answer-grid{grid-template-columns:repeat(6,1fr);}
  .score-card{padding:28px;} .score-num{font-size:56px;} .result-title{font-size:24px;}
  .stats-row{gap:22px;} .review-item{padding:16px;}
  .modal-content{padding:24px;}
  .result-wrap{padding:30px 16px 100px;}
  .result-actions{padding:10px 12px;}
}
@media(max-width:420px) {
  .start-title{font-size:24px;}
  .quiz-topbar{padding:8px 10px;}
  .quiz-body{padding:10px;} .q-card{padding:14px;}
  .q-text .code-block{font-size:12px;padding-left:30px;}
  .option-letter{min-width:20px;font-size:15px;}
  .answer-grid{grid-template-columns:repeat(5,1fr);}
  .score-num{font-size:46px;}
  .stats-row{gap:16px;}
  .result-actions .nav-btn,.confirm-btns .nav-btn{width:100%;}
}
/* 避免横向溢出：长代码/长字符串允许换行 */
.q-text .code-block{overflow-x:auto;}

/* ===== 实操模式（代码填空） ===== */
.q-fill-meta { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:10px; }
.q-fill-year { padding:3px 12px; border-radius:12px; font-size:12px; font-weight:bold; background:#722ed1; color:#fff; }
.q-fill-title { font-size:18px; font-weight:bold; color:var(--primary); margin-bottom:14px; }
.q-fill-title .num { display:inline-flex; align-items:center; justify-content:center; min-width:30px; height:30px; border-radius:8px; font-weight:700; color:#fff; background:var(--primary); font-size:14px; margin-right:8px; }
.q-fill-desc { font-size:14px; line-height:1.85; color:var(--text); margin-bottom:14px; white-space:pre-wrap; }
.q-fill-desc p { margin:0 0 6px; }
.q-fill-code { background:var(--code-bg); border-radius:10px; padding:14px 18px; font-family:"Consolas","Courier New",monospace; font-size:14px; margin:0 0 16px; border-left:3px solid var(--primary); white-space:pre-wrap; word-break:break-word; line-height:1.5; color:#1f1f1f; }
.q-fill-code .code-line { display:block; min-height:1.5em; }
.fill-blank { width:auto; min-width:50px; max-width:100%; font-family:"Consolas","Courier New",monospace; font-size:13px; padding:1px 2px; border-radius:3px; border:1.5px solid var(--border); background:#fff; color:var(--text); vertical-align:baseline; margin:0; box-sizing:content-box; }
.fill-blank:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 3px rgba(74,144,217,.18); }
.fill-blank.ok { border-color:var(--success); background:var(--success-bg); }
.fill-blank.err { border-color:var(--error); background:var(--error-bg); }
.fill-mark { font-weight:700; margin-left:4px; }
.fill-mark.ok { color:var(--success); }
.fill-mark.err { color:var(--error); }
.q-fill-actions { display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin-bottom:14px; }
.fill-score { display:flex; align-items:center; gap:10px; font-weight:600; margin-left:auto; }
.fill-badge { display:inline-flex; align-items:center; justify-content:center; min-width:34px; height:34px; border-radius:50%; font-size:14px; font-weight:700; color:#fff; background:var(--text-light); }
.fill-badge.ok { background:var(--success); }
.fill-badge.err { background:var(--error); }
.fill-progress { flex:1; height:8px; background:var(--code-bg); border-radius:999px; overflow:hidden; max-width:160px; }
.fill-progress > span { display:block; height:100%; background:var(--primary); width:0; transition:width .25s; }
.fill-ref { margin-top:6px; padding:12px 16px; background:#f0f5ff; border-radius:8px; border:1px solid #adc6ff; }
.fill-ref summary { cursor:pointer; color:var(--primary); font-size:14px; font-weight:bold; padding:2px 0; }
.fill-ref pre { margin:10px 0 0; font-family:"Consolas","Courier New",monospace; font-size:13px; white-space:pre-wrap; word-break:break-word; color:#1f1f1f; line-height:1.5; }
.q-fill-imgs { margin-bottom:12px; }
.q-fill-imgs img { width:100%; max-width:420px; border-radius:8px; border:1px solid #ddd; box-shadow:0 2px 8px rgba(0,0,0,0.08); display:block; margin:6px 0; }
.q-fill-imgs img.py-l3 { max-width:300px; }
/* Scratch 制作题的效果图/舞台截图：不需要很大，看得清就行 */
.q-fill-imgs img.scratch-img { max-width:240px; }
/* 宽扁的示例图（一行数组/长表格，宽高比 ≥ 3）不受小图宽度限制，铺满卡片宽度显示
   （width:auto：只缩不放，避免把小图强行拉大变糊） */
.q-fill-imgs img.img-wide { max-width:100%; width:auto; }
/* code_write（编程题 / 机器人实操）的配图与参考答案图：不限宽会撑破卡片，统一限宽 */
.cw-img { max-width:100%; height:auto; border-radius:8px; border:1px solid #ddd; background:#fff; display:block; margin:6px 0; }
.cw-img-inline { display:inline-block; vertical-align:middle; }
.cw-img-ans { max-width:min(100%, 520px); }
/* 机器人实操题样图：一张张排下来太长，收到缩略图尺寸，点图仍可放大看细节 */
#fillDesc.is-robot .cw-img { max-width:340px; max-height:240px; object-fit:contain; }
#fillDesc.is-robot .cw-img-inline { max-width:240px; max-height:180px; }
/* 多张样例图并排铺，不要一张一行地往下堆 */
#fillDesc.is-robot .cw-line-img { display:inline-block; margin:0 8px 8px 0; vertical-align:top; }
/* ===== 实操题「评分要点」清单 ===== */
.rb-rubric{margin:14px 0 4px;border:1px solid #E3EAF7;border-radius:14px;background:linear-gradient(180deg,#FBFCFF,#F4F7FE);overflow:hidden;}
.rb-rubric-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;background:#EEF3FF;border-bottom:1px solid #E3EAF7;}
.rb-rubric-t{font-size:13.5px;font-weight:800;color:#1F3A8A;letter-spacing:.5px;}
.rb-rubric-sum{font-size:12px;color:#5A6B8C;}
.rb-rubric-sum b{color:#153FC6;font-size:15px;}
.rb-cat{display:flex;align-items:flex-start;gap:9px;padding:10px 14px 6px;font-size:13.5px;font-weight:800;color:#22325A;}
.rb-item{display:flex;align-items:flex-start;gap:9px;padding:5px 14px 5px 30px;font-size:13px;line-height:1.65;color:#3B4A6B;}
.rb-item:last-child{padding-bottom:12px;}
.rb-box{flex:0 0 auto;width:13px;height:13px;margin-top:3px;border:1.6px solid #9FB3D6;border-radius:4px;background:#fff;}
.rb-box.sm{width:11px;height:11px;border-radius:3px;margin-top:5px;border-color:#B9C7E0;}
.rb-t{flex:1;min-width:0;word-break:break-word;}
.rb-s{flex:0 0 auto;min-width:34px;text-align:right;font-size:12px;font-weight:800;color:#153FC6;}
.rb-item .rb-s{font-weight:700;color:#6B7FA3;}
.rb-item .rb-s:after{content:'分';font-size:11px;margin-left:1px;}
.q-fill-answers { margin-top:10px; background:var(--success-bg); border:1px solid var(--success); border-radius:8px; padding:12px 16px; }
.q-fill-answers li { font-family:"Consolas","Courier New",monospace; font-size:13.5px; line-height:1.7; list-style:none; }
.q-fill-answers li .ok-t { color:var(--success); font-weight:bold; margin-left:4px; }
.q-fill-answers ul { padding-left:0; margin:6px 0 0; }
/* 参考答案配图（Scratch 积木长条图拆段后）：不再限高，按原始尺寸完整显示才能看清积木 */
.fill-ans-img { max-width:100%; max-height:none; border-radius:8px; border:1px solid #ddd; box-shadow:0 2px 8px rgba(0,0,0,0.08); display:block; margin:4px 0; cursor:zoom-in; background:#fff; }
/* 答案区里的 Scratch 效果图/程序图同样收窄（2026-10-25 用户反馈再缩小）；宽扁长条例外 */
.q-fill-answers img.scratch-img { max-width:240px; }
.q-fill-answers img.scratch-img.img-wide { max-width:100%; }
.review-fill-code { background:var(--code-bg); border-radius:8px; padding:10px 14px; font-family:"Consolas","Courier New",monospace; font-size:13px; white-space:pre-wrap; line-height:1.5; margin:8px 0; border-left:3px solid var(--primary); }
.review-fill-blank { display:inline-block; min-width:80px; padding:2px 8px; border-radius:5px; border:1px solid var(--border); }
.review-fill-blank.ok { border-color:var(--success); background:var(--success-bg); color:var(--success); font-weight:bold; }
.review-fill-blank.err { border-color:var(--error); background:var(--error-bg); color:var(--error); font-weight:bold; }
.review-fill-blank.unans { background:#fafafa; color:var(--text-light); }
.type-badge.fill { background:#fa8c16; }

/* 实操题标题后按钮 */
.fill-title-btns { display:inline-flex; gap:8px; align-items:center; margin-left:auto; }
.fill-title-btns .nav-btn { font-size:13px; padding:6px 14px; }
/* 标题右侧的得分（内联，替换原操作栏那一行的得分） */
.fill-score-inline { display:inline-flex; align-items:center; gap:10px; font-weight:600; margin-left:14px; padding-left:14px; border-left:1px solid var(--border); }
.fill-score-inline > span:first-child { color:var(--text-sec); font-size:13px; }
/* 查看参考答案 - 新格式 */
.ref-alts { padding:12px 16px; }
.ref-blank-row { font-family:"Consolas","Courier New",monospace; font-size:13.5px; line-height:1.95; color:var(--text); margin:2px 0; }
.ref-blank-row .ref-main { color:#fa541c; font-weight:bold; }


/* ===== 模块导航栏（拆分版） ===== */
.modnav { position:sticky; top:0; z-index:999; background:linear-gradient(90deg,#2b5cff,#3a7bff); box-shadow:0 2px 10px rgba(0,0,0,.18); }
.modnav-inner { max-width:1080px; margin:0 auto; display:flex; align-items:center; flex-wrap:wrap; gap:4px; padding:8px 14px; }
.modnav a { color:#fff; text-decoration:none; font-size:13.5px; padding:6px 12px; border-radius:16px; transition:background .15s; }
.modnav a:hover { background:rgba(255,255,255,.18); }
.modnav a.on { background:#fff; color:#2b5cff; font-weight:bold; }
.modnav-brand { font-weight:bold; margin-right:6px; }
.modnav-tag { margin-left:auto; color:#dbe4ff; font-size:12.5px; padding-right:4px; white-space:nowrap; }

/* ===== 首页 ===== */
body.home { background:linear-gradient(160deg,#eef3ff 0%,#f7f9ff 45%,#eef7ff 100%); min-height:100vh; }
.home-wrap { max-width:980px; margin:0 auto; padding:46px 18px 30px; }
.home-head { text-align:center; margin-bottom:34px; }
.home-head h1 { font-size:34px; color:#1a2a6c; letter-spacing:2px; }
.home-head p { color:#667; margin-top:10px; font-size:15px; }
.home-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(270px,1fr)); gap:16px; }
.home-card { display:block; background:#fff; border-radius:16px; padding:22px 20px; text-decoration:none; color:#333; border:1px solid #dfe6f5; box-shadow:0 6px 18px rgba(31,56,157,.06); transition:transform .15s,box-shadow .15s; }
.home-card:hover { transform:translateY(-4px); box-shadow:0 12px 26px rgba(31,56,157,.13); }
.home-card .hc-ico { font-size:30px; }
.home-card h3 { margin:10px 0 6px; font-size:18px; color:#20315e; }
.home-card .hc-sub { font-size:13px; color:#8994ad; line-height:1.6; }
.home-card .hc-meta { margin-top:12px; font-size:12px; color:#4a6cf7; font-weight:bold; }
.home-foot { margin-top:36px; text-align:center; color:#98a2bd; font-size:12.5px; line-height:1.9; }

/* 做题时（quizScreen 可见）隐藏顶部模块导航，专注作答；返回开始/结果页时自动恢复 */
body:has(#quizScreen:not(.hidden)) .modnav { display: none; }
