/* ============ 顶栏（桌面） ============ */
.topbar {
  position: sticky; top: 0; z-index: 50;
  background: rgba(255, 255, 255, .72); backdrop-filter: blur(18px) saturate(180%);
  -webkit-backdrop-filter: blur(18px) saturate(180%);
  border-bottom: 1px solid rgba(227, 233, 244, .8);
}
.topbar-inner {
  max-width: 1080px; margin: 0 auto; padding: 0 18px;
  height: 58px; display: flex; align-items: center; gap: 22px;
}
.brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 1.02rem; color: var(--ink); }
.brand .logo {
  width: 30px; height: 30px; border-radius: 8px;
  background: var(--primary); color: #fff;
  display: grid; place-items: center;
}
.topnav { display: flex; gap: 4px; margin-left: 8px; }
.topnav a {
  padding: 7px 14px; border-radius: 8px;
  color: var(--ink-2); font-size: .94rem; font-weight: 600;
}
.topnav a:hover { background: var(--paper); }
.topnav a.active { color: var(--primary); background: var(--primary-soft); }
.topbar-right { margin-left: auto; display: flex; align-items: center; gap: 12px; }
.child-chip {
  display: flex; align-items: center; gap: 8px;
  padding: 5px 12px 5px 6px; border-radius: 999px;
  background: var(--paper); border: 1px solid var(--border);
  font-size: .88rem; font-weight: 600; color: var(--ink-2);
}
.child-chip .avatar {
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--primary); color: #fff;
  display: grid; place-items: center; font-size: .8rem;
}
.icon-btn {
  display: grid; place-items: center;
  width: 38px; height: 38px; border-radius: 9px;
  border: 1px solid var(--border); background: #fff; color: var(--muted);
}
.icon-btn:hover { color: var(--red); border-color: #f3c1c1; background: #fdf5f5; }
@media (max-width: 767px) { .topbar { display: none; } }

/* ============ 底部 Tab（手机） ============ */
.tabbar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 50;
  display: flex; background: rgba(255, 255, 255, .82); backdrop-filter: blur(18px) saturate(180%);
  -webkit-backdrop-filter: blur(18px) saturate(180%);
  border-top: 1px solid rgba(227, 233, 244, .8);
  padding-bottom: env(safe-area-inset-bottom);
}
.tabbar a {
  flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
  padding: 9px 0 7px; color: var(--muted); font-size: .72rem; font-weight: 600;
}
.tabbar a.active { color: var(--primary); }
@media (min-width: 768px) { .tabbar { display: none; } }

/* ============ 卡片与通用组件 ============ */
.card {
  background: var(--glass); backdrop-filter: blur(14px) saturate(160%);
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius); padding: 20px; box-shadow: var(--shadow);
}
.card-title { font-size: 1.02rem; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.card-sub { font-size: .85rem; color: var(--muted); margin-top: 2px; }

.badge {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 10px; border-radius: 999px;
  font-size: .78rem; font-weight: 700;
  background: var(--primary-soft); color: var(--primary);
}
.badge.lx { font-size: .82rem; }

/* 20 格进度 */
.cells { display: flex; gap: 3px; flex-wrap: wrap; margin: 10px 0 4px; }
.cell { width: 12px; height: 12px; border-radius: 3.5px; background: #e6ebf5; }
.cell.on { background: var(--primary); }

/* toast */
.toast-wrap {
  position: fixed; top: 18px; left: 50%; transform: translateX(-50%);
  z-index: 200; display: flex; flex-direction: column; gap: 8px; align-items: center;
  pointer-events: none; width: min(92vw, 420px);
}
.toast {
  padding: 11px 18px; border-radius: 10px;
  background: var(--ink); color: #fff; font-size: .92rem; font-weight: 600;
  box-shadow: 0 10px 30px -8px rgba(22, 33, 58, .4);
  opacity: 0; transform: translateY(-12px); transition: all .3s;
  max-width: 100%; text-align: center;
}
.toast.show { opacity: 1; transform: translateY(0); }
.toast-success { background: var(--green); }
.toast-error { background: var(--red); }

/* 日历热力 */
.cal-head, .cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
.cal-head { margin-bottom: 6px; }
.cal-head span { text-align: center; font-size: .74rem; color: var(--muted); font-weight: 600; }
.cal-day {
  aspect-ratio: 1; display: grid; place-items: center;
  border-radius: 8px; font-size: .8rem; color: var(--ink-2);
  background: #f0f3fa;
}
.cal-day.empty { background: transparent; }
.cal-day.lv1 { background: #cfddf9; }
.cal-day.lv2 { background: #8fb0f0; color: #16305e; }
.cal-day.lv3 { background: var(--primary); color: #fff; font-weight: 700; }
.cal-day.today { outline: 2px solid var(--amber); outline-offset: 1px; }

/* 蓝斯折线图 */
.lex-chart { width: 100%; height: auto; display: block; }
.lex-chart .grid { stroke: #e8edf7; stroke-width: 1; }
.lex-chart .tick { font-size: 11px; fill: var(--muted); font-family: var(--font-display); }
.lex-chart .line { fill: none; stroke: var(--primary); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.lex-chart .dot { fill: #fff; stroke: var(--primary); stroke-width: 2.5; }
.lex-chart .val { font-size: 11.5px; fill: var(--primary); font-weight: 700; font-family: var(--font-display); }
.chart-empty { padding: 36px 0; text-align: center; color: var(--muted); font-size: .9rem; }

/* 闯关场景头图（T010）：迪斯尼童话城堡 / 宇宙星球科幻 / 全世界旅游打卡 */
.quest-hero {
  position: relative; overflow: hidden;
  border-radius: calc(var(--radius) + 4px); margin-bottom: 16px;
  min-height: 168px; display: flex; align-items: flex-end;
  color: #fff; box-shadow: var(--shadow-lg);
}
.quest-hero .quest-art {
  position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none;
}
.quest-hero-text { position: relative; z-index: 1; padding: 18px 22px 16px; }
.quest-hero-text h2 { font-size: 1.22rem; color: #fff; text-shadow: 0 2px 10px rgba(10, 20, 50, .35); }
.quest-hero-text p { font-size: .84rem; opacity: .92; margin-top: 2px; text-shadow: 0 1px 6px rgba(10, 20, 50, .3); }
.quest-hero.sm { min-height: 96px; }
.quest-hero.sm .quest-hero-text { padding: 14px 20px 12px; }
.quest-tag {
  display: inline-block; padding: 3px 12px; border-radius: 999px;
  background: rgba(255, 255, 255, .22); backdrop-filter: blur(6px);
  border: 1px solid rgba(255, 255, 255, .35);
  font-size: .74rem; font-weight: 700; letter-spacing: .06em; margin-bottom: 7px;
}
body.band-kid .quest-tag { border-radius: 999px 999px 999px 6px; }

/* 大关地图（纵向时间线） */
.ladder { position: relative; padding-left: 34px; }.ladder::before {
  content: ''; position: absolute; left: 14px; top: 12px; bottom: 12px;
  width: 3px; border-radius: 2px; background: #e0e7f3;
}
.lnode { position: relative; display: flex; gap: 14px; padding: 10px 0; }
.lnode .dot {
  position: absolute; left: -34px; top: 18px;
  width: 31px; height: 31px; border-radius: 50%;
  background: #fff; border: 3px solid #dbe3f2; color: var(--muted);
  display: grid; place-items: center; font-size: .76rem; font-weight: 800;
  font-family: var(--font-display); z-index: 1;
}
.lnode.done .dot { background: var(--green); border-color: var(--green); color: #fff; }
.lnode.current .dot { background: var(--primary); border-color: var(--primary); color: #fff; box-shadow: 0 0 0 5px var(--primary-soft); }
.lnode .lbody {
  flex: 1; background: var(--glass); backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius); padding: 13px 16px;
}
.lnode.locked .lbody { opacity: .55; }
.lnode.current .lbody { border-color: var(--primary); box-shadow: 0 6px 18px -8px rgba(29, 79, 215, .35); }
.lnode .lhead { display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; }
.lnode .llabel { font-family: var(--font-display); font-weight: 700; font-size: 1.02rem; }
.lnode .lrange { font-size: .8rem; color: var(--muted); font-family: var(--font-display); }
.lnode .lname { font-size: .9rem; color: var(--ink-2); }
.lnode .lfoot { display: flex; align-items: center; gap: 12px; margin-top: 8px; }
.lnode .lfoot .spacer { flex: 1; }

/* 小关网格 */
.stage-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
@media (min-width: 768px) { .stage-grid { grid-template-columns: repeat(5, 1fr); gap: 12px; } }
.stage-cell {
  position: relative; border: 1.5px solid var(--glass-border); border-radius: var(--radius);
  background: var(--glass); backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  padding: 12px 8px 10px; text-align: center;
  min-height: 86px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
  box-shadow: 0 2px 6px -3px rgba(22, 33, 58, .10);
  transition: transform .15s, box-shadow .18s, border-color .15s;
}
.stage-cell .num { font-family: var(--font-display); font-size: 1.25rem; font-weight: 700; color: var(--ink); }
.stage-cell .st { font-size: .68rem; color: var(--muted); line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.stage-cell.next { border-color: var(--primary); box-shadow: 0 6px 16px -8px rgba(29, 79, 215, .4); }
.stage-cell.next .num { color: var(--primary); }
.stage-cell.done { background: var(--green-soft); border-color: #bfe8d6; }
.stage-cell.done .num { color: var(--green); }
.stage-cell.locked { background: #f4f6fb; color: var(--muted); cursor: not-allowed; }
.stage-cell.locked .num { color: #aab6cf; }
.stage-cell:not(.locked):hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }
.stage-cell .mark { position: absolute; top: 6px; right: 7px; color: var(--green); }
.stage-cell .mark.lock { color: #b7c2d9; }

/* 资源列表（双列网格） */
.res-grid { display: grid; grid-template-columns: 1fr; }
.res-item { display: flex; gap: 10px; padding: 11px 0; border-top: 1px dashed var(--border); }
.res-item b { display: block; font-size: .93rem; }
.res-item p { font-size: .84rem; color: var(--muted); margin-top: 2px; }
.res-item .ric {
  flex: none; width: 34px; height: 34px; border-radius: 9px;
  display: grid; place-items: center; background: var(--primary-soft); color: var(--primary);
}
@media (min-width: 700px) {
  .res-grid { grid-template-columns: 1fr 1fr; column-gap: 26px; }
  .res-grid .res-item:nth-child(-n+2) { border-top: 0; padding-top: 4px; }
}
@media (max-width: 699px) {
  .res-grid .res-item:first-child { border-top: 0; padding-top: 4px; }
}

/* 资源页锚点导航 */
.res-nav {
  position: sticky; top: 66px; z-index: 30;
  display: flex; gap: 8px; flex-wrap: wrap;
  margin: 0 0 14px; padding: 8px;
  background: var(--glass); backdrop-filter: blur(14px) saturate(170%);
  -webkit-backdrop-filter: blur(14px) saturate(170%);
  border: 1px solid var(--glass-border); border-radius: 13px;
  box-shadow: var(--shadow);
}
.res-chip {
  border: 1px solid var(--border); background: #fff; border-radius: 999px;
  padding: 6px 14px; font-size: .8rem; font-weight: 600; color: var(--ink-2);
}
.res-chip:hover { border-color: var(--primary); color: var(--primary); }
@media (max-width: 767px) { .res-nav { top: 8px; } }
.res-cat, .res-banner { scroll-margin-top: 130px; }

/* 分段小标题 */
.eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: .78rem; font-weight: 800; letter-spacing: .14em;
  color: var(--primary); text-transform: uppercase;
}
.eyebrow::before { content: ''; width: 18px; height: 2.5px; background: var(--primary); border-radius: 2px; }

/* 页面头部（闯关各页通用） */
.page-head { display: flex; align-items: center; gap: 12px; margin: 18px 0 16px; }
.page-head .back {
  flex: none; width: 40px; height: 40px; border-radius: 10px;
  border: 1px solid var(--border); background: #fff; color: var(--ink-2);
  display: grid; place-items: center;
}
.page-head .back:hover { background: var(--paper); }
.page-head h1 { font-size: 1.28rem; }
.page-head .sub { font-size: .85rem; color: var(--muted); }

/* 地图节点元信息（RAZ级别/章节书/系统课） */
.lmeta { font-size: .76rem; color: var(--muted); margin: 3px 0 2px; letter-spacing: .01em; }
.lnode.locked .lmeta { opacity: .55; }

/* 大关分级对照卡 */
.meta-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 10px; }
.meta-item {
  background: var(--paper); border: 1px solid var(--border); border-radius: 9px;
  padding: 8px 10px; display: flex; flex-direction: column; gap: 2px;
}
.meta-item span { font-size: .68rem; color: var(--muted); letter-spacing: .04em; }
.meta-item b { font-size: .84rem; font-weight: 700; color: var(--ink); }
.meta-ref { margin-top: 10px; font-size: .76rem; color: var(--muted); }
.invite-row {
  margin-top: 10px; padding: 9px 12px; border-radius: 9px;
  background: var(--primary-soft); display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.invite-code { font-family: Georgia, 'Times New Roman', serif; font-weight: 800; font-size: 1.02rem; letter-spacing: .12em; color: var(--primary); }
.invite-tip { font-size: .74rem; color: var(--ink-2); }
@media (max-width: 560px) {
  .meta-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ============ 资源库 ============ */
.res-cat { margin-bottom: 14px; }
.res-cat .card-title { color: var(--ink); }
.rcat-ic {
  width: 30px; height: 30px; border-radius: 8px;
  display: grid; place-items: center; flex: none;
}
.rcat-count { margin-left: auto; font-size: .76rem; font-weight: 600; color: var(--muted); }
.res-group h3 {
  font-size: .92rem; color: var(--ink-2); margin: 16px 0 2px;
  display: flex; align-items: center; gap: 8px;
}
.res-group h3::before { content: ''; width: 6px; height: 14px; border-radius: 3px; background: var(--cc, var(--primary)); }
.res-item .rbody { flex: 1; min-width: 0; }
.res-item .rgo { flex: none; align-self: center; color: var(--muted); }
a.res-item.link { cursor: pointer; border-radius: 8px; }
a.res-item.link:hover { background: var(--paper); }
a.res-item.link:hover b { color: var(--primary); }

/* 资源页官方导学横幅 */
.res-banner-links { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; }
.res-banner-link {
  display: block; padding: 12px 14px; border: 1px solid var(--border); border-radius: 10px;
  background: var(--paper); cursor: pointer;
}
.res-banner-link:hover { border-color: var(--primary); }
.res-banner-link b { display: block; font-size: .92rem; }
.res-banner-link span { display: block; font-size: .8rem; color: var(--muted); margin-top: 3px; }
.res-foot { margin-top: 16px; font-size: .8rem; color: var(--muted); text-align: center; }

/* 已发布资源积木：只在存在有效线上快照时出现 */
.managed-resource-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.managed-resource {
  display: flex; flex-direction: column;
  min-width: 0; padding: 12px; border: 1px solid var(--border); border-radius: 11px; background: var(--paper);
}
.managed-resource.current { border-color: #8bd1b4; background: #f0faf6; box-shadow: inset 3px 0 0 #16845b; }
.managed-resource-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.managed-resource-head b { min-width: 0; font-size: .92rem; overflow-wrap: anywhere; }
.managed-resource-head span { flex: none; padding: 2px 7px; border-radius: 99px; background: #eaf4ff; color: #315f9f; font-size: .68rem; }
.managed-resource p { margin: 5px 0 0; color: var(--muted); font-size: .78rem; overflow-wrap: anywhere; }
.managed-resource p strong { color: var(--ink-2); }
.managed-current { margin-top: 6px; color: #116845; font-size: .72rem; font-weight: 700; }
.managed-resource-links { display: flex; gap: 7px; flex-wrap: wrap; margin-top: auto; padding-top: 9px; }
.managed-resource-links a { padding: 5px 9px; border: 1px solid var(--border); border-radius: 8px; background: #fff; color: var(--primary); font-size: .74rem; font-weight: 700; }
.managed-resource-links a:hover { border-color: var(--primary); }
.res-access { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 8px; }
.res-access a { display: inline-flex; align-items: center; gap: 4px; padding: 5px 9px; border-radius: 8px; border: 1px solid var(--border); background: #fff; font-size: .74rem; font-weight: 750; line-height: 1.25; }
.res-access-guide { color: var(--primary); }
.res-access-entry { color: #14724f; border-color: #b9dfcf !important; background: #f1fbf6 !important; }
.res-access-purchase { color: #9a5600 !important; border-color: #efcf9a !important; background: #fff8e8 !important; }
.res-access a:hover { transform: translateY(-1px); box-shadow: 0 3px 9px rgba(31,48,83,.10); }
.res-access-note { margin-top: 7px; color: var(--muted); font-size: .72rem; }
.stage-link-help { margin: -2px 0 7px; padding: 8px 10px; border-radius: 8px; background: #f5f7fb; color: var(--muted); font-size: .76rem; line-height: 1.55; }
@media (max-width: 640px) { .managed-resource-grid { grid-template-columns: 1fr; } }

/* ============ 学习路线图 ============ */
.res-sub { font-size: .8rem; color: var(--muted); margin: 4px 0 10px; }
.rm-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.rm-table { width: 100%; border-collapse: collapse; min-width: 720px; }
.rm-table th, .rm-table td { text-align: left; padding: 9px 10px; border-bottom: 1px solid var(--line); vertical-align: top; }
.rm-table th { font-size: .74rem; color: var(--muted); font-weight: 600; white-space: nowrap; }
.rm-name { min-width: 190px; }
.rm-name b { font-size: .86rem; }
.rm-name p { font-size: .72rem; color: var(--muted); margin-top: 3px; }
.rm-cells { display: flex; flex-wrap: wrap; gap: 6px; }
.rm-cell {
  font-size: .74rem; line-height: 1.45; padding: 6px 9px; border-radius: 8px;
  background: var(--paper); border: 1px solid var(--line); flex: 1 1 150px;
}
.rm-trinline { margin-top: 7px; }
.rm-train {
  display: inline-flex; align-items: center; gap: 4px; font-size: .72rem; font-weight: 600;
  color: var(--cc, var(--primary)); background: var(--paper); border: 1px solid var(--line);
  border-radius: 99px; padding: 3px 8px; margin: 0 4px 4px 0; white-space: nowrap;
}
.rm-train i { font-style: normal; color: var(--muted); font-weight: 400; }
@media (max-width: 560px) { .rm-table { min-width: 640px; } }

/* 关卡免费/收费徽章 */
.badge-free { background: #e8f7ee; color: #1a9e54; }
.badge-paid { background: #fdf3e3; color: #c07f1a; }

/* ============ 平台路线（T005） ============ */
/* 大关页路线卡 */
.route-card .rc-main { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 10px; }
.rc-plat { font-size: 1.08rem; font-weight: 800; }
.rc-level {
  font-family: var(--font-display); font-weight: 700; font-size: .85rem;
  color: var(--primary); background: var(--primary-soft);
  border-radius: 8px; padding: 3px 11px;
}
.rc-reason { font-size: .85rem; color: var(--ink-2); margin-top: 8px; }
.rc-action, .rr-action {
  margin-top: 7px; padding: 8px 10px; border-radius: 8px;
  color: #755100; background: #fff7dc; border: 1px solid #f0d990;
  font-size: .8rem; line-height: 1.5;
}
.rc-candidate, .rc-notice, .rr-meta, .rr-notice { font-size: .78rem; color: var(--muted); margin-top: 6px; }
.rc-freq { font-size: .8rem; color: var(--muted); margin-top: 4px; }
.rc-hierarchy { margin-top: 12px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: #fbfcff; }
.rc-hierarchy-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; font-size: .8rem; }
.rc-hierarchy-head span { color: var(--muted); font-size: .74rem; }
.rc-stage-row { display: grid; grid-template-columns: auto auto minmax(0, 1fr); align-items: start; gap: 7px; padding: 7px 0; border-top: 1px dashed #e1e7f1; font-size: .78rem; }
.rc-stage-role { min-width: 52px; padding: 2px 6px; border-radius: 999px; text-align: center; font-size: .68rem; font-weight: 750; background: #eef3ff; color: var(--primary); }
.rc-stage-support .rc-stage-role { background: #fff4df; color: #a86800; }
.rc-stage-auxiliary .rc-stage-role { background: #f1f3f7; color: var(--muted); }
.rc-stage-range { color: var(--muted); white-space: nowrap; }
.rc-stage-copy b { display: block; color: var(--ink-2); }
.rc-stage-copy small { display: block; margin-top: 2px; color: var(--muted); line-height: 1.45; }
.rc-stage-resources { margin-top: 5px; }
.rc-stage-resources .res-item { padding: 7px 0 0; border-top: 0; gap: 7px; }
.rc-stage-resources .res-item .ric { width: 26px; height: 26px; border-radius: 7px; }
.rc-stage-resources .res-item .ric svg { width: 14px; height: 14px; }
.rc-stage-resources .res-item b { font-size: .8rem; }
.rc-stage-resources .res-item p { font-size: .74rem; }
.rc-stage-resources .res-access { gap: 6px; }
.rc-stage-resources .res-access a { font-size: .72rem; }
.rc-acts { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; }
.rc-entry, .rc-purchase {
  font-size: .78rem; color: var(--ink-2);
  background: var(--paper); border: 1px solid var(--border); border-radius: 8px; padding: 6px 11px;
}
.rc-purchase { color: #8b5200; border-color: #efcf9a; background: #fff8e8; }
.rc-alt {
  margin-top: 12px; padding-top: 11px; border-top: 1px dashed var(--border);
  font-size: .82rem; color: var(--muted);
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.rc-alt b { color: var(--ink-2); }
.rc-swap { margin-left: auto; }

/* 小关页一行式路线参考 */
.route-mini {
  margin-top: 10px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: .78rem; color: var(--muted);
  background: var(--paper); border: 1px solid var(--border); border-radius: 9px; padding: 8px 12px;
}
.route-mini b { color: var(--ink-2); }
.route-role { padding: 2px 6px; border-radius: 999px; font-size: .68rem; font-weight: 750; background: #eef3ff; color: var(--primary); }
.route-role-support { background: #fff4df; color: #a86800; }
.route-role-auxiliary { background: #f1f3f7; color: var(--muted); }
.rl-action { color: #755100; font-weight: 650; }
.rl-guide {
  display: inline-flex; align-items: center; gap: 3px;
  font-size: .76rem; font-weight: 700; color: var(--primary);
}
.rl-entry { font-size: .74rem; color: var(--muted); }
.rl-purchase { display: inline-flex; align-items: center; gap: 3px; font-size: .74rem; font-weight: 700; color: #925600; }

/* ============ 游戏闯关路径（T025） ============ */
.qpath-card { margin-bottom: 0; }
.qpath-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.qpath-prog { font-size: .84rem; color: var(--muted); }
.qpath-prog b { font-family: var(--font-display); font-size: 1.05rem; color: var(--primary); }
.qpath-scroll {
  margin-top: 12px; overflow-x: auto; border-radius: var(--radius);
  background: linear-gradient(180deg, rgba(255,255,255,.75), rgba(247,250,254,.75));
  border: 1px solid var(--border);
  scrollbar-width: thin; scrollbar-color: #b9c8de transparent;
  -webkit-overflow-scrolling: touch;
}
.qpath-scroll::-webkit-scrollbar { height: 8px; }
.qpath-scroll::-webkit-scrollbar-thumb { background: #c3d0e4; border-radius: 4px; }
.qpath-canvas { position: relative; }
.qpath-svg { position: absolute; inset: 0; pointer-events: none; }
.qpath-hint { text-align: center; color: var(--muted); font-size: .78rem; margin-top: 12px; }

/* 关卡节点 */
.qnode {
  position: absolute; transform: translate(-50%, -50%);
  width: 56px; height: 56px; border-radius: 50%;
  border: 3px solid #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 1.06rem; font-weight: 800; font-family: var(--font-display);
  cursor: pointer; z-index: 2;
  transition: transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .25s;
}
.qnode:focus-visible { outline: 3px solid var(--primary); outline-offset: 3px; }
.qnode.done {
  background: linear-gradient(135deg, #43d68a, #1a9e54);
  color: #fff; box-shadow: 0 6px 16px rgba(26, 158, 84, .4);
}
.qnode.current {
  background: linear-gradient(135deg, var(--band-a), var(--band-b));
  color: #fff; box-shadow: 0 6px 20px rgba(29, 79, 215, .5);
  animation: qpulse 1.8s ease-in-out infinite;
}
@keyframes qpulse {
  0%, 100% { box-shadow: 0 6px 20px rgba(29, 79, 215, .5), 0 0 0 0 rgba(29, 79, 215, .35); }
  50% { box-shadow: 0 6px 20px rgba(29, 79, 215, .5), 0 0 0 14px rgba(29, 79, 215, 0); }
}
.qnode.open {
  background: #fff; color: var(--primary); border-color: var(--primary);
  box-shadow: 0 4px 12px rgba(29, 79, 215, .22);
}
.qnode.locked {
  background: #e8edf5; color: #a9b4c9; cursor: not-allowed;
  box-shadow: 0 4px 10px rgba(90, 110, 150, .12);
}
.qnode:not(.locked):hover { transform: translate(-50%, -50%) scale(1.16) rotate(-6deg); }
.qnode.just-lit { animation: qlit .9s cubic-bezier(.34,1.56,.64,1); }
@keyframes qlit {
  0% { transform: translate(-50%, -50%) scale(.3); box-shadow: 0 0 0 0 rgba(26, 158, 84, .65); }
  55% { transform: translate(-50%, -50%) scale(1.35); box-shadow: 0 0 0 18px rgba(26, 158, 84, 0); }
  100% { transform: translate(-50%, -50%) scale(1); }
}
.qlabel {
  position: absolute; transform: translateX(-50%);
  font-size: .72rem; color: var(--ink-2); white-space: nowrap;
  z-index: 2; letter-spacing: .04em; font-weight: 600;
}

/* 悬浮提示 */
.qtip {
  position: absolute; transform: translate(-50%, -100%);
  background: #33405e; color: #fff;
  font-size: .76rem; line-height: 1.55;
  padding: 8px 13px; border-radius: 8px;
  white-space: nowrap; z-index: 5; pointer-events: none;
  opacity: 0; transition: opacity .18s, translate .18s;
  translate: 0 6px;
}
.qtip::after {
  content: ''; position: absolute; left: 50%; top: 100%;
  transform: translateX(-50%);
  border: 6px solid transparent; border-top-color: #33405e;
}
.qnode:hover + .qtip, .qnode:focus-visible + .qtip, .qtip.show { opacity: 1; translate: 0 0; }
.qtip .qt-meta { color: #ffd9a8; }
.qtip .qt-lock { color: #b9c4d8; }
.qtip .qstart-mark { color: #a7f3d0; font-weight: 800; }

/* 关卡弹窗 */
.qmodal {
  position: fixed; inset: 0; z-index: 60; display: none;
  align-items: center; justify-content: center; padding: 16px;
}
.qmodal.show { display: flex; }
.qmodal-mask {
  position: absolute; inset: 0;
  background: rgba(51, 64, 94, .42);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  animation: qfade .2s ease;
}
@keyframes qfade { from { opacity: 0; } to { opacity: 1; } }
.qmodal-box {
  position: relative; z-index: 2;
  width: min(720px, 100%); max-height: 90vh;
  background: #fff; border-radius: calc(var(--radius) + 4px);
  box-shadow: 0 24px 60px rgba(40, 60, 100, .3);
  display: flex; flex-direction: column;
  animation: qpop .28s cubic-bezier(.34,1.4,.64,1);
}
@keyframes qpop { from { transform: scale(.92) translateY(12px); opacity: 0; } to { transform: none; opacity: 1; } }
.qm-close {
  position: absolute; right: 12px; top: 12px; z-index: 3;
  width: 34px; height: 34px; border-radius: 50%;
  border: 0; background: #f0f4fb; color: var(--muted);
  font-size: 1.25rem; line-height: 1; cursor: pointer;
  transition: background .2s, transform .2s;
}
.qm-close:hover { background: #e2eaf7; transform: rotate(90deg); }
.qm-head {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px;
  padding: 14px 58px 14px 24px; border-bottom: 1px solid var(--border); flex: 0 0 auto;
}
.qm-chip {
  display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto;
  font-size: .7rem; font-weight: 700; padding: 4px 9px; border-radius: 999px;
  background: var(--primary-soft); color: var(--primary); letter-spacing: .02em; margin: 0;
}
.qm-chip .badge { margin: 0; padding: 2px 6px; font-size: .68rem; }
.qm-head h3 { font-size: 1rem; line-height: 1.45; margin: 0; min-width: 0; overflow-wrap: anywhere; }
.qm-sub { font-size: .75rem; color: var(--muted); margin: 0; overflow-wrap: anywhere; }
.qm-body { flex: 1 1 auto; min-height: 0; padding: 14px 24px; overflow-y: auto; }
.qm-body .stage-hero { border: 0; box-shadow: none; border-radius: 0; padding: 0 0 14px; margin-bottom: 16px; border-bottom: 1px solid var(--border); }
.qm-body .stage-block { box-shadow: none; padding: 16px; }
.qm-foot { padding: 10px 24px 12px; border-top: 1px solid var(--border); flex: 0 0 auto; }
/* 弹窗底部按钮紧凑化：内容区优先，操作按钮缩小 */
.qm-foot .btn { min-height: 38px; font-size: .93rem; padding: 8px 16px; box-shadow: 0 10px 22px -12px rgba(29, 79, 215, .5); }
.qm-foot .btn + .btn { margin-top: 8px; }
.qm-foot .done-note + .btn, .qm-foot .stage-checkpoint { margin-top: 8px; }
.qm-foot .week-progress { margin-bottom: 8px; }
.qm-actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.qm-actions .btn {
  width: 100%; min-width: 0; min-height: 40px; margin: 0;
  padding: 7px 10px; font-size: .8rem; line-height: 1.4; border-radius: 10px;
  white-space: normal; overflow-wrap: anywhere; box-shadow: none;
}
.qm-actions .btn + .btn { margin-top: 0; }

/* 通关晋级面板 */
.qvictory { text-align: center; padding: 18px 6px 10px; }
.qv-burst {
  width: 84px; height: 84px; margin: 0 auto 16px; border-radius: 50%;
  display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, #f5b83d, #e8890c);
  box-shadow: 0 16px 34px -12px rgba(232, 137, 12, .65);
  animation: qpop .5s cubic-bezier(.34,1.56,.64,1);
}
.qvictory h4 { font-size: 1.2rem; margin-bottom: 8px; }
.qvictory p { font-size: .88rem; color: var(--muted); }

@media (max-width: 639px) {
  .qnode { width: 48px; height: 48px; font-size: .94rem; }
  .qm-head { padding-left: 18px; padding-right: 58px; gap: 6px 10px; }
  .qm-body { padding-left: 18px; padding-right: 18px; }
  .qm-foot { padding: 10px 18px 12px; }
  .qm-actions .btn { min-height: 44px; }
}
@media (max-width: 479px) {
  .qm-head h3 { flex-basis: 100%; }
  .qm-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
  .qm-actions #qmPartial { grid-column: 1 / -1; }
}

/* —— T035 四线主题（淡色原创卡通） —— */
.quest-hero.theme-comp { background: linear-gradient(165deg, #7ec3f2 0%, #b39df0 55%, #ffb3d9 100%); }
.quest-hero.theme-sci { background: linear-gradient(165deg, #6f93e0 0%, #8a76e0 55%, #67cbe6 100%); }
.quest-hero.theme-ls { background: linear-gradient(165deg, #f2b86e 0%, #ef8f7a 58%, #d9a05e 120%); }
.quest-hero.theme-vocab { background: linear-gradient(165deg, #6fbf7f 0%, #a5d96e 58%, #f2d95e 125%); }
.qdeco { position: absolute; transform: translate(-50%, -50%); pointer-events: none; z-index: 0; }
.qdeco svg { display: block; }
.qnode .qni { display: inline-flex; align-items: center; justify-content: center; }
.qnode { z-index: 1; }

/* —— T036 星星奖励 —— */
.star-chip { display: inline-flex; align-items: center; gap: 4px; padding: 5px 11px; border-radius: 99px; background: linear-gradient(135deg, #fff3c9, #ffe29a); color: #8a6d00; font-weight: 800; font-size: .82rem; text-decoration: none; border: 1px solid #f2d987; }
.star-chip:hover { box-shadow: 0 4px 14px rgba(210, 170, 30, .28); }
.star-card { margin-bottom: 16px; }
.star-head { display: flex; gap: 26px; margin: 10px 0 12px; }
.star-bal b { font-size: 1.5rem; color: #b8860b; }
.star-bal span { display: block; font-size: .74rem; color: var(--muted); }
.medal-wall { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; margin-bottom: 12px; }
.medal { border: 1.5px dashed #e2d8b8; border-radius: 14px; padding: 10px 12px; background: #fffdf5; }
.medal.owned { border-style: solid; border-color: #f2cf4d; background: linear-gradient(160deg, #fff7d6, #ffedb0); box-shadow: 0 4px 14px rgba(210, 170, 30, .16); }
.medal .md-ic { color: #d9a700; }
.medal b { display: block; font-size: .88rem; margin-top: 4px; }
.medal p { margin: 2px 0 8px; font-size: .72rem; color: var(--muted); }
.md-own { font-size: .74rem; font-weight: 800; color: #b8860b; }
.md-buy { border: 0; border-radius: 9px; padding: 6px 10px; font-size: .74rem; font-weight: 800; background: linear-gradient(135deg, #ffd95e, #ffb03a); color: #6b4e00; cursor: pointer; }
.md-buy:disabled { opacity: .4; cursor: not-allowed; }
.pet-box { border-top: 1px dashed #eee3c0; padding-top: 12px; }
.pet-pick { display: flex; gap: 12px; flex-wrap: wrap; }
.pet-opt { display: flex; flex-direction: column; align-items: center; gap: 4px; border: 1.5px solid #dce8f5; border-radius: 14px; padding: 10px 16px; background: #f7fbff; cursor: pointer; }
.pet-opt:hover { border-color: #7fb8ff; box-shadow: 0 6px 16px rgba(90, 140, 230, .18); }
.pet-opt b { font-size: .85rem; }
.pet-opt span { font-size: .7rem; color: var(--muted); }
.pet-now { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.pet-info { flex: 1; min-width: 180px; }
.pet-info b { font-size: .92rem; }
.pet-bar { height: 8px; border-radius: 99px; background: #e9f0fa; margin: 7px 0 4px; overflow: hidden; }
.pet-bar i { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg, #7fb8ff, #3f8ef2); transition: width .3s; }
.pet-xp { font-size: .72rem; color: var(--muted); }
.star-logs { margin-top: 10px; border-top: 1px dashed #eee3c0; padding-top: 8px; }
.star-log { display: flex; justify-content: space-between; font-size: .76rem; padding: 3px 0; color: var(--ink-2); }
.star-log b.pos { color: #1a9d5c; }
.star-log b.neg { color: #c46a00; }
.qv-stars { margin-top: 10px; font-weight: 800; color: #b8860b; background: #fff6d8; border-radius: 10px; padding: 8px 12px; display: inline-block; }

/* T041 官方路线指南链接行 */
.res-guide-links { display: flex; flex-wrap: wrap; gap: 8px; }
.res-guide-links a { padding: 5px 12px; border-radius: 99px; border: 1px solid #f0dcc0; background: #fffcf6; color: #b4640f; font-size: .78rem; font-weight: 700; text-decoration: none; }
.res-guide-links a:hover { border-color: #d97a16; box-shadow: 0 3px 10px rgba(217, 122, 22, .16); }

/* ===== 主题化闯关节点（四线各自图标集） ===== */
.qnode.qicon { background: #fff; padding: 0; }
.qnode.qicon > svg { width: 76%; height: 76%; display: block; pointer-events: none; }
.qnode.qicon.done { background: #fff; box-shadow: 0 6px 16px rgba(26, 158, 84, .25); }
.qnode.qicon.open { background: #fff; }
.qnode.qicon.current { background: #fff; }
.qnode.qicon.locked { background: #eef1f7; }
.qnode.qicon.locked > svg { filter: grayscale(1); opacity: .38; }
.qbadge {
  position: absolute; right: -5px; bottom: -5px; z-index: 3;
  width: 20px; height: 20px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  border: 2px solid #fff; box-shadow: 0 2px 6px rgba(27, 42, 74, .22);
  pointer-events: none;
}
.qbadge.bd-done { background: #1a9e54; color: #fff; }
.qbadge.bd-lock { background: #94a3bd; color: #fff; }

/* ===== 闯关页四线主题背景 ===== */
.quest-page { border-radius: 18px; padding: 14px 12px 26px; display:flex; flex-direction:column; gap:16px; }
.quest-page.line-comp {
  background:
    radial-gradient(34% 16% at 12% 8%, rgba(255, 255, 255, .95), transparent 70%),
    radial-gradient(28% 14% at 78% 4%, rgba(255, 255, 255, .8), transparent 70%),
    radial-gradient(30% 18% at 55% 96%, rgba(255, 179, 217, .25), transparent 70%),
    linear-gradient(180deg, #e8f1ff 0%, #f2ecff 55%, #fdeffb 100%);
}
.quest-page.line-sci {
  background:
    radial-gradient(2px 2px at 18% 12%, rgba(110, 130, 220, .8), transparent 60%),
    radial-gradient(1.6px 1.6px at 64% 6%, rgba(110, 130, 220, .6), transparent 60%),
    radial-gradient(2px 2px at 86% 22%, rgba(103, 203, 230, .7), transparent 60%),
    radial-gradient(1.6px 1.6px at 38% 30%, rgba(110, 130, 220, .5), transparent 60%),
    radial-gradient(2.4px 2.4px at 8% 55%, rgba(142, 162, 255, .6), transparent 60%),
    radial-gradient(36% 22% at 82% 92%, rgba(142, 162, 255, .22), transparent 70%),
    linear-gradient(180deg, #edf0fc 0%, #e9f2fc 60%, #eef6fd 100%);
}
.quest-page.line-ls {
  background:
    radial-gradient(40% 20% at 88% 2%, rgba(255, 233, 184, .8), transparent 70%),
    radial-gradient(30% 16% at 8% 92%, rgba(217, 106, 79, .14), transparent 70%),
    linear-gradient(180deg, #fdf4e6 0%, #fdeee4 58%, #fef6ec 100%);
}
.quest-page.line-vocab {
  background:
    radial-gradient(36% 18% at 85% 4%, rgba(255, 233, 184, .75), transparent 70%),
    radial-gradient(60% 14% at 50% 100%, rgba(111, 191, 127, .22), transparent 72%),
    linear-gradient(180deg, #f0f9ee 0%, #f3faea 60%, #eef7e8 100%);
}

/* 待平台定级：可点击直达"我的-定级录入" */
a.rs-lv-link, a.rc-level-link, a.rr-lv-link { color: inherit; text-decoration: underline dotted; text-underline-offset: 3px; }
a.rs-lv-link:hover, a.rc-level-link:hover, a.rr-lv-link:hover { opacity: .75; }

/* 通关标准旁的公版书直达链接 */
.pass-link { color: var(--primary); font-size: .84rem; white-space: nowrap; }

/* ============ 011 使用入口（与指南/进入/获取语义独立） ============ */
.rl-use { display: inline-flex; align-items: center; gap: 3px; font-size: .74rem; font-weight: 700; color: #2F5FB3; }
.rc-use { color: #2F5FB3 !important; border-color: #b9c9e8 !important; background: #eef3fb !important; }
.res-access-use { color: #2F5FB3 !important; border-color: #b9c9e8 !important; background: #eef3fb !important; }

/* ============ T066 资源库阶段筛选 ============ */
.res-stagebar { margin: 12px 0; }
.res-stage-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.res-stage-chip {
  border: 1px solid var(--border); background: #fff; border-radius: 999px;
  padding: 6px 14px; font-size: .8rem; font-weight: 600; color: var(--ink-2);
}
.res-stage-chip:hover { border-color: #7a4fd7; color: #7a4fd7; }
.res-stage-chip.on { background: #7a4fd7; border-color: #7a4fd7; color: #fff; }
.res-stage-chip.cur { border-color: #7a4fd7; box-shadow: 0 0 0 2px #7a4fd71a; }
.res-item.res-dim { opacity: .45; }
.res-item.res-dim .res-access a { pointer-events: auto; }
.res-stage-fit {
  display: inline-flex; align-items: center; margin-left: 8px; padding: 2px 8px;
  border-radius: 999px; background: #16845b1a; color: #16845b;
  font-size: .72rem; font-weight: 700; vertical-align: middle;
}

/* ============ T067 极简路线 + 精品推荐 / T068 积分总览 ============ */
.minimal-card .mrow { border-top: 1px dashed var(--border); padding: 10px 0; }
.minimal-card .mrow.mine { background: #16845b08; border-radius: 10px; padding: 10px; margin-top: 6px; border-top: none; }
.minimal-card .mrow-head { display: flex; align-items: center; gap: 8px; }
.minimal-card .mrow-head b { font-size: .92rem; }
.minimal-card .mrow-head span { color: var(--ink-3); font-size: .78rem; }
.minimal-card .mrow-head em { margin-left: auto; font-style: normal; font-size: .72rem; font-weight: 700; color: #16845b; background: #16845b1a; border-radius: 999px; padding: 2px 8px; }
.minimal-card .mrow-items { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.minimal-card .mitem { display: inline-flex; align-items: center; gap: 8px; border: 1px solid var(--border); border-radius: 10px; padding: 5px 10px; font-size: .8rem; }
.minimal-card .mitem i { font-style: normal; display: inline-flex; gap: 6px; }
.minimal-card .mitem a { font-weight: 700; }
.featured-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; }
.feat-item { display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: 12px; padding: 12px; }
.feat-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.feat-head b { min-width: 0; font-size: .9rem; }
.feat-cat { flex: none; font-size: .7rem; color: #d7434f; background: #d7434f1a; border-radius: 999px; padding: 2px 8px; }
.feat-item p { margin: 6px 0 8px; font-size: .8rem; color: var(--ink-2); }
.feat-item .res-access { margin-top: auto; }
.points-overview .points-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.pt-cell { display: flex; flex-direction: column; gap: 2px; border: 1px solid var(--border); border-radius: 12px; padding: 12px; text-decoration: none; }
.pt-cell b { font-size: 1.4rem; color: var(--ink); }
.pt-cell span { font-size: .82rem; font-weight: 700; color: var(--ink-2); }
.pt-cell i { font-style: normal; font-size: .72rem; color: var(--ink-3); }
@media (max-width: 767px) { .points-overview .points-grid { grid-template-columns: 1fr; } }

/* 调整级别页：审核提醒文案框 */
.adj-notice { background: var(--info-bg, #eef4ff); border: 1px dashed #b9c8e4; border-radius: 8px; padding: 10px 12px; font-size: .82rem; line-height: 1.7; color: var(--ink-2, #33405e); word-break: break-all; }
.meta-item small { display:block; color:var(--muted); font-size:.68rem; margin-top:2px; }
.adj-bulk-grid { display:flex; flex-direction:column; gap:7px; margin:12px 0; }
.adj-bulk-row { display:grid; grid-template-columns:minmax(0,1fr) minmax(150px, 42%); gap:10px; align-items:center; padding:9px 10px; border:1px solid #e4eaf5; border-radius:9px; background:#fbfcff; }
.adj-bulk-row b, .adj-bulk-row small { display:block; }
.adj-bulk-row b { color:var(--ink); font-size:.84rem; }
.adj-bulk-row small { color:var(--muted); font-size:.72rem; margin-top:2px; }
.adj-bulk-row select { min-width:0; }
.adj-bulk-auto { background:#fffaf0; border-color:#f0dfbb; }
.adj-bulk-auto > span { color:#9a641b; font-size:.78rem; text-align:right; }
@media (max-width:640px) { .adj-bulk-row { grid-template-columns:1fr; gap:6px; } .adj-bulk-auto > span { text-align:left; } }

/* ===== 今日学习计划：任务子卡片（修复文字挤在一起） ===== */
.study-card .study-week-note { margin: 8px 0 12px; padding: 7px 12px; border-radius: 8px; background: var(--info-bg, #eef4ff); font-size: .84rem; color: var(--ink-2, #33405e); }
.study-rotation { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:6px; margin:-4px 0 12px; }
.study-rotation-day { display:flex; flex-direction:column; gap:3px; min-width:0; padding:7px 6px; border:1px solid #e4eaf5; border-radius:8px; background:#fafcff; }
.study-rotation-day b { color:var(--blue,#2f5fb3); font-size:.78rem; }
.study-rotation-day i { overflow:hidden; color:var(--ink-2,#33405e); font-size:.72rem; font-style:normal; line-height:1.35; text-overflow:ellipsis; white-space:nowrap; }
.study-rotation-day.review { background:#fff9ed; border-color:#f2dba6; }
.study-rotation-day.review b { color:var(--amber,#b45309); }
.study-route-list { display:flex; flex-direction:column; gap:6px; margin:0 0 12px; }
.study-route-list-title { color:var(--ink-2,#33405e); font-size:.82rem; font-weight:700; }
.study-route-item { display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:8px; align-items:center; padding:7px 9px; border:1px solid #e4eaf5; border-radius:8px; background:#fff; }
.study-route-item.active { border-color:#9bb8ed; background:#f5f8ff; }
.study-route-item > div { min-width:0; }
.study-route-item b, .study-route-item small { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.study-route-item b { color:var(--ink,#1d2b4f); font-size:.82rem; }
.study-route-item small { color:var(--muted,#6b7892); font-size:.72rem; }
.study-route-dot { width:8px; height:8px; border-radius:50%; background:#5b7cce; }
.study-route-dot.aux { background:#c17a28; }
.study-tasks { display: flex; flex-direction: column; gap: 10px; margin: 4px 0 12px; }
.study-task { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 12px 14px; border: 1px solid #e4eaf5; border-radius: 10px; background: #fafcff; }
.study-task > div { flex: 1; min-width: 0; }
.study-task b { display: block; font-size: .95rem; margin-bottom: 2px; }
.study-task span { display: block; font-size: .8rem; color: var(--amber, #b45309); margin-bottom: 4px; }
.study-task p { margin: 0; font-size: .84rem; color: var(--muted); line-height: 1.6; }
.study-task .btn { flex: none; }

/* Shared learning-path cards and seven-day execution list. */
.learning-card-shell { display:flex; flex-direction:column; gap:12px; }
.learning-card { display:flex; flex-direction:column; gap:10px; min-width:0; padding:14px; border:1px solid #e4eaf5; border-radius:12px; background:#fbfdff; }
.learning-card-head { display:flex; align-items:center; gap:9px; min-width:0; }
.learning-card-icon { display:inline-flex; color:var(--lc,var(--primary)); }
.learning-card-head > div { min-width:0; flex:1; }
.learning-card-head b,.learning-card-head small { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.learning-card-head small { color:var(--muted); font-size:.74rem; margin-top:2px; }
.learning-card-status { flex:none; color:var(--lc,var(--primary)); font-size:.72rem; font-weight:750; }
.learning-card-level { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.learning-card-level b { color:var(--ink); font-size:.86rem; }
.learning-card-level span { color:var(--muted); font-size:.72rem; }
.learning-card-action { margin:0; color:var(--muted); font-size:.82rem; line-height:1.55; }
.learning-card-footer { display:flex; align-items:center; gap:8px; flex-wrap:wrap; color:var(--muted); font-size:.74rem; }
.learning-card-footer span { margin-right:auto; }
.daily-task-list { display:flex; flex-direction:column; gap:8px; margin:14px 0; padding:14px; border:1px solid #e4eaf5; border-radius:12px; background:#fbfdff; }
.daily-task-head { display:flex; justify-content:space-between; gap:10px; align-items:baseline; margin-bottom:2px; }
.daily-task-head span { color:var(--muted); font-size:.74rem; }
.daily-task { display:flex; gap:10px; padding:10px 0; border-top:1px solid #edf1f7; }
.daily-task-day { flex:none; width:42px; color:var(--primary); font-size:.76rem; font-weight:800; }
.daily-task b { display:block; font-size:.82rem; }
.daily-task p { margin:3px 0; color:var(--muted); font-size:.8rem; line-height:1.5; }
.daily-task small { color:#7c8aa5; font-size:.72rem; }
.rc-ungraded { margin:8px 0; padding:9px 11px; border-radius:8px; background:#fff8e6; color:#8a5a00; font-size:.8rem; }
.stage-match { margin-top:8px; padding:9px 11px; border-radius:8px; background:#f2f6ff; color:#31548f; font-size:.82rem; }
@media (max-width:640px) {
  .learning-card-footer span { flex-basis:100%; margin-right:0; }
  .daily-task-head { display:block; }
  .daily-task-head span { display:block; margin-top:3px; }
}
.study-settings { display: flex; align-items: center; gap: 14px; padding-top: 10px; border-top: 1px dashed #e4eaf5; font-size: .86rem; color: var(--ink-2); }
.study-settings .select { width: auto; display: inline-block; margin: 0 4px; }
@media (max-width:640px) { .study-rotation { grid-template-columns:repeat(2,minmax(0,1fr)); } .study-rotation-day i { white-space:normal; } .study-settings { align-items:flex-start; flex-direction:column; gap:8px; } }

/* ===== 极简路线：查看完整路线链接按钮 ===== */
.minimal-more { display: inline-flex; align-items: center; gap: 6px; margin-top: 12px; padding: 9px 18px; border-radius: 999px;
  border: 1px solid var(--primary, #2f5fb3); color: var(--primary, #2f5fb3); font-size: .86rem; font-weight: 600; text-decoration: none; }
.minimal-more:hover { background: var(--primary, #2f5fb3); color: #fff; }

/* ===== 积分明细页 ===== */
.ptx-item { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 9px 0; border-bottom: 1px solid #eef1f7; font-size: .88rem; }
.ptx-item:last-child { border-bottom: none; }
.ptx-item .ptx-why { color: var(--ink-2, #33405e); }
.ptx-item .ptx-at { color: var(--muted); font-size: .76rem; display: block; margin-top: 2px; }
.ptx-item b.pos { color: #1a9e54; }
.ptx-item b.neg { color: #c0392b; }

/* ===== 周模型：本周安排与进度 ===== */
.week-plan { margin-bottom: 16px; padding: 12px 14px; border: 1px dashed #c9d6f2; border-radius: 10px; background: #f6f9ff; }
.week-plan b { display: block; font-size: .9rem; margin-bottom: 4px; }
.week-plan p { margin: 0 0 10px; font-size: .8rem; color: var(--muted); line-height: 1.65; }
.week-dots { display: flex; gap: 7px; }
.week-dots i { width: 26px; height: 26px; border-radius: 8px; background: #e8edf6; color: #9aa7c4; font-style: normal; font-size: .74rem; display: flex; align-items: center; justify-content: center; font-weight: 700; }
.week-dots i.on { background: #1a9e54; color: #fff; }
.week-progress { margin-bottom: 10px; font-size: .82rem; color: var(--muted); text-align: center; }
.week-progress b { color: var(--primary); }
.btn.week { background: linear-gradient(135deg, #b58a24, #d9a832); }
.btn.week:disabled { background: #cdd5e4; color: #fff; cursor: not-allowed; }

/* ===== 庆祝动画 ===== */
.celebrate { position: fixed; inset: 0; z-index: 2000; pointer-events: none; overflow: hidden; }
.celebrate .ce-title { position: absolute; left: 50%; top: 38%; transform: translate(-50%, -50%); font-size: 1.5rem; font-weight: 800; color: var(--ink); background: rgba(255,255,255,.92); padding: 14px 26px; border-radius: 999px; box-shadow: 0 16px 40px -12px rgba(27,42,74,.3); animation: cePop .5s cubic-bezier(.34,1.56,.64,1); }
.celebrate i { position: absolute; top: -6vh; font-style: normal; font-size: 20px; animation: ceFall 2.4s ease-in forwards; }
.celebrate-day i { font-size: 16px; animation-duration: 1.5s; }
.celebrate.fade { opacity: 0; transition: opacity .4s; }
@keyframes ceFall { to { transform: translateY(112vh) rotate(340deg); } }
@keyframes cePop { from { transform: translate(-50%, -50%) scale(.5); opacity: 0; } to { transform: translate(-50%, -50%) scale(1); opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .celebrate i { animation: none; display: none; } }
