/* ==========================================================================
   一起呼吸鸭 · 登录后「侧栏工作台」壳层（v2.52 / 2026-10-27）
   --------------------------------------------------------------------------
   作用域：只在 #appView 内部生效。游客门厅（loginView）、gate 遮罩、
           各独立页（cards/case/sleep/...）完全不受影响。
   配色：全部取自本站原生色板（core.css / page-index.css / gate.css 实际值）
         #0f2c38  墨黑青 = 侧栏底（--ink，正文同色，最有品牌识别度）
         #0b6b74  中深青 = 品牌按钮 / 深色卡（专题页 hero 渐变起点）
         #a5f0fa  亮青   = 深底强调（专题页深色区文字色）
         #34d399  亮绿   = 数据与进度（gate.css）
         #eaf9fc  深底浅字 = .btn.ghost 文字色
         #a8cfd8  深底次要字（同族推导，仅用于深底第二层文字）
         #d9edf2  深底正文（同族推导，11.5px 小字需 ≥4.5:1）
   规则：间距只用 4 的倍数；圆角 8/12/16；动效只动 transform / opacity。
   ========================================================================== */

#appView{--rt-rail-w:264px;--rt-ease:cubic-bezier(.22,1,.36,1)}

/* ---------------------------------------------------------------- 侧栏壳 */
.rt-rail{
  position:fixed;left:0;top:0;bottom:0;width:var(--rt-rail-w);z-index:70;
  display:flex;flex-direction:column;
  background:#0f2c38;color:#eaf9fc;
  border-right:1px solid rgba(255,255,255,.06);
  transform:translateX(0);
}
/* 极细网格：科技感来自结构而非色块，向下淡出 */
.rt-rail::before{
  content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;
  background-image:linear-gradient(rgba(255,255,255,.028) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(255,255,255,.028) 1px,transparent 1px);
  background-size:32px 32px;
  -webkit-mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.35) 40%,transparent 78%);
  mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.35) 40%,transparent 78%);
}
.rt-rail-in{position:relative;display:flex;flex-direction:column;height:100%;min-height:0}

/* 品牌 */
.rt-brand{display:flex;align-items:center;gap:12px;padding:20px 20px 0;flex:none}
.rt-brand-av{
  width:36px;height:36px;flex:none;border-radius:12px;overflow:hidden;
  border:1px solid rgba(255,255,255,.16);background:#fff;
  box-shadow:0 0 0 3px rgba(14,116,144,.12);
}
.rt-brand-av img{width:100%;height:100%;object-fit:cover;object-position:50% 11%;display:block}
.rt-brand-t{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.rt-brand-t b{font-size:15px;font-weight:600;letter-spacing:.2px;white-space:nowrap;color:#eaf9fc}
.rt-brand-t i{font-size:9.5px;font-style:normal;color:#a8cfd8;letter-spacing:1.4px;margin-top:2px;white-space:nowrap}

/* 呼吸波形：整条侧栏的「心跳」，所有呼吸感动效共用 4s 周期 */
.rt-wave{position:relative;height:44px;margin:14px 20px 0;overflow:hidden;flex:none}
.rt-wave svg{display:block;width:100%;height:100%}
.rt-wave .w-base{fill:none;stroke:rgba(165,240,250,.16);stroke-width:1.4;stroke-linejoin:round}
.rt-wave .w-live{
  fill:none;stroke:#a5f0fa;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:34 260;animation:rtWaveflow 4s linear infinite;
  filter:drop-shadow(0 0 4px rgba(165,240,250,.55));
}
@keyframes rtWaveflow{from{stroke-dashoffset:294}to{stroke-dashoffset:0}}
.rt-wave-cap{
  position:absolute;right:0;top:-2px;font-size:9px;letter-spacing:1.1px;
  color:rgba(165,240,250,.8);font-family:ui-monospace,"SF Mono",Consolas,monospace;
}

/* ---------------------------------------------------------------- 导航 */
.rt-nav{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:14px 12px 8px;scrollbar-width:thin}
.rt-nav::-webkit-scrollbar{width:4px}
.rt-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);border-radius:2px}
.rt-grp{margin-bottom:2px}
.rt-grp-h{
  display:flex;align-items:center;gap:6px;width:100%;height:28px;padding:0 8px;
  font-size:10px;letter-spacing:1.5px;color:rgba(168,207,216,.85);
  font-weight:400;text-align:left;border:0;background:none;cursor:pointer;
  font-family:inherit;transition:color .3s var(--rt-ease);
}
.rt-grp-h:hover{color:rgba(234,249,252,.9)}
.rt-grp-h .chev{margin-left:auto;flex:none;transition:transform .4s var(--rt-ease)}
.rt-grp[data-open="0"] .rt-grp-h .chev{transform:rotate(-90deg)}
.rt-grp-body{display:grid;grid-template-rows:1fr;transition:grid-template-rows .42s var(--rt-ease)}
.rt-grp[data-open="0"] .rt-grp-body{grid-template-rows:0fr}
.rt-grp-body>div{overflow:hidden;min-height:0}

.rt-nav-i{
  position:relative;display:flex;align-items:center;gap:10px;
  height:36px;padding:0 10px 0 12px;border-radius:8px;
  font-size:13.5px;color:rgba(234,249,252,.86);cursor:pointer;
  transition:background .3s var(--rt-ease),color .3s var(--rt-ease),transform .3s var(--rt-ease);
}
.rt-nav-i .ic{flex:none;width:17px;height:17px;opacity:.78;transition:opacity .3s var(--rt-ease),transform .3s var(--rt-ease)}
.rt-nav-i .ic svg{display:block;width:17px;height:17px}
.rt-nav-i .lb{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rt-nav-i .cnt{
  flex:none;font-family:ui-monospace,"SF Mono",Consolas,monospace;font-size:10.5px;
  padding:0 5px;height:17px;line-height:17px;border-radius:5px;
  background:rgba(253,230,138,.16);color:#fde68a;font-variant-numeric:tabular-nums;
}
.rt-nav-i:hover{background:rgba(255,255,255,.06);color:#fff}
.rt-nav-i:hover .ic{opacity:.95;transform:translateX(1px)}
.rt-nav-i:active{transform:scale(.985)}
.rt-nav-i.on{background:rgba(165,240,250,.12);color:#fff}
.rt-nav-i.on .ic{opacity:1;color:#a5f0fa}
/* 激活竖条：4 秒一吸一呼的呼吸灯（吸 = 变长变亮，呼 = 收回） */
.rt-nav-i.on::before{
  content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:2px;
  background:#a5f0fa;box-shadow:0 0 10px rgba(52,211,153,.75);
  transform-origin:center;animation:rtBreathe 6s var(--rt-ease) infinite;
}
@keyframes rtBreathe{
  0%,100%{transform:scaleY(.55);opacity:.65}
  40%{transform:scaleY(1);opacity:1}
  70%{transform:scaleY(.9);opacity:.9}
}
.rt-nav-i:focus-visible{outline:2px solid #a5f0fa;outline-offset:-2px}

/* -------------------------------------------------- 侧栏底部常驻学习状态 */
.rt-rail-foot{
  position:relative;flex:none;padding:12px 16px 16px;
  border-top:1px solid rgba(255,255,255,.07);background:#0f2c38;
}
/* 导航比可视区高，底边用一层渐变淡出，暗示「还能往下滚」 */
.rt-rail-foot::before{
  content:"";position:absolute;left:0;right:0;top:-24px;height:24px;pointer-events:none;
  background:linear-gradient(180deg,rgba(15,44,56,0),#0f2c38);
}
.rt-status{
  border-radius:12px;padding:12px;
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1);
}
.rt-status-top{display:flex;align-items:center;gap:11px}
.rt-ring{flex:none;position:relative;width:52px;height:52px}
.rt-ring svg{display:block;transform:rotate(-90deg)}
.rt-ring .rbg{fill:none;stroke:rgba(255,255,255,.1);stroke-width:4}
.rt-ring .rfg{
  fill:none;stroke:#34d399;stroke-width:4;stroke-linecap:round;
  transition:stroke-dashoffset 1.2s var(--rt-ease);
  filter:drop-shadow(0 0 5px rgba(165,240,250,.55));
}
.rt-ring .rv{
  position:absolute;left:0;top:0;right:0;bottom:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  font-family:ui-monospace,"SF Mono",Consolas,monospace;
  font-size:17px;font-weight:600;line-height:1;color:#fff;letter-spacing:-.3px;
}
.rt-ring .rv small{font-size:8.5px;font-weight:400;color:rgba(168,207,216,.9);margin-top:3px;letter-spacing:.4px}
.rt-status-t{min-width:0;flex:1}
.rt-status-t b{display:block;font-size:12.5px;font-weight:600;white-space:nowrap;letter-spacing:.1px;color:#eaf9fc}
.rt-status-t span{display:block;font-size:10px;color:#a8cfd8;margin-top:3px;white-space:nowrap;font-variant-numeric:tabular-nums}

.rt-mini{display:flex;flex-direction:column;gap:6px;margin-top:11px}
.rt-mb{display:flex;align-items:center;gap:8px;font-size:10.5px;color:#a8cfd8}
.rt-mb>span:first-child{width:34px;flex:none}
.rt-mb .track{flex:1;height:3px;border-radius:2px;background:rgba(255,255,255,.1);overflow:hidden}
.rt-mb .track i{
  display:block;height:100%;width:100%;border-radius:2px;
  transform-origin:left;transform:scaleX(0);transition:transform 1s var(--rt-ease);
}
.rt-mb b{
  font-family:ui-monospace,"SF Mono",Consolas,monospace;
  font-size:10px;color:rgba(234,249,252,.9);font-weight:500;
}

/* 用户行 */
.rt-uchip{display:flex;align-items:center;gap:9px;margin-top:10px;padding:7px 8px;border-radius:8px;transition:background .3s var(--rt-ease)}
.rt-uchip:hover{background:rgba(255,255,255,.06)}
.rt-uchip .av{width:26px;height:26px;border-radius:8px;object-fit:cover;flex:none;border:1px solid rgba(255,255,255,.14);display:block}
.rt-uchip .nm{flex:1;min-width:0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#eaf9fc}
.rt-uchip .nm i{display:block;font-style:normal;font-size:9.5px;color:#a8cfd8;margin-top:1px}
.rt-uchip .acts{flex:none;display:flex;align-items:center;gap:2px}
.rt-uchip .acts button{
  font-size:10.5px;color:#a8cfd8;padding:3px 5px;border-radius:6px;
  border:0;background:none;cursor:pointer;font-family:inherit;white-space:nowrap;
  transition:color .3s,background .3s;
}
.rt-uchip .acts button:hover{color:#a5f0fa;background:rgba(165,240,250,.12)}
.rt-uchip .acts button.danger:hover{color:#fca5a5;background:rgba(220,38,38,.14)}

/* ---------------------------------------------------------------- 内容区 */
.rt-shell{margin-left:var(--rt-rail-w);min-height:100vh}
/* 顶栏在壳内：白底通栏，左侧不再被侧栏遮住。
   原来的 #tabs 是给顶栏下拉导航用的，导航搬进侧栏后它必须让位——
   留着会让顶栏多出一整行（桌面 116px→56px，手机 152px→60px）。 */
.rt-shell .topbar{padding-bottom:10px}
.rt-shell .tabs{display:none!important}

/* 汉堡：只在窄屏出现 */
.rt-burger{
  display:none;flex:none;width:34px;height:34px;border-radius:8px;
  align-items:center;justify-content:center;color:#3a545f;
  border:0;background:none;cursor:pointer;padding:0;
  transition:background .3s;
}
.rt-burger:hover{background:rgba(15,44,56,.06)}
.rt-burger svg{display:block;width:18px;height:18px}

/* 抽屉遮罩 */
.rt-mask{
  position:fixed;left:0;top:0;right:0;bottom:0;z-index:69;
  background:rgba(11,44,52,.5);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);
  opacity:0;pointer-events:none;transition:opacity .4s var(--rt-ease);
}
.rt-mask.on{opacity:1;pointer-events:auto}

/* ---------------------------------------------------------------- 响应式 */
@media(max-width:1023px){
  .rt-rail{
    transform:translateX(-100%);
    transition:transform .46s var(--rt-ease);
    box-shadow:0 14px 40px rgba(15,44,56,.3);
  }
  body.rt-drawer .rt-rail{transform:none}
  body.rt-drawer{overflow:hidden}
  .rt-shell{margin-left:0}
  .rt-burger{display:flex}
  /* 窄屏顶栏让位：改密 / 退出都收进侧栏，顶栏只留会员与开通入口 */
  .rt-shell .userbox #whoami{display:none}
  .rt-shell .userbox .btn.ghost{display:none}
}
@media(min-width:1024px){
  /* 桌面端：名字与会员徽标由侧栏底部常驻承担，顶栏不再重复一遍 */
  .rt-shell .userbox #whoami,.rt-shell .userbox #cardBadge{display:none}
}
/* 顶栏头像 chip（2026-10-31 顶栏去重）：点进「我的」，改密/退出的唯一入口在侧栏用户条与「我的」页 */
.rt-shell .userbox .rt-me{display:inline-flex;align-items:center;gap:6px;padding:3px 9px 3px 4px;border-radius:999px;cursor:pointer;text-decoration:none;color:inherit;line-height:1.2}
.rt-shell .userbox .rt-me:hover{background:rgba(14,116,144,.09)}
.rt-shell .userbox .rt-me:focus-visible{outline:2px solid var(--cy);outline-offset:2px}
.rt-shell .userbox .rt-me img{border-radius:50%;object-fit:cover;flex:none}
@media(max-width:640px){
  /* 手机顶栏压成一行：汉堡 + 头像 + 会员状态 + 开通入口。
     站名文字在这里让位——浏览器标签页与侧栏顶部都有，顶栏再占一行太贵。 */
  .rt-shell .topbar{flex-wrap:nowrap;padding:8px 10px;gap:8px}
  .rt-shell .brand-lines{display:none}
  .rt-shell .brandbar{gap:0;flex:none}   /* 不设 flex:none 会被 userbox 挤到 25px，头像变扁 */
  .rt-shell .userbox{gap:6px;font-size:12px;flex-wrap:nowrap}
  .rt-shell .userbox .rt-open-btn{padding:0 10px;font-size:12px}
  .rt-brand-t b{font-size:14px}
}
@media(prefers-reduced-motion:reduce){
  .rt-nav-i.on::before,.rt-wave .w-live{animation:none!important}
  .rt-rail,.rt-grp-body,.rt-ring .rfg,.rt-mb .track i{transition-duration:.01ms!important}
}

/* ================================================================
   内容区第二期（v2.53）：宽屏利用率
   侧栏把 264px 从顶栏挪到了左边，1440 以上屏幕原来两侧各空 300px。
   这里只放宽"数据型"页面（home/stats/dash）的上限，正文型页面
   （做题/组卷/闪题/笔记）保持 1040 —— 长行文字读起来会累。
   首页在 ≥1400 时改两栏：短卡并排，宽卡通栏。
   ================================================================ */
.rt-shell #main.m-wide{max-width:clamp(1040px,calc(100vw - 300px),1300px)}   /* 只有数据型页面放宽，正文页保持 1040 */

@media(min-width:1400px){
  .rt-shell #main.m-home{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px;align-items:stretch;   /* 同排卡片等高：底边对齐比参差更像仪表盘，空白留在卡内而不是页面背景 */
  }
  .rt-shell #main.m-home > *{margin:0;min-width:0}          /* 栅格内靠 gap 控制间距，卡片自带的外边距要清零 */
  .rt-shell #main.m-home > .rt-span2,
  .rt-shell #main.m-home > #quizArea{grid-column:1/-1}      /* 通栏：公告条 / 准备度 / 专题 / 技能训练 / 关于 */
  /* 空状态卡（如新用户的能力图谱）内容只有一行，拉高会变成大白框 —— 让它保持自然高度 */
  .rt-shell #main.m-home > .card:has(.empty){align-self:start}
  /* 关于卡内容本身只有半屏宽，通栏会留一大片空白 —— 收窄居中，像落款 */
  .rt-shell #main.m-home > .about-card{max-width:780px;justify-self:center}
  /* 半栏里的三格统计：只收一点内边距，列数保持 3 —— 改成 2 列会让第一格横跨整行变成空盒子 */
  .rt-shell #main.m-home .grid.c3{gap:10px}
  .rt-shell #main.m-home .grid.c3 > .card{padding:12px 10px}
  .rt-shell #main.m-home .grid.c3 .stat-num{font-size:26px}
}

/* ================================================================
   学习统计雷达图（v2.54）：标签改引线分列后画布变宽，窄屏不压缩字号 ——
   手机直接换成按正确率排序的条形列表（把 11px 挤成 7px 谁也看不清）。
   ================================================================ */
.rd-desk{max-width:100%}
.rd-mob{display:none;margin:4px 0 0;padding:0;list-style:none}
.rd-mob li{display:flex;align-items:center;gap:9px;padding:6px 0;border-bottom:1px solid rgba(15,44,56,.06)}
.rd-mob li:last-child{border-bottom:none}
.rd-mob .rd-nm{flex:0 0 152px;font-size:12.5px;color:#0f2c38;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rd-mob .rd-bar{flex:1 1 auto;height:6px;border-radius:3px;background:rgba(15,44,56,.08);overflow:hidden}
.rd-mob .rd-bar > i{display:block;height:100%;border-radius:3px;transition:width .4s ease}
.rd-mob .rd-pc{flex:0 0 42px;text-align:right;font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums}
.rd-mob .rd-click{cursor:pointer}
@media(max-width:700px){
  .rd-desk{display:none}
  .rd-mob{display:block}
}

/* 分标签正确率表：6 列在 375 屏上宽 384，会顶出 40px 横向滚动条 ——
   包一层横向滑动容器，表格本身给最小宽度，避免列被挤成竖排 */
.st-tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.st-tbl-wrap > .tagTbl{min-width:430px}

/* ================================================================
   做题页手感（v2.55）：选项悬停微抬 / 选中与判分反馈 / 解析与分层解析错开浮现 /
   切题位移 / 快捷键提示条。
   原则：① 只在「能悬停的精确指针」上做微抬（触屏不做，避免 :hover 粘住）；
        ② 判分后 / 背诵态加 .q-lock，选项不再抬手感，避免「还以为能改」；
        ③ 系统开启「减少动态效果」时全部关掉。
   ================================================================ */

/* 1) 选项：悬停微抬 + 按下回落 */
@media(hover:hover) and (pointer:fine){
  #optArea .opt{
    transition:background .14s,border-color .14s,box-shadow .2s,
               transform .18s cubic-bezier(.22,.61,.36,1);
  }
  #optArea .opt:hover{
    transform:translateY(-2px);
    background:#fff;border-color:#8fbccb;
    box-shadow:0 8px 20px -12px rgba(15,44,56,.45),0 1px 0 rgba(15,44,56,.03);
  }
  #optArea .opt.sel:hover{transform:translateY(-1px)}
  #optArea .opt:active{transform:translateY(0) scale(.998)}
  /* 已判分 / 已锁：不抬、不浮 */
  #optArea.q-lock .opt,
  #optArea.q-lock .opt:hover,
  #optArea.q-lock .opt:active{transform:none;box-shadow:none;cursor:default}
  #optArea.q-lock .opt:hover{border-color:var(--line)}
  #optArea.q-lock .opt.right:hover{border-color:var(--ok)}
  #optArea.q-lock .opt.wrongpick:hover{border-color:var(--bad)}
}

/* 2) 选中与判分反馈：点下去有回弹，答对泛一圈绿光，答错轻抖一下 */
@keyframes optPick{0%{transform:scale(1)}38%{transform:scale(1.014)}100%{transform:scale(1)}}
@keyframes optRight{
  0%  {box-shadow:inset 0 0 0 1px var(--ok),0 0 0 0 rgba(15,123,82,.26)}
  100%{box-shadow:inset 0 0 0 1px var(--ok),0 0 0 10px rgba(15,123,82,0)}
}
@keyframes optWrong{
  0%,100%{transform:translateX(0)}
  18%{transform:translateX(-4px)}
  38%{transform:translateX(4px)}
  58%{transform:translateX(-2px)}
  78%{transform:translateX(2px)}
}
#optArea .opt.sel{animation:optPick .2s ease}
#optArea .opt.right{animation:optRight .52s ease}
#optArea .opt.wrongpick{animation:optWrong .36s cubic-bezier(.36,.07,.19,.97)}

/* 3) 结果条 / 解析块依次浮现（同一屏里不再「啪」地整块出现） */
@keyframes feedUp{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
#qFeed > *{animation:feedUp .32s cubic-bezier(.22,.61,.36,1) both}
#qFeed > *:nth-child(2){animation-delay:.06s}
#qFeed > *:nth-child(3){animation-delay:.11s}
#qFeed > *:nth-child(4){animation-delay:.16s}
#qFeed > *:nth-child(5){animation-delay:.21s}
#qFeed > *:nth-child(6){animation-delay:.26s}
#qFeed > *:nth-child(7){animation-delay:.31s}
/* 分层解析里的 原理 / 易错 / 床旁 三小节错开（展开时才播，收起不占时间） */
.ana[open] .ana-body .ana-sec{animation:feedUp .3s cubic-bezier(.22,.61,.36,1) both}
.ana[open] .ana-body .ana-sec:nth-child(2){animation-delay:.08s}
.ana[open] .ana-body .ana-sec:nth-child(3){animation-delay:.16s}
.ana[open] .ana-body .ana-sec:nth-child(4){animation-delay:.24s}

/* 4) 切题位移：前进右滑入、后退左滑入（幅度只 9px，不做整屏飞入） */
@keyframes qInF{from{opacity:0;transform:translateX(9px)}to{opacity:1;transform:none}}
@keyframes qInB{from{opacity:0;transform:translateX(-9px)}to{opacity:1;transform:none}}
#quizArea > .card.q-in-f{animation:qInF .24s cubic-bezier(.22,.61,.36,1) both}
#quizArea > .card.q-in-b{animation:qInB .24s cubic-bezier(.22,.61,.36,1) both}

/* 5) 快捷键提示条：桌面显示，手机与触屏隐藏（手机没有键盘，留着只占地方） */
.kbdbar{display:flex;flex-wrap:wrap;align-items:center;gap:5px 9px;margin:10px 2px 0;
  font-size:11.5px;color:#7b8f98;letter-spacing:.02em;line-height:1.7}
.kbdbar kbd{display:inline-block;min-width:17px;padding:0 5px;margin-right:2px;
  border:1px solid #dbe6ec;border-bottom-width:2px;border-radius:4px;background:#fff;
  font-family:inherit;font-size:11px;font-weight:600;color:#43606c;line-height:1.55;text-align:center}
.kbdbar .kb-sep{opacity:.45}
@media(max-width:1000px){.kbdbar{display:none}}
@media(hover:none){.kbdbar{display:none}}

/* 6) 尊重系统「减少动态效果」 */
@media(prefers-reduced-motion:reduce){
  #optArea .opt,#optArea .opt:hover,#optArea .opt:active{transform:none!important}
  #optArea .opt.sel,#optArea .opt.right,#optArea .opt.wrongpick,
  #qFeed > *,.ana[open] .ana-body .ana-sec,
  #quizArea > .card.q-in-f,#quizArea > .card.q-in-b{animation:none!important}
}

/* ================================================================
   侧栏折叠（v2.59）：桌面端可收成图标条，参考 RRT.Academy
   仅 ≥1024px 生效；窄屏仍是汉堡抽屉，互不影响。状态写 localStorage 刷新保持。
   ================================================================ */

/* 侧栏滚动（2026-10-27 二次修复）
   v1 曾把 .rt-nav 改成 overflow:visible 让「整列一起滚」，结果导航内容溢出自己盒子：
   训练分组的菜单项被底部「备考准备度」整块盖住，临床/成长两个分组被挤到用户区下方。
   现改回标准结构：导航区内部滚动，底部状态块钉在栏底（flex:none），互不侵占。 */
.rt-rail-in{overflow:hidden}
.rt-nav{
  flex:1 1 auto;min-height:0;
  overflow-y:auto;overflow-x:hidden;
  padding-bottom:12px;scrollbar-width:thin;
  overscroll-behavior:contain;
}
.rt-nav::-webkit-scrollbar{width:4px}
.rt-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);border-radius:2px}

/* 矮窗口（笔记本 720~800 高常见）：压缩品牌/波形/底部状态块，给导航让出可滚空间 */
@media (max-height:780px){
  .rt-brand{padding:14px 18px 0}
  .rt-wave{height:34px;margin:10px 18px 0}
  .rt-rail-foot{padding:10px 14px 12px}
  .rt-status{padding:10px}
  .rt-mini{margin-top:8px;gap:5px}
  .rt-uchip{margin-top:8px}
}

/* 折叠开关：品牌行右侧（logo 旁），与 RRT.Academy 位置一致 */
.rt-collapse-btn{
  margin-left:auto;flex:none;width:28px;height:28px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  border:0;background:none;color:#a8cfd8;cursor:pointer;padding:0;
  transition:background .25s,color .25s;
}
.rt-collapse-btn:hover{background:rgba(255,255,255,.08);color:#eaf9fc}
.rt-collapse-btn svg{display:block;width:16px;height:16px;transition:transform .35s var(--rt-ease)}
body.rt-rail-collapsed .rt-collapse-btn svg{transform:rotate(180deg)}

@media(min-width:1024px){
  /* 折叠态：侧栏收窄为图标条 */
  body.rt-rail-collapsed .rt-rail{width:68px}
  body.rt-rail-collapsed .rt-shell{margin-left:68px}

  /* 隐藏文字类元素，只留图标 */
  body.rt-rail-collapsed .rt-brand-t,
  body.rt-rail-collapsed .rt-wave,
  body.rt-rail-collapsed .rt-grp-h,
  body.rt-rail-collapsed .rt-nav-i .lb,
  body.rt-rail-collapsed .rt-nav-i .cnt,
  body.rt-rail-collapsed .rt-rail-foot .rt-status,
  body.rt-rail-collapsed .rt-rail-foot .rt-uchip .nm,
  body.rt-rail-collapsed .rt-rail-foot .rt-uchip .acts{display:none}

  /* 品牌只留头像 + 开关，纵向居中 */
  body.rt-rail-collapsed .rt-brand{flex-direction:column;align-items:center;gap:8px;padding:16px 0 0}
  body.rt-rail-collapsed .rt-brand-av{width:40px;height:40px}

  /* 分组标题收成细分割线；分组强制展开（CSS 覆盖 JS 的 data-open） */
  body.rt-rail-collapsed .rt-grp{margin:0}
  body.rt-rail-collapsed .rt-grp + .rt-grp{border-top:1px solid rgba(255,255,255,.07)}
  body.rt-rail-collapsed .rt-grp-body{grid-template-rows:1fr!important}
  body.rt-rail-collapsed .rt-grp-body>div{padding:2px 0}

  /* 导航项只留图标，居中，原生 title 作 tooltip */
  body.rt-rail-collapsed .rt-nav{display:flex;flex-direction:column;gap:4px;padding:10px 10px 8px}
  body.rt-rail-collapsed .rt-nav-i{justify-content:center;padding:0;height:40px;border-radius:10px}
  body.rt-rail-collapsed .rt-nav-i .ic{width:20px;height:20px;opacity:.85}

  /* 底部只留头像 */
  body.rt-rail-collapsed .rt-rail-foot{padding:10px 0 14px;display:flex;justify-content:center}
  body.rt-rail-collapsed .rt-rail-foot .rt-uchip{margin:0;padding:0;justify-content:center}
  body.rt-rail-collapsed .rt-rail-foot .rt-uchip .av{width:32px;height:32px}
}
@media(max-width:1023px){
  .rt-collapse-btn{display:none}  /* 窄屏用汉堡抽屉，不显示折叠开关 */
}

/* 用户行整体可点进「我的」（2026-10-29）：加手型与键盘焦点环，避免看起来只是块静态信息 */
.rt-uchip {cursor:pointer
}
.rt-uchip:focus-visible {outline:2px solid #a5f0fa;outline-offset:-2px
}
.rt-uchip .acts button {cursor:pointer
}
