/* ==========================================================================
   CodeOI GESP · 像素风设计系统
   规则：方角（0 圆角）· 2px 实描边 · 4px 硬投影 · 单一强调色（翡翠绿）· 8px 方格纸底
   ========================================================================== */
:root{
  --ink:#1B2430; --ink-2:#2C3A4B;
  --accent:#22A06B; --accent-d:#178053; --accent-l:#3BC98A; --accent-wash:#EAF7F1;
  --red:#C4544F; --amber:#C79A3A; --gold:#E0A83C; --gold-d:#9A6D18; --mid:#8FA6C4; --blue:#2F6FB5;
  --paper:#F7F3E8; --paper-2:#EFE8D6;
  --bg:#F4F6F8; --panel:#FFFFFF; --panel-2:#EDF1F4; --panel-3:#F6F8FA;
  --text-1:#1B2430; --text-2:#4C5A6B; --text-3:#7D8B9C;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --bd:2px solid var(--ink); --sh:4px 4px 0 rgba(27,36,48,.14); --sh-sm:2px 2px 0 rgba(27,36,48,.14);
}
*{box-sizing:border-box;margin:0;padding:0}
/* ★ 2026-10-13：hidden 属性必须优先于组件自己的 display（.btn 是 inline-flex，会把 hidden 覆盖掉，
   导致"已解锁还能点手动解锁、点了卡在解锁中"）。这一条修的是根因，全站生效。 */
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--text-1);font-family:var(--sans);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased;
  background-image:linear-gradient(rgba(27,36,48,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(27,36,48,.045) 1px,transparent 1px);
  background-size:8px 8px}
a{color:inherit;text-decoration:none}
svg{display:block;shape-rendering:crispEdges}
code{font-family:var(--mono);font-size:12.5px;background:var(--panel-2);border:1.5px solid rgba(27,36,48,.2);padding:1px 5px}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.hint{font-size:12.5px;color:var(--text-3);line-height:1.9}
.wrap{max-width:1120px;margin:0 auto;padding:0 36px}
.hide{display:none!important}
/* 顶栏 */
.topbar{height:56px;display:flex;align-items:center;justify-content:space-between;padding:0 36px;background:var(--panel);border-bottom:var(--bd)}
.brand{display:flex;align-items:center;gap:9px;font-weight:700;font-size:15px}
.brand .bn{color:var(--text-1);font-weight:800;letter-spacing:.01em}
.brand .bg2{color:var(--accent-d);font-weight:700;letter-spacing:.02em}
.brand .logo{width:18px;height:18px;background:var(--accent);border:2px solid var(--ink)}
/* ★ 2026-10-14：导航新增「测你的级别」后有 8 项（管理员更多），窄屏会挤出去 → 允许换行 */
.topnav{display:flex;flex-wrap:wrap;gap:10px 22px;font-size:14px;color:var(--text-2);justify-content:flex-end}
.topnav a:hover{color:var(--text-1)}
/* 滚动公告 */
.ticker{background:var(--paper);border-bottom:var(--bd);height:38px;display:flex;align-items:center;overflow:hidden}
.ticker .lead{margin:0 12px;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:#fff;background:var(--accent-bg);border:2px solid var(--ink);padding:2px 7px;z-index:2}
.ticker .win{flex:1;min-width:0;overflow:hidden;position:relative;mask-image:linear-gradient(90deg,transparent,#000 24px,#000 calc(100% - 24px),transparent)}
.ticker .track{display:flex;gap:56px;white-space:nowrap;width:max-content;will-change:transform}
/* ★ 2026-10-14 走马灯改由 JS 驱动（见 app.js ticker()）：按真实宽度决定滚动距离与时长，
   一屏放得下就只走一遍（不出现"同一句来回两遍"），超长才补一份做无缝衔接。 */
.ticker:hover .track{animation-play-state:paused}
.ticker .item{font-size:13px;color:var(--text-2);display:flex;align-items:center;gap:8px}
.ticker .item b{color:var(--text-1)}
.ticker .item i{width:8px;height:8px;background:var(--accent);border:1.5px solid var(--ink)}
/* 旧的固定 -50% 动画已删除（它依赖"内容复制两份"，导致重复显示） */
/* 主按钮与按钮 */
.btn{display:inline-flex;align-items:center;gap:8px;border:var(--bd);background:var(--panel);padding:10px 16px;font-size:13.5px;font-weight:700;cursor:pointer;box-shadow:var(--sh-sm);font-family:var(--sans);color:var(--text-1)}
.btn:hover{background:var(--panel-2)}
.btn.pri{background:var(--accent-bg);color:#fff}
.btn.pri:hover{background:var(--accent-d)}
.btn.danger{background:#FBECEB;color:var(--red)}
.btn.sm{padding:4px 10px;font-size:12px;box-shadow:none;font-weight:500}
.btn:disabled{opacity:.45;box-shadow:none;cursor:default}
.btns{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
/* 卡片 */
.card{background:var(--panel);border:var(--bd);box-shadow:var(--sh);margin-bottom:16px}
.card>.ch{padding:11px 15px;border-bottom:var(--bd);background:var(--panel-2);font-weight:700;font-size:13.5px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.card>.ch .sp{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--text-3);font-weight:400}
.card>.cb{padding:16px}
/* 权益对比表（注册页） */
.tscroll{overflow-x:auto;min-width:0}
.gtable{border:var(--bd);background:var(--panel);box-shadow:var(--sh);width:100%;border-collapse:collapse;min-width:0}
.gtable th,.gtable td{border:1.5px solid rgba(27,36,48,.16);padding:10px 12px;text-align:center;font-size:13px}
.gtable th{background:var(--panel-2);font-family:var(--mono);font-size:11.5px;color:var(--text-2);white-space:nowrap}
.gtable td.k{text-align:left;font-size:13.5px;color:var(--text-2)}
.gtable .hl{background:var(--accent-wash)}
.gtable th.hl{background:var(--accent-bg);color:#fff;border-color:var(--ink)}
.gtable th.hl .rec{display:inline-block;margin-left:6px;background:#fff;color:var(--accent-d);border:1.5px solid var(--ink);font-family:var(--sans);font-size:10.5px;padding:0 4px;vertical-align:1px}
.gtable .mem{background:#FFF8E8}
.gtable th.mem{background:#FBE6B8;color:var(--amber-tx2)}
.gtable .yes{color:var(--accent-d);font-weight:700;font-size:15px}
.gtable .no{color:#C3CCD4;font-weight:700}
.gtable .mut{color:var(--text-3);font-size:12.5px}
.gtable tr:last-child td{border-bottom:2px solid var(--ink)}
.gtable .band-k{font-family:var(--mono);font-size:11px;color:var(--text-3);text-align:left;background:var(--panel-3)}
/* 微信号复制组件（全站统一） */
.wxcopy{display:inline-flex;align-items:center;gap:8px;border:2px solid var(--ink);background:var(--paper);padding:2px 4px 2px 8px;vertical-align:middle}
.wxcopy b{font-family:var(--mono);font-size:14px;letter-spacing:.04em}
.wxcopy .cbtn{border:1.5px solid var(--ink);background:#fff;font-family:var(--sans);font-size:11.5px;padding:2px 7px;cursor:pointer}
.wxcopy .cbtn:hover{background:var(--accent-bg);color:#fff}
footer .wxcopy{border-width:1.5px;padding:1px 3px 1px 6px}
footer .wxcopy b{font-size:12.5px}
.topnav .logout{color:var(--text-2)}
.topnav .logout:hover{color:var(--red)}
/* 像素弹框 */
.modal{position:fixed;inset:0;background:rgba(20,28,38,.46);display:grid;place-items:center;z-index:80;padding:20px}
.modal[hidden]{display:none}
.modal .mbox{background:var(--panel);border:var(--bd);box-shadow:6px 6px 0 rgba(27,36,48,.3);max-width:520px;width:100%;max-height:86vh;overflow:auto}
.modal .mh{display:flex;align-items:center;gap:10px;padding:11px 15px;border-bottom:var(--bd);background:var(--panel-2);font-weight:700;font-size:14px}
.modal .mh .close{margin-left:auto;cursor:pointer;font-family:var(--mono);color:var(--text-2);padding:0 4px}
.modal .mh .close:hover{color:var(--red)}
.modal .mb{padding:16px}
.mstep{border:var(--bd);background:var(--paper);padding:12px 14px;margin-bottom:12px}
.mstep b{font-size:14px}
.mstep .btn{margin-top:8px}
.codeval{font-family:var(--mono);font-size:19px;font-weight:800;letter-spacing:.08em;background:#0F1620;color:#7FD8B0;border:var(--bd);padding:12px 14px;text-align:center;word-break:break-all;user-select:all}
/* 表单 */
label{display:block;font-size:12.5px;color:var(--text-2);margin-bottom:6px}
input:not([type=checkbox]):not([type=radio]):not([type=file]),select,textarea{width:100%;border:var(--bd);background:#fff;padding:11px 12px;font-size:14px;outline:none;font-family:var(--sans);display:block}
input.mono,textarea.mono{font-family:var(--mono);font-size:13px}
input:focus,textarea:focus,select:focus{background:#F4FBF7;box-shadow:inset 0 0 0 2px var(--accent-l)}
textarea{line-height:1.7}
.chk{display:flex;gap:10px;align-items:flex-start;font-size:13px;color:var(--text-2);line-height:1.8}
.chk input{width:16px;height:16px;margin-top:3px;accent-color:var(--accent)}
/* 表格 */
table{width:100%;border-collapse:collapse;font-size:13px;background:var(--panel)}
th,td{border-bottom:1.5px solid rgba(27,36,48,.14);padding:9px 11px;text-align:left;vertical-align:middle}
th{background:var(--panel-2);font-family:var(--mono);font-size:11.5px;color:var(--text-2)}
/* 徽标 */
.pill{font-family:var(--mono);font-size:11px;border:1.5px solid var(--ink);padding:1px 7px;background:#fff;white-space:nowrap}
.pill.ok{background:#E4F6EC;color:var(--accent-d)}
.pill.wait{background:var(--paper);color:var(--amber)}
.pill.no{background:#FBECEB;color:var(--red)}
.pill.arch{background:var(--paper-2);color:var(--text-2)}
/* 首页 */
.hero{padding:30px 0 0}
h1.big{font-size:clamp(42px,6vw,68px);line-height:1.02;letter-spacing:-.03em;font-weight:800;text-shadow:3px 3px 0 rgba(27,36,48,.1)}
.hero2{display:grid;grid-template-columns:1fr 340px;gap:44px;align-items:center}
.scene{background:var(--panel);border:var(--bd);box-shadow:var(--sh);padding:14px;max-width:340px;cursor:pointer}
/* 主视觉彩蛋：鼠标移上去 → 小人一级一级往上爬，爬过一级就解锁并点亮那一级，登顶后旗子挥动 */
.scene:hover .climber,.scene:active .climber,.scene:focus .climber{animation:climb 2.1s steps(1,end) forwards}
@keyframes climb{
  0%{transform:translate(0,0)} 12.5%{transform:translate(32px,-13px)} 25%{transform:translate(64px,-26px)}
  37.5%{transform:translate(96px,-39px)} 50%{transform:translate(128px,-52px)} 62.5%{transform:translate(160px,-65px)}
  75%{transform:translate(192px,-78px)} 87.5%{transform:translate(224px,-91px)} 100%{transform:translate(224px,-91px)}
}
.scene:hover .lk,.scene:active .lk,.scene:focus .lk,
.scene:hover .cap-3,.scene:active .cap-3,.scene:focus .cap-3,
.scene:hover .cap-4,.scene:active .cap-4,.scene:focus .cap-4,
.scene:hover .cap-5,.scene:active .cap-5,.scene:focus .cap-5,
.scene:hover .cap-6,.scene:active .cap-6,.scene:focus .cap-6,
.scene:hover .cap-7,.scene:active .cap-7,.scene:focus .cap-7{animation-duration:.1s;animation-timing-function:steps(1,start);animation-fill-mode:forwards}
.scene:hover .lk-3,.scene:active .lk-3,.scene:focus .lk-3{animation-name:unlock;animation-delay:.78s}
.scene:hover .lk-4,.scene:active .lk-4,.scene:focus .lk-4{animation-name:unlock;animation-delay:1.04s}
.scene:hover .lk-5,.scene:active .lk-5,.scene:focus .lk-5{animation-name:unlock;animation-delay:1.3s}
.scene:hover .lk-6,.scene:active .lk-6,.scene:focus .lk-6{animation-name:unlock;animation-delay:1.57s}
.scene:hover .lk-7,.scene:active .lk-7,.scene:focus .lk-7{animation-name:unlock;animation-delay:1.83s}
.scene:hover .cap-3,.scene:active .cap-3,.scene:focus .cap-3{animation-name:light;animation-delay:.78s}
.scene:hover .cap-4,.scene:active .cap-4,.scene:focus .cap-4{animation-name:light;animation-delay:1.04s}
.scene:hover .cap-5,.scene:active .cap-5,.scene:focus .cap-5{animation-name:light;animation-delay:1.3s}
.scene:hover .cap-6,.scene:active .cap-6,.scene:focus .cap-6{animation-name:light;animation-delay:1.57s}
.scene:hover .cap-7,.scene:active .cap-7,.scene:focus .cap-7{animation-name:light;animation-delay:1.83s}
@keyframes unlock{to{opacity:0}}
@keyframes light{to{fill:#3BC98A}}
.pennant{transform-box:fill-box;transform-origin:left center}
.scene:hover .pennant,.scene:active .pennant,.scene:focus .pennant{animation:wave .46s steps(2,end) 1.86s 2}
@keyframes wave{0%{transform:scaleX(1)}50%{transform:scaleX(.84)}100%{transform:scaleX(1)}}
@media (prefers-reduced-motion:reduce){
  .scene:hover .climber,.scene:active .climber,.scene:focus .climber,
  .scene:hover .lk,.scene:active .lk,.scene:focus .lk,
  .scene:hover .cap,.scene:active .cap,.scene:focus .cap,
  .scene:hover .pennant,.scene:active .pennant,.scene:focus .pennant{animation:none!important}
}
.ruler{margin-top:34px;border:var(--bd);background:var(--panel);box-shadow:var(--sh)}
.scale{display:grid;grid-template-columns:repeat(8,1fr)}
.seg{position:relative;display:flex;flex-direction:column;align-items:center;padding:15px 6px 13px;border-right:var(--bd);cursor:pointer;
  transition:transform .15s steps(3,end),box-shadow .15s steps(3,end),background-color .15s steps(3,end)}
.seg:last-child{border-right:0}
/* 悬停/键盘聚焦：格子从托盘里抬起来（阶梯式，非平滑），数字轻放大，底部压一条强调色 */
.seg:hover,.seg:focus-visible{background:var(--panel);transform:translateY(-3px);z-index:3;outline:none;
  box-shadow:0 3px 0 rgba(27,36,48,.16),inset 0 -4px 0 var(--accent)}
.seg.locked:hover,.seg.locked:focus-visible{box-shadow:0 3px 0 rgba(27,36,48,.16),inset 0 -4px 0 var(--text-3)}
.seg .num{transition:transform .15s steps(3,end),color .15s steps(2,end)}
.seg:hover .num{transform:scale(1.08)}
.seg.free:hover .num{color:var(--accent-d)}
.seg.locked:hover .num{color:var(--text-2)}
/* 锁住的级别：锁头抖两下（1px 阶梯位移），明说“要开通” */
.seg .lk{transition:transform .18s steps(2,end)}
.seg.locked:hover .lk{animation:lockjig .34s steps(2,end) 2}
@keyframes lockjig{0%{transform:translateX(0)}50%{transform:translateX(-1.5px)}100%{transform:translateX(0)}}
@media (hover:none){.seg:active{transform:translateY(-1px);box-shadow:0 2px 0 rgba(27,36,48,.16),inset 0 -4px 0 var(--accent)}}
@media (prefers-reduced-motion:reduce){
  .seg,.seg .num,.seg .lk{transition:none!important;animation:none!important}
  .seg:hover,.seg:focus-visible{transform:none;box-shadow:none}
}
.seg .num{font-family:var(--mono);font-size:24px;font-weight:700;line-height:1}
.seg.free .num{color:var(--accent-d)}
.seg.locked .num{color:var(--text-3)}
.seg .cn{font-size:12px;color:var(--text-2);margin-top:6px}
/* ★ 2026-10-16（docs/95 A1+A2）：把"免费 / 价格"画进格子，肉眼可见。
   原来 ¥499 只写在 aria-label 里（只有读屏软件听得见），首页也只写"1 级免费"（实际 1–3 级都免费）。 */
.seg .free-tag{font-family:var(--sans);font-size:11px;font-weight:700;color:var(--accent-d);margin-top:6px;
  border:1.5px solid var(--accent);background:var(--accent-wash);padding:0 6px}
.seg .price{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--text-2);margin-top:6px;white-space:nowrap}
@media(max-width:900px){.seg .free-tag,.seg .price{font-size:9.5px;padding:0 3px}}
.seg .lk{position:absolute;top:11px;right:9px;color:var(--text-3)}
.bars{width:100%;margin-top:10px;display:flex;flex-direction:column;gap:3px}
.bars span{display:block;height:6px;border:1.5px solid var(--ink);background:var(--panel-2);position:relative;overflow:hidden}
.bars span i{position:absolute;left:0;top:0;bottom:0;display:block}
.bars .o i{background:var(--accent)}
.bars .c i{background:var(--ink)}
.roles{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:34px}
.role{background:var(--panel);border:var(--bd);box-shadow:var(--sh);padding:16px}
.role.member{background:linear-gradient(180deg,#FFF8E8,#fff 42%)}
.role .rh{display:flex;align-items:center;gap:12px}
.role .nm{font-size:15px;font-weight:700}
.role .tag{font-family:var(--mono);font-size:10.5px;border:1.5px solid var(--ink);padding:0 5px;background:var(--panel-2);margin-left:auto}
.role.member .tag{background:#FBE6B8}
.role ul{list-style:none;margin-top:12px;display:flex;flex-direction:column;gap:7px}
.role li{font-size:13px;color:var(--text-2);display:flex;gap:9px;align-items:center}
.role li s{width:10px;height:10px;border:1.5px solid var(--ink);flex:0 0 auto;background:var(--panel-2)}
.role li.yes s{background:var(--accent)}
.role li.no s{background:transparent}
/* 两条轨道（客观上/编程题下）：做大做亮，避免第一次进来只看见客观题 */
.tracks{display:grid;grid-template-columns:1fr 1fr;border:var(--bd);background:var(--panel);box-shadow:var(--sh);margin-top:22px}
.track{display:flex;align-items:center;gap:16px;padding:18px 18px;cursor:pointer;border-right:var(--bd);position:relative;transition:transform .12s steps(2,end),background-color .12s steps(2,end)}
.track:last-child{border-right:0}
.track .nm{font-size:15px;font-weight:700;color:var(--text-3)}
/* 错题本级数选择：级别与题量分成两个视觉单元（避免 "1 5 道" 被读成 "15 道"） */
.track.wronglv{padding:10px 8px;gap:0;flex-direction:column;align-items:center;justify-content:center;line-height:1.25}
.track.wronglv .lvnum{font-family:var(--mono);font-size:19px;font-weight:700;color:var(--text-2)}
.track.wronglv .lvunit{font-size:11px;color:var(--text-3);margin-left:2px}
.track.wronglv .lvcount{display:block;margin-top:3px;font-family:var(--mono);font-size:11.5px;color:var(--text-3);white-space:nowrap}
.track.wronglv.on .lvnum{color:var(--accent-d)}
.track.wronglv.on .lvcount{color:var(--text-1);font-weight:700}
.track .pix{display:flex;gap:2px;flex:1}
.track .pix i{flex:1;height:12px;background:var(--panel-2);border:1.5px solid rgba(27,36,48,.2)}
.track .pix i.on{background:var(--accent);border-color:var(--ink)}
.track.on{background:var(--accent-wash);box-shadow:inset 0 5px 0 var(--accent)}
.track.on .nm{color:var(--text-1)}
.track.off{background:var(--panel-3)}
/* 大号轨道卡（级别页顶部两条阶梯） */
.track .tic{width:44px;height:44px;flex:0 0 auto;display:grid;place-items:center;background:#fff;border:var(--bd)}
.track .tmain{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.track .tmain .nm{font-size:21px;font-weight:800;letter-spacing:.02em;color:var(--text-2);line-height:1.15}
.track .tmain .tsub{font-size:12px;color:var(--text-3);font-family:var(--mono)}
.track.obj.on .tmain .nm{color:var(--accent-d)}
.track.code.on .tmain .nm{color:var(--text-1)}
.track.code.on{background:#EEF4FB;box-shadow:inset 0 5px 0 var(--blue)}
.track.code.on .tmain .nm{color:var(--blue)}
.track .here{font-family:var(--mono);font-size:10.5px;border:1.5px solid var(--ink);background:#fff;padding:1px 6px;white-space:nowrap}
.track .jump{font-family:var(--mono);font-size:12px;font-weight:700;color:#fff;background:var(--ink);padding:5px 9px;white-space:nowrap}
.track.attention:hover{transform:translateY(-2px)}
.track.attention:hover .jump{background:var(--accent-d)}
.track.attention .jump{animation:jumpnudge 2.6s ease-in-out infinite}
/* 未打开的轨道：常驻呼吸（明暗），保证第一眼就知道"还有另一条"；reduced-motion 下自动关闭 */
.track.attention{animation:trackpulse 2.6s ease-in-out infinite}
.track.attention::after{content:"";position:absolute;inset:auto 0 -2px 0;height:5px;background:var(--accent)}
@keyframes trackpulse{0%,100%{background:var(--panel-3)}50%{background:#FFF6E2}}
@keyframes jumpnudge{0%,72%,100%{transform:translateX(0)}78%{transform:translateX(3px)}84%{transform:translateX(0)}90%{transform:translateX(3px)}}
.trackhint{margin-top:10px;padding:10px 14px;border:var(--bd);background:var(--paper);box-shadow:var(--sh);font-size:13px;color:var(--text-2)}
.trackhint b{color:var(--text-1)}
@media (prefers-reduced-motion:reduce){.track.attention .jump{animation:none}.track.attention{animation:none;background:var(--panel-3)}.track.attention:hover{transform:none}}
/* 知识笔记提权卡 */
.kit{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center;margin-top:18px;padding:14px 16px;background:var(--paper);border:var(--bd);box-shadow:var(--sh);cursor:pointer}
.kit:hover{background:var(--paper-2)}
.kit .ic{width:44px;height:44px;background:#fff;border:var(--bd);display:grid;place-items:center}
.kit .tt{font-size:15px;font-weight:700}
.kit .tt .n{font-family:var(--mono);font-size:12px;color:var(--text-3);margin-left:8px;font-weight:400}
.kit .samples{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.kit .samples span{font-size:12px;color:var(--text-2);background:#fff;border:1.5px solid rgba(27,36,48,.22);padding:1px 7px}
.kit .go{font-family:var(--mono);font-size:12px;color:var(--accent-d);white-space:nowrap}
/* 视图切换 / 筛选 */
.subrow{display:flex;align-items:center;gap:14px;margin:20px 0 12px;flex-wrap:wrap}
.tabs{display:inline-flex;border:var(--bd);background:var(--panel)}
.tab{padding:7px 14px;font-size:12.5px;color:var(--text-2);cursor:pointer;border-right:var(--bd)}
.tab:last-child{border-right:0}
.tab.on{background:var(--ink);color:#fff;font-weight:700}
.chips{display:flex;gap:6px;margin-left:auto}
.chip{font-size:12px;color:var(--text-2);border:var(--bd);padding:3px 10px;cursor:pointer;background:#fff;white-space:nowrap}
.chip.on{background:var(--ink);color:#fff}
.legend{display:flex;gap:16px;margin:0 0 10px;font-size:11.5px;color:var(--text-3)}
.legend s{display:inline-block;width:10px;height:10px;border:1.5px solid var(--ink);margin-right:5px;text-decoration:none;vertical-align:-1px}
/* 列表行通用 */
.olist,.slist{border:var(--bd);background:var(--panel);box-shadow:var(--sh)}
/* ★ 2026-10-13：客观题行加左侧内边距（原来色条从 0 开始、紧贴容器边框），并把首列加宽到 18px，
   避免"色条压到题目名"；与分类头的 padding 对齐，看着更整齐。 */
.orow,.srow{display:grid;grid-template-columns:18px 1fr 120px 86px 20px;align-items:center;gap:12px;padding:11px 14px 11px 8px;border-bottom:1.5px solid rgba(27,36,48,.14);font-size:13.5px;background:var(--panel)}
.olist>:last-child,.slist>:last-child{border-bottom:0}
.orow:hover,.srow:hover{background:var(--panel-3)}
/* ★ 色条宽度必须锁在网格列内：全局 .st 带 12/14px 内边距，若 box-sizing 不是 border-box 就会涨宽溢出、压住题目名 */
.orow .st,.srow .st{height:24px;background:var(--panel-2);box-sizing:border-box;width:100%;padding:0}
.orow.done .st{background:var(--accent)}
.srow.done .st{background:var(--accent)}
.orow .nm,.srow .nm{font-family:var(--mono);font-size:13px;font-weight:700}
.pix{display:flex;gap:2px}
.pix i{flex:1;height:11px;background:var(--panel-2);border:1.5px solid rgba(27,36,48,.18)}
.pix i.on{background:var(--accent);border-color:var(--ink)}
.srow .pix i.on{background:var(--ink)}
.orow .v,.srow .v{font-family:var(--mono);font-size:12px;color:var(--text-3);text-align:right}
.orow.done .v,.srow.done .v{color:var(--accent-d);font-weight:700}
.orow .go,.srow .go{text-align:right;color:var(--text-3);font-family:var(--mono)}
/* 分类卡 */
.cat{border:var(--bd);background:var(--panel);margin-bottom:10px;box-shadow:var(--sh)}
.chead{display:grid;grid-template-columns:26px 1fr 130px;align-items:center;gap:12px;padding:11px 14px;background:var(--panel-2);border-bottom:var(--bd)}
.chead .ord{font-family:var(--mono);font-size:13px;font-weight:700;color:var(--text-2)}
.chead .cn{font-size:14px;font-weight:700;display:flex;align-items:center;gap:9px;min-width:0}
.chead .tier{font-family:var(--mono);font-size:10px;border:1.5px solid var(--ink);padding:0 5px;background:#fff}
.segbar{display:flex;gap:3px}
.segbar i{flex:1;height:10px;background:#fff;border:1.5px solid rgba(27,36,48,.25);position:relative;overflow:hidden}
.segbar i s{position:absolute;inset:0;width:0;display:block}
.segbar .tpl s{background:var(--accent)}.segbar .var s{background:var(--mid)}.segbar .rel s{background:var(--ink)}
.prow{display:grid;grid-template-columns:6px 52px 1fr 58px 20px;align-items:center;gap:12px;padding:8px 14px 8px 0;font-size:13.5px;border-bottom:1.5px solid rgba(27,36,48,.14)}
.plist>:last-child{border-bottom:0}
.prow:hover{background:var(--panel-3)}
.prow .st{height:22px;border:1.5px solid var(--ink);box-sizing:border-box;width:100%;padding:0}
.prow.tpl .st{background:var(--accent)}.prow.var .st{background:var(--mid)}.prow.rel .st{background:var(--ink)}
/* 题目类型标签（模板/变式/真题）：★ 2026-10-13 修 —— 原来是"灰字 + 52px 窄列"，中文两字溢出色块边界、
   字体颜色与底几乎同色，看不清。现在：给每一类固定的底色 + 深色文字 + 边框，并且列宽足够容纳两字。 */
/* 题目类型标签：★ 2026-10-13 二次修 —— 用户反馈"太丑且冗余、注意度盖过了题目"，
   所以回到"一个框 + 一个文字"的轻量样式：浅底、细描边、字色只比正文深一点，不抢题目名的视线。 */
.prow .tp{font-family:var(--mono);font-size:10.5px;font-weight:400;line-height:1.1;text-align:center;
  padding:3px 0;border:1px solid rgba(27,36,48,.28);color:var(--text-2);background:var(--panel-2);white-space:nowrap}
.prow.tpl .tp{color:#1F6B45;border-color:rgba(46,125,79,.45);background:#EDF7F1}
.prow.var .tp{color:var(--amber-tx);border-color:rgba(176,138,30,.45);background:#FCF6E4}
.prow.rel .tp{color:var(--text-1);border-color:rgba(27,36,48,.28);background:var(--panel-3)}
.prow .id{font-family:var(--mono);font-size:11.5px;color:var(--text-3);margin-right:8px}
.prow .v{font-family:var(--mono);font-size:11.5px;color:var(--text-3);text-align:right}
.prow.ac .v{color:var(--accent-d);font-weight:700}
.prow .go{text-align:right;color:var(--text-3);font-family:var(--mono)}
/* ★ 2026-10-13：未开通级别的题目行「只给壳」——不给题号/标题/链接，整行弱化并显示锁。
   这些行不是 <a>（不能点），用 span 语义更准，但沿用 .prow 的栅格保持对齐。 */
.prow.locked{cursor:default;color:var(--text-3)}
.prow.locked:hover{background:transparent}
.prow.locked .st{background:var(--panel-3);border-style:dashed}
.prow.locked .tp{color:var(--text-3);border-color:rgba(27,36,48,.18);background:var(--panel-3)}
.prow.locked .v{font-size:13px}
/* 分页 */
.pager{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:16px;font-family:var(--mono);font-size:12.5px;color:var(--text-2)}
.pager a,.pager span.pg{border:var(--bd);background:var(--panel);padding:6px 14px;box-shadow:var(--sh-sm);cursor:pointer}
.pager .cur{font-weight:700;color:var(--text-1);padding:6px 4px}
.pager .off{opacity:.45;box-shadow:none;cursor:default}
/* 客观题答题 */
.qtop{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:18px 0 0;border:var(--bd);background:var(--panel);box-shadow:var(--sh);padding:10px 14px;font-family:var(--mono);font-size:12.5px;color:var(--text-2)}
.qnav{display:grid;grid-template-columns:repeat(25,1fr);gap:4px;border:var(--bd);background:var(--panel);padding:8px;box-shadow:var(--sh);margin-top:12px}
.qnav a{aspect-ratio:1;border:1.5px solid rgba(27,36,48,.35);background:var(--panel-2);font-family:var(--mono);font-size:11px;color:var(--text-2);display:grid;place-items:center}
.qnav a.ok{background:var(--accent-bg);border-color:var(--ink);color:#fff}
.qnav a.bad{background:var(--red-bg);border-color:var(--ink);color:#fff}
.qnav a.cur{outline:3px solid var(--ink);outline-offset:1px;font-weight:700;background:#fff}
.qstem{padding:20px 22px;font-size:15.5px;line-height:1.95}
.opts{display:flex;flex-direction:column;gap:10px;margin-top:16px}
/* ★ 2026-10-13：原来的 align-items:center 会把「选项里带代码块」的选项压成垂直居中、
   高度被裁掉（实测 8 行代码只看见 2 行）。改成 start，并让正文列能撑满整行。 */
.opt{display:grid;grid-template-columns:34px minmax(0,1fr);align-items:start;gap:14px;border:var(--bd);background:var(--panel);padding:12px 16px;cursor:pointer;font-size:14.5px;box-shadow:var(--sh-sm);text-align:left;font-family:var(--sans)}
.opt:hover{background:var(--panel-3)}
/* ★ 2026-10-13：必须限定为**直接子元素** `.opt > .k`（选项字母框）。
   原来写 `.opt .k` 会连代码块里的关键字 span 一起命中（highlight() 也用 class="k"），
   于是 `cout`/`cin`/`endl` 每个关键字被撑成 34×34、display:grid，代码整段错行重叠、颜色发灰。 */
.opt>.k{font-family:var(--mono);font-weight:700;width:34px;height:34px;display:grid;place-items:center;border:var(--bd);background:var(--panel-2)}
.opt.sel{background:#EEF6FB}
.opt.ok{background:#E4F6EC}.opt.ok>.k{background:var(--accent-bg);color:#fff}
.opt.bad{background:#FBECEB}.opt.bad>.k{background:var(--red-bg);color:#fff}
.opt.dim{opacity:.55}
/* ★ 2026-10-13：带代码块的选项要「紧凑、高度跟内容走」——
   代码块本身有行数，整块高度就该由它决定；再把内边距收一收，
   并给超长代码一个上限（超过就内部纵向滚动），避免一道题撑出好几屏。 */
.opt.has-code{padding:10px 14px;gap:10px}
/* ★ `.md` 是"整块正文卡片"的样式（26/30 内边距 + 边框 + 投影），挂进选项就成了**双层卡片**：
   每个选项凭空高 70 多像素、还难看。选项里只借 markdown 的排版，容器样式必须清掉。 */
.opt .md{padding:0;border:0;background:none;box-shadow:none}
.opt .md p{margin:0;font-size:14.5px;line-height:1.7;color:inherit}
.opt.has-code .md .codewrap{margin:2px 0 0}
.opt.has-code .md .codewrap pre.code{padding:9px 12px}
.opt.has-code .md .codewrap .gutter{padding:9px 7px 9px 10px}
/* 超长代码：封顶 + 内部纵向滚动（题面侧不封顶，保证完整可读） */
.opt.has-code .md .codewrap{max-height:280px;overflow-y:auto;overflow-x:hidden}
.opt.has-code .md .codewrap pre.code{overflow-x:auto}
/* 行高统一到 1.6：题干与选项里的代码块观感一致 */
.md .codewrap pre.code,.md .codewrap .gutter{line-height:1.6}
/* 判定 */
.verdict{margin-top:16px;border:var(--bd);box-shadow:var(--sh)}
.verdict .vh{display:flex;align-items:center;gap:14px;padding:13px 16px;background:var(--red-bg);color:#fff}
.verdict.ac .vh,.verdict.right .vh{background:var(--accent)}
/* 锁定态（今天已重做）：不是错误，用中性色，别让学生以为做错了 */
.verdict.locked .vh{background:var(--panel-2);color:var(--text-1);border-bottom:var(--bd)}
.verdict.locked .vh .v{font-size:19px}
.verdict .vh .v{font-family:var(--mono);font-size:24px;font-weight:700;letter-spacing:.06em}
.verdict .vh .m{font-size:13px;opacity:.92}
.verdict .vb{background:var(--panel);padding:14px 16px}
/* 编程题样例块：每组样例一张卡 + 输入/输出各自一键复制 */
.sampleblk{margin-top:14px;border:var(--bd);background:var(--panel);box-shadow:var(--sh-sm)}
.sampleblk .sbh{padding:6px 12px;border-bottom:var(--bd);background:var(--panel-2);font-family:var(--mono);font-size:11.5px;color:var(--text-2)}
.sampleblk .diff{margin-top:0!important}
.sampleblk .col .h{display:flex;align-items:center;gap:8px}
.sampleblk .cpbtn{margin-left:8px;padding:2px 8px;font-size:11.5px}
.sampleblk .sbh{display:flex;align-items:center;gap:0}
.sampleblk .sbh .cpbtn:first-of-type{margin-left:auto}
/* 首页两个入口条（级别评测 / GESP 问答） */
.hero-links{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:16px 0 4px}
.hero-links .hl{border:var(--bd);background:var(--panel);box-shadow:var(--sh-sm);padding:13px 15px;display:flex;align-items:center;justify-content:center;min-height:52px;text-align:center}
.hero-links .hl:hover{background:var(--accent-wash)}
.hero-links .hl b{font-size:15.5px}
.hero-note{margin-top:10px;text-align:center;font-size:12.5px;color:var(--text-3);font-family:var(--mono)}
.hero-links .hl span{font-size:12.5px;color:var(--text-3)}
@media(max-width:900px){.hero-links{grid-template-columns:1fr}}
/* ===== 宠物大舞台（2026-10-13）：整个大框演示动画 + 语言气泡 + 天数 ===== */
.bigstage{position:relative;margin-top:16px;border:var(--bd);background:var(--paper);box-shadow:var(--sh);overflow:hidden;min-height:250px}
.bigstage .stagebar{display:flex;align-items:center;gap:14px;padding:12px 16px;border-bottom:var(--bd);background:var(--panel-2);flex-wrap:wrap}
.bigstage .agebig{display:inline-flex;align-items:baseline;gap:4px;border:2px solid var(--ink);background:#fff;padding:2px 10px;box-shadow:var(--sh-sm)}
.bigstage .agebig b{font-family:var(--mono);font-size:30px;line-height:1.1;color:var(--accent-d)}
.bigstage .agebig i{font-style:normal;font-size:13px;color:var(--text-2)}
.bigstage .agenote{font-size:14px;font-weight:700}
.bigstage .stagehint{margin-left:auto;font-family:var(--mono);font-size:11.5px;color:var(--text-3)}
.bigstage .stagefloor{position:absolute;left:0;right:0;bottom:0;height:26px;background:
  repeating-linear-gradient(90deg,rgba(27,36,48,.10) 0 8px,transparent 8px 16px),var(--panel-3);border-top:1.5px solid rgba(27,36,48,.18)}
.bigstage .stagepet{position:absolute;left:50%;bottom:22px;margin-left:-64px;animation:none}
.bigstage .stagepet.st-idle{animation:stagewalk 9s steps(18,end) infinite alternate}
/* ★ 2026-10-14：原来 .45s×8 = 只有 3.6 秒，喂完一眨眼就结束，用户反馈"看着是静止的"。
   现在：咀嚼动作**循环播放**（喂食后状态保持 20 秒，见 app.js），
   并加一点"上下点头"位移，让咀嚼更明显。 */
.bigstage .stagepet.st-eat{bottom:16px;animation:stagebite .5s steps(2,end) infinite}
.bigstage .stagepet.st-eat svg{transform-origin:50% 100%;animation:chew .5s ease-in-out infinite}
.bigstage .stagepet.st-sleep{animation:none;transform:translateY(10px) scaleY(.92)}
.bigstage .stagepet.st-travel{animation:stagetravel 15s linear infinite}
@keyframes stagewalk{from{left:12%}to{left:78%}}
@keyframes stagebite{0%{transform:translateY(0) scale(1,1)}50%{transform:translateY(3px) scale(1.1,.9)}100%{transform:translateY(0) scale(1,1)}}
@keyframes chew{0%{transform:scaleY(1)}50%{transform:scaleY(.86)}100%{transform:scaleY(1)}}
@keyframes stagetravel{0%{left:12%;opacity:1}45%{left:82%;opacity:1}55%{left:82%;opacity:0}56%{left:12%;opacity:0}70%{left:12%;opacity:1}100%{left:12%;opacity:1}}
.bigstage .speech{position:absolute;left:50%;top:64px;transform:translateX(-50%) scale(.9);opacity:0;
  border:2px solid var(--ink);background:#fff;box-shadow:var(--sh-sm);padding:8px 14px;font-size:14px;font-weight:700;max-width:70%;transition:opacity .3s,transform .3s}
/* 舞台固定景物：太阳/云/树/灌木/花（像素画，位置固定不动） */
/* 太阳放在右下地平线附近 —— 原来在右上会压住"陪伴天数"那行文字（用户反馈） */
.bigstage .stagesun{position:absolute;right:14%;bottom:26px;opacity:.95}
.bigstage .stagetree{position:absolute;right:8%;bottom:24px}
.bigstage .stagebush{position:absolute;bottom:24px}
.bigstage .stagebush.b1{left:8%}
.bigstage .stagebush.b2{left:26%}
.bigstage .stageflower{position:absolute;bottom:24px}
.bigstage .stageflower.f1{left:40%}
.bigstage .stageflower.f2{right:30%}
.bigstage .speech.show{opacity:1;transform:translateX(-50%) scale(1)}
.bigstage .speech.st-eat{background:#FCF6E4}
.bigstage .speech.st-sleep{background:#EAF1FA;font-weight:400}
.bigstage .speech.st-travel{background:#EDF7F1}
@media (prefers-reduced-motion:reduce){
  .bigstage .stagepet,.bigstage .speech{animation:none!important;transition:none!important}
}
/* 外观商店 */
.shoprow{display:grid;grid-template-columns:repeat(auto-fill,minmax(122px,1fr));gap:10px}
.shopitem{border:1.5px solid rgba(27,36,48,.22);background:#fff;padding:8px 6px;display:flex;flex-direction:column;align-items:center;gap:3px}
.shopitem.on{border-color:var(--accent-d);background:var(--accent-wash)}
.shopitem .si{display:block;min-height:34px}
.shopitem .sn{font-size:12.5px;font-weight:700}
.shopitem .sc{font-family:var(--mono);font-size:11px;color:var(--text-3)}
.shopitem .sbtn.on{font-family:var(--mono);font-size:11px;color:var(--accent-d);font-weight:700}
/* ===== 宠物状态动画（2026-10-13）：走动 / 吃饭 / 睡觉 / 旅行 ===== */
.petstage{position:relative;overflow:hidden;min-width:120px}
.petwalker{animation:petwalk 3.2s steps(6,end) infinite alternate}
@keyframes petwalk{from{transform:translateX(-14px)}to{transform:translateX(14px)}}
.petstage.st-sleep .petwalker{animation:none;transform:translateY(3px)}
.petstage.st-eat .petwalker{animation:petbite .5s steps(2,end) 4}
@keyframes petbite{0%{transform:scale(1,1)}50%{transform:scale(1.08,.92)}100%{transform:scale(1,1)}}
.petstage.st-travel .petwalker{animation:petgo 6s linear infinite}
@keyframes petgo{0%{transform:translateX(-16px) rotate(0)}50%{transform:translateX(16px) rotate(-4deg)}100%{transform:translateX(-16px) rotate(0)}}
.petstage .zzz{position:absolute;right:6px;top:4px;font-family:var(--mono);font-size:11px;color:var(--text-3);animation:zzz 2.4s steps(3,end) infinite}
@keyframes zzz{0%{opacity:0;transform:translateY(4px)}50%{opacity:1}100%{opacity:0;transform:translateY(-6px)}}
.petstage .crumbs{position:absolute;bottom:6px;left:50%;transform:translateX(-50%);font-family:var(--mono);color:var(--amber-tx2);animation:zzz 1.6s steps(2,end) infinite}
.petstage .postcard{position:absolute;left:4px;bottom:4px;font-family:var(--mono);font-size:10.5px;color:var(--accent-d);border:1px solid rgba(46,125,79,.45);background:#EDF7F1;padding:1px 5px}
@media (prefers-reduced-motion:reduce){.petwalker,.petstage .zzz,.petstage .crumbs{animation:none!important}}
/* 森林区 */
.forestgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:10px}
.forestpet{border:1.5px solid rgba(27,36,48,.22);background:var(--paper);padding:8px 6px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:2px}
.forestpet .fp{display:block;opacity:.85}
.forestpet .fn{font-size:12px;font-weight:700}
.forestpet .fd{font-family:var(--mono);font-size:10px;color:var(--text-3)}
/* 金币动画：从判定面板上浮 + 淡出 */
.coinpop{position:relative;margin-top:10px;display:flex;align-items:center;gap:10px;border:var(--bd);
  background:#FFF9E8;box-shadow:var(--sh-sm);padding:10px 14px;animation:coinin .5s steps(4,end) 1}
.coinpop .c1{font-size:20px;animation:coinspin 1.1s steps(4,end) 3}
.coinpop .c2{font-family:var(--mono);font-weight:700;color:var(--amber-tx);font-size:15px}
.coinpop .c3{font-size:12px;color:var(--text-3)}
.coinpop.out{opacity:0;transform:translateY(-8px);transition:opacity .6s,transform .6s}
@keyframes coinin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes coinspin{0%{transform:rotateY(0)}50%{transform:rotateY(180deg)}100%{transform:rotateY(360deg)}}
@media (prefers-reduced-motion:reduce){.coinpop,.coinpop .c1{animation:none!important}}
/* ===== 级别评测 / 学习报告 / 宠物 ===== */
.assgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.asscard{display:grid;grid-template-columns:56px 1fr auto;align-items:center;gap:12px;border:var(--bd);background:var(--panel);box-shadow:var(--sh-sm);padding:12px 14px}
.asscard:hover{background:var(--panel-3)}
.asscard .al{font-family:var(--mono);font-size:13px;font-weight:700;border:1.5px solid var(--ink);background:var(--panel-2);text-align:center;padding:3px 0}
.asscard .at{font-weight:700;font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.asscard .av{font-family:var(--mono);font-size:11.5px;color:var(--text-3)}
.asscard.ac{border-color:var(--accent-d);background:var(--accent-wash)}
.asscard.ac .av{color:var(--accent-d);font-weight:700}
.asscard.done .av{color:var(--red)}
.petbox{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap}
.petface{border:var(--bd);background:#fff;padding:10px;box-shadow:var(--sh-sm)}
.petgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.petcard{border:var(--bd);background:#fff;box-shadow:var(--sh-sm);padding:12px;display:flex;flex-direction:column;align-items:center;gap:5px}
.petcard .pn{font-weight:700;font-size:14px}
.petcard .pd{font-size:12px;color:var(--text-3);text-align:center;min-height:34px}
.petcard .pc{font-family:var(--mono);font-size:12px;color:var(--accent-d);font-weight:700}
@media(max-width:900px){.assgrid{grid-template-columns:1fr}}
/* ===== GESP 问答页（SEO）：与像素风统一，但排版更克制 ===== */
.seo-hero{padding:6px 0 4px}
.seo-title{font-size:44px;text-shadow:3px 3px 0 rgba(27,36,48,.12)}
.seo-sub{font-size:14px;color:var(--text-2);margin-top:6px}
.seo-sec{display:flex;align-items:center;gap:14px;margin:26px 0 12px}
.seo-sec .tag{font-family:var(--mono);font-size:11px;letter-spacing:.16em;color:#fff;background:var(--ink);border:var(--bd);padding:3px 9px}
.seo-sec .ln{flex:1;height:2px;background:var(--ink);opacity:.18}
.qa{border:var(--bd);background:var(--panel);box-shadow:var(--sh-sm);margin-bottom:10px}
.qa[open]{box-shadow:var(--sh)}
.qa>summary{display:flex;align-items:flex-start;gap:12px;padding:13px 16px;cursor:pointer;list-style:none;font-size:15px;font-weight:700;line-height:1.5}
.qa>summary::-webkit-details-marker{display:none}
.qa>summary:hover{background:var(--panel-3)}
.qa .qno{font-family:var(--mono);font-size:11px;color:var(--text-3);border:1.5px solid var(--ink);padding:1px 6px;flex:0 0 auto;margin-top:2px;background:var(--panel-2)}
.qa .qt{flex:1;min-width:0}
.qa .qi{font-family:var(--mono);color:var(--accent-d);flex:0 0 auto;font-size:17px;line-height:1.2}
.qa[open] .qi{transform:rotate(45deg)}
.qa .qa-body{border-top:var(--bd);padding:14px 16px;background:var(--paper)}
.qa .qa-body p{margin:0 0 9px}
.qa .qa-body p:last-child{margin-bottom:0}
.qa .qa-body ul{margin:6px 0 9px 18px}
.seo-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.seo-card{border:var(--bd);background:var(--panel);box-shadow:var(--sh-sm);padding:13px 15px;display:flex;flex-direction:column;gap:4px}
.seo-card:hover{background:var(--accent-wash)}
.seo-card .t{font-weight:700;font-size:14px}
.seo-card .d{font-size:12.5px;color:var(--text-3);line-height:1.7}
@media(max-width:900px){.seo-title{font-size:32px}.seo-cards{grid-template-columns:1fr}}
/* 数据范围 / 提示：显示在所有样例框下面 */
/* 题解面板标题栏：刷新按钮 + 状态 */
.sol .sh .solbtns{display:inline-flex;align-items:center;gap:10px}
.sol .sh .solbtns .btn{padding:2px 9px;font-size:11.5px;box-shadow:none}
.noteblks{margin-top:14px;display:flex;flex-direction:column;gap:10px}
.noteblk{border:var(--bd);background:var(--paper);box-shadow:var(--sh-sm)}
.noteblk .nh{padding:6px 12px;border-bottom:var(--bd);background:var(--panel-2);font-weight:700;font-size:12.5px;font-family:var(--mono)}
.noteblk .nb{padding:10px 14px}
.noteblk .nb.md{border:0;box-shadow:none;padding:10px 14px}
.stat{display:flex;gap:22px;font-family:var(--mono);font-size:12.5px;color:var(--text-2);flex-wrap:wrap}
.stat b{color:var(--text-1)}
.diff{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:12px}
.diff .col{border:var(--bd);background:var(--panel-3)}
.diff .col .h{padding:5px 10px;border-bottom:1.5px solid var(--ink);font-family:var(--mono);font-size:11px;background:var(--panel-2);color:var(--text-3)}
.diff .col pre{margin:0;padding:9px 11px;font-family:var(--mono);font-size:12.5px;white-space:pre-wrap;word-break:break-all;max-height:220px;overflow:auto}
.diff .col.bad .h{background:#FBECEB;color:var(--red)}
.msg{margin-top:12px;font-size:13.5px;color:var(--text-2);background:var(--paper);border:var(--bd);padding:10px 12px}
/* 代码编辑器与判题面板 */
.editor{border:var(--bd);background:#0F1620;box-shadow:var(--sh);margin-top:14px}
.editor .eh{display:flex;align-items:center;gap:10px;padding:9px 14px;background:#161F2B;border-bottom:var(--bd);font-family:var(--mono);font-size:11.5px;color:#93A2B5}
.editor .eh .dot{width:9px;height:9px;border:1.5px solid #0F1620;background:var(--accent-l)}
.editor .eh .sp{margin-left:auto}
/* ★ 代码框行号（2026-10-13）：编辑器与提交记录里的代码都带行号，
   这样编译错误提示的 "main.cpp:12:5" 能直接对应到第 12 行。
   行号与代码用同一 font-size / line-height / padding-top，才能逐行对齐。 */
.codewrap{display:flex;align-items:stretch;background:#0F1620}
.codewrap .gutter{margin:0;flex:0 0 auto;text-align:right;padding:14px 8px 14px 12px;color:#8A9AAC;
  font-family:var(--mono);font-size:13px;line-height:1.75;background:#0C121A;border-right:1.5px solid #1D2836;
  user-select:none;white-space:pre;overflow:hidden}
.codewrap pre:not(.gutter){margin:0;flex:1;min-width:0;padding:14px;color:#D7E0EC;font-family:var(--mono);
  font-size:13px;line-height:1.75;white-space:pre-wrap;word-break:break-word;overflow-x:auto}
.editor textarea{width:100%;height:300px;background:#0F1620;color:#D7E0EC;border:0;outline:none;resize:vertical;padding:14px;font-family:var(--mono);font-size:13px;line-height:1.75;display:block}
/* 提交记录 */
.hist{border:var(--bd);background:var(--panel);box-shadow:var(--sh);margin-top:14px}
.hist .hh{padding:11px 16px;border-bottom:var(--bd);background:var(--panel-2);font-family:var(--mono);font-size:12px;color:var(--text-2)}
.hrow{display:grid;grid-template-columns:150px 84px 82px 84px 1fr 56px;align-items:center;gap:12px;padding:10px 16px;font-family:var(--mono);font-size:12.5px;border-bottom:1.5px solid rgba(27,36,48,.14);cursor:pointer}
.hrow:last-child{border-bottom:0}
.hrow:hover{background:var(--panel-3)}
.hrow .v{font-weight:700}
.hrow .ac{color:var(--accent-d)}.hrow .wa{color:var(--red)}.hrow .tle{color:var(--amber-tx)}
.hrow .peek{border:1.5px solid var(--ink);background:var(--panel-2);padding:2px 8px;font-size:11.5px;text-align:center}
.hitem.open .peek{background:var(--ink);color:#fff}
.hitem .code{display:none;background:#0F1620;border-bottom:var(--bd);padding:12px 14px}
.hitem.open .code{display:block}
.hitem .code .note{color:var(--text-3);font-family:var(--mono);font-size:11px;display:flex;gap:10px;align-items:center;margin-bottom:8px}
.hitem .code .codewrap{border:1.5px solid #1D2836}
.hitem .code .codewrap .gutter{font-size:12.5px;line-height:1.7;padding:12px 8px 12px 10px}
.hitem .code .codewrap pre:not(.gutter){font-size:12.5px;line-height:1.7;padding:12px}
.hitem .code .cp{margin-left:auto;border:1.5px solid #3A4757;background:#161F2B;color:#D7E0EC;font-family:var(--mono);font-size:11px;padding:3px 9px;cursor:pointer}
/* 题解 */
.sol{margin-top:14px;border:var(--bd);background:var(--panel);box-shadow:var(--sh)}
.sol .sh{padding:11px 16px;border-bottom:var(--bd);background:var(--panel-2);font-family:var(--mono);font-size:12px;color:var(--text-2);display:flex;gap:10px;align-items:center}
.sol .sh .lk{margin-left:auto;color:var(--amber-tx);font-weight:700}
.sol .sh .ok{margin-left:auto;color:var(--accent-d);font-weight:700}
.sol .sb{padding:16px}
.lockbox{background:var(--paper);border:var(--bd);padding:14px}
.lockbox .t{font-weight:700;font-size:14px}
.lockbox ul{margin:8px 0 0 20px}
.lockbox li{font-size:13px;color:var(--text-2);line-height:1.9}
.cd{font-family:var(--mono);font-size:22px;font-weight:700;margin-top:8px}
/* 错题本就地再答 */
.wrongitem{border:var(--bd);background:var(--panel);box-shadow:var(--sh);margin-bottom:14px}
.wrongitem.right{border-color:var(--accent-d)}
.wrongitem.wrong{border-color:var(--red)}
.wrongitem .qh{display:flex;gap:10px;align-items:center;padding:10px 14px;border-bottom:var(--bd);background:var(--panel-2);font-family:var(--mono);font-size:11.5px;color:var(--text-3)}
.wrongitem .qh .no{font-size:12.5px;font-weight:700;color:var(--text-1)}
.wrongitem .qh .st{margin-left:auto;font-weight:700}
.wrongitem .qb{padding:16px 18px 18px}
/* 当天已重做：锁定态（防止背答案后反复重做） */
.wrongitem.locked{border-color:var(--text-3);background:repeating-linear-gradient(135deg,#FBFBFC,#FBFBFC 10px,#F5F7F9 10px,#F5F7F9 20px)}
.wrongitem.locked .qh .st{color:var(--text-2)}
.wrongitem.locked .opt{cursor:default;opacity:.62}
.wrongitem.locked .opt:hover{background:var(--panel)}
.wrongitem .opt:disabled{cursor:default}
/* 知识笔记两栏 */
.doc2{display:grid;grid-template-columns:290px minmax(0,1fr);gap:26px;align-items:start;margin-top:18px}
.toc{background:var(--panel);border:var(--bd);box-shadow:var(--sh);max-height:680px;overflow:auto;position:sticky;top:20px}
.toc .th{padding:11px 14px;border-bottom:var(--bd);background:var(--paper);font-weight:700;font-size:13.5px}
.toc a{display:flex;gap:10px;padding:10px 14px;font-size:13.5px;border-bottom:1.5px solid rgba(27,36,48,.1);color:var(--text-2)}
.toc a:hover{background:var(--panel-3)}
.toc a.on{background:var(--accent-wash);color:var(--text-1);font-weight:700;box-shadow:inset 4px 0 0 var(--accent)}
.toc a .ord{font-family:var(--mono);font-size:12px;color:var(--text-3)}
/* Markdown 正文（通用渲染） */
.md{background:var(--panel);border:var(--bd);box-shadow:var(--sh);padding:26px 30px 34px}
.md h2{font-size:19px;margin:26px 0 10px;padding-left:11px;border-left:6px solid var(--accent)}
.md h2:first-child,.md h3:first-child{margin-top:0}
.md h3{font-size:15.5px;margin:20px 0 8px}
.md h4{font-size:14px;margin:16px 0 6px}
.md p{font-size:14.5px;line-height:1.95;color:var(--text-2);margin-top:10px}
.md strong{color:var(--text-1)}
.md ul,.md ol{margin:10px 0 0 22px}
.md li{font-size:14.5px;line-height:1.9;color:var(--text-2);margin-top:4px}
.md blockquote{margin:14px 0;background:var(--paper);border:var(--bd);padding:11px 14px}
.md blockquote p{margin:0;font-size:14px}
.md hr{border:0;border-top:var(--bd);margin:22px 0}
.md table{width:100%;border-collapse:collapse;margin:14px 0;font-size:13.5px}
.md th,.md td{border:2px solid var(--ink);padding:8px 10px;text-align:left}
.md th{background:var(--panel-2);font-size:12.5px}
.md img{max-width:100%;border:var(--bd);margin-top:8px}
.md pre.code{margin:0;background:#0F1620;color:#D7E0EC;border:0;padding:13px 15px;font-family:var(--mono);font-size:13px;line-height:1.75;overflow-x:auto;white-space:pre}
.md pre.code code{background:none;border:0;padding:0;color:inherit;font-size:13px}
/* ★ 2026-10-13：markdown 里的代码块也带行号栏（与编辑器/提交记录同一套 .codewrap 结构）。
   行号与代码必须同 font-size / line-height / padding-top 才能逐行对齐。 */
.md .codewrap{margin:14px 0;border:var(--bd);border-radius:2px;overflow:hidden}
.md .codewrap .gutter{font-size:13px;line-height:1.75;padding:13px 8px 13px 12px}
.md .codewrap pre.code{overflow-x:auto}
/* ★ 选项按钮里的代码块比题干窄：略小字号 + 可横向滚动 + **显式给回深色文字**，
   否则代码正文会继承 .opt 的正文色（浅底深字），落在深色代码底上就看不清。 */
/* ★ 选项按钮里的代码块比题干窄，这里要**显式压回 nowrap**：
   全局 `.codewrap pre:not(.gutter)` 是 white-space:pre-wrap + word-break:break-word，
   套到选项里每行代码都会被再折一次（实测 8 逻辑行折成约 20 个视觉行，行号与正文错位），
   所以这里改成 pre + 横向滚动；窄屏（≤720px）再退回换行——手机上横滑比折行好读。 */
.opt .md .codewrap{margin:6px 0 2px;max-width:100%}
.opt .md .codewrap pre.code{color:#D7E0EC;font-size:12.5px;line-height:1.6;padding:9px 12px;
  white-space:pre;word-break:normal;overflow-wrap:normal}
.opt .md .codewrap .gutter{font-size:12.5px;line-height:1.6;padding:9px 7px 9px 10px}
.opt .md .codewrap pre.code code{color:inherit;font-size:12.5px;white-space:inherit;word-break:inherit}
@media (max-width:720px){
  .opt .md .codewrap pre.code{white-space:pre-wrap;word-break:break-word}
}
.md pre.code .k{color:#7FD8B0}.md pre.code .s{color:#E8B34A}.md pre.code .n{color:#8FA6C4}.md pre.code .c{color:#8A9AAC}
.katex{font-size:1.02em}
.mathbad{color:var(--red);font-family:var(--mono);font-size:12.5px}
/* 空状态 / 归档 / 编辑器文件列表 */
.empty{background:var(--panel);border:var(--bd);box-shadow:var(--sh);padding:44px 24px;text-align:center}
.empty .ic{width:56px;height:56px;margin:0 auto 14px;border:var(--bd);background:var(--accent-wash);display:grid;place-items:center}
.empty h3{font-size:16px}
.empty p{margin-top:8px;font-size:13.5px;color:var(--text-2)}
.files{border:var(--bd);background:var(--panel-3);margin-top:6px}
.frow{display:grid;grid-template-columns:1fr 110px 90px;gap:10px;align-items:center;padding:8px 11px;border-bottom:1.5px solid rgba(27,36,48,.12);font-family:var(--mono);font-size:12.5px}
.frow:last-child{border-bottom:0}
.frow.miss{background:#FBECEB}
.frow .sz{color:var(--text-3);text-align:right}
/* 开通步骤（说明块：不可点、无按钮观感） */
.s4{display:grid;grid-template-columns:repeat(4,1fr)}
.s4row{display:flex;gap:11px;padding:14px 16px;border-right:1.5px dashed rgba(27,36,48,.2);background:var(--panel-3)}
.s4row:last-child{border-right:0}
.s4row>b{width:23px;height:23px;flex:0 0 auto;border:1.5px solid var(--ink);background:#fff;display:grid;place-items:center;font-family:var(--mono);font-size:12px}
.s4row .t{font-size:14px;font-weight:700}
.s4row .d{font-size:12.5px;color:var(--text-2);margin-top:4px;line-height:1.7}
/* 开通四步（更简洁、字更大） */
.steps4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:18px}
.step4{border:var(--bd);background:var(--panel);box-shadow:var(--sh);padding:16px 16px 18px;position:relative}
.step4 .n{font-family:var(--mono);font-size:26px;font-weight:800;line-height:1;color:var(--accent-d)}
.step4 .t{font-size:16.5px;font-weight:800;margin-top:8px}
.step4 .d{font-size:13px;color:var(--text-2);margin-top:6px;line-height:1.8}
.step4.warn{border-color:var(--red)}
.step4.warn .n{color:var(--red)}
/* 首页 RECENT · 最近在做（登录后） */
.recent{margin-top:26px}
.recent .rh{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.recent .rh span{font-family:var(--mono);font-size:11px;letter-spacing:.24em;color:var(--text-3);white-space:nowrap}
.recent .rh i{flex:1;height:2px;background:var(--ink);opacity:.14}
.rgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.ritem{display:flex;flex-direction:column;gap:7px;border:var(--bd);background:var(--panel);box-shadow:var(--sh);padding:11px 13px;
  transition:transform .15s steps(3,end),box-shadow .15s steps(3,end),background-color .15s steps(3,end)}
.ritem:hover,.ritem:focus-visible{transform:translateY(-3px);box-shadow:0 3px 0 rgba(27,36,48,.16),inset 0 -4px 0 var(--accent);outline:none;background:var(--panel)}
.ritem .rt{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:700;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ritem .rk{font-family:var(--mono);font-size:10px;font-weight:400;border:1.5px solid var(--ink);padding:0 4px;flex:0 0 auto}
.ritem .rk.obj{background:var(--accent-wash);color:var(--accent-d)}
.ritem .rk.code{background:var(--ink);color:#fff}
.ritem .rs2{display:flex;align-items:center;gap:10px;font-size:12px}
.ritem .rs2 b{font-family:var(--mono);font-weight:700}
.ritem .rs2 b.ok{color:var(--accent-d)}
.ritem .rs2 b.bad{color:var(--red)}
.ritem .rs2 b.wait{color:var(--amber-tx)}
.ritem .rd{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--text-3)}
.ritem .rsub{font-size:12px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rempty{display:flex;align-items:center;gap:12px;border:var(--bd);background:var(--paper);box-shadow:var(--sh);padding:12px 15px;font-size:13.5px;color:var(--text-2)}
.rempty .btn{margin-left:0}
.rempty .btn:first-of-type{margin-left:auto}
@media (max-width:900px){.rgrid{grid-template-columns:1fr}.rempty{flex-wrap:wrap}}
/* 首页 HOW IT WORKS（图标卡） */
.feats{margin-top:42px}
.feats .fh{display:flex;align-items:center;gap:14px;margin-bottom:16px}
.feats .fh span{font-family:var(--mono);font-size:11px;letter-spacing:.26em;color:var(--text-3);white-space:nowrap}
.feats .fh i{flex:1;height:2px;background:var(--ink);opacity:.14}
.fgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.fcard{border:var(--bd);background:var(--panel);box-shadow:var(--sh);padding:18px 18px 20px}
.fcard .ic{width:40px;height:40px;border:var(--bd);background:#fff;display:grid;place-items:center}
.fcard .t{font-size:16.5px;font-weight:800;margin-top:14px;letter-spacing:-.01em}
.fcard .d{font-size:13px;color:var(--text-2);margin-top:8px;line-height:1.85}
.fcard.wide{grid-column:span 3;display:grid;grid-template-columns:40px 1fr;gap:18px;align-items:center;background:linear-gradient(180deg,#FFF8E8,#fff 62%);padding:18px 20px}
.fcard.wide .t{margin-top:0;font-size:17px}
.fcard.wide .d{margin-top:6px}
/* 统计块 */
.stat4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.st{border:var(--bd);background:var(--panel);box-shadow:var(--sh);padding:12px 14px}
.st .k{font-family:var(--mono);font-size:11px;color:var(--text-3)}
.st .v{font-family:var(--mono);font-size:22px;font-weight:700;margin-top:4px}
.st .s{font-family:var(--mono);font-size:11.5px;color:var(--text-3);margin-top:2px}
/* 后台标签 */
.tabsbar{display:flex;padding:0 36px;background:var(--panel);border-bottom:var(--bd);overflow-x:auto}
.tabsbar a{padding:12px 18px;font-size:13.5px;color:var(--text-2);border-bottom:4px solid transparent;white-space:nowrap}
.tabsbar a.on{color:var(--text-1);font-weight:700;border-bottom-color:var(--accent)}
.grid2{display:grid;grid-template-columns:1.25fr 1fr;gap:20px;align-items:start}
.grid2>*{min-width:0}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
/* 页脚 */
footer{margin-top:34px;border-top:var(--bd);background:var(--panel);padding:16px 0 26px;font-size:12.5px;color:var(--text-3)}
footer .in{max-width:1120px;margin:0 auto;padding:0 36px;font-family:var(--mono);display:flex;gap:16px;flex-wrap:wrap;align-items:center}
/* ★ 2026-10-16（docs/95 C5 + D2微信）：页脚常驻「价格口径 + 微信号」——
   家长不必去翻会员页就能看到"1–3 级免费 / 4–8 级 ¥499 级年 / 7 天未使用可退"以及微信。
   价格那句用正色（比版权更该被看见）；微信复用全局 .wxcopy（一键复制，防手打错）。 */
footer .fcopy{color:var(--text-2);font-family:var(--sans);font-weight:700}
footer .fw{display:inline-flex;align-items:center;gap:7px;font-family:var(--sans);color:var(--text-2)}
footer .ficp{margin-left:auto}
/* ★ 2026-10-17 补（运维评估 O12）：页脚的法律入口（服务说明/隐私政策/用户协议）。
   手机端要能换行、点击区域别太小（家长就是在手机上找这些的）。 */
footer .flinks{display:inline-flex;gap:14px;flex-wrap:wrap;font-family:var(--sans)}
footer .flinks a{color:var(--text-2);text-decoration:underline;text-underline-offset:3px;padding:2px 0}
footer .ficp a{color:inherit;text-decoration:none}
footer .ficp a:hover{text-decoration:underline}
/* 提示条 */
.banner{display:flex;gap:10px;align-items:center;margin-top:16px;padding:11px 14px;border:var(--bd);background:var(--paper);box-shadow:var(--sh);font-size:13px}
.banner.warn{background:#FDF3E3;color:var(--amber-tx)}
.banner.ok{background:var(--accent-wash)}
.flash{margin:14px 0 0;padding:10px 14px;border:var(--bd);background:var(--paper);font-size:13.5px}
.flash.ok{background:var(--accent-wash)}
.flash.bad{background:#FBECEB;color:var(--red)}
/* 新标签页提示（全站一次，可关闭，localStorage 记住） */
.ntip{position:fixed;left:50%;transform:translateX(-50%);bottom:16px;z-index:70;display:flex;align-items:center;gap:12px;
  max-width:min(680px,calc(100vw - 24px));padding:10px 12px;border:var(--bd);background:var(--paper);box-shadow:6px 6px 0 rgba(27,36,48,.22);font-size:13px}
.ntip[hidden]{display:none}
.ntip .ic{flex:0 0 auto}
.ntip .tx{color:var(--text-2)}
.ntip .tx b{color:var(--text-1)}
.ntip .cbtn{margin-left:auto;flex:0 0 auto;border:1.5px solid var(--ink);background:#fff;font-family:var(--sans);font-size:12px;padding:4px 10px;cursor:pointer}
.ntip .cbtn:hover{background:var(--accent-bg);color:#fff}
@media(max-width:900px){.ntip{bottom:8px;font-size:12.5px}}
/* ★ 2026-10-17（产品经理评估：手机端这条提示会变成"盖住正文的大方块"）：
   实测 390×844 下它是 195×264px（占屏 15.6%），正好压在题目/选项上，而且会挡住点击。
   窄屏改成"贴底的一整条"：横向排布、字号更小、按钮固定不换行；内容再多也不会长高成方块。 */
@media(max-width:560px){
  .ntip{left:0;right:0;transform:none;bottom:0;max-width:none;padding:8px 10px;gap:8px;font-size:12px;
    align-items:center;box-shadow:0 -3px 0 rgba(27,36,48,.12)}
  .ntip .ic{display:none}
  .ntip .tx{line-height:1.35;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .ntip .cbtn{padding:6px 10px;white-space:nowrap}
}
/* 窄屏 */
@media(max-width:900px){
  .wrap,.topbar,.tabsbar,footer .in{padding-left:16px;padding-right:16px}
  /* ★ 2026-10-14：窄屏导航会换行，固定 56px 高会把第二行裁掉 → 允许高度自适应 */
  .topbar{height:auto;min-height:56px;flex-wrap:wrap;row-gap:4px;padding-top:8px;padding-bottom:8px}
  .topnav{width:100%;justify-content:flex-start;gap:8px 16px}
  h1.big{font-size:36px;text-shadow:2px 2px 0 rgba(27,36,48,.1)}
  .roles,.grid3{grid-template-columns:1fr}
  .grid2,.doc2{grid-template-columns:1fr}
  .toc{position:static;max-height:260px}
  .tracks{grid-template-columns:1fr}
  .track{border-right:0;border-bottom:var(--bd)}
  .seg{padding:16px 2px 10px}
  .seg .num{font-size:16px}
  .seg .cn{display:none}
  .seg .lk{top:2px;right:3px}
  .seg .lk svg{width:11px;height:11px}
  .seg .bars{margin-top:6px;gap:2px}
  .scale{grid-template-columns:repeat(8,1fr)}
  .qnav{grid-template-columns:repeat(9,1fr)}
  .diff{grid-template-columns:1fr}
  .stat4{grid-template-columns:repeat(2,1fr)}
  .s4{grid-template-columns:1fr}
  .s4row{border-right:0;border-bottom:1.5px dashed rgba(27,36,48,.2)}
  .steps4{grid-template-columns:1fr 1fr}
  .hero2{grid-template-columns:1fr;gap:22px}
  .gtable{min-width:460px}
  .gtable th,.gtable td{padding:8px 9px;font-size:12.5px}
  .fgrid{grid-template-columns:1fr;gap:14px}
  .fcard.wide{grid-column:span 1;grid-template-columns:40px 1fr}
  .scene{max-width:100%}
  .hrow{grid-template-columns:1fr auto;gap:4px 10px}
  .hrow .t,.hrow .mem{display:none}
  .md{padding:18px 16px 24px}
  .kit{grid-template-columns:38px 1fr;gap:12px}
  .kit .samples{display:none}
  /* ★ 2026-10-17 修（手机端实测截图）：这里原来只有 2 列，而 .chead 在编程题/场次视图里是
     **3 个子元素**（.ord / .cn / .actext）——第三列被挤到第二行、落进 22px 那一列，
     于是「3 道题 已AC0道」被竖排成一个字一行（手机端截图里非常明显）。
     改成 3 列：序号 | 标题 | 进度文字（auto 宽度，不挤压标题）。 */
  .chead{grid-template-columns:22px minmax(0,1fr) auto}
  .chead .segbar{display:none}
  .orow,.srow{grid-template-columns:6px 1fr auto;gap:4px 10px;padding:10px 12px 10px 0}
  .orow .pix,.srow .pix{grid-column:2}
  .orow .v,.srow .v{grid-column:2;text-align:left}
  .orow .go,.srow .go{grid-row:1;grid-column:3}
  .prow{grid-template-columns:5px 46px 1fr 20px;gap:8px}
  .prow .v{grid-column:3;text-align:left}
  .prow .go{grid-row:1;grid-column:4}
}

/* ★ 2026-10-14 管理员右上角待办提醒（铃铛 + 数量角标 + 浮层） */
.bellwrap{position:relative;display:inline-block}
.bell{position:relative;cursor:pointer;list-style:none;padding:0 6px;font-size:16px;text-decoration:none}
.bell::-webkit-details-marker{display:none}
.bell .bcount{position:absolute;top:-6px;right:-4px;background:#C0392B;color:#fff;font-size:10px;font-weight:700;
  border-radius:9px;padding:1px 5px;font-family:var(--mono);line-height:1.4}
.bpanel{position:absolute;right:0;top:130%;z-index:50;min-width:280px;background:var(--panel);
  border:1.5px solid var(--ink);box-shadow:4px 4px 0 rgba(27,36,48,.18);padding:0}
.bpanel .bh{padding:8px 12px;border-bottom:1.5px solid rgba(27,36,48,.14);font-weight:700;font-size:13px}
.bpanel .bitem{display:block;padding:10px 12px;border-bottom:1px solid rgba(27,36,48,.08);text-decoration:none;color:var(--text-1)}
.bpanel .bitem:hover{background:var(--panel-3)}
.bpanel .bitem b{display:block;font-size:13px;color:var(--accent-d)}
.bpanel .bitem span{display:block;font-size:12px;color:var(--text-3);margin-top:3px;line-height:1.5}
.bell-closed{color:#C0392B;font-weight:700}

/* ★ 2026-10-14 宠物「昨天的日记」（活动记录列表 + 心情语句） */
.petdiary{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1.5px solid rgba(27,36,48,.14);
  background:var(--panel-2);margin-bottom:8px}
.petdiary .pdi{font-size:20px;line-height:1.2;flex:0 0 auto}
.petdiary .pdt{font-size:14px;line-height:1.75;flex:1 1 auto}
.petdiary.good{border-left:5px solid var(--accent)}
.petdiary.meh{border-left:5px solid #C9A227;background:#FDF9EF}
