*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Helvetica Neue",sans-serif;background:#f7f7f7;color:#333;max-width:640px;margin:0 auto;min-height:100vh}
button{font-family:inherit}
/* 顶栏 */
/* 高度固定 48px（含 3px 蓝线），logo 页与计数页完全一致 */
.topbar{display:flex;justify-content:space-between;align-items:center;background:#fff;height:48px;padding:0 16px;border-bottom:3px solid #4285f4;position:sticky;top:0;z-index:10}
.topbar .cnt{font-size:15px}
.top-logo{height:40px;display:block;object-fit:contain;margin-left:-4px}
.who{font-size:14px;color:#999;margin-right:10px}
.submit-link{font-size:15px;color:#5b7ef0;cursor:pointer}
.content{padding:16px;padding-bottom:40px}
/* 题目列表 */
.page-h{font-size:18px;margin-bottom:14px}
.q-list{display:flex;flex-direction:column;gap:10px}
.back-row{margin-top:20px;text-align:right}
.back-link{font-size:14px;font-weight:500;color:#4285f4;cursor:pointer}
.type-cnt{font-size:12px;color:#999;margin-top:4px}
/* 题型卡片：与带题数时等高（68px），文字垂直居中 */
.type-card{min-height:68px}
.updating-tip{text-align:center;font-size:13px;color:#a8b0bb;margin-top:28px}
.q-item{background:#fff;border-radius:10px;padding:14px 16px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.q-item-title{font-size:15px;font-weight:600}
.q-item .go{color:#4285f4;font-size:14px}
/* 答题 */
.q-no{font-size:17px;font-weight:700;margin-bottom:12px}
.q-title{font-size:15px;margin-bottom:12px;color:#222}
.sec-label{font-size:16px;font-weight:700;margin:14px 0 8px}
textarea.ans{width:100%;min-height:150px;border:1px solid #e3e3e3;border-radius:4px;padding:12px;font-size:15px;font-family:inherit;resize:vertical;line-height:1.7}
textarea.ans:focus{outline:none;border-color:#4285f4}
.meta-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px}
.timer{font-size:15px;color:#666;font-weight:600;white-space:nowrap}
.timer-tip{font-size:12px;color:#999}
.btn-primary{background:#4285f4;color:#fff;border:0;border-radius:8px;padding:10px 18px;font-size:14px;cursor:pointer}
.btn-plain{background:#e2f0fc;color:#4a8ac2;border:0;border-radius:8px;padding:10px 18px;font-size:14px;cursor:pointer}
/* 结果 */
.score-card{background:#fff;padding:16px;border-radius:4px}
.score-row{display:flex;align-items:baseline;justify-content:space-between}
.score-main{font-size:20px;font-weight:700}
.match-rate{font-size:14px;color:#999}
.metric-row{display:flex;gap:12px;margin:12px 0 4px}
.metric{flex:1;background:#f7f8fa;border-radius:6px;padding:12px;text-align:center}
.metric-n{font-size:26px;font-weight:700;color:#2b7de9}
.metric-l{font-size:12px;color:#888;margin-top:4px;line-height:1.4}
.divider{height:1px;background:#f0f0f0;margin:14px 0}
.ans-label{font-size:14px;color:#999;margin-bottom:8px}
.legend{display:flex;gap:14px;font-size:12px;color:#999;margin-bottom:10px;flex-wrap:wrap}
.diff-text,.std-text{font-size:15px;line-height:2;word-break:break-all;color:#333;white-space:pre-wrap}
mark.extra{color:#e64340;text-decoration:line-through}
mark.missing{color:#e64340;text-decoration:underline}
mark.wrong{background:#fdd9d7;color:#e64340;border-radius:2px;padding:0 1px}
mark.correct-tip{color:#1aad19}
/* toast */
.toast{position:fixed;left:50%;bottom:60px;transform:translateX(-50%);background:rgba(0,0,0,.75);color:#fff;font-size:13px;padding:9px 16px;border-radius:8px;z-index:200;display:none}
/* 登录 */
.login-wrap{max-width:420px;margin:60px auto;padding:24px;text-align:center}
.login-h{font-size:24px;margin-bottom:8px}
.login-sub{color:#666;margin-bottom:24px}
.qr-box{display:flex;flex-direction:column;align-items:center;gap:12px}
.qr-box img{border:1px solid #eee;border-radius:8px}
.qr-tip{font-size:13px;color:#999}
.login-foot{margin-top:24px;font-size:12px;color:#aaa}
.scan-form{display:flex;flex-direction:column;gap:12px;max-width:300px;margin:0 auto}
.scan-form input{border:1px solid #e0e0e0;border-radius:8px;padding:12px;font-size:15px}

/* 底部图片轮播栏：宽度与顶栏蓝线一致，高度随图片比例自适应（电脑/手机均完整显示不裁切），
   无左右/底部边距；实际高度由 student.js 同步到 CSS 变量 --notice-h，供内容区让位使用 */
#noticeBar{position:fixed;left:0;right:0;bottom:0;margin:0 auto;max-width:640px;z-index:60;overflow:hidden;background:#fff}
.n-slides{position:relative;width:100%;display:grid;touch-action:none}
.n-slide{grid-area:1/1;display:block;width:100%;height:auto;opacity:0;transition:opacity .6s ease;cursor:pointer;pointer-events:none;touch-action:none;-webkit-user-drag:none;user-select:none}
.n-slide.active{opacity:1;pointer-events:auto}
.n-dots{position:absolute;left:0;right:0;bottom:10px;display:flex;justify-content:center;gap:8px;pointer-events:none}
.n-dot{width:26px;height:4px;border-radius:2px;background:rgba(255,255,255,.45)}
.n-dot.active{background:#fff}
body.has-notice .content{padding-bottom:calc(var(--notice-h,136px) + 16px)}
