
  :root{
    /* 品牌主色 · 海亮拔尖 RGB(3,126,243) */
    --brand:#037EF3; --brand-d:#0268CC; --brand-dd:#024E9C;
    --brand-l:#E9F3FE; --brand-l2:#D2E7FD;
    --gold:#FBBF24;
    --ink:#0B2E52; --ink2:#0E4079; --canvas:#F1F6FC;
    /* 角色识别色：学生端＝品牌蓝（活力、激励）；教师端＝晴空蔚蓝（工具、后台）。
       两端共用同一套结构与字号，仅换主色调与身份标识，一屏之内即可分辨。 */
    --tea:#1F92E2; --tea-d:#1583CC; --tea-dd:#0E5E98;
    --tea-l:#E6F4FD; --tea-l2:#CFE9FB;
    --tea-ink:#0A3A73; --tea-ink2:#1462AE;
    --txt:#152238; --sub:#64748B; --line:#E3EAF3; --card:#FFFFFF;
    --green:#10B981; --amber:#D97706; --gray:#94A3B8; --red:#EF4444;
    --sh:0 1px 3px rgba(9,30,66,.05),0 8px 24px rgba(9,30,66,.06);
  }
  *{box-sizing:border-box;margin:0;padding:0;}
  html,body{height:100%;}
  body{font-family:"Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
    background:var(--canvas); color:var(--txt); -webkit-font-smoothing:antialiased;}
  button{font-family:inherit;cursor:pointer;border:none;background:none;}
  .btn{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:10px;
    background:var(--brand);color:#fff;font-size:14px;font-weight:600;transition:.15s;}
  .btn:hover{background:var(--brand-d);}
  .btn:disabled{opacity:.5;cursor:not-allowed;}
  .btn.ghost{background:#E9F3FE;color:var(--brand-d);}
  .btn.gold{background:linear-gradient(180deg,#FFD76A,#F59E0B);color:#3A2E00;font-weight:800;
    box-shadow:0 8px 18px rgba(245,158,11,.40),inset 0 2px 3px rgba(255,255,255,.55);}
  .btn.gold:hover{background:linear-gradient(180deg,#FFCE52,#EA8E06);}
  .btn.line{border:1px solid var(--line);background:#fff;color:var(--txt);}
  .btn.sm{padding:5px 11px;font-size:13px;border-radius:8px;}
  .card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:22px;
    box-shadow:0 1px 3px rgba(16,24,40,.04),0 8px 24px rgba(16,24,40,.04);}
  .muted{color:var(--sub);}
  .pill{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;}
  .pill.green{background:#E7F8F0;color:#047857;}
  .pill.indigo{background:#E9F3FE;color:#0268CC;}
  .pill.amber{background:#FEF3E2;color:#B45309;}
  .pill.gray{background:#F1F5F9;color:#64748B;}
  .pill.red{background:#FEE2E2;color:#B91C1C;}
  .pill.gold{background:var(--gold);color:#3A2E00;}

  /* ===== 难度星级：1~6 颗星，实心＝难度梯度、空心＝未达梯度 =====
     统一线性 SVG（不用 emoji），按难度分三档着色：易绿 / 中蓝 / 难红 */
  .dst{display:inline-flex;align-items:center;gap:0;line-height:0;vertical-align:-2px;}
  .dst svg{display:block;}
  .dst.e{color:#059669;}
  .dst.m{color:#0268CC;}
  .dst.h{color:#DC2626;}
  /* 星级难度胶囊：整块不换行（表格窄列里「基础」曾被压成两行） */
  .pill.dpl{gap:6px;padding:3px 9px;white-space:nowrap;}
  .pill.dpl em{font-style:normal;font-weight:700;}
  .pill.dpl.green .dst.e{color:#047857;}
  .pill.dpl.indigo .dst.m{color:#0268CC;}
  .pill.dpl.red .dst.h{color:#B91C1C;}

  /* 数学公式 */
  .frac{display:inline-flex;flex-direction:column;vertical-align:middle;text-align:center;margin:0 3px;font-size:.92em;}
  .frac .num{padding:0 4px;border-bottom:1px solid currentColor;}
  .frac .den{padding:0 4px;}
  .rad{border-top:1px solid currentColor;padding:0 2px;}
  .mtext{font-style:normal;}

  /* ===== 品牌标识：logo 直接沉入底色，不做白色托底卡片 =====
     尺寸不再写死 px，改为随容器自适应：侧栏吃满可用宽度、登录页随视口伸缩 */
  .brand{display:flex;flex-direction:column;align-items:flex-start;gap:10px;}
  /* 系统名：位于 logo 正下方、水平居中，字号随容器（侧栏宽度）等比缩放，
     并补偿中文末字后的字距，让视觉重心真正落在中轴线上 */
  .brand-name{display:block;width:100%;text-align:center;font-weight:600;color:#9FC4EA;
    font-size:11.5px;letter-spacing:.22em;padding-left:.22em;line-height:1.5;}
  .brand-logo{display:block;width:100%;line-height:0;}
  .brand-logo img{display:block;width:100%;height:auto;}
  .brand-logo.lg{max-width:min(100%,232px);}
  /* 深色底使用「深色底彩色版」：字标反白、徽标保持品牌蓝、红色点缀保留；
     以柔和落影融入底色，而不是压成一片全白 */
  .brand-logo.dark img{filter:drop-shadow(0 3px 10px rgba(1,20,48,.45));}
  .avatar{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;flex:none;
    background:linear-gradient(135deg,var(--brand),var(--brand-d));color:#fff;font-weight:900;font-size:22px;}

  /* ===== 登录页 ===== */
  #login{min-height:100vh;display:grid;grid-template-columns:1.12fr .88fr;}
  .login-left{position:relative;overflow:hidden;color:#fff;padding:52px 58px;
    display:flex;flex-direction:column;
    background:linear-gradient(152deg,#012E60 0%,#0258B0 44%,#037EF3 76%,#1AA2F9 100%);}
  .login-left:before{content:"";position:absolute;inset:0;
    background-image:linear-gradient(rgba(255,255,255,.07) 1px,transparent 1px),
                     linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px);
    background-size:52px 52px;
    -webkit-mask-image:radial-gradient(120% 95% at 16% 28%,#000 0%,transparent 74%);
    mask-image:radial-gradient(120% 95% at 16% 28%,#000 0%,transparent 74%);}
  .login-left:after{content:"";position:absolute;right:-160px;top:-150px;width:470px;height:470px;border-radius:50%;
    background:radial-gradient(circle,rgba(255,255,255,.22),transparent 66%);}
  .ll-arc{position:absolute;left:-150px;bottom:-200px;width:440px;height:440px;border-radius:50%;
    border:64px solid rgba(255,255,255,.10);}
  .ll-ring{position:absolute;right:70px;bottom:110px;width:148px;height:148px;border-radius:50%;
    border:1px solid rgba(255,255,255,.30);}
  .ll-inner{position:relative;z-index:2;display:flex;flex-direction:column;
    justify-content:space-between;flex:1;gap:44px;}
  .ll-tag{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.6px;
    background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.26);
    padding:6px 13px;border-radius:999px;margin-bottom:20px;align-self:flex-start;}
  .ll-tag i{width:6px;height:6px;border-radius:50%;background:#8FD0FF;display:block;}
  .login-left h1{font-size:40px;line-height:1.24;margin-bottom:16px;font-weight:800;letter-spacing:.5px;}
  .login-left .ll-sub{color:#CFE6FB;font-size:15.5px;line-height:1.85;max-width:450px;}
  .ll-feats{list-style:none;margin-top:26px;display:flex;flex-direction:column;gap:11px;}
  .ll-feats li{display:flex;align-items:center;gap:11px;font-size:14px;color:#E4F0FC;}
  .ll-feats li b{color:#fff;font-weight:800;}
  .ll-feats .tick{width:20px;height:20px;border-radius:50%;flex:none;display:grid;place-items:center;
    background:rgba(255,255,255,.20);font-size:11px;}
  .ll-mid{flex:1;display:flex;flex-direction:column;justify-content:center;padding:30px 0;}
  .ll-foot{font-size:12px;color:#A8CBEE;letter-spacing:.4px;}
  .login-right{display:flex;align-items:center;justify-content:center;padding:48px 40px;background:#fff;}
  .login-box{width:392px;max-width:100%;}
  .lb-head h2{font-size:26px;font-weight:800;letter-spacing:.3px;}
  .lb-head p{color:var(--sub);font-size:14px;margin:8px 0 26px;}
  .lb-logo{display:none;}
  .seg{display:grid;grid-template-columns:1fr 1fr;gap:4px;background:#EDF3FA;border-radius:13px;padding:4px;margin-bottom:24px;}
  .seg button{padding:11px 0;border-radius:10px;font-size:14px;font-weight:700;color:var(--sub);transition:.15s;}
  .seg button.on{background:#fff;color:var(--brand-dd);box-shadow:0 3px 10px rgba(3,126,243,.20);}
  .inp{position:relative;display:flex;align-items:center;border:1px solid var(--line);border-radius:11px;background:#fff;transition:.15s;}
  .inp .ico{width:44px;text-align:center;font-size:14px;flex:none;opacity:.75;}
  .login-box .inp input{flex:1;border:0;outline:0;box-shadow:none;padding:12px 14px 12px 0;
    font-size:14px;font-family:inherit;background:transparent;color:var(--txt);}
  .inp:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(3,126,243,.14);}
  .login-box .btn-lg{width:100%;justify-content:center;padding:14px;font-size:15px;border-radius:12px;margin-top:8px;
    background:linear-gradient(135deg,var(--brand),#119CF7);box-shadow:0 10px 24px rgba(3,126,243,.30);}
  .login-box .btn-lg:hover{background:linear-gradient(135deg,var(--brand-d),var(--brand));}
  .field{margin-bottom:16px;}
  .field label{display:block;font-size:13px;color:var(--sub);margin-bottom:6px;font-weight:600;}
  .field input,.field select,.field textarea{width:100%;padding:11px 13px;border:1px solid var(--line);
    border-radius:10px;font-size:14px;outline:none;font-family:inherit;}
  .field input:focus,.field select:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(3,126,243,.12);}
  .login-box .btn{width:100%;justify-content:center;padding:13px;}
  .hint{font-size:12px;color:var(--gray);margin-top:14px;text-align:center;line-height:1.7;}

  .shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh;}
  .side{background:linear-gradient(180deg,var(--ink),var(--ink2));color:#fff;padding:22px 14px;
    display:flex;flex-direction:column;gap:6px;position:sticky;top:0;height:100vh;overflow:auto;}
  .side .brand{font-size:15px;margin-bottom:14px;padding:0 6px 15px;align-items:center;text-align:center;
    border-bottom:1px solid rgba(255,255,255,.10);container-type:inline-size;}
  .side .brand .brand-logo{width:100%;max-width:170px;margin:2px auto 0;}
  .side .brand .brand-name{font-size:clamp(9.5px,7.4cqw,14px);}
  /* 教师端侧栏：蔚蓝底（比学生端深海军蓝明显更亮更蓝），两端一眼分开 */
  .side.tea{background:linear-gradient(180deg,var(--tea-ink),var(--tea-ink2));}
  .side.tea .brand{border-bottom-color:rgba(214,236,255,.28);}
  .side.tea .brand-name{color:#E4F2FF;}
  .side.tea .nav-item{color:#D4E8FA;}
  .side.tea .nav-item:hover{background:rgba(255,255,255,.14);color:#fff;}
  .side.tea .nav-item.on{background:linear-gradient(135deg,#062B5C,var(--tea-dd));color:#fff;
    box-shadow:0 10px 22px rgba(4,22,48,.42),inset 0 1px 0 rgba(255,255,255,.16);}
  .side.tea .who{background:rgba(6,32,66,.30);}
  .side.tea .who-sub{color:#C6DEF6;border-top-color:rgba(255,255,255,.20);}
  .nav-item{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:10px;color:#A8CBEE;
    font-size:14px;font-weight:600;transition:.15s;}
  .nav-item:hover{background:rgba(255,255,255,.08);color:#fff;}
  .nav-item.on{background:var(--brand);color:#fff;}
  .nav-ico{width:20px;display:inline-flex;align-items:center;justify-content:center;vertical-align:-3px;color:inherit;opacity:.92;}
  .nav-item.on .nav-ico{opacity:1;}
  .nav-ico svg{display:block;}
  .side .spacer{flex:1;}
  .side .who{padding:12px 14px;background:rgba(255,255,255,.06);border-radius:10px;font-size:13px;margin-bottom:8px;}
  .side .who b{display:block;font-size:14px;margin-bottom:2px;}
  /* 身份标识胶囊：学生端蓝、教师端青，位于侧栏用户块最上方 */
  .role-tag{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.6px;
    padding:3px 9px;border-radius:999px;margin-bottom:7px;}
  .role-tag svg{display:block;}
  .role-tag.stu{background:rgba(59,160,255,.20);color:#BEE0FF;border:1px solid rgba(120,190,255,.34);}
  .role-tag.tea{background:rgba(6,32,66,.34);color:#DCEFFF;border:1px solid rgba(214,236,255,.42);}
  /* 侧栏当前段位：只显示当前段位（不写「总段位」等冗余字样） */
  .side .who-seg{display:flex;align-items:center;gap:6px;margin-top:7px;padding-top:7px;
    border-top:1px solid rgba(255,255,255,.12);font-size:12.5px;font-weight:800;color:#FFE9A8;letter-spacing:.2px;}
  .side .who-seg svg{display:block;filter:drop-shadow(0 3px 7px rgba(8,46,82,.5));}
  /* 侧栏用户块内的补充信息：与 who-seg 同一道细分隔线，教师端复用 */
  .side .who-sub{margin-top:7px;padding-top:7px;border-top:1px solid rgba(255,255,255,.12);
    font-size:11.5px;color:#A8CBEE;letter-spacing:.2px;}
  .main{padding:26px 32px;overflow:auto;}
  .topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:16px;flex-wrap:wrap;}
  .topbar h1{font-size:22px;font-weight:800;}
  .topbar .crumb{color:var(--sub);font-size:13px;margin-top:2px;}
  .page-title{font-size:18px;font-weight:800;margin-bottom:14px;}
  /* 标题/按钮/标签内联 SVG 图标：统一垂直对齐 */
  .page-title svg,.dh-t svg,.lk svg,.alertbox svg,.btn svg,.kic svg,.be svg{vertical-align:-3px;}

  /* 学科切换 */
  .subj-tabs{display:flex;gap:8px;margin-bottom:18px;}
  .subj-tabs button{padding:8px 20px;border-radius:10px;border:1px solid var(--line);background:#fff;
    font-weight:600;font-size:14px;color:var(--sub);}
  .subj-tabs button.on{background:var(--brand);color:#fff;border-color:var(--brand);}

  /* ===== 首页：学习成果图 / 段位 / 快捷入口 ===== */
  .hero-grid{display:grid;grid-template-columns:1.06fr .94fr;gap:18px;margin-bottom:18px;}
  .mini-tabs{display:flex;gap:6px;background:#EDF3FA;border-radius:10px;padding:3px;}
  .mini-tabs button{padding:5px 13px;border-radius:8px;font-size:12.5px;font-weight:700;color:var(--sub);}
  .mini-tabs button.on{background:#fff;color:var(--brand-dd);box-shadow:0 2px 7px rgba(3,126,243,.20);}
  /* 统一数据条：成果图 / 概览核心数据 / 学习记录三处共用同一套「细线分隔」样式 */
  .stat-strip{display:flex;align-items:stretch;border:1px solid #E6EFF9;border-radius:14px;overflow:hidden;
    background:linear-gradient(180deg,#F8FBFF,#F1F7FE);margin-bottom:14px;}
  .stat-strip .si{flex:1 1 0;min-width:0;padding:10px 14px;position:relative;}
  .stat-strip .si+.si{border-left:1px solid #E6EFF9;}
  .stat-strip .si b{display:block;font-size:19px;font-weight:800;color:var(--brand-dd);line-height:1.2;letter-spacing:-.3px;}
  .stat-strip .si b i{font-style:normal;font-size:11.5px;font-weight:700;color:var(--sub);letter-spacing:0;}
  .stat-strip .si span{font-size:11px;color:var(--sub);letter-spacing:.2px;}
  .stat-strip .si.hi b{color:#B7791F;}
  .stat-strip .si:before{content:"";position:absolute;left:14px;right:14px;top:0;height:2px;
    background:linear-gradient(90deg,transparent,rgba(3,126,243,.5),transparent);opacity:0;transition:.2s;}
  .stat-strip .si:hover:before{opacity:1;}
  /* 窄栏（学习概览）内的数据条：2×2 排布，避免数字与分母挤在一行 */
  .stat-strip.two{flex-wrap:wrap;}
  .stat-strip.two .si{flex:1 1 46%;}
  .stat-strip.two .si+.si{border-left:none;}
  .stat-strip.two .si:nth-child(even){border-left:1px solid #E6EFF9;}
  .stat-strip.two .si:nth-child(n+3){border-top:1px solid #E6EFF9;}
  /* 成果图图例：一眼区分未开始 / 闯关中 / 已通关，替代长段说明文字 */
  .rd-legend{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:center;margin-top:8px;
    font-size:11.5px;color:var(--sub);}
  .rd-legend .rl2{display:inline-flex;align-items:center;gap:6px;}
  .rd-legend .rl2 i{width:9px;height:9px;border-radius:3px;flex:none;}
  .rd-legend .tip{margin-left:auto;}
  /* ---------- 学情报告：进展 / 阶段成果 / 可行性分析 ---------- */
  .rpt-shipwrap{max-width:700px;margin:0 auto;}
  .rpt-head .page-title{display:inline-flex;align-items:center;gap:8px;}
  .rpt-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;color:var(--sub);
    background:#F7FAFE;border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin:2px 0 14px;}
  .rpt-meta b{color:var(--brand-d);}
  .rpt-meta svg{color:var(--brand);}
  .rpt-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px;}
  .rpt-sub{font-size:12.5px;color:var(--sub);margin-top:4px;line-height:1.7;}
  .rpt-n{font-size:12px;color:var(--sub);white-space:nowrap;}
  .stat-strip .si.warn b{color:var(--red);}
  .stage-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:4px 0 2px;}
  .sg-item{border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:#FBFDFF;min-width:0;}
  .sg-l{display:block;font-size:12px;color:var(--sub);}
  .sg-v{display:block;font-size:22px;font-weight:900;color:var(--ink);letter-spacing:.4px;margin:4px 0 5px;}
  .sg-v i{font-style:normal;font-size:12px;font-weight:600;color:var(--sub);margin-left:3px;}
  .rd-up,.rd-down,.rd-flat{display:inline-block;font-size:11.5px;border-radius:7px;padding:2px 7px;line-height:1.65;}
  .rd-up{background:#E7F8F1;color:#0E8F62;}
  .rd-down{background:#FDECEC;color:#C0392B;}
  .rd-flat{background:#F1F5F9;color:var(--sub);}
  .mile-list{border-left:2px solid var(--brand-l2);margin-left:8px;}
  .mile{position:relative;display:flex;align-items:center;gap:11px;padding:9px 0 9px 16px;}
  .mile:before{content:"";position:absolute;left:-6px;top:15px;width:10px;height:10px;border-radius:50%;
    background:#fff;border:2px solid var(--brand);}
  .mile-ic{width:28px;height:28px;border-radius:9px;flex:none;display:inline-flex;align-items:center;
    justify-content:center;background:var(--brand-l);color:var(--brand-d);}
  .mile-tx{flex:1;min-width:0;display:flex;flex-direction:column;}
  .mile-tx b{font-size:13px;color:var(--txt);font-weight:800;}
  .mile-tx em{font-style:normal;font-size:11.5px;color:var(--sub);}
  .mile-d{font-size:11.5px;color:var(--gray);white-space:nowrap;font-variant-numeric:tabular-nums;}
  .mt-bar{display:flex;height:16px;border-radius:9px;overflow:hidden;background:#EEF3F9;margin:6px 0 10px;}
  .mt-bar i{display:block;height:100%;}
  .mt-b3{background:linear-gradient(90deg,#10B981,#34D399);}
  .mt-b2{background:linear-gradient(90deg,#037EF3,#54A9F8);}
  .mt-b1{background:linear-gradient(90deg,#F59E0B,#FBC02D);}
  .mt-b0{background:#D9E2EC;}
  .mt-legend{display:flex;gap:16px;flex-wrap:wrap;}
  .mt-l{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--sub);}
  .mt-l i{width:9px;height:9px;border-radius:3px;flex:none;}
  .mt-l b{color:var(--txt);}
  .pill-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;}
  .feas-base{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:2px 0 12px;}
  .fb-i{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:#FBFDFF;min-width:0;}
  .fb-i span{display:block;font-size:11.5px;color:var(--sub);}
  .fb-i b{display:block;font-size:19px;font-weight:900;color:var(--ink2);margin-top:3px;}
  .fb-i b i{font-style:normal;font-size:11.5px;font-weight:600;color:var(--sub);margin-left:2px;}
  .feas-table td{font-variant-numeric:tabular-nums;}
  .fx-tag{display:inline-block;font-size:11.5px;font-weight:800;border-radius:7px;padding:2px 9px;}
  .fx-ok{background:#E7F8F1;color:#0E8F62;}
  .fx-mid{background:#FEF6E7;color:#B45309;}
  .fx-risk{background:#FDECEC;color:#C0392B;}
  .fx-na{background:#F1F5F9;color:#64748B;}
  .fx-concl{margin-top:12px;border-radius:14px;padding:13px 15px;display:flex;flex-direction:column;gap:5px;
    border-left:4px solid var(--brand);background:#F7FAFE;}
  .fx-concl.fx-ok{border-left-color:var(--green);background:#F4FCF8;}
  .fx-concl.fx-mid{border-left-color:var(--amber);background:#FFFBF2;}
  .fx-concl.fx-risk{border-left-color:var(--red);background:#FEF6F6;}
  .fx-concl.fx-na{border-left-color:var(--gray);background:#F8FAFC;}
  .fx-concl b{font-size:14px;color:var(--ink);}
  .fx-concl span{font-size:12.5px;color:var(--sub);line-height:1.75;}
  .score-row .sd{font-size:11.5px;color:var(--gray);white-space:nowrap;width:96px;text-align:right;
    font-variant-numeric:tabular-nums;}
  @media (max-width:1180px){ .stage-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
    .feas-base{grid-template-columns:repeat(3,minmax(0,1fr));} }
  @media (max-width:760px){ .stage-grid{grid-template-columns:1fr;} .feas-base{grid-template-columns:1fr 1fr;} }
  /* ---------- 学习成果图 · 星舰形态（深空舰桥面板） ---------- */
  .ship-panel{border-radius:18px;overflow:hidden;border:1px solid #0C2749;position:relative;
    background:radial-gradient(122% 86% at 50% 4%,#0C2E57 0%,#071A32 46%,#03090F 100%);}
  .ship-panel:before{content:"";position:absolute;inset:0;pointer-events:none;
    background:linear-gradient(180deg,rgba(90,190,255,.10),transparent 32%);}
  .ship-hud{position:relative;display:flex;align-items:center;justify-content:space-between;gap:12px;
    flex-wrap:wrap;padding:11px 16px;border-bottom:1px solid rgba(120,196,248,.16);
    font-size:12px;color:#9FC6E8;letter-spacing:.3px;}
  .ship-hud .sh-t{display:inline-flex;align-items:center;gap:7px;font-weight:800;color:#DCEEFF;}
  .ship-hud .sh-t svg{color:#4FB2F2;}
  .ship-hud .sh-v b{color:#7FD3FF;font-size:13.5px;font-weight:800;}
  .ship-hud .sh-v i{font-style:normal;color:#6E93B4;}
  .ship-hud .sh-v em{font-style:normal;color:#FFD76A;font-weight:800;}
  .ship-hud .sh-dot{width:7px;height:7px;border-radius:50%;background:#37E0A0;flex:none;
    box-shadow:0 0 0 3px rgba(55,224,160,.18);animation:shpulse 2.2s ease-in-out infinite;}
  @keyframes shpulse{0%,100%{opacity:1}50%{opacity:.34}}
  .radar-wrap.ship{padding:0;position:relative;}
  .ship-hint{position:absolute;left:0;right:0;bottom:6px;text-align:center;
    font-size:11px;color:#6E93B4;letter-spacing:.3px;pointer-events:none;}
  /* .rln 字号须与 radarSvg 内 FS 一致，否则字体会溢出星舱胶囊 */
  .rln{font-size:11.4px;font-weight:700;letter-spacing:.2px;}
  .ship-panel .radar-node.unlit .rln{fill:#B4CDE6;}
  .ship-panel .radar-node.lit .rln{fill:#1C3A5C;}
  .ship-legend{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:center;
    padding:9px 16px 11px;border-top:1px solid rgba(120,196,248,.14);font-size:11.5px;color:#8FB4D4;}
  .ship-legend .rl2{display:inline-flex;align-items:center;gap:6px;}
  .ship-legend .rl2 i{width:9px;height:9px;border-radius:3px;flex:none;}
  .ship-legend .tip{margin-left:auto;color:#6E93B4;}
  /* ---------- AI 录题（粘贴截图 / 版式分析 / 双栏校对） ---------- */
  .ai-ocr-row{display:flex;gap:8px;align-items:center;margin:10px 0 12px;flex-wrap:wrap;}
  .ai-ocr-row input{flex:1 1 280px;min-width:200px;padding:8px 12px;border:1px solid var(--line);
    border-radius:10px;font-size:13px;outline:none;font-family:inherit;}
  .ai-ocr-row input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(3,126,243,.12);}
  .ai2col{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start;}
  .ai-left,.ai-right{min-width:0;}
  .ai-drop{display:flex;flex-direction:column;align-items:center;gap:4px;padding:18px 14px;
    border:1.5px dashed #C6DBF3;border-radius:14px;background:linear-gradient(180deg,#FBFDFF,#F4F9FF);
    cursor:pointer;transition:.15s;text-align:center;}
  .ai-drop:hover,.ai-drop.on{border-color:var(--brand);background:var(--brand-l);}
  .ai-drop-ic{color:var(--brand);display:inline-flex;}
  .ai-drop-t{font-size:13.5px;font-weight:700;color:var(--txt);}
  .ai-drop-s{font-size:11.5px;color:var(--sub);line-height:1.7;}
  .ai-drop-s b{color:var(--brand-d);}
  .ai-thumbs{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;}
  .ai-thumb{position:relative;width:82px;height:62px;border-radius:10px;overflow:hidden;
    border:1px solid var(--line);background:#F7FAFE;}
  .ai-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
  .ai-thumb .no{position:absolute;left:4px;bottom:3px;font-size:10px;font-weight:800;color:#fff;
    background:rgba(11,46,82,.62);border-radius:6px;padding:0 5px;}
  .ai-thumb .x{position:absolute;right:3px;top:3px;width:18px;height:18px;border-radius:50%;
    background:rgba(11,46,82,.66);color:#fff;display:inline-flex;align-items:center;justify-content:center;
    padding:0;transition:.15s;}
  .ai-thumb .x:hover{background:var(--red);}
  .ai-left textarea{width:100%;margin-top:10px;padding:11px 13px;border:1px solid var(--line);
    border-radius:12px;font-size:13px;line-height:1.75;outline:none;font-family:inherit;resize:vertical;}
  .ai-left textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(3,126,243,.12);}
  .ai-tools{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px;}
  .ai-note{margin-top:9px;font-size:11.5px;color:var(--gray);line-height:1.7;}
  .ai-guide{display:flex;flex-direction:column;align-items:center;gap:7px;padding:28px 20px;text-align:center;
    border:1px dashed #DCE8F6;border-radius:14px;background:#FBFDFF;}
  .ai-guide-ic{color:#B9D6F3;display:inline-flex;}
  .ai-guide-t{font-size:14px;font-weight:700;}
  .ai-guide-s{font-size:12.5px;color:var(--sub);line-height:1.95;text-align:left;}
  .ai-guide-s b{color:var(--brand-d);}
  .ai-parsed-note{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:#047857;
    background:#E7F8F0;border-radius:10px;padding:8px 12px;margin-bottom:10px;}
  .ai-scan{border:1px solid var(--line);border-radius:14px;padding:14px;background:#FBFDFF;}
  .ai-scan-hd{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:12.5px;}
  .ai-scan-bar{height:6px;border-radius:999px;background:#E6EFF9;overflow:hidden;margin-top:6px;}
  .ai-scan-bar i{display:block;height:100%;width:38%;border-radius:999px;
    background:linear-gradient(90deg,var(--brand),#5BD3F5);animation:aiscan 1.1s ease-in-out infinite;}
  @keyframes aiscan{0%{transform:translateX(-100%)}100%{transform:translateX(280%)}}
  .ai-scan-list{display:flex;flex-direction:column;gap:5px;margin-bottom:10px;}
  .ai-scan-row{display:flex;gap:8px;align-items:baseline;font-size:12px;}
  .ai-scan-row .no{font-weight:800;color:var(--brand-d);flex:none;}
  .ai-ocr-note{display:flex;flex-direction:column;gap:5px;font-size:12.5px;line-height:1.85;color:var(--sub);
    background:#F4F8FD;border:1px solid #E4EEFA;border-radius:12px;padding:11px 13px;margin-bottom:10px;}
  .ai-ocr-note b{color:var(--txt);}
  .kp-casc{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:4px}
  .kp-casc .inp.sm{flex:1 1 130px;min-width:118px}
  .kp-casc .casc-sep{color:var(--sub);font-weight:600}
  .ai-locate{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--brand-d);background:#EAF3FF;border:1px solid #CDE3FB;border-radius:9px;padding:8px 12px;margin:14px 0 0}
  .ai-locate b{color:var(--txt)}
  .tree-tools{padding:6px 0 2px}
  .ai-hist{margin-top:14px;}
  .ai-hist-list{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
  .ai-chip{display:inline-flex;align-items:center;gap:4px;background:#F1F5F9;border-radius:999px;
    padding:3px 4px 3px 11px;font-size:12px;font-weight:600;color:#64748B;}
  .ai-chip>span{cursor:pointer;}
  .ai-chip>span:hover{color:var(--brand-d);}
  .ai-chip .x{width:17px;height:17px;border-radius:50%;background:#E2E8F0;color:#64748B;
    display:inline-flex;align-items:center;justify-content:center;padding:0;transition:.15s;}
  .ai-chip .x:hover{background:var(--red);color:#fff;}
  @media (max-width:1180px){ .ai2col{grid-template-columns:1fr;} }
  /* 学习记录折线图 */
  .tr-wrap{position:relative;border-radius:14px;overflow:hidden;
    background:linear-gradient(180deg,#FCFEFF 0%,#F5FAFF 100%);border:1px solid #EAF2FB;padding:6px 4px 2px;}
  .tr-ax{font-size:10.5px;font-weight:600;fill:#8AA3BC;}
  .tr-ax.gold{fill:#C98A12;}
  .tr-pt{cursor:pointer;}
  .tr-pt .tr-dot,.tr-pt .tr-dot2{transition:.18s ease;}
  .tr-pt:hover .tr-dot{r:13;opacity:.26;}
  .tr-pt:hover .tr-dot2{r:5.6;stroke-width:2.8;}
  .tr-lg{display:flex;align-items:center;gap:7px;justify-content:center;margin-top:8px;font-size:11.5px;color:var(--sub);}
  .tr-lg span{display:inline-block;width:20px;height:3px;border-radius:2px;}
  .tr-lg span.a{background:linear-gradient(90deg,#0268CC,#3FC0FF);}
  .tr-lg span.b{background:repeating-linear-gradient(90deg,#F0A81C 0 5px,transparent 5px 9px);margin-left:12px;}
  /* 按天呈现：一天一条轨道 + 一天的柱 + 周几副标签 */
  .tr-ax2{font-size:9.5px;font-weight:600;fill:#AFC2D6;}
  .tr-ax.now{fill:var(--brand-dd);font-weight:800;}
  .tr-hint{font-size:12.5px;font-weight:700;fill:#93A9C0;}
  .tr-hint2{font-size:11px;font-weight:600;fill:#B6C8DA;}
  .tr-lg span.bar{width:9px;height:12px;border-radius:3px;margin-right:2px;
    background:linear-gradient(180deg,#8FCBFF,#037EF3);}
  .tr-pt.today .tr-dot2{stroke-width:2.6;}
  @media(max-width:640px){.stat-strip{flex-wrap:wrap;}
    .stat-strip .si{flex:1 1 50%;}
    .stat-strip .si+.si{border-left:none;}
    .stat-strip .si:nth-child(even){border-left:1px solid #E6EFF9;}
    .stat-strip .si:nth-child(n+3){border-top:1px solid #E6EFF9;}}
  .radar-wrap{position:relative;padding:4px 0 0;}
  .radar-wrap svg{transform-origin:center;animation:rin .7s ease-out both;}
  .rln{font-size:11.4px;font-weight:700;fill:#243B53;}
  .rlv{font-size:10.5px;font-weight:800;letter-spacing:.2px;}
  .rtick{font-size:9.5px;font-weight:600;fill:#A6BDD6;}
  .rbig{font-size:21px;font-weight:800;fill:#037EF3;letter-spacing:-.4px;}
  .rbig2{font-size:13px;font-weight:800;fill:#7C93AC;}
  .rsub{font-size:9.5px;font-weight:700;fill:#7C93AC;letter-spacing:.3px;}
  /* 未点亮：整体压暗，开始闯关后才点亮 */
  .radar-node.unlit .rl-pill{fill:#F7F9FC;stroke-opacity:.5;}
  .radar-node.unlit .rln{fill:#C3D6EA;}
  .ship-panel .radar-node:hover .rfill{opacity:1;}
  /* 悬停：该章节模块（胶囊 + 顶点 + 引出线）同步动态变化 */
  .radar-node .rl-pill,.radar-node .rbar,.radar-node .rlead,.radar-node .rln,.radar-node .rlv{transition:.18s ease;}
  .radar-node .rzoom{transform-box:fill-box;transform-origin:center;transition:transform .18s ease;}
  .radar-node .rdot{transform-box:fill-box;transform-origin:center;transition:transform .18s ease;}
  .radar-node:hover .rzoom{transform:scale(1.06);}
  .radar-node:hover .rdot{transform:scale(1.4);}
  .radar-node:hover .rl-pill{fill:#037EF3;stroke:#037EF3;stroke-opacity:.9;}
  .radar-node:hover .rbar{fill:#FFFFFF;opacity:1;}
  .radar-node:hover .rlead{stroke-opacity:.85;stroke-width:1.6;stroke-dasharray:none;}
  .radar-node:hover .rln{fill:#FFFFFF;}
  .radar-node:hover .rlv{fill:#EAF5FF;}
  .radar-node:hover .rdot-o{opacity:.42;}
  /* 未开始：悬停用石板灰反色（与已开始的品牌蓝明显区分） */
  .radar-node.unlit:hover .rl-pill{fill:#64748B;stroke:#64748B;stroke-opacity:.9;stroke-dasharray:none;}
  @keyframes rin{from{opacity:0;transform:scale(.97);}to{opacity:1;transform:scale(1);}}
  .sec-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;}
  .sec-head .page-title{margin-bottom:0;}
  .quick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(216px,1fr));gap:12px;}
  .qk{display:flex;align-items:center;gap:13px;padding:14px 16px;border-radius:14px;cursor:pointer;
    background:linear-gradient(120deg,#F7FBFF,#EDF5FE);border:1px solid var(--line);transition:.18s;}
  .qk:hover{transform:translateY(-2px);border-color:#BCDCFB;box-shadow:0 12px 26px rgba(3,126,243,.16);}
  .qk .qi{width:42px;height:42px;border-radius:13px;flex:none;display:grid;place-items:center;font-size:19px;color:#fff;
    background:linear-gradient(135deg,var(--brand),#3AA0F8);box-shadow:0 7px 16px rgba(3,126,243,.28);}
  .qk.gold .qi{background:linear-gradient(135deg,#FBBF24,#F59E0B);box-shadow:0 7px 16px rgba(245,158,11,.30);}
  .qk .qt{font-size:14px;font-weight:800;letter-spacing:.2px;}
  .qk .qs{font-size:11.5px;color:var(--sub);margin-top:3px;line-height:1.5;}
  .qk .arrow{margin-left:auto;color:var(--brand);font-weight:800;}
  .qk .qi svg{display:block;}
  .qk .qi.g1{background:linear-gradient(135deg,#037EF3,#2FA6F7);}
  .qk .qi.g2{background:linear-gradient(135deg,#0E9AA7,#22C1B6);box-shadow:0 7px 16px rgba(14,154,167,.28);}
  .qk .qi.g3{background:linear-gradient(135deg,#F59E0B,#FBBF24);box-shadow:0 7px 16px rgba(245,158,11,.30);}
  .qk .qi.g4{background:linear-gradient(135deg,#F97316,#FB923C);box-shadow:0 7px 16px rgba(249,115,22,.28);}
  .qk .qi.g5{background:linear-gradient(135deg,#7C5CFF,#A78BFA);box-shadow:0 7px 16px rgba(124,92,255,.28);}
  .qk .qi.g6{background:linear-gradient(135deg,#0E4079,#1E6FD9);}
  /* 继续挑战：整行横卡（位于学习成果图 / 学习概览下方） */
  .chg-card{position:relative;overflow:hidden;border-radius:16px;padding:17px 20px;color:#fff;
    display:flex;align-items:center;gap:18px;flex-wrap:wrap;
    background:linear-gradient(126deg,#02346E 0%,#037EF3 55%,#2FA6F7 100%);box-shadow:0 16px 34px rgba(3,126,243,.26);}
  .chg-card::before{content:"";position:absolute;right:-48px;top:-58px;width:196px;height:196px;border-radius:50%;pointer-events:none;
    background:radial-gradient(circle,rgba(255,255,255,.20),rgba(255,255,255,0) 70%);}
  .chg-card::after{content:"";position:absolute;top:0;left:-60%;width:44%;height:100%;transform:skewX(-20deg);pointer-events:none;
    background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent);animation:rcshine 5.6s ease-in-out infinite;}
  .chg-main{flex:1;min-width:230px;position:relative;z-index:2;}
  .chg-chip{display:inline-block;font-size:11px;font-weight:800;letter-spacing:.4px;padding:3px 10px;border-radius:99px;
    background:rgba(255,255,255,.20);border:1px solid rgba(255,255,255,.30);}
  .chg-ic{width:52px;height:52px;border-radius:15px;flex:none;display:grid;place-items:center;color:#fff;
    background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.28);}
  .chg-ic svg{display:block;filter:drop-shadow(0 3px 7px rgba(4,32,72,.45));}
  .chg-t{font-size:16.5px;font-weight:800;letter-spacing:.2px;line-height:1.35;margin-top:7px;}
  .chg-s{font-size:12px;color:#D8EBFD;margin-top:4px;}
  .chg-ring{flex:none;position:relative;}
  .chg-ring i{position:absolute;inset:0;display:grid;place-items:center;font-size:13px;font-weight:800;color:#fff;font-style:normal;}
  .chg-bar{height:7px;border-radius:99px;background:rgba(255,255,255,.24);overflow:hidden;margin-top:11px;max-width:460px;position:relative;z-index:2;}
  .chg-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#FDE68A,#FBBF24);transition:width .4s;}
  .chg-btns{display:flex;gap:9px;flex-wrap:wrap;position:relative;z-index:2;}
  .chg-btns .btn.gold{background:#fff;color:#0268CC;border-color:#fff;box-shadow:0 8px 18px rgba(2,40,90,.28);}
  .chg-btns .btn.gold:hover{background:#EAF5FF;}
  .chg-btns .btn.ghost{background:rgba(255,255,255,.16);color:#fff;border-color:rgba(255,255,255,.42);}
  .chg-btns .btn.ghost:hover{background:rgba(255,255,255,.28);}
  .quick-card .quick-grid{grid-template-columns:repeat(3,minmax(0,1fr));}
  @media(max-width:1080px){.quick-card .quick-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
  @media(max-width:560px){.quick-card .quick-grid{grid-template-columns:1fr;}}
  @media(max-width:860px){.chg-btns{width:100%;}}
  /* 学习概览内的功能入口（知识图谱 / 闯关路线 / 错题本），与概览融为一体 */
  .ov-quick{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-top:12px;
    border:1px solid #E6EFF9;border-radius:14px;overflow:hidden;background:linear-gradient(180deg,#F8FBFF,#F1F7FE);}
  .ov-quick .oq{display:flex;align-items:center;gap:9px;padding:11px 13px;cursor:pointer;transition:.18s;position:relative;}
  .ov-quick .oq+.oq{border-left:1px solid #E6EFF9;}
  .ov-quick .oq:hover{background:rgba(3,126,243,.07);}
  .ov-quick .oi{width:31px;height:31px;border-radius:10px;flex:none;display:grid;place-items:center;color:#fff;}
  .ov-quick .oi svg{display:block;filter:drop-shadow(0 2px 5px rgba(3,26,58,.34));}
  .ov-quick .oi.c1{background:linear-gradient(135deg,#037EF3,#3FB2FF);box-shadow:0 5px 12px rgba(3,126,243,.34);}
  .ov-quick .oi.c2{background:linear-gradient(135deg,#0E9AA7,#22C1B6);box-shadow:0 5px 12px rgba(14,154,167,.34);}
  .ov-quick .oi.c3{background:linear-gradient(135deg,#F97316,#FBBF24);box-shadow:0 5px 12px rgba(249,115,22,.34);}
  .ov-quick .ot{font-size:12.5px;font-weight:800;letter-spacing:.2px;line-height:1.25;display:block;}
  .ov-quick .os{display:block;font-size:10.5px;color:var(--sub);margin-top:2px;}
  .ov-quick.q4{grid-template-columns:repeat(4,minmax(0,1fr));}
  @media(max-width:1180px){.ov-quick.q4{grid-template-columns:1fr 1fr;}
    .ov-quick.q4 .oq:nth-child(odd){border-left:none;}
    .ov-quick.q4 .oq:nth-child(n+3){border-top:1px solid #E6EFF9;}}
  @media(max-width:560px){.ov-quick{grid-template-columns:1fr;}
    .ov-quick .oq+.oq{border-left:none;border-top:1px solid #E6EFF9;}}
  .seg-svg{display:block;filter:drop-shadow(0 4px 9px rgba(8,46,82,.45));}
  .pill.indigo svg,.hh-badge svg{vertical-align:-4px;}

  /* ===== 题目导航器 / 关联知识点标签 ===== */
  .qmeta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
  .qmeta .lk{font-size:12.5px;font-weight:700;color:var(--brand-d);background:#E9F3FE;padding:3px 10px;
    border-radius:999px;cursor:pointer;}
  .qmeta .lk:hover{background:#D2E7FD;}
  .qgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:7px;max-height:230px;overflow:auto;
    padding:4px 2px;}
  .qdot{height:36px;border-radius:9px;border:1px solid var(--line);background:#fff;font-size:12.5px;font-weight:700;
    color:var(--sub);transition:.14s;}
  .qdot:hover{border-color:var(--brand);color:var(--brand);}
  .qdot.ok{background:#E7F8F0;border-color:#A7F3D0;color:#047857;}
  .qdot.bad{background:#FEE2E2;border-color:#FECACA;color:#B91C1C;}
  .qdot.now{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 5px 14px rgba(3,126,243,.34);}

  /* ===== 手写板 ===== */
  .pad-tools{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px;}
  .pad-wrap{position:relative;}
  .pad-wrap canvas{width:100%;height:250px;display:block;border:1px dashed #C7D9EE;border-radius:12px;
    background:#fff;cursor:crosshair;touch-action:none;}
  .pad-tag{position:absolute;right:10px;top:8px;font-size:11px;color:var(--brand-d);background:#E9F3FE;
    padding:2px 8px;border-radius:999px;pointer-events:none;}

  /* ===== 图片 / 附件 ===== */
  .drop{border:1.5px dashed #A8CBEE;border-radius:14px;padding:20px;text-align:center;background:#F8FBFF;
    cursor:pointer;transition:.16s;}
  .drop:hover{border-color:var(--brand);background:#F0F7FF;}
  .drop .ic{font-size:26px;}
  .drop .t1{font-size:13.5px;font-weight:700;margin-top:8px;}
  .drop .t2{font-size:11.5px;color:var(--sub);margin-top:4px;line-height:1.6;}
  .thumb-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px;}
  .thumb{position:relative;width:104px;}
  .thumb img{width:104px;height:76px;object-fit:cover;border-radius:10px;border:1px solid var(--line);display:block;}
  .thumb .x{position:absolute;right:-6px;top:-6px;width:20px;height:20px;border-radius:50%;background:var(--red);
    color:#fff;font-size:12px;display:grid;place-items:center;line-height:1;}
  .shot-row{display:flex;gap:14px;align-items:center;}
  .shot-row img{width:112px;height:62px;object-fit:cover;border-radius:10px;border:1px solid var(--line);}
  .batch-check{width:16px;height:16px;accent-color:var(--brand);cursor:pointer;}

  /* ===== AI 面板 ===== */
  .ai-box{margin-top:14px;border:1px solid #CFE4FB;border-radius:14px;overflow:hidden;background:#F7FBFF;}
  .ai-hd{display:flex;align-items:center;gap:9px;padding:11px 14px;background:linear-gradient(100deg,#EAF3FE,#F7FBFF);
    font-size:13.5px;font-weight:800;color:var(--brand-dd);}
  .ai-hd .tagline{margin-left:auto;font-size:11px;font-weight:600;color:var(--sub);}
  .ai-body{padding:12px 14px;}
  .ai-msg{font-size:13px;line-height:1.85;padding:10px 12px;border-radius:11px;margin-bottom:8px;max-width:92%;}
  .ai-msg.bot{background:#fff;border:1px solid var(--line);}
  .ai-msg.me{background:var(--brand-l);margin-left:auto;}
  .ai-foot{display:flex;gap:8px;padding:0 14px 12px;}
  .ai-foot input{flex:1;padding:10px 12px;border:1px solid var(--line);border-radius:10px;font-size:13px;
    font-family:inherit;outline:none;}
  .ai-foot input:focus{border-color:var(--brand);}
  .ai-note{font-size:11.5px;color:var(--sub);padding:0 14px 12px;line-height:1.6;}

  /* ===== 闯关路线卡 ===== */
  .route-card{display:flex;align-items:center;gap:16px;padding:16px 18px;border-radius:16px;flex-wrap:wrap;position:relative;overflow:hidden;
    background:linear-gradient(118deg,#023E85,#037EF3 58%,#35AAFC);color:#fff;
    box-shadow:0 14px 30px rgba(3,126,243,.24);}
  .route-card::after{content:"";position:absolute;top:0;left:-60%;width:46%;height:100%;transform:skewX(-20deg);
    background:linear-gradient(90deg,transparent,rgba(255,255,255,.30),transparent);animation:rcshine 4.8s ease-in-out infinite;pointer-events:none;z-index:1;}
  @keyframes rcshine{0%,100%{left:-60%}55%{left:130%}}
  .route-card .rc-l{display:flex;align-items:center;gap:13px;}
  .route-card .rc-ic{width:50px;height:50px;border-radius:15px;flex:none;display:grid;place-items:center;font-size:24px;
    background:linear-gradient(150deg,rgba(255,255,255,.96),rgba(255,255,255,.55));border:1px solid rgba(255,255,255,.6);
    box-shadow:inset 0 2px 4px rgba(255,255,255,.7),0 8px 18px rgba(2,46,82,.30);}
  .route-card .rc-t{font-size:16px;font-weight:800;}
  .route-card .rc-s{font-size:12px;color:#D8EBFD;margin-top:3px;}
  .route-card .rc-b{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;}
  .route-card .rc-bar{width:100%;height:7px;border-radius:99px;background:rgba(255,255,255,.24);overflow:hidden;}
  .route-card .rc-bar i{display:block;height:100%;border-radius:99px;background:#fff;transition:width .35s;}

  /* ===== 错题本 / 个人中心 ===== */
  .wb-stat{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
  .wb-stat .s{flex:1;min-width:110px;background:#F7FAFE;border:1px solid var(--line);border-radius:12px;
    padding:11px 13px;}
  .wb-stat .s b{display:block;font-size:20px;font-weight:800;color:var(--brand-d);}
  .wb-stat .s span{font-size:11.5px;color:var(--sub);}
  .srcpill{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;}
  .srcpill.practice{background:#E9F3FE;color:#0268CC;}
  .srcpill.path{background:#FEF3E2;color:#B45309;}
  .km-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(184px,1fr));gap:12px;}
  .km{border:1px solid var(--line);border-radius:13px;padding:14px;background:#fff;text-align:center;}
  .km.on{background:linear-gradient(120deg,#FFFBEB,#FEF3C7);border-color:#FDE68A;}
  .km .e{font-size:26px;line-height:1;}
  .km .n{font-size:13.5px;font-weight:800;margin-top:8px;}
  .km .d{font-size:11.5px;color:var(--sub);margin-top:4px;line-height:1.6;}
  .km.lock{opacity:.52;}
  .avatar-edit{position:relative;flex:none;}
  .avatar-edit .cam{position:absolute;right:-4px;bottom:-4px;width:26px;height:26px;border-radius:50%;
    background:var(--brand);color:#fff;display:grid;place-items:center;font-size:12px;
    box-shadow:0 4px 10px rgba(3,126,243,.36);cursor:pointer;border:2px solid #fff;}
  .kv{display:flex;gap:12px;padding:11px 0;border-bottom:1px dashed var(--line);font-size:14px;}
  .kv:last-child{border:none;}
  .kv .k{width:126px;color:var(--sub);flex:none;}
  .kv .v{font-weight:600;}

  /* ===== 教师端：知识体系拖拽 / 审核 / 历史 ===== */
  .kp-node{cursor:grab;user-select:none;}
  .kp-node.drag{opacity:.45;}
  .kp-node.over{outline:2px dashed var(--brand);outline-offset:2px;}
  .kpi8{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
  .kpi8 .card{padding:16px 18px;}
  .kpi8 .card .lab{font-size:12.5px;color:var(--sub);}
  .kpi8 .card .num{font-size:24px;font-weight:800;margin-top:5px;}
  .kpi8 .card .sub{font-size:11.5px;color:var(--gray);margin-top:3px;}
  .audit{display:flex;gap:10px;padding:9px 0;border-bottom:1px dashed var(--line);font-size:13px;line-height:1.7;}
  .audit:last-child{border:none;}
  .audit .tm{color:var(--gray);flex:none;font-size:12px;width:132px;}
  .recon{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start;}
  .recon .pane{border:1px solid var(--line);border-radius:13px;padding:13px;background:#F8FBFF;min-height:190px;}
  .recon .pane h4{font-size:13px;font-weight:800;margin-bottom:9px;color:var(--brand-dd);}
  .recon .pane img{width:100%;border-radius:10px;border:1px solid var(--line);display:block;}
  .hist-item{display:flex;gap:11px;align-items:center;padding:10px 0;border-bottom:1px dashed var(--line);font-size:13px;}
  .hist-item:last-child{border:none;}
  .hist-item .hq{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .hist-item .hm{color:var(--gray);font-size:11.5px;flex:none;}

  .kp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;}
  .kp-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:15px;cursor:pointer;transition:.15s;}
  .kp-card:hover{border-color:var(--brand);box-shadow:0 6px 18px rgba(3,126,243,.12);transform:translateY(-2px);}
  .kp-card .nm{font-weight:700;font-size:14px;margin-bottom:8px;display:flex;justify-content:space-between;gap:8px;}
  .bar{height:8px;background:#E9F3FE;border-radius:99px;overflow:hidden;}
  .bar > i{display:block;height:100%;background:var(--brand);border-radius:99px;}
  .kp-card .mt{font-size:12px;color:var(--sub);margin-top:8px;}
  .ch-head{font-size:15px;font-weight:800;margin:22px 0 10px;display:flex;align-items:center;gap:10px;}
  .ch-head .cnt{font-size:12px;font-weight:600;color:var(--sub);}

  /* 做题 */
  .quiz{max-width:780px;}
  .quiz .stem{font-size:17px;line-height:1.9;margin:10px 0 20px;}
  .opt{display:flex;gap:12px;align-items:flex-start;padding:13px 16px;border:1px solid var(--line);
    border-radius:12px;margin-bottom:11px;cursor:pointer;transition:.15s;}
  .opt:hover{border-color:var(--brand);}
  .opt.sel{border-color:var(--brand);background:#E9F3FE;}
  .opt.correct{border-color:var(--green);background:#E7F8F0;}
  .opt.wrong{border-color:var(--red);background:#FEE2E2;}
  .opt .mk{width:26px;height:26px;border-radius:8px;background:#F1F5F9;display:grid;place-items:center;
    font-weight:700;color:var(--sub);flex:none;font-size:14px;}
  .opt.correct .mk{background:var(--green);color:#fff;}
  .opt.wrong .mk{background:var(--red);color:#fff;}
  .opt .tx{flex:1;font-size:15px;line-height:1.8;}
  .quiz .fb{margin-top:16px;padding:16px;border-radius:12px;display:none;line-height:1.8;}
  .quiz .fb.show{display:block;}
  .quiz .fb.ok{background:#E7F8F0;color:#047857;}
  .quiz .fb.no{background:#FEE2E2;color:#B91C1C;}
  .quiz .fb.warn{background:#FEF3E2;color:#B45309;}
  .quiz .fb .ansline{margin:8px 0;}
  .quiz .ex-box{margin-top:12px;padding:14px;background:#fff;border-radius:10px;color:var(--txt);font-size:14px;}
  .quiz .fb .ansline .mine{display:inline-block;margin-left:14px;padding:2px 10px;border-radius:8px;
    background:rgba(9,30,66,.05);color:var(--sub);font-size:12.5px;}
  .quiz .fb .ansline .mine b{color:var(--ink);}
  /* 题目元信息条：建议用时 / 分值 / 层级 / 考查能力 */
  .qmeta-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;}
  .qmeta-bar .qm{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:9px;font-size:11.5px;
    font-weight:700;color:var(--ink2);background:#F4F8FD;border:1px solid #E2EDF9;}
  .qmeta-bar .qm i{display:grid;place-items:center;color:var(--brand);}
  .qmeta-bar .qm i svg{display:block;}
  .qmeta-bar .qm.ab{background:linear-gradient(135deg,#EEF7FF,#E4F1FE);border-color:#CBE4FB;color:var(--brand-dd);}
  /* 结构化解析（破题 / 详解 / 归纳 / 警示） */
  .sol-wrap{margin-top:13px;border:1px solid #E2EDF9;border-radius:13px;overflow:hidden;background:#fff;}
  .sol-hd{display:flex;align-items:center;gap:8px;padding:9px 13px;font-size:13.5px;
    background:linear-gradient(90deg,#F2F8FF,#EAF4FE);border-bottom:1px solid #E2EDF9;}
  .sol-hd .sh-ic{display:grid;place-items:center;color:var(--brand);
    filter:drop-shadow(0 1px 3px rgba(3,126,243,.28));}
  .sol-hd .sh-ic svg{display:block;}
  .sol-hd .sh-sub{font-size:11.5px;color:var(--sub);font-weight:600;margin-left:2px;}
  .sol-b{padding:11px 13px;border-top:1px dashed #EAF1FA;}
  .sol-b:first-of-type{border-top:none;}
  .sol-b .sb-h{display:flex;align-items:center;gap:7px;margin-bottom:6px;}
  .sol-b .sb-ic{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;color:#fff;flex:none;}
  .sol-b .sb-ic svg{display:block;}
  .sol-b .sb-n{font-size:12.5px;font-weight:800;letter-spacing:.3px;}
  .sol-b .sb-ai{font-size:10px;font-weight:800;padding:2px 7px;border-radius:99px;color:#5B7A9E;
    background:#EEF4FB;border:1px solid #DCE8F6;letter-spacing:.2px;}
  .sol-b .sb-t{font-size:13.5px;line-height:1.85;color:var(--txt);}
  .sol-b.idea  .sb-ic{background:linear-gradient(135deg,#8B6BFF,#A78BFA);box-shadow:0 3px 8px rgba(124,92,255,.30);}
  .sol-b.idea  .sb-n{color:#6D47D6;}
  .sol-b.solve .sb-ic{background:linear-gradient(135deg,#037EF3,#3FB2FF);box-shadow:0 3px 8px rgba(3,126,243,.30);}
  .sol-b.solve .sb-n{color:var(--brand-dd);}
  .sol-b.sum   .sb-ic{background:linear-gradient(135deg,#0E9AA7,#22C1B6);box-shadow:0 3px 8px rgba(14,154,167,.30);}
  .sol-b.sum   .sb-n{color:#0B7E88;}
  .sol-b.warn  .sb-ic{background:linear-gradient(135deg,#F59E0B,#FBBF24);box-shadow:0 3px 8px rgba(245,158,11,.32);}
  .sol-b.warn  .sb-n{color:#B7791F;}
  .sol-empty{padding:14px;text-align:center;color:var(--sub);font-size:13px;}
  .qnav{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;align-items:center;}
  .prog{color:var(--sub);font-size:13px;}

  /* ===== 图谱管理：左章节树 + 右明细 ===== */
  .kpm{display:grid;grid-template-columns:288px 1fr;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:#fff;}
  .kpm-side{background:#F8FBFF;border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:520px;}
  .kpm-search{display:flex;gap:8px;padding:12px;border-bottom:1px solid var(--line);}
  .kpm-search .inp{flex:1;min-width:0;}
  .kpm-tabs{display:flex;gap:6px;padding:10px 12px 4px;flex-wrap:wrap;}
  .kpm-tabs button{font-size:12.5px;font-weight:700;padding:5px 12px;border-radius:99px;cursor:pointer;
    background:#fff;border:1px solid var(--line);color:var(--sub);transition:.15s;}
  .kpm-tabs button:hover{border-color:#A9D2FC;color:var(--brand-dd);}
  .kpm-tabs button.on{background:linear-gradient(135deg,#037EF3,#3FB2FF);border-color:transparent;color:#fff;
    box-shadow:0 4px 10px rgba(3,126,243,.24);}
  .kpm-tree{flex:1;overflow:auto;padding:10px 10px 4px;max-height:60vh;}
  .kpm-grp{margin-bottom:10px;}
  .kpm-grp-h{display:flex;align-items:center;gap:7px;width:100%;text-align:left;padding:8px 10px;border-radius:10px;
    background:transparent;border:0;cursor:pointer;font-size:13px;color:var(--ink);}
  .kpm-grp-h:hover{background:#EDF4FC;}
  .kpm-grp-h .g-ic{display:grid;place-items:center;color:var(--sub);transition:.2s;}
  .kpm-grp-h .g-ic.on{transform:rotate(90deg);color:var(--brand);}
  .kpm-grp-h b{font-size:13.5px;}
  .kpm-grp-h .g-n{margin-left:auto;font-size:11.5px;color:var(--sub);font-weight:600;}
  .kpm-ch{display:flex;flex-direction:column;gap:3px;width:100%;text-align:left;padding:9px 11px;margin:2px 0 2px 14px;
    border-radius:10px;border:1px solid transparent;background:transparent;cursor:pointer;transition:.15s;}
  .kpm-ch .c-n{font-size:13px;color:var(--ink);font-weight:600;}
  .kpm-ch .c-m{font-size:11px;color:var(--sub);}
  .kpm-ch:hover{background:#EDF4FC;}
  .kpm-ch.on{background:#fff;border-color:var(--brand);box-shadow:0 3px 10px rgba(3,126,243,.14);}
  .kpm-ch.on .c-n{color:var(--brand-dd);}
  .kpm-side-ft{padding:10px 12px;border-top:1px solid var(--line);background:#F2F8FF;}
  .kpm-none{padding:18px 10px;font-size:12.5px;color:var(--sub);text-align:center;}
  .kpm-main{padding:18px 20px;min-width:0;}
  .kpm-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;
    padding-bottom:14px;margin-bottom:6px;border-bottom:1px solid var(--line);}
  .kpm-t{font-size:16px;font-weight:800;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
  .kpm-sub{font-size:12.5px;color:var(--sub);margin-top:5px;}
  .kpm-tb{margin-top:4px;}
  .kpm-tb tr.zero td{opacity:.62;}
  .kpm-link{background:transparent;border:0;padding:0;cursor:pointer;font-size:13.5px;font-weight:700;
    color:var(--ink);text-align:left;border-bottom:1px dashed #BFD8F0;transition:.15s;}
  .kpm-link:hover{color:var(--brand);border-bottom-color:var(--brand);}
  .kpm-crumb{font-size:12.5px;color:var(--sub);}
  .kpm-ops{display:flex;gap:6px;flex-wrap:wrap;}
  .kpm-tip{margin-top:14px;font-size:12px;color:var(--sub);line-height:1.7;}
  /* ===== 横向占比条（知识点错题分布 / 薄弱知识点掌握率） ===== */
  .cause-dist{display:flex;flex-direction:column;gap:9px;margin-top:8px;}
  .cd-row{display:flex;align-items:center;gap:12px;font-size:13px;}
  .cd-n{flex:none;width:150px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .cd-bar{flex:1;min-width:60px;height:9px;border-radius:99px;background:#EDF3FA;overflow:hidden;}
  .cd-bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#037EF3,#5BB6FF);}
  .cd-v{flex:none;width:56px;text-align:right;font-weight:800;color:var(--brand-dd);}
  .cd-v em{font-style:normal;font-size:11px;color:var(--sub);font-weight:600;margin-left:2px;}
  /* ===== 学生分析：学生诊断列表 ===== */
  .ana-tools{display:flex;gap:12px;align-items:center;flex-wrap:wrap;}
  .ana-sort{display:flex;gap:6px;background:#EDF3FA;border-radius:10px;padding:3px;}
  .ana-sort button{font-size:12.5px;font-weight:700;padding:5px 12px;border-radius:8px;cursor:pointer;
    background:transparent;border:0;color:var(--sub);transition:.15s;}
  .ana-sort button:hover{color:var(--brand-dd);}
  .ana-sort button.on{background:#fff;color:var(--brand-dd);box-shadow:0 2px 6px rgba(3,126,243,.16);}
  .ana-search{display:flex;gap:8px;align-items:center;}
  .ana-search .inp{width:200px;}
  .ana-list{display:flex;flex-direction:column;gap:10px;margin-top:14px;}
  .ana-row{border:1px solid var(--line);border-radius:14px;overflow:hidden;transition:.16s;background:#fff;}
  .ana-row:hover{border-color:#BEDCFB;}
  .ana-row.on{border-color:var(--brand);box-shadow:0 8px 22px rgba(3,126,243,.14);}
  .ana-hd{display:flex;align-items:center;gap:14px;width:100%;text-align:left;padding:13px 16px;
    background:transparent;border:0;cursor:pointer;}
  .ana-rk{flex:none;min-width:26px;justify-content:center;font-weight:800;}
  .ana-ava{flex:none;width:34px;height:34px;border-radius:11px;display:grid;place-items:center;
    font-size:13px;font-weight:800;color:#fff;background:linear-gradient(135deg,#037EF3,#57B4FF);}
  .ana-nm{flex:none;display:flex;flex-direction:column;gap:2px;min-width:118px;}
  .ana-nm b{font-size:14px;color:var(--ink);}
  .ana-nm em{font-style:normal;font-size:11.5px;color:var(--sub);}
  .ana-kpis{flex:1;display:flex;gap:20px;justify-content:flex-end;flex-wrap:wrap;}
  .ana-kpis .ak{display:flex;flex-direction:column;align-items:flex-end;gap:2px;}
  .ana-kpis .ak b{font-size:15px;font-weight:800;color:var(--brand-dd);}
  .ana-kpis .ak em{font-style:normal;font-size:11px;color:var(--sub);}
  .ana-kpis .ak.dim b{color:#B6C2D2;}
  .ana-kpis .ak.warn b{color:var(--red);}
  .ana-bar{flex:none;width:96px;height:8px;border-radius:99px;background:#EDF3FA;overflow:hidden;}
  .ana-bar>i{display:block;height:100%;border-radius:99px;}
  .ana-caret{flex:none;color:var(--sub);display:grid;place-items:center;transition:.2s;}
  .ana-caret.on{transform:rotate(90deg);color:var(--brand);}
  .ana-body{padding:0 16px 18px;border-top:1px dashed var(--line);margin-top:2px;}
  .ana-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:22px;margin-top:14px;}
  .ana-col{min-width:0;}
  .ana-t{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:800;color:var(--ink);}
  .ana-t svg{color:var(--brand);flex:none;}
  .ana-t span{font-size:11px;font-weight:600;color:var(--sub);}
  .ana-empty{margin-top:8px;font-size:12.5px;color:var(--sub);}
  .mb{display:flex;gap:8px;align-items:flex-end;height:78px;margin-top:8px;}
  .mb-c{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;height:100%;justify-content:flex-end;}
  .mb-v{font-size:11px;font-weight:800;color:var(--brand-dd);height:14px;}
  .mb-b{width:100%;flex:1;display:flex;align-items:flex-end;background:#F1F6FC;border-radius:7px;overflow:hidden;}
  .mb-b>i{display:block;width:100%;border-radius:7px;background:linear-gradient(180deg,#5BB6FF,#037EF3);}
  .mb-l{font-size:10.5px;color:var(--sub);}
  .score-row{display:flex;align-items:center;gap:14px;margin-bottom:12px;}
  .score-row .nm{width:150px;font-weight:600;font-size:14px;flex:none;}
  .score-row .bar{flex:1;}
  .score-row .val{width:52px;text-align:right;font-weight:700;color:var(--brand-d);flex:none;}
  .wrong-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px;margin-bottom:14px;}
  .wrong-card .stem{font-size:15px;margin-bottom:10px;line-height:1.8;}
  .ans{display:flex;gap:10px;font-size:14px;margin:5px 0;line-height:1.8;}
  .ans .lab{width:76px;color:var(--sub);flex:none;}
  .ans .v.bad{color:var(--red);font-weight:700;}
  .ans .v.good{color:var(--green);font-weight:700;}
  /* 答案与解析折叠：默认收起，点击后展开，避免错题卡片幅面过大 */
  .wrev{margin-top:10px;}
  .wrev-btn{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;
    padding:6px 13px;border-radius:99px;cursor:pointer;color:var(--brand-dd);
    background:#EEF6FF;border:1px solid #CCE3FD;transition:.16s;}
  .wrev-btn:hover{background:#E1EFFF;border-color:#A9D2FC;}
  .wrev-btn.on{color:#fff;background:linear-gradient(135deg,#037EF3,#3FB2FF);border-color:transparent;
    box-shadow:0 5px 12px rgba(3,126,243,.26);}
  .wrev-body{margin-top:10px;padding:12px 14px;border-radius:12px;background:#F7FBFF;border:1px dashed #CFE2F7;}
  .stat4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;}
  .stat4 .card{text-align:center;}
  .stat4 .num{font-size:28px;font-weight:800;color:var(--brand-d);}
  .stat4 .lab{color:var(--sub);font-size:13px;margin-top:4px;}

  .kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:18px;}
  .kpi .card .lab{color:var(--sub);font-size:13px;}
  .kpi .card .num{font-size:28px;font-weight:800;margin-top:6px;}
  .two{display:grid;grid-template-columns:1.25fr 1fr;gap:18px;}
  .feed{display:flex;gap:12px;padding:10px 0;border-bottom:1px dashed var(--line);font-size:14px;}
  .feed:last-child{border:none;}
  .dot{width:9px;height:9px;border-radius:50%;margin-top:6px;flex:none;}
  .table{width:100%;border-collapse:collapse;font-size:14px;}
  .table th{text-align:left;color:var(--sub);font-weight:600;padding:11px 12px;border-bottom:2px solid var(--line);font-size:13px;position:sticky;top:0;background:#fff;}
  .table td{padding:11px 12px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.7;}
  .table tr:hover td{background:#F8FAFF;}
  .table .qcell{max-height:74px;overflow:auto;}
  .filterbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;align-items:center;}
  .filterbar input,.filterbar select{padding:9px 12px;border:1px solid var(--line);border-radius:9px;font-size:13px;outline:none;}
  .filterbar input{min-width:190px;}
  .filterbar input:focus,.filterbar select:focus{border-color:var(--brand);}
  .pager{display:flex;justify-content:space-between;gap:10px;margin-top:14px;color:var(--sub);font-size:13px;align-items:center;flex-wrap:wrap;}
  .mask{position:fixed;inset:0;background:rgba(16,24,40,.45);display:none;align-items:center;justify-content:center;z-index:50;padding:20px;}
  .mask.show{display:flex;}
  .modal{background:#fff;border-radius:16px;width:620px;max-width:96vw;max-height:90vh;overflow:auto;padding:24px;}
  .modal h3{font-size:18px;margin-bottom:16px;}
  .modal .actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;}
  .svg-chart{width:100%;height:auto;display:block;}
  .chip-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;align-items:center;}
  .empty{padding:40px;text-align:center;color:var(--sub);}
  .scrollbox{max-height:420px;overflow:auto;}
  /* 题库管理：编辑 / 批量 / 预览 / 提示 */
  .edgrid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;}
  .opt-row{display:flex;gap:8px;align-items:center;margin-bottom:8px;}
  .opt-row .mk{width:26px;height:26px;border-radius:8px;background:#E9F3FE;color:var(--brand-d);
    display:grid;place-items:center;font-weight:700;flex:none;font-size:13px;}
  .opt-row input{flex:1;}
  .ansbtns{display:flex;gap:8px;flex-wrap:wrap;}
  .lchip{width:36px;height:36px;border-radius:10px;border:1px solid var(--line);display:grid;place-items:center;
    font-weight:700;color:var(--sub);cursor:pointer;transition:.15s;}
  .lchip:hover{border-color:var(--brand);}
  .lchip.on{background:var(--brand);color:#fff;border-color:var(--brand);}
  .prevbox{margin-top:14px;padding:14px 16px;background:#F8FAFF;border:1px dashed #C7D2FE;
    border-radius:12px;position:relative;line-height:1.85;}
  .prev-tag{position:absolute;right:12px;top:10px;font-size:11px;color:var(--brand-d);
    background:#E9F3FE;padding:2px 8px;border-radius:999px;}
  .prevbox .stem{font-size:15px;margin-bottom:8px;}
  .prevbox .prow{display:flex;gap:10px;align-items:flex-start;font-size:14px;margin:4px 0;}
  .prevbox .prow .mk{width:22px;height:22px;border-radius:7px;background:#fff;border:1px solid var(--line);
    display:grid;place-items:center;font-size:12px;font-weight:700;flex:none;}
  .prevbox .ansline,.prevbox .exline{font-size:14px;margin-top:8px;}
  .prevbox .prev-meta{margin-top:10px;font-size:12px;color:var(--sub);}
  .batchbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;margin-bottom:12px;
    background:#E9F3FE;border-radius:12px;font-size:13px;}
  .toast{position:fixed;left:50%;bottom:32px;transform:translate(-50%,20px);background:var(--ink);color:#fff;
    padding:12px 18px;border-radius:12px;display:flex;align-items:center;gap:14px;opacity:0;pointer-events:none;
    transition:.2s;z-index:99;box-shadow:0 10px 30px rgba(0,0,0,.2);font-size:14px;}
  .toast.show{opacity:1;pointer-events:auto;transform:translate(-50%,0);}
  .toast .btn{background:rgba(255,255,255,.16);color:#fff;border-color:rgba(255,255,255,.22);}
  .tag-new{font-size:11px;padding:1px 7px;border-radius:999px;background:#FEF3E2;color:#B45309;margin-left:6px;}
  .tag-edit{font-size:11px;padding:1px 7px;border-radius:999px;background:#E9F3FE;color:#0268CC;margin-left:6px;}
  .cell-op{display:flex;gap:4px;flex-wrap:wrap;}
  .sortsel{padding:9px 12px;border:1px solid var(--line);border-radius:9px;font-size:13px;outline:none;background:#fff;}

  /* ===== 账号 / 登录 ===== */
  .seg.lg-seg{margin-bottom:16px;}
  .seg.lg-seg button{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:12px 0;}
  .seg.lg-seg button svg{display:block;}
  .lb-tip.lg-note{display:flex;gap:8px;align-items:flex-start;margin-top:12px;padding:10px 12px;font-size:12px;line-height:1.6;
    background:#F2F7FD;border:1px dashed #C4DCF2;border-radius:11px;color:#4A6480;}
  .lb-tip.lg-note b{display:inline-flex;color:var(--brand-d);flex:none;margin-top:1px;}
  .lb-tip.lg-note svg{display:block;}
  .alertbox{font-size:12.5px;line-height:1.65;padding:9px 12px;border-radius:10px;margin-bottom:14px;
    display:flex;gap:8px;align-items:flex-start;}
  .alertbox.err{background:#FEF2F2;border:1px solid #FECACA;color:#B42318;}
  .alertbox.ok{background:#ECFDF5;border:1px solid #A7F3D0;color:#027A48;}
  .alertbox b{flex:none;}
  .alertbox.info{background:#E9F3FE;border:1px solid #C7D2FE;color:#0268CC;}
  .alertbox.warn{background:#FFFBEB;border:1px solid #FDE68A;color:#92400E;}
  .id-list{display:flex;flex-direction:column;gap:9px;margin:-2px 0 4px;}
  .id-row{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:12px 14px;border:1px solid var(--line);
    border-radius:12px;background:#fff;cursor:pointer;transition:.15s;font-size:14px;color:var(--ink);}
  .id-row:hover{border-color:var(--brand);background:#F6FAFF;}
  .id-row.on{border-color:var(--brand);background:#E9F3FE;box-shadow:0 3px 12px rgba(3,126,243,.18);}
  .id-role{flex:none;font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;}
  .id-role.student{background:#E9F3FE;color:#0268CC;}
  .id-role.teacher{background:#E6F4FD;color:#0A3A73;}
  .id-name{font-weight:700;flex:none;}
  .id-acc{color:var(--sub);font-size:12.5px;}
  .id-cur{margin-left:auto;font-size:11px;font-weight:700;color:#0268CC;background:#fff;padding:2px 9px;border-radius:999px;border:1px solid #C7D2FE;}
  .id-row.lock{opacity:.75;background:#F7F9FC;cursor:not-allowed;border-style:dashed;}
  .id-row.lock:hover{border-color:var(--line);background:#F7F9FC;}
  .id-cur.go{color:var(--brand);border-color:#BBD8F7;}
  .id-cur.lock{color:#64748B;border-color:#E2E8F0;display:inline-flex;align-items:center;gap:4px;font-weight:600;}
  .pwd-eye{position:absolute;right:11px;top:50%;transform:translateY(-50%);cursor:pointer;
    font-size:11.5px;font-weight:700;color:var(--brand);user-select:none;background:#EDF3FA;
    padding:3px 8px;border-radius:7px;}
  .pwd-eye:hover{background:#DCEBFC;}
  .lb-row{display:flex;align-items:center;justify-content:space-between;font-size:12.5px;color:var(--sub);
    margin:14px 0 20px;}
  .lb-row label{display:inline-flex;align-items:center;gap:6px;cursor:pointer;user-select:none;}
  .lb-row input[type=checkbox]{width:15px;height:15px;accent-color:var(--brand);cursor:pointer;}
  .lb-row .lk{color:var(--brand);font-weight:600;cursor:pointer;}
  .lb-row .lk:hover{text-decoration:underline;}
  .lb-swap{text-align:center;font-size:13px;color:var(--sub);margin-top:18px;}
  .lb-swap b{color:var(--brand);cursor:pointer;font-weight:700;}
  .lb-swap b:hover{text-decoration:underline;}
  .lb-tip{font-size:11.5px;color:var(--sub);margin-top:6px;line-height:1.65;}  .lb-backup{margin-top:16px;padding:12px 14px;border:1px solid #E3ECF6;border-radius:12px;background:#F7FAFE;display:flex;flex-direction:column;gap:9px;align-items:flex-start;}
  .lb-backup-t{font-size:12px;font-weight:700;color:#0E4079;letter-spacing:.5px;}
  .lb-backup .btn{margin-right:6px;}
  .lb-backup .lb-tip{margin-top:0;}
  .lb-first{background:linear-gradient(120deg,#F0F7FF,#E6F1FE);border:1px dashed #A8CBEE;
    border-radius:12px;padding:11px 13px;font-size:12.5px;color:#0E4079;margin-bottom:16px;line-height:1.7;}

  /* ===== 闯关进度 & 结算 ===== */
  .round-bar{height:6px;background:#EDF3FA;border-radius:99px;margin:14px 0 18px;overflow:hidden;}
  .round-bar i{display:block;height:100%;border-radius:99px;
    background:linear-gradient(90deg,var(--brand),#4FB2FF);transition:width .35s ease;}
  .round-bar.done i{background:linear-gradient(90deg,#FBBF24,#F59E0B);}
  .allclear{display:flex;align-items:center;gap:10px;background:linear-gradient(120deg,#FFFBEB,#FEF3C7);
    border:1px solid #FDE68A;color:#92400E;border-radius:12px;padding:10px 14px;font-size:13px;margin-bottom:16px;}
  .allclear button{margin-left:auto;}
  .res-hero{text-align:center;padding:6px 0 2px;}
  .res-badge{width:92px;height:92px;border-radius:50%;margin:0 auto 14px;display:grid;place-items:center;position:relative;overflow:hidden;
    font-size:44px;background:radial-gradient(circle at 36% 30%,#FFE9A8,#F59E0B 72%);color:#fff;
    box-shadow:inset 0 3px 6px rgba(255,255,255,.5),inset 0 -6px 10px rgba(120,70,5,.5),0 16px 34px rgba(245,158,11,.50);}
  .res-badge::before{content:"";position:absolute;left:18%;top:10%;width:64%;height:40%;border-radius:50%;background:linear-gradient(180deg,rgba(255,255,255,.85),rgba(255,255,255,0));pointer-events:none;}
  .res-badge.no{background:radial-gradient(circle at 36% 30%,#9FCBFA,#037EF3 72%);box-shadow:inset 0 3px 6px rgba(255,255,255,.45),inset 0 -6px 10px rgba(2,46,82,.5),0 16px 34px rgba(3,126,243,.45);}
  .res-title{font-size:22px;font-weight:800;letter-spacing:.5px;}
  .res-sub{font-size:13px;color:var(--sub);margin-top:6px;line-height:1.7;}
  .res-stars{font-size:28px;letter-spacing:7px;color:#E9A70C;margin:14px 0 2px;}
  .res-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:18px 0 4px;}
  .res-grid div{background:#F7FAFE;border:1px solid var(--line);border-radius:12px;padding:12px 6px;text-align:center;}
  .res-grid b{display:block;font-size:21px;font-weight:800;line-height:1.25;}
  .res-grid span{font-size:11.5px;color:var(--sub);}
  .res-bar{margin-top:16px;}
  .res-act{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:20px;}

  /* ===== 知识图谱 ===== */
  .map-hero{display:flex;align-items:center;gap:22px;flex-wrap:wrap;padding:20px 24px;border-radius:20px;
    margin-bottom:14px;color:#fff;position:relative;overflow:hidden;
    background:linear-gradient(118deg,#023E85 0%,#037EF3 52%,#35AAFC 100%);
    box-shadow:0 16px 34px rgba(3,126,243,.26);}
  .map-hero:before{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;
    background-image:radial-gradient(circle,rgba(255,255,255,.55) 1px,transparent 1.4px),
                     radial-gradient(circle,rgba(255,255,255,.26) 1px,transparent 1.2px);
    background-size:118px 88px,64px 48px;background-position:12px 16px,48px 38px;opacity:.55;}
  .map-hero:after{content:"";position:absolute;right:-80px;top:-104px;width:280px;height:280px;border-radius:50%;
    background:radial-gradient(circle,rgba(255,255,255,.22),transparent 66%);z-index:1;}
  .map-hero .mh-l{display:flex;align-items:center;gap:16px;position:relative;z-index:2;}
  .map-hero .mh-ring{flex:none;width:76px;height:76px;position:relative;}
  .map-hero .mh-ring svg{width:76px;height:76px;transform:rotate(-90deg);display:block;}
  .map-hero .mh-ring i{position:absolute;inset:0;display:grid;place-items:center;font-style:normal;
    font-size:16px;font-weight:800;letter-spacing:.2px;}
  .map-hero .mh-t{font-size:19px;font-weight:800;letter-spacing:.4px;}
  .map-hero .mh-s{font-size:12.5px;color:#D8EBFD;margin-top:5px;}
  .map-hero .mh-st{display:flex;gap:26px;margin-left:auto;position:relative;z-index:2;}
  .map-hero .mh-st div{text-align:center;}
  .map-hero .mh-st b{display:block;font-size:23px;font-weight:800;line-height:1.2;}
  .map-hero .mh-st span{font-size:11.5px;color:#D8EBFD;}
  /* 顶部一屏内的进度条 + 四项统计（不再单独占一张卡） */
  .map-hero .mh-bar{flex:1 1 100%;position:relative;z-index:2;margin-top:2px;}
  .map-hero .mb{height:6px;border-radius:99px;background:rgba(255,255,255,.22);overflow:hidden;}
  .map-hero .mb i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#FDE68A,#FBBF24);transition:width .5s;}
  .map-hero .mh-nums{margin-top:7px;font-size:12px;color:#D8EBFD;letter-spacing:.2px;}
  .map-hero .mh-nums b{color:#fff;font-weight:800;}

  .map-legend{display:flex;gap:18px;flex-wrap:wrap;align-items:center;background:#fff;border:1px solid var(--line);
    border-radius:14px;padding:10px 16px;margin-bottom:14px;box-shadow:var(--sh);font-size:12.5px;color:var(--sub);}
  .map-legend .lg{display:inline-flex;align-items:center;gap:7px;}
  .map-legend .dot{width:14px;height:14px;border-radius:50%;flex:none;box-sizing:border-box;}
  .map-legend .dot.todo{background:#F6F9FD;border:2px dashed #CBD9EA;}
  .map-legend .dot.doing{background:linear-gradient(140deg,#3C9BF7,#037EF3);box-shadow:0 3px 8px rgba(3,126,243,.40);}
  .map-legend .dot.done{background:linear-gradient(140deg,#FCD34D,#F59E0B);box-shadow:0 3px 8px rgba(245,158,11,.42);}
  .map-legend .dot.weak{background:linear-gradient(140deg,#FF9A9A,#EF4444);box-shadow:0 3px 8px rgba(239,68,68,.42);}
  .map-legend .ln2{width:30px;height:3px;border-radius:2px;flex:none;}
  .map-legend .tipr{margin-left:auto;color:var(--gray);}
  .map-tip{display:flex;gap:8px;align-items:center;padding:11px 15px;border-radius:12px;margin-bottom:14px;font-size:13px;line-height:1.45;}
  .map-tip.warn{background:#FFF5F5;border:1px solid #F6C9C9;color:#B42318;}
  .nav-grp-l{font-size:11px;font-weight:700;color:var(--gray);letter-spacing:.6px;padding:12px 14px 5px;margin-top:2px;}
  .nav-grp-l:first-child{padding-top:2px;margin-top:0;}
  .ov-quick .oq .onum{margin-left:auto;font-size:12px;font-weight:800;color:var(--brand);background:rgba(3,126,243,.08);padding:4px 11px;border-radius:999px;white-space:nowrap;}
  .ov-quick .oq .onum.mute{color:#7C93A8;background:rgba(15,42,74,.055);}
  .ov-quick .oq .onum.info{color:var(--brand);background:rgba(3,126,243,.08);}
  .ov-quick .oq .onum.warn{color:#B7791F;background:rgba(251,191,36,.20);}

  .subj-tabs{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center;}
  .subj-tabs button{padding:9px 22px;border-radius:999px;border:1px solid var(--line);background:#fff;
    font-size:13.5px;font-weight:700;color:var(--sub);transition:.16s;box-shadow:var(--sh);}
  .subj-tabs button:hover{border-color:#BCDCFB;color:var(--brand);}
  .subj-tabs button.on{background:linear-gradient(135deg,var(--brand),#2FA6FB);color:#fff;border-color:transparent;
    box-shadow:0 8px 18px rgba(3,126,243,.30);}
  .subj-tabs .cnt{font-size:12.5px;color:var(--sub);margin-left:2px;}

  .tree-ch{background:linear-gradient(180deg,#FBFDFF,#FFFFFF 18%);border:1px solid var(--line);border-radius:20px;margin-bottom:16px;
    overflow:hidden;box-shadow:var(--sh);transition:box-shadow .22s,border-color .22s;}
  .tree-ch:hover{border-color:#BCDCFB;box-shadow:0 14px 32px rgba(3,126,243,.15);}
  .tree-ch.done{border-color:#F4CF7E;box-shadow:0 16px 32px rgba(245,158,11,.12);}
  .tree-ch.weak{border-color:#F6C9C9;box-shadow:0 16px 32px rgba(239,68,68,.10);}
  .tree-hd.weak{background:linear-gradient(100deg,#FFF5F5,#FDECEC);}
  .tree-hd.weak .lv{background:linear-gradient(135deg,#EF4444,#DC2626);box-shadow:0 8px 18px rgba(239,68,68,.36);}
  .tree-hd{display:flex;align-items:center;gap:14px;padding:14px 20px;border-bottom:1px solid var(--line);
    background:linear-gradient(100deg,#F8FBFF,#EDF5FE);cursor:pointer;user-select:none;transition:.2s;}
  .tree-ch.open .tree-hd{border-bottom-color:#E6F0FA;}
  .tree-hd.done{background:linear-gradient(100deg,#FFFDF6,#FDF4E1);}
  .tree-hd .lv{width:50px;height:50px;border-radius:15px;flex:none;display:grid;place-items:center;position:relative;
    background:linear-gradient(135deg,var(--brand),#3AA0F8);color:#fff;font-weight:900;font-size:17px;letter-spacing:.5px;
    box-shadow:0 8px 18px rgba(3,126,243,.30);padding-top:3px;}
  .tree-hd .lv em{position:absolute;left:0;right:0;bottom:6px;text-align:center;font-style:normal;
    font-size:9px;font-weight:600;letter-spacing:0;opacity:.85;line-height:1;}
  .tree-hd.done .lv{background:linear-gradient(135deg,#FBBF24,#F59E0B);box-shadow:0 8px 18px rgba(245,158,11,.36);}
  .tree-hd .ti{flex:1;min-width:0;}
  .tree-hd .ti b{font-size:15.5px;font-weight:800;display:block;letter-spacing:.2px;}
  .tree-hd .ti i{font-style:normal;font-size:12px;color:var(--sub);}
  .tree-hd .pb{width:170px;flex:none;}
  .tree-hd .pb .lb{font-size:11.5px;color:var(--sub);text-align:right;margin-top:4px;}
  .tree-hd .fold{width:28px;height:28px;border-radius:9px;flex:none;display:grid;place-items:center;
    color:var(--brand);font-size:12px;transition:transform .22s;background:rgba(3,126,243,.08);}
  .tree-ch:not(.open) .tree-hd .fold{transform:rotate(-90deg);}
  .tree-bd{position:relative;overflow:hidden;
    background:radial-gradient(900px 240px at 50% 0%,rgba(3,126,243,.07),transparent 72%),
      radial-gradient(circle,rgba(3,126,243,.17) 1.1px,transparent 1.2px) 0 0/26px 26px,
      radial-gradient(circle,rgba(3,126,243,.07) 1px,transparent 1px) 13px 13px/52px 52px,
      linear-gradient(180deg,#FDFEFF,#F7FAFE);}
  .tree-ch.done .tree-bd{background:radial-gradient(900px 240px at 50% 0%,rgba(251,191,36,.10),transparent 72%),
      radial-gradient(circle,rgba(217,168,60,.17) 1.1px,transparent 1.2px) 0 0/26px 26px,
      linear-gradient(180deg,#FFFDF8,#FFFBF3);}
  .tree-svg{position:absolute;inset:0;overflow:visible;}
  .ln{fill:none;stroke:#D7E3F1;stroke-width:3;stroke-linecap:round;stroke-dasharray:6 7;vector-effect:non-scaling-stroke;}
  .ln.doing{stroke:#8CC3FB;stroke-dasharray:none;}
  .ln.done{stroke:#FBBF24;stroke-width:3.5;stroke-dasharray:11 7;animation:lnflow 1.5s linear infinite;}
  @keyframes lnflow{to{stroke-dashoffset:-36;}}

  .mnode{position:absolute;transform:translate(-50%,-50%);width:124px;text-align:center;cursor:pointer;}
  .mnode .ball{width:64px;height:64px;border-radius:50%;margin:0 auto;position:relative;display:grid;place-items:center;
    background:radial-gradient(circle at 34% 30%,#fff,#EDF3FB 72%);border:2px solid #D8E3F0;color:#94A3B8;font-weight:800;font-size:15px;
    box-shadow:inset 0 4px 8px rgba(255,255,255,.95),inset 0 -7px 11px rgba(9,30,66,.10),0 8px 16px rgba(9,30,66,.10);transition:.22s;}
  .mnode:hover .ball{transform:translateY(-6px) scale(1.08);box-shadow:inset 0 4px 8px rgba(255,255,255,.95),inset 0 -7px 11px rgba(9,30,66,.10),0 16px 28px rgba(3,126,243,.30);}
  .mnode .rv{position:absolute;left:-4px;top:-4px;width:74px;height:74px;pointer-events:none;}
  .mnode.doing .ball{background:radial-gradient(circle at 33% 27%,#8FC8FF,#037EF3 78%);border:2px solid #037EF3;color:#fff;
    box-shadow:inset 0 4px 8px rgba(255,255,255,.45),inset 0 -7px 11px rgba(2,46,82,.45),0 12px 24px rgba(3,126,243,.44);}
  .mnode.done .ball{background:radial-gradient(circle at 33% 27%,#FFE38C,#F59E0B 78%);border:2px solid #F59E0B;color:#fff;
    box-shadow:inset 0 4px 8px rgba(255,255,255,.5),inset 0 -7px 11px rgba(120,70,5,.45),0 12px 24px rgba(245,158,11,.48);}
  .mnode.weak .ball{background:radial-gradient(circle at 33% 27%,#FF9A9A,#EF4444 78%);border:2px solid #EF4444;color:#fff;
    box-shadow:inset 0 4px 8px rgba(255,255,255,.45),inset 0 -7px 11px rgba(120,20,20,.45),0 12px 24px rgba(239,68,68,.44);}
  .mnode.done .ball:before{content:"";position:absolute;inset:-8px;border-radius:50%;z-index:-1;
    background:radial-gradient(circle,rgba(251,191,36,.30),transparent 70%);}
  .mnode.cur .ball:after{content:"";position:absolute;inset:-10px;border-radius:50%;
    border:2px solid rgba(3,126,243,.5);animation:mpulse 1.9s ease-out infinite;}
  .mnode.cur .ball{animation:mbob 2.4s ease-in-out infinite;}
  .mnode.cur .tag{position:absolute;right:-6px;top:-8px;z-index:5;
    background:linear-gradient(135deg,var(--brand),#2FA6FB);color:#fff;font-size:10px;font-weight:800;
    padding:3px 9px;border-radius:999px;letter-spacing:.3px;box-shadow:0 5px 12px rgba(3,126,243,.42);}
  @keyframes mpulse{0%{transform:scale(.85);opacity:.95}100%{transform:scale(1.32);opacity:0}}
  @keyframes mbob{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
  .mnode .nm{font-size:12.5px;font-weight:700;color:var(--txt);margin-top:10px;line-height:1.4;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;letter-spacing:.2px;}
  .mnode:hover .nm{color:var(--brand-d);}
  .mnode .sb{font-size:11px;color:var(--sub);margin-top:3px;}
  .mnode .st{font-size:11px;letter-spacing:1.5px;color:#E9A70C;margin-top:2px;height:15px;}
  .mnode.todo .st{color:#CBD5E3;}
  /* 圆圈内：进行中＝百分比，已通关＝对勾，未开始＝开始三角；题目数由下方文字承载，不再重复 */
  .mnode .ball svg{display:block;}
  .mnode.todo .ball svg{opacity:.60;margin-left:3px;}
  .mnode:hover.todo .ball svg{opacity:.95;}
  .tree-ch.jump{animation:chjump .62s cubic-bezier(.34,1.56,.64,1);}
  @keyframes chjump{0%,100%{transform:translateY(0)}38%{transform:translateY(-8px)}70%{transform:translateY(2px)}}
  .tree-ch.cur{border-color:#9CCBFB;box-shadow:0 16px 34px rgba(3,126,243,.20);}
  .idx-rail{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;align-items:center;}
  .idx-rail .lab{font-size:12px;font-weight:700;color:var(--sub);margin-right:2px;}
  .idx-rail button{font-size:12px;font-weight:800;padding:4px 0;min-width:34px;text-align:center;border-radius:999px;
    border:1px solid var(--line);background:#fff;color:var(--sub);transition:.15s;}
  .idx-rail button:hover{border-color:var(--brand);color:var(--brand);}
  .idx-rail button.on{background:var(--brand);border-color:var(--brand);color:#fff;}
  .idx-rail button.done{border-color:#FDE68A;color:#B45309;background:#FFFBEB;}
  @media(max-width:700px){
    .mnode{width:100px;} .mnode .ball{width:54px;height:54px;font-size:13px;}
    .mnode .rv{width:64px;height:64px;left:-5px;top:-5px;}
    .map-hero .mh-st{margin-left:0;gap:20px;}
    .tree-hd .pb{display:none;}
    .hero-grid,.recon{grid-template-columns:1fr;}
    .kpi8{grid-template-columns:1fr 1fr;}
    .route-card .rc-b{margin-left:0;width:100%;}
  }

  @media(max-width:900px){
    #login{grid-template-columns:1fr;} .login-left{display:none;}
    .lb-logo{display:flex;justify-content:center;margin-bottom:26px;}
    .lb-logo .brand-logo.lg{max-width:min(100%,200px);}
    .shell{grid-template-columns:64px 1fr;} .nav-item span:not(.nav-ico){display:none;}
    /* 侧栏收窄到 64px 后品牌区放不下，整体让位给导航图标 */
    .side .brand{display:none;}
    .kpi,.stat4,.two{grid-template-columns:1fr 1fr;}
  }

  /* ===== 学生首页重构（学习驾驶舱） ===== */
  /* 首页统一面板：顶部深色驾驶舱带与下方内容同处一张表面，消除「东一块西一块」的割裂感 */
  .home-board{border-radius:22px;overflow:hidden;background:#fff;border:1px solid #E4EDF8;
    box-shadow:0 20px 46px rgba(9,30,66,.09),0 2px 6px rgba(9,30,66,.04);margin-bottom:18px;}
  .hb-body{padding:20px 24px 22px;position:relative;
    background:linear-gradient(180deg,#F2F8FF 0%,#FAFDFF 200px,#FFFFFF 100%);}
  .hb-body:before{content:"";position:absolute;left:0;right:0;top:0;height:160px;pointer-events:none;
    background:radial-gradient(70% 130% at 50% 0%,rgba(3,126,243,.10),transparent 72%);}
  .hb-body>*{position:relative;z-index:1;}
  .hb-grid{display:grid;grid-template-columns:1.06fr .94fr;gap:0;}
  .hb-grid>.hb-col{padding:0 22px;min-width:0;}
  .hb-grid>.hb-col:first-child{padding-left:0;}
  .hb-grid>.hb-col:last-child{padding-right:0;border-left:1px solid #E7F0FB;}
  .hb-sep{height:1px;margin:20px 0;
    background:linear-gradient(90deg,transparent,#E2ECF8 10%,#E2ECF8 90%,transparent);}
  /* 面板内小节不再各自成卡：去掉卡片边框/底色/内边距，仅以细分隔线分区 */
  .home-board .card{background:transparent;border:none;box-shadow:none;padding:0;border-radius:0;}
  /* 小节标题图标芯片：成果图/概览/学习记录/错题统一同一套语言 */
  .pti{display:inline-grid;place-items:center;width:27px;height:27px;border-radius:9px;margin-right:9px;
    vertical-align:-8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.75);}
  .pti svg{display:block;}
  .pti.b{background:linear-gradient(145deg,#E7F1FE,#D2E6FD);color:#0268CC;}
  .pti.c{background:linear-gradient(145deg,#E6F4FD,#D2EAFB);color:#2E9BE6;}
  .pti.p{background:linear-gradient(145deg,#F1EBFF,#E1D7FE);color:#6D33D6;}
  .pti.g{background:linear-gradient(145deg,#FFF3DA,#FBE5BA);color:#B7791F;}
  .sec-note{font-size:12px;color:var(--sub);margin:-8px 0 12px;letter-spacing:.2px;line-height:1.6;}
  .hb-grid .sec-note{margin:10px 0 10px;}
  .home-hero{display:flex;align-items:center;gap:22px;flex-wrap:wrap;padding:22px 26px 20px;
    color:#fff;position:relative;overflow:hidden;
    background:linear-gradient(118deg,#04264F 0%,#0A3E88 32%,#037EF3 70%,#39AEFB 100%);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.14);}
  /* 驾驶舱带与内容之间的科技接缝：一道青光带，把过渡做成设计而非断层 */
  .home-hero:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;z-index:4;pointer-events:none;
    background:linear-gradient(90deg,transparent,rgba(140,235,255,.75) 20%,rgba(255,255,255,.95) 50%,rgba(140,235,255,.75) 80%,transparent);
    box-shadow:0 0 18px rgba(140,235,255,.55);}
  .home-hero .hh-grid{position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.55;
    background-image:linear-gradient(rgba(255,255,255,.11) 1px,transparent 1px),
                     linear-gradient(90deg,rgba(255,255,255,.11) 1px,transparent 1px);
    background-size:48px 48px;
    -webkit-mask-image:radial-gradient(130% 130% at 18% 26%,#000 18%,transparent 76%);
    mask-image:radial-gradient(130% 130% at 18% 26%,#000 18%,transparent 76%);}
  .home-hero .hh-scan{position:absolute;left:0;right:0;height:150px;top:-150px;z-index:0;pointer-events:none;
    background:linear-gradient(180deg,transparent,rgba(126,231,255,.10) 48%,rgba(199,240,255,.22) 78%,transparent);
    animation:hhscan 7.5s linear infinite;}
  .home-hero .hh-flux{position:absolute;top:0;left:-70%;width:46%;height:100%;z-index:0;pointer-events:none;
    transform:skewX(-18deg);background:linear-gradient(90deg,transparent,rgba(255,255,255,.13),transparent);
    animation:hhflux 6.8s ease-in-out infinite;}
  .home-hero .hh-orb{position:absolute;border-radius:50%;z-index:0;pointer-events:none;}
  .home-hero .hh-orb.a{width:300px;height:300px;right:-80px;top:-130px;
    background:radial-gradient(circle,rgba(96,206,255,.36),transparent 66%);animation:horb 9s ease-in-out infinite;}
  .home-hero .hh-orb.b{width:210px;height:210px;left:-70px;bottom:-120px;
    background:radial-gradient(circle,rgba(251,191,36,.24),transparent 66%);animation:horb 11.5s ease-in-out infinite reverse;}
  .home-hero .hh-line{position:absolute;top:0;height:2px;z-index:1;pointer-events:none;border-radius:2px;
    background:linear-gradient(90deg,transparent,#8CEBFF,#FFFFFF,#8CEBFF,transparent);
    box-shadow:0 0 14px rgba(140,235,255,.85);animation:hhline 5.6s linear infinite;}
  @keyframes hhscan{0%{top:-150px}100%{top:100%}}
  @keyframes hhflux{0%{left:-70%}60%{left:124%}100%{left:124%}}
  @keyframes horb{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-20px,16px) scale(1.09)}}
  @keyframes hhline{0%{left:0;width:0;opacity:0}15%{opacity:1}85%{opacity:1}100%{left:100%;width:20%;opacity:0}}
  .home-hero .hh-l{display:flex;align-items:center;gap:16px;position:relative;z-index:3;min-width:0;}
  .home-hero .hh-av{width:54px;height:54px;border-radius:50%;flex:none;display:grid;place-items:center;position:relative;
    font-size:21px;font-weight:900;letter-spacing:.5px;
    background:linear-gradient(145deg,rgba(255,255,255,.34),rgba(255,255,255,.10));
    border:1px solid rgba(255,255,255,.38);box-shadow:0 10px 24px rgba(2,28,66,.34),inset 0 1px 0 rgba(255,255,255,.32);}
  .home-hero .hh-av:after{content:"";position:absolute;inset:-7px;border-radius:50%;
    border:1.5px dashed rgba(178,228,255,.46);animation:havspin 16s linear infinite;}
  @keyframes havspin{to{transform:rotate(360deg)}}
  .home-hero .hh-tx{min-width:0;}
  .home-hero .hh-hi{font-size:21px;font-weight:700;letter-spacing:.3px;line-height:1.5;color:#E4F2FF;}
  .home-hero .hh-name{display:inline-block;color:#FFE9A8;font-size:27px;font-weight:900;letter-spacing:1px;
    background:linear-gradient(100deg,#FFF6D2 0%,#FDE68A 26%,#FBBF24 48%,#FFF8DC 70%,#FBBF24 92%);
    background-size:230% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
    filter:drop-shadow(0 2px 10px rgba(251,191,36,.55));animation:hnshine 4.8s linear infinite;}
  @keyframes hnshine{0%{background-position:0% 50%}100%{background-position:230% 50%}}
  .home-hero .hh-suffix{font-size:18px;font-weight:800;color:#FFF0C2;margin-left:2px;}
  .home-hero .hh-wave{display:inline-block;animation:hwave 2.4s ease-in-out infinite;transform-origin:70% 70%;margin-left:4px;}
  @keyframes hwave{0%,72%,100%{transform:rotate(0)}78%{transform:rotate(14deg)}84%{transform:rotate(-10deg)}90%{transform:rotate(8deg)}}
  .home-hero .hh-below{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:5px;position:relative;z-index:3;}
  .home-hero .hh-sub{font-size:12.5px;color:#CFE6FB;letter-spacing:.2px;}
  /* 题库规模等页级信息：并入顶部板块，弱化为极轻的一行（不再单列页头） */
  .home-hero .hh-meta{font-size:11px;font-weight:600;color:rgba(197,224,250,.62);letter-spacing:.2px;
    margin-top:5px;position:relative;z-index:3;}
  .home-hero .hh-meta i{font-style:normal;opacity:.5;margin:0 5px;}
  /* 个人中心：融合在用户名下方（无独立板块） */
  .home-hero .hh-me{display:inline-flex;align-items:center;gap:7px;padding:5px 12px;border-radius:999px;cursor:pointer;
    font-size:12px;font-weight:700;color:#EAF5FF;transition:.2s;
    background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.24);}
  .home-hero .hh-me:hover{background:rgba(255,255,255,.26);border-color:rgba(255,255,255,.48);transform:translateY(-2px);}
  .home-hero .hme-ic{display:inline-grid;place-items:center;color:#FFE9A8;}
  .home-hero .hme-ic svg{display:block;}
  .home-hero .hme-ar{font-weight:800;opacity:.82;}
  /* 顶部右侧：今日学习（并入同一板块表面，无独立卡片边框/底色） */
  .home-hero .hh-div{width:1px;align-self:stretch;flex:none;margin:2px 6px;position:relative;z-index:3;
    background:linear-gradient(180deg,transparent,rgba(162,222,255,.40) 22%,rgba(162,222,255,.40) 78%,transparent);}
  .home-hero .hh-div:after{content:"";position:absolute;left:-1px;width:3px;height:34%;border-radius:2px;
    background:#8CEBFF;box-shadow:0 0 12px rgba(140,235,255,.9);animation:hdiv 3.8s ease-in-out infinite;}
  @keyframes hdiv{0%,100%{top:20%;opacity:.45}50%{top:46%;opacity:1}}
  .home-hero .hh-today{margin-left:auto;flex:0 1 398px;min-width:308px;position:relative;z-index:3;}
  /* ---- 今日学习 · 学习仪表盘 ---- */
  .td{width:100%;padding:13px 14px 12px;border-radius:16px;position:relative;overflow:hidden;
    background:linear-gradient(158deg,rgba(255,255,255,.15),rgba(255,255,255,.045));
    border:1px solid rgba(255,255,255,.19);}
  .td:before{content:"";position:absolute;left:-24%;top:-64%;width:128%;height:150%;pointer-events:none;
    background:radial-gradient(circle at 28% 24%,rgba(140,235,255,.22),transparent 60%);}
  .td-h{display:flex;align-items:center;gap:9px;position:relative;}
  .td-t{flex:none;font-size:10.5px;font-weight:800;letter-spacing:1.4px;color:#9ED4FF;}
  .td-h:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,rgba(158,212,255,.46),transparent);}
  .td-sk{display:inline-flex;align-items:center;gap:4px;flex:none;padding:3px 10px;border-radius:999px;
    font-size:10.5px;font-weight:800;color:rgba(255,255,255,.66);
    background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.20);}
  .td-sk svg{display:block;stroke:rgba(255,255,255,.6);fill:none;}
  .td-sk b{font-size:13px;letter-spacing:-.2px;}
  .td-sk.on{color:#FFD76A;background:rgba(251,191,36,.17);border-color:rgba(251,191,36,.44);}
  .td-sk.on svg{stroke:#FFC53D;animation:tdPulse 1.9s ease-in-out infinite;}
  @keyframes tdPulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.58;transform:scale(1.15);}}
  .td-b{display:flex;align-items:center;gap:14px;margin-top:10px;position:relative;}
  .td-ring{flex:none;position:relative;width:64px;height:64px;}
  .td-ring svg{display:block;transform:rotate(-90deg);}
  .td-ring i{position:absolute;left:0;right:0;top:18px;text-align:center;font-style:normal;
    font-size:15px;font-weight:800;color:#fff;letter-spacing:-.5px;}
  .td-ring i.dim{color:#9ED4FF;font-size:17px;letter-spacing:0;}
  .td-ring em{position:absolute;left:0;right:0;top:36px;text-align:center;font-style:normal;
    font-size:8.5px;font-weight:700;letter-spacing:.5px;color:rgba(190,224,255,.78);}
  .td-kv{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,1fr);gap:7px;}
  .td-k{text-align:center;padding:7px 2px 6px;border-radius:11px;background:rgba(255,255,255,.07);
    border:1px solid rgba(255,255,255,.11);}
  .td-k b{display:block;font-size:18px;font-weight:800;color:#fff;line-height:1.1;letter-spacing:-.4px;}
  .td-k span{display:block;margin-top:2px;font-size:9.5px;color:rgba(200,228,252,.80);}
  .td-k.miss b{color:#FFD3A8;}
  .td-week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;align-items:end;margin-top:11px;
    padding-top:9px;border-top:1px dashed rgba(255,255,255,.17);position:relative;}
  .td-d{display:flex;flex-direction:column;align-items:center;gap:4px;}
  .td-d i{display:block;width:100%;max-width:24px;height:4px;border-radius:4px 4px 2px 2px;
    background:rgba(255,255,255,.20);}
  .td-d.on i{background:linear-gradient(180deg,#9FE6FF,#2FA6F7);}
  .td-d.now i{background:linear-gradient(180deg,#FFE08A,#F59E0B);box-shadow:0 0 9px rgba(245,158,11,.6);}
  .td-d span{font-size:9.5px;font-weight:700;color:rgba(190,224,255,.68);}
  .td-d.on span{color:#BFE3FF;}
  .td-d.now span{color:#FFD76A;}
  .td-mile{margin-top:10px;position:relative;}
  .td-track{height:5px;border-radius:99px;background:rgba(255,255,255,.17);overflow:hidden;}
  .td-track i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#8CEBFF,#FFC53D);transition:width .5s ease;}
  .td-txt{margin-top:6px;font-size:11px;line-height:1.45;color:rgba(224,240,255,.86);}
  .td-txt.warn{color:#FFE08A;}
  .td-txt b{color:#fff;font-weight:800;}
  @media(max-width:1080px){.home-hero .hh-today{margin-left:0;flex:1 1 100%;}
    .home-hero .hh-div{display:none;}}

  /* 学习概览内的「继续挑战」：行动优先，置于概览首位 */
  .ov-chg{display:flex;align-items:center;gap:13px;padding:13px 15px;border-radius:14px;cursor:pointer;margin-bottom:14px;
    position:relative;overflow:hidden;color:#fff;
    background:linear-gradient(126deg,#02346E 0%,#037EF3 55%,#2FA6F7 100%);box-shadow:0 12px 26px rgba(3,126,243,.24);}
  .ov-chg:before{content:"";position:absolute;right:-42px;top:-52px;width:168px;height:168px;border-radius:50%;pointer-events:none;
    background:radial-gradient(circle,rgba(255,255,255,.20),rgba(255,255,255,0) 70%);}
  .ov-chg:after{content:"";position:absolute;top:0;left:-60%;width:42%;height:100%;transform:skewX(-20deg);pointer-events:none;
    background:linear-gradient(90deg,transparent,rgba(255,255,255,.15),transparent);animation:rcshine 5.6s ease-in-out infinite;}
  .ov-chg:hover{transform:translateY(-2px);box-shadow:0 18px 34px rgba(3,126,243,.32);}
  .ov-chg .oc-ic{width:44px;height:44px;border-radius:13px;flex:none;display:grid;place-items:center;color:#fff;
    background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.28);position:relative;z-index:2;}
  .ov-chg .oc-ic svg{display:block;filter:drop-shadow(0 3px 7px rgba(4,32,72,.45));}
  .ov-chg .oc-main{flex:1;min-width:0;position:relative;z-index:2;}
  .ov-chg .oc-chip{display:inline-block;font-size:10.5px;font-weight:800;letter-spacing:.4px;padding:2px 9px;border-radius:99px;
    background:rgba(255,255,255,.20);border:1px solid rgba(255,255,255,.30);}
  .ov-chg .oc-t{font-size:15px;font-weight:800;letter-spacing:.2px;line-height:1.35;margin-top:6px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .ov-chg .oc-s{font-size:11.5px;color:#D8EBFD;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .ov-chg .oc-bar{height:6px;border-radius:99px;background:rgba(255,255,255,.24);overflow:hidden;margin-top:9px;}
  .ov-chg .oc-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#FDE68A,#FBBF24);transition:width .4s;}
  .ov-chg .oc-ring{flex:none;position:relative;width:48px;height:48px;}
  .ov-chg .oc-ring svg{transform:rotate(-90deg);display:block;}
  .ov-chg .oc-ring i{position:absolute;inset:0;display:grid;place-items:center;font-style:normal;
    font-size:12px;font-weight:800;color:#fff;}
  /* 概览子版块小标题（科技感分隔） */
  .ov-sec{display:flex;align-items:center;gap:8px;margin:16px 0 9px;font-size:12.5px;font-weight:800;
    color:var(--ink2);letter-spacing:.3px;}
  .ov-sec:before{content:"";width:3px;height:13px;border-radius:2px;
    background:linear-gradient(180deg,#037EF3,#9AD4FA);box-shadow:0 0 8px rgba(3,126,243,.5);}
  .ov-sec .n{margin-left:auto;font-size:11px;font-weight:600;color:var(--sub);letter-spacing:0;}

  /* ===== 教师端板块语言：与学生学习面板共用同一套「表面 / 分隔 / 标题」规范 =====
     仪表盘首屏沿用首页的深色驾驶舱带（.home-hero + .hh-* 动效），内容区同处一张面板表面 */
  .t-hero-body{flex:1 1 100%;display:flex;align-items:center;gap:16px;position:relative;z-index:3;min-width:0;flex-wrap:wrap;}
  .t-hero-ic{width:52px;height:52px;border-radius:15px;flex:none;display:grid;place-items:center;color:#fff;
    background:linear-gradient(145deg,rgba(255,255,255,.30),rgba(255,255,255,.08));
    border:1px solid rgba(255,255,255,.34);box-shadow:inset 0 1px 0 rgba(255,255,255,.30);}
  .t-hero-ic svg{display:block;}
  .t-hero-tx{min-width:0;}
  .t-hero-t{font-size:23px;font-weight:800;letter-spacing:.6px;line-height:1.3;
    background:linear-gradient(100deg,#FFFFFF 0%,#CFE9FF 38%,#FFFFFF 64%,#AEDDFF 100%);
    background-size:220% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
    animation:hnshine 5.2s linear infinite;}
  .t-hero-s{font-size:12.5px;color:#CFE6FB;margin-top:6px;letter-spacing:.2px;}
  .t-hero-st{display:flex;align-items:center;gap:14px;margin-left:auto;position:relative;z-index:3;}
  .t-hero-st .hud-n{font-style:normal;font-size:11px;font-weight:800;color:#08283C;background:#9AD4FA;
    padding:1px 7px;border-radius:999px;margin-left:7px;}
  .dash-2col{display:grid;grid-template-columns:1.25fr 1fr;gap:18px;}
  .kpi .card{display:flex;flex-direction:column;gap:6px;position:relative;overflow:hidden;}
  .kpi .card .kic{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;font-size:20px;color:#fff;
    box-shadow:0 8px 18px rgba(3,126,243,.22);margin-bottom:4px;}
  .kpi .card .lab{order:3;}

  /* ===== 教师端实例视图：与学生端同一套面板表面、同一套小节标题 ===== */
  .tview>.card{border-radius:20px;border-color:#E7F0FB;
    box-shadow:0 16px 38px rgba(9,30,66,.07),0 2px 5px rgba(9,30,66,.03);}
  .tview .page-title{font-size:17px;letter-spacing:.2px;}
  /* 小节标题统一带图标芯片（.pti）与可选右侧计数 */
  .t-sec{display:flex;align-items:center;gap:9px;font-size:15.5px;font-weight:800;letter-spacing:.2px;margin-bottom:12px;}
  .t-sec .n{margin-left:auto;font-size:11.5px;font-weight:600;color:var(--sub);letter-spacing:0;}
  .t-sec svg{display:block;}
  .t-sep{height:1px;margin:20px 0;background:linear-gradient(90deg,transparent,#E2ECF8 8%,#E2ECF8 92%,transparent);}
  /* 面板内小节不再各自成卡：去掉边框/底色/投影，仅以细线分区（与学生首页 .home-board 同规则） */
  .t-board .card{background:transparent;border:none;box-shadow:none;padding:0;border-radius:0;}
  .t-board .card+.card{margin-top:0;}
  /* ===== 教师端识别色落地：靛青替换品牌蓝（仅限教师视图作用域） =====
     学生端＝蓝 + 金（活力/荣誉），教师端＝靛青（冷静/后台），两端结构一致、色调分明 */
  .home-hero.tea{background:linear-gradient(118deg,#0A2638 0%,#0F3C58 30%,#1F92E2 68%,#2F9EE4 100%);}
  .home-hero.tea:after{background:linear-gradient(90deg,transparent,rgba(125,220,250,.72) 20%,
    rgba(255,255,255,.95) 50%,rgba(125,220,250,.72) 80%,transparent);box-shadow:0 0 18px rgba(125,220,250,.55);}
  .home-hero.tea .hh-orb.a{background:radial-gradient(circle,rgba(120,200,250,.34),transparent 66%);}
  .home-hero.tea .hh-orb.b{background:radial-gradient(circle,rgba(120,196,248,.26),transparent 66%);}
  .home-hero.tea .hh-line{background:linear-gradient(90deg,transparent,#8FD4F6,#FFFFFF,#8FD4F6,transparent);
    box-shadow:0 0 14px rgba(125,220,250,.85);}
  .home-hero.tea .hh-grid{background-image:linear-gradient(rgba(185,222,250,.13) 1px,transparent 1px),
    linear-gradient(90deg,rgba(185,222,250,.13) 1px,transparent 1px);}
  /* 注意：background 简写会把 background-clip 复位，渐变文字必须把 clip 一起重新声明，
     否则整块渐变会铺满元素、文字被 fill-color:transparent 抹掉（实测会变成一块空白色板）。 */
  .t-hero-t{background:linear-gradient(100deg,#FFFFFF 0%,#CFF6FF 38%,#FFFFFF 64%,#9FF0FF 100%);
    background-size:220% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
    animation:hnshine 5.2s linear infinite;}
  .t-hero-s{color:#B7DEF6;}
  .t-hero-ic{background:linear-gradient(145deg,rgba(255,255,255,.26),rgba(185,222,250,.10));
    border-color:rgba(185,222,250,.36);}
  .t-board{border-color:#D9EDF3;}
  .t-board .hb-body{background:linear-gradient(180deg,#EAF4FD 0%,#F8FCFE 200px,#FFFFFF 100%);}
  .t-board .hb-body:before{background:radial-gradient(70% 130% at 50% 0%,rgba(31,146,226,.10),transparent 72%);}
  .t-board .hb-grid>.hb-col:last-child{border-left-color:#E1F1F6;}
  .t-board .hb-sep{background:linear-gradient(90deg,transparent,#DDF0F5 8%,#DDF0F5 92%,transparent);}
  .tview .stat-strip{border-color:#DCEBF6;}
  .tview .stat-strip .si+.si{border-left-color:#DCEBF6;}
  .tview .stat-strip .si b{color:var(--tea-dd);}
  .tview .stat-strip .si:before{background:linear-gradient(90deg,var(--tea),#9AD4FA);}
  .tview .t-sec .n{color:#6F93AB;}
  .tview .ov-sec:before{background:linear-gradient(180deg,var(--tea),#9AD4FA);box-shadow:0 0 8px rgba(31,146,226,.5);}
  .tview .pill.indigo{background:var(--tea-l);color:var(--tea-dd);}
  .tview .score-row .val{color:var(--tea-dd);}
  .tview .bar{background:#EFF6FC;}
  .tview .bar i{background:linear-gradient(90deg,var(--tea),#74C6F5);}
  .tview .ov-quick .oq:hover{background:rgba(31,146,226,.07);}
  .tview .ov-quick .oi.c1{background:linear-gradient(135deg,var(--tea),#5BB6F4);box-shadow:0 5px 12px rgba(31,146,226,.34);}
  .tview .ov-quick .oq .onum.info{color:var(--tea-dd);background:rgba(31,146,226,.10);}

  /* 页头：教师端 11 个导航项，给标题一个图标锚点，扫视更快 */
  .topbar .tb-l{display:flex;align-items:center;gap:13px;min-width:0;}
  .topbar .tb-ic{width:40px;height:40px;border-radius:12px;flex:none;display:grid;place-items:center;color:#fff;
    background:linear-gradient(145deg,#037EF3,#0268CC);box-shadow:0 8px 18px rgba(3,126,243,.26);}
  .topbar .tb-ic svg{display:block;}
  .topbar .tb-edit{color:#B7791F;font-weight:700;}
  /* 页头左缘的角色色标：学生端品牌蓝 / 教师端靛青，翻到任意一页都知道自己在哪一端 */
  .topbar .tb-l:before{content:"";width:3px;align-self:stretch;border-radius:2px;flex:none;
    background:linear-gradient(180deg,var(--brand),#3FC0FF);box-shadow:0 0 10px rgba(3,126,243,.34);}
  .topbar.tea .tb-l:before{background:linear-gradient(180deg,var(--tea),#9AD4FA);box-shadow:0 0 10px rgba(31,146,226,.36);}
  .topbar.tea .tb-ic{background:linear-gradient(145deg,var(--tea),#5BB6F4);box-shadow:0 8px 18px rgba(31,146,226,.26);}

  @media(max-width:900px){
    .home-hero .hh-st,.home-hero .hh-today,.t-hero-st{margin-left:0;gap:20px;width:100%;justify-content:flex-start;}
    .home-2col,.dash-2col,.hb-grid{grid-template-columns:1fr;}
    .hb-grid>.hb-col{padding:0;}
    .hb-grid>.hb-col:last-child{border-left:none;border-top:1px solid #E7F0FB;margin-top:18px;padding-top:18px;}
  }

  /* ===== 以题搜题 / 举一反三 ===== */
  .search-box{background:var(--brand-l);border:1px solid var(--line);border-radius:14px;padding:18px;margin-bottom:16px;}
  .search-actions{display:flex;gap:10px;margin-top:12px;}
  .search-res{margin-top:6px;}
  .sr-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:12px;}
  .sr-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
  .sr-kid{font-size:12px;font-weight:700;color:var(--brand-d);}
  .sr-match{margin-left:auto;font-size:12px;font-weight:800;color:#047857;background:#E7F8F0;padding:2px 10px;border-radius:999px;}
  .sr-q{font-size:14.5px;line-height:1.75;}
  .sr-acts{display:flex;align-items:center;gap:10px;margin-top:12px;}
  .sr-detail{font-size:13px;}
  .sr-detail summary{cursor:pointer;color:var(--brand-d);font-weight:700;}
  .sr-detail .qtex{margin-top:8px;}
  .vz-card{background:var(--brand-l);border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:12px;}
  .vz-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
  .vz-q{font-size:15px;line-height:1.75;}
  .vz-detail{margin-top:10px;}
  .vz-detail summary{cursor:pointer;color:var(--brand-d);font-weight:700;}
  .vz-e{margin-top:8px;font-size:14px;line-height:1.7;}
  .vz-a{margin-top:8px;font-weight:700;}
  .search-filter{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:12px;}
  .search-filter .sf{display:flex;flex-direction:column;gap:5px;}
  .search-filter .sf>span{font-size:12px;font-weight:700;color:var(--sub);}
  .search-filter .inp{width:100%;}
  .sr-note{font-size:11.5px;margin-top:8px;}

  /* ===== 限时模考 ===== */
  .exam-cfg{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:14px;margin-bottom:14px;}
  .fld{display:flex;flex-direction:column;gap:6px;}
  .fld>span{font-size:12px;font-weight:700;color:var(--sub);}
  .fld .inp{width:100%;}
  .hq{font-size:13px;color:var(--txt);font-weight:600;}
  .htime{font-size:12px;color:var(--sub);margin-left:auto;}
  .exam-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 14px;background:var(--brand-l);border-radius:12px;margin-bottom:14px;}
  .exam-timer{font-size:14px;font-weight:700;}
  .exam-timer b{color:var(--red);font-size:16px;}
  .exam-ing{}
  .exam-q{font-size:16px;line-height:1.75;margin-bottom:14px;}
  .exam-opts{display:flex;flex-direction:column;gap:10px;}
  .exam-opt{display:flex;gap:10px;align-items:center;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fff;cursor:pointer;transition:.15s;font-size:14.5px;}
  .exam-opt:hover{border-color:var(--brand);}
  .exam-opt.on{border-color:var(--brand);background:#E9F3FE;box-shadow:0 0 0 3px rgba(3,126,243,.12);}
  .exam-opt b{color:var(--brand-d);}
  .exam-nav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:16px;}
  .exam-report{padding:2px;}
  .er-badge{display:inline-flex;align-items:center;padding:6px 18px;border-radius:999px;font-weight:800;font-size:15px;margin-bottom:16px;}
  .er-badge.pass{background:#E7F8F0;color:#047857;}
  .er-badge.fail{background:#FEF3E2;color:#B45309;}
  .exam-bands{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px;background:var(--brand-l);border:1px solid var(--line);border-radius:12px;padding:12px 14px;}
  .eb-lab{font-size:12px;font-weight:700;color:var(--sub);margin-right:4px;}
  .exam-bands .fld.mini{margin:0;}
  .dur-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px;}
  .dur-dot{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:7px;background:#EAF2FC;color:var(--brand-d);font-size:11px;font-weight:700;}
  .exam-review{display:flex;flex-direction:column;gap:12px;}
  .rv-item{border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:#fff;}
  .rv-item.ok{border-left:3px solid var(--green);}
  .rv-item.no{border-left:3px solid var(--red);}
  .rv-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;font-size:13px;}
  .rv-tag{margin-left:auto;font-weight:800;font-size:12px;}
  .rv-item.ok .rv-tag{color:var(--green);}
  .rv-item.no .rv-tag{color:var(--red);}
  .rv-q{font-size:14.5px;line-height:1.7;margin-bottom:8px;}
  .rv-my{font-size:13px;margin-bottom:4px;}
  .rv-ans{font-size:13px;color:var(--sub);font-weight:700;}

  /* ===== 智能组卷（教师端） ===== */
  .paper-sheet{background:#fff;border:1px solid var(--line);border-radius:14px;padding:28px 32px;margin-top:6px;}
  .paper-h{font-size:20px;font-weight:800;text-align:center;margin-bottom:4px;}
  .paper-meta{color:var(--sub);font-size:13px;margin-bottom:18px;padding-bottom:12px;border-bottom:1px dashed var(--line);}
  .paper-q{padding:14px 0;border-bottom:1px solid #F1F5F9;}
  .paper-q:last-child{border-bottom:0;}
  .pq-no{font-weight:700;margin-bottom:6px;}
  .pq-opts{margin:8px 0;display:grid;gap:4px;font-size:14px;}
  .pq-ans{margin-top:8px;color:var(--sub);}
  .paper-type-l{display:inline-flex;align-items:center;gap:6px;background:var(--brand-l);padding:7px 12px;border-radius:10px;font-size:13px;cursor:pointer;}
  .paper-trow{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:8px 2px;border-bottom:1px dashed #E6EFF9;}
  .fld.mini span{font-size:11px;}
  .fld.mini input{width:70px;padding:6px 8px;}
  .paper-total{margin:10px 2px 0;font-size:13px;color:var(--sub);}
  .paper-total b{color:var(--brand-dd);}
  .paper-chip{display:inline-block;padding:4px 11px;border:1px solid #E2ECF8;border-radius:999px;font-size:12px;cursor:pointer;color:var(--sub);transition:.15s;user-select:none;}
  .paper-chip:hover{border-color:var(--brand);}
  .paper-chip.on{background:var(--brand);border-color:var(--brand);color:#fff;}
  .paper-sec{font-weight:800;font-size:14.5px;margin:16px 0 6px;color:var(--brand-dd);}
  .pq-ops{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px dashed #EDF3FA;}
  .pq-key{margin-top:8px;font-size:12.5px;background:#F4FAFF;border:1px dashed #BFD9F2;border-radius:8px;padding:6px 10px;color:var(--brand-dd);}
  .bd-bar{display:flex;height:8px;border-radius:5px;overflow:hidden;background:#EEF4FB;margin-top:12px;}

  /* ===== 能力排行榜 + 勋章 ===== */
  .rank-list{display:flex;flex-direction:column;gap:8px;}
  .rank-row{display:flex;align-items:center;gap:14px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fff;}
  .rank-row.me{border-color:var(--brand);background:#E9F3FE;box-shadow:0 0 0 3px rgba(3,126,243,.1);}
  .rk{font-size:18px;font-weight:800;width:32px;text-align:center;flex:none;}
  .rav{width:42px;height:42px;border-radius:50%;overflow:hidden;flex:none;display:grid;place-items:center;background:var(--brand-l);color:var(--brand-d);font-weight:800;}
  .rav-img{width:100%;height:100%;object-fit:cover;}
  .rav-def{font-size:18px;}
  .rn{display:flex;flex-direction:column;}
  .rn .muted{font-size:12px;}
  .rstat{margin-left:auto;display:flex;gap:18px;font-size:13px;color:var(--sub);}
  .rstat b{color:var(--txt);font-size:15px;}
  .achv-head{position:relative;padding:14px 16px 16px;border-radius:16px;margin:18px 0 12px;
    background:linear-gradient(135deg,#F3F9FF,#E8F1FE 58%,#FFF8E8);border:1px solid #DCE8F7;}
  .achv-t{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:800;color:var(--brand-dd);letter-spacing:.3px;}
  .achv-ico{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:9px;
    background:linear-gradient(140deg,#FFD86A,#F0A418);color:#fff;box-shadow:0 4px 10px rgba(240,164,24,.32);}
  .achv-sum{margin-top:7px;font-size:12.5px;color:var(--sub);}
  .achv-sum b{font-size:20px;color:var(--brand-dd);font-weight:800;letter-spacing:-.4px;}
  .achv-sum .dot{display:inline-block;width:3px;height:3px;border-radius:50%;background:#B9CBDF;margin:0 8px;vertical-align:middle;}
  .achv-track{height:6px;border-radius:99px;background:#E4EDF8;margin-top:9px;overflow:hidden;}
  .achv-track i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#037EF3,#7FD3FF 62%,#FFC53D);}
  .badge-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:14px;}
  .badge{position:relative;overflow:hidden;text-align:center;padding:16px 12px 14px;border-radius:16px;
    background:linear-gradient(180deg,#FFFFFF,#F5F8FD);border:1px solid var(--line);
    transition:transform .2s ease,box-shadow .2s ease;}
  .badge:hover{transform:translateY(-3px);box-shadow:0 12px 24px rgba(3,40,80,.12);}
  .badge.lock{opacity:.72;background:linear-gradient(180deg,#FBFCFE,#F2F5F9);}
  .badge.on{background:linear-gradient(180deg,#FFFDF4,#FFF6DE);border-color:#F1DCA0;}
  .badge.tier-r.on{background:linear-gradient(180deg,#F4F8FF,#DDE9FF);border-color:#A6C6F2;}
  .badge.tier-e.on{background:linear-gradient(180deg,#FBF3FF,#F0DCFF);border-color:#CFA6F2;}
  .badge.tier-l.on{background:linear-gradient(180deg,#FFF9EC,#FFE9C2);border-color:#F2C87F;}
  .bd-medal{position:relative;width:66px;height:66px;margin:2px auto 0;display:grid;place-items:center;border-radius:50%;
    background:radial-gradient(circle at 34% 26%,#FFFFFF 0%,#DEE9F5 58%,#B7CADD 100%);
    border:2px solid #E6EEF8;box-shadow:inset 0 -3px 8px rgba(20,50,90,.10),0 4px 12px rgba(3,40,80,.10);}
  .badge.tier-r .bd-medal{background:radial-gradient(circle at 34% 26%,#FFFFFF,#DBE9FF 58%,#9CC0F4);border-color:#C3D9FA;}
  .badge.tier-e .bd-medal{background:radial-gradient(circle at 34% 26%,#FFFFFF,#EADCFF 58%,#BE92F2);border-color:#D8B8FA;}
  .badge.tier-l .bd-medal{background:radial-gradient(circle at 34% 26%,#FFFDF2,#FFE9BA 58%,#F2BE57);border-color:#F8DA98;}
  .bd-medal svg{position:relative;z-index:2;color:#0F3B6E;}
  .badge.lock .bd-medal{filter:grayscale(.7) saturate(.55);}
  .bm-shine{position:absolute;inset:2px;border-radius:50%;z-index:3;pointer-events:none;overflow:hidden;}
  .bm-shine:before{content:"";position:absolute;top:-45%;left:-130%;width:58%;height:190%;
    background:linear-gradient(100deg,transparent,rgba(255,255,255,.92),transparent);transform:rotate(18deg);
    animation:bmSweep 4.2s ease-in-out infinite;}
  @keyframes bmSweep{0%{left:-130%;}46%,100%{left:150%;}}
  .badge.lock .bm-shine{display:none;}
  .bm-lock{position:absolute;right:-3px;bottom:-3px;z-index:4;width:23px;height:23px;border-radius:50%;
    background:#fff;border:1px solid var(--line);display:grid;place-items:center;color:var(--gray);
    box-shadow:0 2px 6px rgba(3,40,80,.16);}
  .badge.on .bd-medal{animation:badgeBreathe 3.4s ease-in-out infinite;}
  @keyframes badgeBreathe{0%,100%{box-shadow:inset 0 -3px 8px rgba(20,50,90,.10),0 4px 12px rgba(3,40,80,.10);}
    50%{box-shadow:inset 0 -3px 8px rgba(20,50,90,.10),0 6px 20px rgba(251,191,36,.55);}}
  .bn{font-weight:800;font-size:13.5px;margin-top:9px;letter-spacing:.2px;}
  .bd{font-size:11px;color:var(--sub);margin-top:4px;line-height:1.55;min-height:34px;}
  .bprog{height:5px;border-radius:99px;background:#E8EFF8;margin:8px 6px 0;overflow:hidden;}
  .bprog i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#037EF3,#7FD3FF);}
  .bpt{font-size:10.5px;color:var(--gray);font-weight:800;margin-top:5px;}
  .bok{display:inline-block;margin-top:8px;font-size:11px;font-weight:700;color:#047857;}
  .block{display:inline-block;margin-top:8px;font-size:11px;font-weight:700;color:var(--gray);}
  .tier-tag{display:inline-block;margin-top:6px;font-size:10px;font-weight:800;padding:1px 8px;border-radius:999px;}
  .t-tier-c{background:#EEF2F7;color:#5B6B7E;}
  .t-tier-r{background:#E4EDFD;color:#2A66C8;}
  .t-tier-e{background:#F1E4FD;color:#7B36C4;}
  .t-tier-l{background:#FCEFCF;color:#B07A12;}
  .growth-path{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-bottom:16px;padding:10px 13px;
    background:var(--brand-l);border:1px solid var(--line);border-radius:12px;}
  .gp-lb{font-size:11px;font-weight:800;color:var(--brand-dd);letter-spacing:.6px;margin-right:6px;}
  .gp-step{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--sub);}
  .gp-dot{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#E2E8F0;color:#fff;font-size:11px;font-weight:800;}
  .gp-bar{width:14px;height:2px;background:#D7E2F0;border-radius:2px;}
  .gp-step.on{color:var(--brand-d);font-weight:700;}
  .gp-step.on .gp-dot{background:var(--green);}
  .series-block{margin-bottom:18px;}
  .series-h{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:800;color:var(--brand-dd);margin:14px 0 9px;}
  .series-h:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line),transparent);}
  .series-h em{font-style:normal;font-size:11.5px;color:var(--gray);font-weight:800;}

  .fb-ai{display:flex;gap:6px;align-items:flex-start;margin-top:8px;padding:8px 10px;background:#F5F3FF;border:1px dashed #D9CCFF;border-radius:10px;font-size:12.5px;line-height:1.6;color:#5B3FA8;}
  .ai-tag{display:inline-grid;place-items:center;background:#6D4BD8;color:#fff;border-radius:6px;font-size:10.5px;font-weight:800;padding:1px 6px;flex:none;}
  .fb-hot{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:16px;}
  .hot-item{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 0;border-bottom:1px dashed #EDF1F8;}
  .hot-item:last-of-type{border-bottom:0;}
  .hot-name{font-weight:700;font-size:13.5px;}
  .hot-cnt{font-size:12.5px;color:var(--sub);}

  /* ===== 学情：掌握热力图 / 进度条填充 ===== */
  .bar i{display:block;height:100%;background:linear-gradient(90deg,#037EF3,#35AAFC);border-radius:99px;}
  .hm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:10px;}
  .hm{border-radius:12px;padding:12px;color:#fff;min-height:62px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:0 4px 12px rgba(2,46,82,.08);}
  .hm-done{background:linear-gradient(135deg,#047857,#10B981);}
  .hm-doing{background:linear-gradient(135deg,#0268CC,#37A4FB);}
  .hm-low{background:linear-gradient(135deg,#B45309,#F59E0B);}
  .hm-zero{background:#E2E8F0;color:#94A3B8;box-shadow:none;}
  .hm-n{font-size:12.5px;font-weight:700;line-height:1.35;}
  .hm-v{font-size:13px;font-weight:800;}
  .hm-legend{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--sub);margin-top:10px;flex-wrap:wrap;}
  .hm-legend .hm{width:18px;height:18px;min-height:0;padding:0;display:inline-block;box-shadow:none;}

  @media(max-width:900px){
    .exam-cfg{grid-template-columns:1fr 1fr;}
    .badge-grid{grid-template-columns:repeat(3,1fr);}
  }
  @media print{
    body{background:#fff;}
    .shell>.nav,.nav-item{display:none !important;}
    .paper-sheet{box-shadow:none;border:0;padding:0;}
  }

  /* ===== 段位天梯 / 闯关路线图（v1.0） ===== */
  .tier-card{border:1px solid #E6EFF9;border-radius:14px;padding:14px;background:linear-gradient(180deg,#F8FBFF,#F1F7FE);}
  .tier-top{display:flex;align-items:center;gap:12px;}
  .tier-badge{width:50px;height:50px;display:inline-flex;align-items:center;justify-content:center;flex:none;position:relative;}
  .tier-svg{display:block;}
  .lock-svg{display:block;}
  .tier-svg.bronze{filter:drop-shadow(0 4px 8px rgba(176,122,60,.45));}
  .tier-svg.silver{filter:drop-shadow(0 4px 8px rgba(150,165,185,.42));}
  .tier-svg.gold{filter:drop-shadow(0 5px 10px rgba(230,169,15,.52));}
  .tier-svg.diamond{filter:drop-shadow(0 4px 9px rgba(55,180,230,.5));}
  .tier-svg.star{filter:drop-shadow(0 4px 9px rgba(139,92,246,.5));}
  .tier-svg.master{filter:drop-shadow(0 5px 11px rgba(3,126,243,.55));}
  .tier-mid{flex:1;min-width:0;}
  .tier-lv{font-size:15px;font-weight:700;color:var(--ink);}
  .tier-sub{font-size:12px;color:var(--sub);margin-top:2px;}
  .tier-xp{text-align:right;flex:none;}
  .tier-xp b{font-size:20px;color:var(--brand);}
  .tier-xp span{display:block;font-size:11px;color:var(--sub);}
  .tier-bar{height:8px;border-radius:6px;background:var(--brand-l);overflow:hidden;margin:12px 0 10px;}
  .tier-bar i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,#037EF3,#26A8FF);}
  .tier-legend{display:flex;gap:6px;flex-wrap:wrap;}
  .tier-legend .tl{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--sub);background:#F3F7FC;border:1px solid #E4ECF6;border-radius:20px;padding:4px 11px;opacity:.55;transition:.15s;}
  .tier-legend .tl b{font-weight:700;}
  .tier-legend .tl.on{opacity:1;background:linear-gradient(180deg,#F4F9FF,#E9F3FE);border-color:var(--brand-l2);color:var(--ink);box-shadow:0 3px 9px rgba(3,126,243,.12);}
  .tier-legend .tl.cur{outline:2px solid var(--brand);outline-offset:1px;box-shadow:0 0 0 3px rgba(3,126,243,.18);}

  .route-head{display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--sub);margin:14px 0 6px;}
  .route-ch{border:1px solid #EDF2F8;border-radius:12px;padding:12px;margin-top:10px;background:#fff;}
  .route-ch.hot{border-color:#037EF3;background:#F5FAFF;animation:rchot 1.5s ease-out 2;}
  @keyframes rchot{0%{box-shadow:0 0 0 0 rgba(3,126,243,.42)}70%{box-shadow:0 0 0 12px rgba(3,126,243,.10)}100%{box-shadow:0 0 0 16px rgba(3,126,243,0)}}
  .rc-h{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
  .rc-no{font-size:12px;font-weight:700;color:#fff;background:linear-gradient(180deg,#37A4FB,#0268CC);border-radius:8px;padding:3px 9px;box-shadow:0 4px 10px rgba(3,126,243,.30);}
  .rc-h b{font-size:14px;color:var(--ink);}
  .rc-p{margin-left:auto;font-size:12.5px;color:var(--sub);}
  .route-stops{display:flex;flex-wrap:wrap;gap:10px;}
  .route-stop{width:108px;max-width:calc(50% - 5px);border:1px solid #E6EDF5;border-radius:12px;padding:10px;cursor:pointer;background:#fff;transition:.15s;display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;}
  .route-stop:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(3,126,243,.12);border-color:var(--brand-l2);}
  .route-stop .rs-dot{width:44px;height:44px;border-radius:13px;display:grid;place-items:center;flex:none;background:rgba(9,30,66,.045);box-shadow:inset 0 0 0 1px rgba(9,30,66,.06);}
  .route-stop .rs-t{font-size:12.5px;font-weight:600;color:var(--ink);}
  .route-stop .rs-s{font-size:11px;color:var(--sub);}
  .route-stop.todo .rs-dot{background:rgba(9,30,66,.04);}
  .route-stop.doing .rs-dot{background:rgba(3,126,243,.07);}
  .route-stop.done{background:#FFF9EC;border-color:#F4E2B4;}
  .route-stop.done .rs-dot{background:rgba(245,158,11,.10);}
  .route-stop.done .rs-t{color:#B7791F;}
  .route-stop.unlit .rs-dot{background:rgba(9,30,66,.05);box-shadow:inset 0 0 0 1px rgba(9,30,66,.10);}
  .route-stop.unlit .rs-t{color:#9AA7B8;}
  .route-stop.unlit .rs-s{color:#B5C0CE;}
  .route-stop.lit:not(.done) .rs-dot{background:rgba(3,126,243,.05);box-shadow:inset 0 0 0 1px rgba(3,126,243,.10),0 4px 12px rgba(3,126,243,.14);}
  /* —— 闯关路线 · 南天门星舰航线风格 —— */
  .route-board{overflow:hidden;}
  .route-bridge{position:relative;border-radius:16px;padding:18px;margin:14px 0 6px;color:#EAF4FF;
    background:radial-gradient(120% 140% at 12% 0%,#16345C 0%,#0E2444 55%,#091B34 100%);
    border:1px solid rgba(127,211,255,.18);box-shadow:inset 0 0 0 1px rgba(127,211,255,.06),0 10px 30px rgba(8,24,48,.18);overflow:hidden;}
  .route-bridge::before{content:"";position:absolute;inset:0;background:
    radial-gradient(2px 2px at 18% 30%,rgba(220,238,255,.5),transparent),
    radial-gradient(2px 2px at 70% 22%,rgba(220,238,255,.4),transparent),
    radial-gradient(1.5px 1.5px at 42% 72%,rgba(220,238,255,.5),transparent),
    radial-gradient(1.5px 1.5px at 86% 64%,rgba(220,238,255,.4),transparent),
    radial-gradient(1.5px 1.5px at 30% 88%,rgba(220,238,255,.4),transparent);pointer-events:none;}
  .rb-top{display:flex;align-items:center;gap:14px;position:relative;z-index:1;}
  .rb-ship{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;flex:none;
    background:linear-gradient(160deg,#2A5F96,#0A2C52);box-shadow:0 0 0 1px rgba(127,211,255,.3),0 6px 16px rgba(3,126,243,.25);}
  .rb-meta{flex:1;min-width:0;}
  .rb-t{font-size:15px;font-weight:700;color:#EAF4FF;}
  .rb-s{font-size:12px;color:#9FC4E6;margin-top:2px;}
  .rb-pct{text-align:right;}
  .rb-pct b{font-size:24px;font-weight:800;color:#FFC53D;font-variant-numeric:tabular-nums;}
  .rb-pct span{display:block;font-size:11px;color:#9FC4E6;}
  .rlane{display:flex;align-items:center;gap:0;margin:16px 0 12px;position:relative;z-index:1;overflow-x:auto;padding:4px 2px;}
  .rl-sector{width:34px;height:34px;border-radius:50%;flex:none;display:grid;place-items:center;cursor:pointer;
    border:1px solid rgba(127,211,255,.28);background:rgba(127,211,255,.06);color:#CFE6FF;font-size:12px;font-weight:700;transition:.15s;}
  .rl-sector:hover{transform:translateY(-2px);box-shadow:0 6px 14px rgba(3,126,243,.3);}
  .rl-sector.part{border-color:rgba(79,178,245,.6);background:rgba(79,178,245,.14);color:#BFE0FA;}
  .rl-sector.clr{border-color:#FFC53D;background:rgba(245,158,11,.16);color:#FFD980;box-shadow:0 0 0 1px rgba(255,197,61,.3);}
  .rl-link{flex:none;width:18px;height:2px;background:linear-gradient(90deg,rgba(127,211,255,.5),rgba(127,211,255,.15));}
  .rb-foot{display:flex;align-items:center;gap:14px;flex-wrap:wrap;position:relative;z-index:1;}
  .rb-stat{font-size:12.5px;color:#BBD6F2;}
  .rb-stat b{color:#EAF4FF;font-weight:700;}
  .rb-stat.ok{color:#FFD980;}
  .route-ch.cleared{border-color:#F4E2B4;background:linear-gradient(180deg,#FFFBF2,#FFF7E6);}
  .rc-badge{margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;color:#B7791F;
    background:rgba(245,158,11,.14);border:1px solid rgba(245,158,11,.4);padding:2px 8px;border-radius:999px;}
  .route-lane{display:flex;flex-wrap:wrap;align-items:stretch;gap:0 4px;margin-top:4px;}
  .route-lane .rlink{flex:none;width:14px;align-self:center;height:2px;background:linear-gradient(90deg,rgba(3,126,243,.35),rgba(3,126,243,.12));}
  .route-stop.synth{width:108px;max-width:calc(50% - 5px);}
  .route-stop.synth .synth-dot{background:rgba(9,30,66,.05);box-shadow:inset 0 0 0 1px rgba(9,30,66,.1);}
  .route-stop.synth.on{border-color:#F4E2B4;background:#FFF9EC;}
  .route-stop.synth.on .synth-dot{background:rgba(245,158,11,.12);box-shadow:0 0 0 1px rgba(245,158,11,.4),0 4px 14px rgba(245,158,11,.22);}
  .route-stop.synth.on .rs-t{color:#B7791F;}
  .route-stop.synth.lock{cursor:default;opacity:.72;}
  .route-stop.synth.lock .synth-dot{background:rgba(9,30,66,.04);}
  .route-stop.synth.lock .rs-t{color:#9AA7B8;}



  /* Immersive route: textured 3D assets, curved flight path and chapter planets. */
  .shell.route-shell{background:#03132e}.route-shell .side{background:linear-gradient(180deg,#061e3c,#082b51);border-right:1px solid #6bbcff44}
  .route-shell .main{padding:0;background:#04132b;color:#e7f3ff;min-width:0}.route-shell .topbar{display:none}
  .route-universe{min-height:100vh;padding:24px 28px 30px;background:linear-gradient(180deg,#03142b22,#03132b33 65%,#03132be8),url('/assets/route-space.png') center top/cover fixed;overflow:hidden}
  .route-top{display:flex;align-items:flex-start;justify-content:space-between;gap:26px}.route-ranks{flex:1;min-width:0}
  .route-ranks .tier-card{padding:0;border:0;background:none}.route-ranks .tier-top,.route-ranks .tier-bar{display:none}.route-ranks .tier-legend{gap:6px}.route-ranks .tier-legend .tl{background:#08204899;border:1px solid #77b7ff33;color:#bbd2ee;padding:8px 12px;border-radius:24px}.route-ranks .tier-legend .tl.cur{border-color:#81d8ff;box-shadow:inset 0 0 15px #276aff77,0 0 12px #308fffaa;color:#fff}.route-ranks .lb-tip{color:#a4bedb;font-size:11px}
  .space-data{flex:none;width:235px;border:1px solid #67c7ff66;background:linear-gradient(135deg,#0a2b5399,#051732bb);border-radius:14px;padding:12px 17px;box-shadow:inset 0 0 16px #4eaaff18}.space-data small{display:block;color:#c3daf1;margin-bottom:6px}.space-data b{font-size:24px;color:#76e1ff;font-variant-numeric:tabular-nums}.space-data span{font-size:11px;color:#b4cbe2}.space-data .orbit-progress{margin-top:8px}
  .space-title{display:flex;align-items:center;gap:14px;margin:35px 0 8px}.space-title .space-icon{width:60px;filter:drop-shadow(0 0 9px #52bfff)}.space-title h1{font-size:29px;letter-spacing:2px;margin:0;text-shadow:0 2px 15px #419dff66}.space-title p{font-size:13px;color:#bdd5ed;margin:9px 0 0}.space-title select{background:#071d3cbb;color:#eaf4ff;border:1px solid #6ebeff55;border-radius:8px;font:inherit;font-size:14px;padding:6px 9px;margin-left:8px}.space-title select option{background:#081e3c}
  .space-subjects{display:flex;gap:8px;margin-left:auto}.space-subjects button{background:#082a4d99;border:1px solid #6acbff44;color:#b8d2eb;border-radius:8px;padding:7px 14px;cursor:pointer}.space-subjects button.on{color:#fff;background:#1766be88;border-color:#65cfff;box-shadow:0 0 12px #339aff55}
  .route-bridge{background:none;border:0;box-shadow:none;padding:0;margin:0;overflow:visible}.route-bridge:before{display:none}
  .orbit-viewport{overflow-x:auto;overflow-y:hidden;touch-action:pan-x pan-y;cursor:grab;scrollbar-color:#4276a1 #06172d;scrollbar-width:thin;position:relative;padding-bottom:4px}.orbit-viewport.dragging{cursor:grabbing;user-select:none}.orbit-viewport:focus-visible{outline:2px solid #68d5ff;outline-offset:-2px}
  .orbit-track{position:relative;height:565px;min-width:100%}.orbit-path{position:absolute;inset:0;pointer-events:none;overflow:visible}.orbit-path path{fill:none;stroke:#99deff;stroke-width:3;stroke-dasharray:2 14;stroke-linecap:round;filter:drop-shadow(0 0 5px #42baff)}
  .orbit-node{--planet:#b5c8e4;position:absolute;width:204px;border:0;background:none!important;color:#e9f4ff;padding:0 8px;cursor:pointer;font:inherit;text-align:center;z-index:2;transform:translateX(-50%);text-shadow:0 2px 6px #020c22}
  .orbit-node:focus-visible{outline:2px solid #8ee6ff;outline-offset:6px;border-radius:18px}.orbit-node:hover .planet-art{transform:translateY(-7px) scale(1.06)}
  .orbit-sphere{display:block;position:relative;height:157px;margin:0 auto 8px;isolation:isolate}.planet-art{position:absolute;width:204px;height:204px;object-fit:contain;left:50%;top:50%;margin:-102px 0 0 -102px;transition:transform .3s;filter:saturate(.25) brightness(.8);pointer-events:none;user-select:none}
  .orbit-node[data-tone=practice]{--planet:#ffc386}.orbit-node[data-tone=practice] .planet-art{filter:hue-rotate(175deg) saturate(.8) brightness(1.1)}.orbit-node[data-tone=progress]{--planet:#79dcff}.orbit-node[data-tone=progress] .planet-art{filter:hue-rotate(-18deg) saturate(1.2)}.orbit-node[data-tone=mastered]{--planet:#ffe190}.orbit-node[data-tone=mastered] .planet-art{filter:hue-rotate(190deg) saturate(.85) brightness(1.3);}
  .orbit-node[aria-pressed=true] .orbit-sphere:after{content:'';position:absolute;left:0;right:0;bottom:12px;height:35px;border:2px solid #a5e7ff;border-radius:50%;box-shadow:0 0 16px #228fff,inset 0 0 15px #228fff;transform:rotate(-9deg);z-index:-1}.orbit-node[aria-pressed=true] .planet-art{transform:scale(1.16)}.orbit-node[aria-pressed=true][data-tone=new] .planet-art{filter:hue-rotate(38deg) saturate(1.3) brightness(1.2)}
  .planet-mark{position:absolute;left:50%;top:65px;transform:translateX(-50%);width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:#fff1b9;color:#946014;box-shadow:0 0 20px #ffc333;font-size:17px;text-shadow:none}.planet-pin{position:absolute;left:50%;top:-18px;transform:translateX(-50%);color:#c3efff;font-size:23px;filter:drop-shadow(0 0 8px #3dc7ff)}
  .orbit-node small{display:block;font-weight:700;font-size:14px;margin-bottom:8px;color:#cce2fb}.orbit-node strong{display:block;min-height:40px;font-size:14px;line-height:1.45}.orbit-node[aria-pressed=true] strong{color:#fff;font-size:16px}.orbit-status{display:block;font-size:11px;color:var(--planet);margin:7px 0}.orbit-progress{display:block;height:5px;border-radius:8px;background:#526d9666;overflow:hidden}.orbit-progress i{display:block;height:100%;background:linear-gradient(90deg,#398ffc,#8beaff);border-radius:inherit}.orbit-node .orbit-progress{width:104px;margin:0 auto}.orbit-node .orbit-progress i{background:var(--planet)}.orbit-stars{display:block;color:#6e8caf;letter-spacing:5px;margin-top:8px;font-size:18px}.orbit-node[data-tone=mastered] .orbit-stars{color:#ffdf8b}
  .space-callout{position:absolute;left:25px;top:14px;width:310px;padding:15px 19px;border:1px solid #6dccffb3;border-left:3px solid #8be7ff;border-radius:13px;background:linear-gradient(125deg,#082951ee,#081a3ddb);box-shadow:0 0 18px #278eff55,inset 0 0 18px #358aff18;z-index:4;cursor:default}.space-callout small{display:block;color:#6bdeff;font-weight:700;letter-spacing:2px}.space-callout strong{display:block;font-size:17px;margin:7px 0 10px;line-height:1.5}.space-callout p{font-size:12px;color:#b7d4ef;margin:0 0 12px}.space-enter{display:block;width:100%;border:1px solid #a4ebff;border-radius:24px;padding:9px;color:#fff;background:linear-gradient(130deg,#34c9fa,#196aff 75%);box-shadow:0 0 15px #238eff99,inset 0 0 7px #c3eeff88;cursor:pointer;font-weight:700;letter-spacing:1px}
  .route-shuttle{position:absolute;width:115px;height:77px;object-fit:contain;pointer-events:none;z-index:5;filter:drop-shadow(0 0 9px #3ba6ff);transform:translate(-50%,-50%)}.route-shuttle.flying{filter:drop-shadow(0 0 14px #6ddfff)}.orbit-node.just-lit .orbit-sphere:before{content:'';position:absolute;inset:15px;border-radius:50%;animation:planet-light 1.7s ease-out;box-shadow:0 0 60px 20px #ffd969;z-index:-1}@keyframes planet-light{0%{transform:scale(.4);opacity:0}30%{opacity:1}100%{transform:scale(1.7);opacity:0}}
  .space-navigation{display:flex;align-items:center;gap:12px;font-size:12px;color:#afcee9;margin:4px 0 18px}.orbit-controls{display:flex;gap:7px}.orbit-controls button{background:#11365eaa;border:1px solid #6abdfb77;color:#d9f4ff;border-radius:8px;width:35px;height:30px;cursor:pointer}.space-navigation .orbit-legend{margin-left:auto}.orbit-legend{display:flex;gap:13px;flex-wrap:wrap;font-size:11px}.orbit-legend span:before{content:'';display:inline-block;width:6px;height:6px;margin-right:5px;border-radius:50%;background:var(--dot)}
  .space-footer{display:grid;grid-template-columns:1fr .85fr 1fr;gap:14px}.space-panel{border:1px solid #479ae07a;border-radius:18px;background:linear-gradient(130deg,#08284cdb,#061631e8);padding:17px 20px;box-shadow:inset 0 0 22px #2274c21f}.space-panel h3{font-size:14px;margin:0 0 14px;color:#e0f0ff}.space-panel p{font-size:12px;color:#a6c7e7;margin:8px 0 0;line-height:1.7}.space-panel b{color:#7fddff}.space-quote{display:flex;flex-direction:column;justify-content:center;text-align:center}.space-quote strong{font-size:17px;font-style:italic;color:#d5eaff;line-height:1.7}.space-milestones{display:flex;justify-content:space-between}.space-milestones span{text-align:center;font-size:10px;color:#94abc6}.space-milestones i{display:block;font-style:normal;font-size:27px;filter:grayscale(1);opacity:.5;margin-bottom:5px}.space-milestones .on i{filter:none;opacity:1}.route-flight-status{font-size:12px;color:#8adfff;min-height:20px;margin:10px 0;text-align:center}
  .route-selected-label{font-size:12px;color:#aac9e5;margin:21px 0 10px}.route-universe .route-ch{background:#071e3dd9;border:1px solid #3b84bf66;border-radius:14px}.route-universe .rc-h b,.route-universe .route-stop .rs-t{color:#d7eaff}.route-universe .route-stop{background:#102b4855;border-color:#5294c033}.route-universe .route-stop:hover{background:#184474aa;border-color:#7ddcff}.route-universe .rs-s,.route-universe .rc-p{color:#9cbad5}.route-universe .route-stop.unlit{opacity:1}.route-universe .route-stop.synth.lock{opacity:.5}.route-universe .lb-tip{color:#a5bfdb}.route-universe .route-ch.hot{box-shadow:none}.route-universe .route-stop .rs-dot{background:#163955;color:#88d9ff}
  @media(min-width:1600px){.route-universe{padding:28px 38px}.orbit-track{height:565px}.space-title{margin-top:42px}}
  @media(max-width:900px){.route-universe{padding:20px 16px}.route-top{gap:12px}.space-data{width:190px}.route-ranks .tier-legend .tl{padding:5px 8px}.space-footer{grid-template-columns:1fr 1fr}.space-quote{display:none}.space-navigation{flex-wrap:wrap}.space-navigation .orbit-legend{margin-left:0}.space-title h1{font-size:23px}}
  @media(max-width:600px){.route-top{flex-direction:column}.space-data{width:100%;display:flex;gap:10px;align-items:center;padding:9px 13px}.space-data small{margin:0}.space-data b{font-size:20px}.space-data .orbit-progress{flex:1;margin:0}.space-title{flex-wrap:wrap;margin-top:24px}.space-title h1{font-size:21px}.space-title .space-icon{width:40px}.space-title p{font-size:11px}.space-subjects{margin:0}.space-footer{grid-template-columns:1fr}.space-milestones i{font-size:24px}.space-callout{width:270px;left:12px}.orbit-track{height:565px}.route-universe .route-ch{padding:12px}.route-universe .route-lane{gap:6px}.route-universe .route-stop{width:calc(50% - 8px);max-width:none}.route-universe .rlink{display:none}}
  @media(prefers-reduced-motion:reduce){.planet-art{transition:none}.orbit-node.just-lit .orbit-sphere:before{animation:none}}


  .orbit-track{height:670px!important}.orbit-path path{filter:none;stroke-dasharray:none;stroke-width:1}.orbit-path .orbit-connection{stroke:#8cdcff;stroke-dasharray:1 12;stroke-width:2.3;filter:drop-shadow(0 0 4px #2b9dff)}
  .orbit-plane{fill:url(#orbitPlaneShade);stroke:#729cfb;stroke-opacity:.07}.orbit-rear{fill:none;stroke:#739eee;stroke-opacity:.16;stroke-width:1;stroke-dasharray:3 7}.orbit-path .orbit-front{stroke:#71bfff;stroke-opacity:.5;stroke-width:2;filter:drop-shadow(0 2px 4px #2491ff)}.orbit-guide{fill:none;stroke:#567eb9;stroke-opacity:.12;stroke-width:1}
  .orbit-node{width:210px}.orbit-node .orbit-sphere{height:160px;transform:scale(var(--depth,1));transform-origin:50% 60%}.orbit-node .planet-model{position:absolute;width:224px;height:224px;left:50%;top:50%;margin:-112px 0 0 -112px;filter:drop-shadow(0 10px 10px #0008);transition:transform .3s}
  .orbit-node:hover .planet-model{transform:translateY(-5px)}.orbit-node[aria-pressed=true] .planet-model{filter:drop-shadow(0 0 11px #75aaff77)}.orbit-node[aria-pressed=true] .orbit-sphere:after{border-color:#b3e9ff;box-shadow:0 0 16px #228fff88,inset 0 0 15px #228fff55}
  .planet-tier-label{display:block;font-size:11px;color:#a6d8ff;margin:6px 0 0;letter-spacing:1px}.orbit-node .orbit-status{margin:5px 0}.orbit-node .orbit-stars{font-size:14px;margin-top:5px}.orbit-node strong{min-height:40px}.orbit-node small{margin-bottom:5px}
  .route-shuttle{width:54px;height:36px;left:0;top:0;opacity:0;visibility:hidden;z-index:30;transform-origin:center;will-change:transform,opacity;filter:drop-shadow(0 0 4px #8ce9ff)}.route-shuttle.flying{visibility:visible;filter:drop-shadow(0 0 5px #6ddfff)}
  .planet-atlas{margin:0 0 17px;border:1px solid #5182b44d;border-radius:12px;background:#04172fd9;color:#d6eaff}.planet-atlas summary{cursor:pointer;padding:12px 16px;font-size:13px;list-style-position:inside}.planet-atlas summary span{font-size:11px;color:#87aacb;margin-left:14px}.atlas-grid{display:grid;grid-template-columns:repeat(6,1fr);padding:0 16px;gap:10px}.atlas-grid>div{text-align:center;border-radius:10px;background:linear-gradient(#0a244222,#143d5c44);padding-bottom:10px}.atlas-grid svg{width:100%;height:100px;display:block}.atlas-grid b{font-size:11px;display:block}.atlas-grid small{display:block;color:#93b5d4;font-size:10px;margin-top:5px}.planet-atlas p{font-size:11px;line-height:1.6;color:#93b5d4;margin:12px 16px}
  @media(max-width:600px){.atlas-grid{grid-template-columns:repeat(3,1fr)}.planet-atlas summary span{display:block;margin:6px 0 0 15px}.orbit-node{width:200px}}
  .planet-model{display:block;background-size:contain;background-position:center;background-repeat:no-repeat;mask-image:none}
  .planet-model[data-model=bronze],.planet-model[data-model=unplaced]{background-image:url('/assets/route-bronze-v4.png')}
  .planet-model[data-model=silver]{background-image:url('/assets/route-silver-v4.png')}
  .planet-model[data-model=gold]{background-image:url('/assets/route-gold-v4.png')}
  .planet-model[data-model=diamond]{background-image:url('/assets/route-diamond-v4.png')}
  .planet-model[data-model=star]{background-image:url('/assets/route-star-v4.png')}
  .planet-model[data-model=master]{background-image:url('/assets/route-master-v4.png')}
  .atlas-grid .planet-model{width:116px;height:116px;max-width:100%;margin:auto}
  .orbit-track{height:660px!important}.orbit-node{width:190px}.orbit-node .planet-model{width:244px;height:244px;margin:-122px 0 0 -122px}
  .orbit-node .orbit-sphere{transform-origin:50% 50%}.orbit-node .orbit-sphere:after{content:'';position:absolute;left:19px;right:19px;bottom:3px;height:19px;border:1px solid #6cd6ff7a;border-radius:50%;box-shadow:0 0 10px #249dff33,inset 0 0 8px #3ec6ff22;z-index:-1;transform:none}
  .orbit-node[aria-pressed=true] .orbit-sphere:after{left:12px;right:12px;bottom:3px;height:23px;border-color:#b8f0ff;box-shadow:0 0 13px #3faaff99,inset 0 0 10px #3ec6ff44;transform:none}
  .orbit-node[data-tier=unplaced] .planet-model{filter:grayscale(.8) brightness(.72) drop-shadow(0 7px 8px #0007)}.orbit-node[data-tier=unplaced][aria-pressed=true] .planet-model{filter:grayscale(.4) brightness(1) drop-shadow(0 0 9px #6bbfff88)}
  .orbit-node small{font-size:13px;margin:2px 0 8px}.orbit-node strong{font-size:13px;line-height:1.55;min-height:40px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.orbit-node[aria-pressed=true] strong{font-size:14px}
  .orbit-node .orbit-status{display:inline-block;border:1px solid #6fa1c53d;background:#061a30bb;border-radius:20px;padding:6px 10px;margin:10px 0 0;font-size:11px;color:var(--planet)}.orbit-node[aria-pressed=true] .orbit-status{border-color:#6dd9ff9c;box-shadow:0 0 12px #3caaff22;color:#b6edff}
  .planet-mark{top:135px;width:20px;height:20px;font-size:13px;color:#095072;background:#75e7ff;box-shadow:0 0 10px #64d9ff66}
  .orbit-path .orbit-connection{stroke:#6dcbff;stroke-width:1.5;stroke-dasharray:none;opacity:.65;filter:drop-shadow(0 0 4px #2b9dff)}
  .space-callout{z-index:40}.space-navigation{margin-top:0}
  .route-universe .route-stop.synth.on{background:#332b1970;border-color:#dab55c88}.route-universe .route-stop.synth.on .rs-t{color:#f6d581}
  .space-callout{position:relative;left:auto!important;top:auto;width:min(350px,100%);margin:12px 0 8px}
  .orbit-track{height:555px!important}
  /* ===== 讲义管理 / 等级规则（v1.0） ===== */
  .note-bread{font-size:13px;color:var(--sub);margin:10px 0 8px;}
  .note-chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
  .note-chips .chip{border:1px solid #DCE6F2;background:#fff;border-radius:999px;padding:5px 12px;font-size:12.5px;cursor:pointer;color:var(--sub);}
  .note-chips .chip.on{background:var(--brand);border-color:var(--brand);color:#fff;}
  .note-list{display:flex;flex-direction:column;gap:10px;}
  .note-row{display:flex;align-items:center;gap:12px;border:1px solid #E9EFF7;border-radius:10px;padding:10px 12px;background:#fff;}
  .note-row.has{background:#FCFDFF;border-color:#D8E7FB;}
  .nr-main{flex:1;min-width:0;}
  .nr-t{font-size:13.5px;font-weight:600;color:var(--ink);}
  .nr-s{font-size:12px;color:var(--sub);margin-top:2px;}
  .nr-b{display:flex;gap:8px;flex:none;flex-wrap:wrap;}
  .rule-sec{border:1px solid #EDF2F8;border-radius:12px;padding:14px;margin-top:12px;background:#fff;}
  .rule-sec.danger{border-color:#F6D6D6;background:#FFF8F8;}
  .rule-h{font-size:14px;font-weight:700;color:var(--ink);margin-bottom:10px;}
  .rule-grid6{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:10px;}
  .rule-grid4{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;}
  .rule-f{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--sub);}
  .rule-f input{padding:7px 9px;border:1px solid #DCE6F2;border-radius:8px;font-size:13px;color:var(--ink);background:#fff;}
  .rule-table{border:1px solid #EDF2F8;border-radius:10px;overflow:hidden;}
  .rtr{display:grid;grid-template-columns:96px repeat(6,1fr);gap:6px;padding:8px 10px;align-items:center;}
  .rtr+.rtr{border-top:1px solid #F1F5FA;}
  .rtr.head{background:#F7FAFE;font-size:12px;color:var(--sub);font-weight:600;}
  .rtr .rtn{font-size:12.5px;color:var(--ink);}
  .rtr input{width:100%;padding:5px 7px;border:1px solid #DCE6F2;border-radius:7px;font-size:12.5px;text-align:center;}
  @media print{ body.note-printing>*:not(#printArea){display:none !important;} #printArea{display:block !important;} }
  /* ---- v1.0 反馈工单 / 用户管理 ---- */
  .inp{width:100%;padding:8px 11px;border:1px solid var(--line);border-radius:9px;font-size:13px;background:#fff;color:var(--ink);outline:none;}
  .inp:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(3,126,243,.12);}
  .srch{display:flex;gap:8px;align-items:center;margin-bottom:10px;}
  .srch .btn{flex:0 0 auto;white-space:nowrap;}
  .kw-wrap{position:relative;flex:1;min-width:0;max-width:440px;}
  .kw-wrap .inp{padding-right:32px;}
  .kw-x{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:20px;height:20px;
    display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:15px;line-height:1;
    color:var(--sub);background:#E9EFF7;}
  .kw-x:hover{background:#D8E4F2;color:var(--txt);}
  .btn.xs{padding:4px 10px;font-size:12px;border-radius:8px;}
  .fb-filt{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px;color:var(--sub);
    background:#F4F8FE;border:1px solid #DFEAF8;border-radius:9px;padding:7px 11px;margin-bottom:10px;}
  .fb-card{border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:12px;background:#FCFDFF;}
  .fb-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
  .fb-q{font-size:12px;color:var(--sub);background:#F6F9FD;border-radius:8px;padding:6px 9px;margin-bottom:8px;}
  .fb-b{font-size:13.5px;line-height:1.7;color:var(--ink);}
  .fb-r{margin-top:8px;font-size:13px;line-height:1.7;background:#E7F8F0;border-radius:8px;padding:8px 10px;color:#065F46;}
  .acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}
  .tl{margin-top:10px;border-left:2px solid #E3EAF3;padding-left:12px;}
  .tl-i{position:relative;font-size:12px;color:var(--sub);padding:3px 0;}
  .tl-i i{position:absolute;left:-17px;top:9px;width:7px;height:7px;border-radius:50%;background:var(--brand);}
  .tl-i em{font-style:normal;margin-left:8px;font-size:11px;color:#9AA7B8;}
  .kv{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px dashed #EDF2F8;font-size:13px;}
  .kv span{color:var(--sub);} .kv b{color:var(--ink);}
  .urow{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--line);border-radius:12px;margin-bottom:10px;background:#FCFDFF;}
  .u-av{width:38px;height:38px;flex:0 0 38px;border-radius:50%;background:linear-gradient(135deg,var(--brand),var(--brand-d));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;}
  .u-main{flex:1;min-width:0;}
  .u-t{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
  .u-s{font-size:11.5px;color:var(--sub);margin-top:3px;}
  .u-act{display:flex;gap:6px;flex-wrap:wrap;}
  @media(max-width:720px){ .urow{flex-wrap:wrap;} .u-act{width:100%;} }
  /* ---- v1.0 移动端 / 小屏适配 ---- */
  @media(max-width:860px){
    .shell{grid-template-columns:1fr;}
    .side{position:sticky;top:0;z-index:40;height:auto;flex-direction:row;align-items:center;
      overflow-x:auto;padding:8px 10px;gap:6px;box-shadow:0 2px 10px rgba(11,46,82,.12);}
    .side .brand-name{display:none;} .side .spacer{display:none;}
    .nav-item{padding:8px 12px;font-size:13px;white-space:nowrap;border-radius:9px;}
    .nav-item span:not(.nav-ico){display:inline !important;}
    .kpi{grid-template-columns:repeat(2,1fr);gap:10px;}
    .filterbar{flex-wrap:wrap;}
    .filterbar input,.filterbar select{width:100%;}
    .scrollbox{max-height:none;overflow-x:auto;}
    .modal{max-width:96vw;}
    .fb-card,.urow{padding:12px;}
    .uact,.u-act{width:100%;}
    .paper-sheet{padding:14px;}
    .map-legend{flex-wrap:wrap;gap:8px;}
    .srch{flex-wrap:wrap;}
  }
  @media(max-width:560px){
    .kpi{grid-template-columns:1fr;}
    .card{padding:16px;}
    .home-hero{padding:16px;}
    .stat4,.stat{grid-template-columns:repeat(2,1fr);}
    .urow{flex-wrap:wrap;}
    .tree-ch{padding:12px;}
    .pad-tools{flex-wrap:wrap;gap:6px;}
    .ai-foot{flex-wrap:wrap;}
  }
/* —— 闯关游戏感：漂浮 +N XP / 通关星爆 —— */
.xpfloat{position:fixed;left:50%;top:40%;transform:translate(-50%,0);font-weight:800;
  font-size:28px;color:#FBBF24;letter-spacing:1px;text-shadow:0 3px 10px rgba(3,126,243,.35),0 1px 2px rgba(0,0,0,.25);
  pointer-events:none;z-index:9999;animation:xpfloat 1.15s cubic-bezier(.22,1,.36,1) forwards;}
@keyframes xpfloat{0%{opacity:0;transform:translate(-50%,12px) scale(.7)}
  18%{opacity:1;transform:translate(-50%,0) scale(1.08)}
  100%{opacity:0;transform:translate(-50%,-66px) scale(1)}}
.burst{position:fixed;left:50%;top:44%;transform:translate(-50%,-50%);pointer-events:none;z-index:9998;}
.burst span{position:absolute;left:0;top:0;font-size:18px;line-height:1;color:#FBBF24;
  text-shadow:0 1px 3px rgba(0,0,0,.2);animation:burst 1s ease-out forwards;}
@keyframes burst{0%{opacity:1;transform:translate(0,0) scale(.5) rotate(0)}
  100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(1.25) rotate(40deg)}}
  /* 知识点拖拽排序 */
  tr.kp-draggable{cursor:grab;transition:background .12s ease;}
  tr.kp-draggable:active{cursor:grabbing;}
  tr.kp-dragging{opacity:.4;}
  tr.kp-dragover td{box-shadow:inset 0 2px 0 #037EF3, inset 0 -2px 0 #037EF3;}
  tr.kp-dragover{background:#EAF3FE;}
  .kpm-ch.ch-draggable{cursor:grab;}
  .kpm-ch.ch-draggable:active{cursor:grabbing;}
  .kpm-ch.kp-dragover{box-shadow:inset 0 0 0 2px #037EF3;}
  /* ---- 连续学习 · 火焰打卡条 ---- */
  .sk-wrap{display:flex;align-items:center;gap:10px;margin-top:9px;padding:8px 10px;border-radius:11px;
    background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.16);}
  .sk-flame{display:inline-flex;align-items:center;gap:3px;color:rgba(255,255,255,.55);font-size:12.5px;font-weight:800;}
  .sk-flame svg{stroke:rgba(255,255,255,.5);fill:none;}
  .sk-flame.on{color:#FFC53D;}
  .sk-flame.on svg{stroke:#FFC53D;animation:skPulse 1.8s ease-in-out infinite;}
  @keyframes skPulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.62;transform:scale(1.12);}}
  .sk-mid{flex:1;min-width:0;}
  .sk-dots{display:flex;gap:4px;align-items:center;}
  .sk-dot{width:13px;height:13px;border-radius:4px;background:rgba(255,255,255,.20);display:inline-block;}
  .sk-dot.on{background:linear-gradient(180deg,#FFD76A,#F59E0B);box-shadow:0 0 6px rgba(245,158,11,.5);}
  .sk-dot.now{outline:1.5px solid rgba(255,255,255,.75);outline-offset:1px;}
  .sk-txt{font-size:11px;color:rgba(255,255,255,.82);margin-top:5px;line-height:1.35;}
  .sk-txt.warn{color:#FFE08A;}
  .sk-miles{display:flex;flex-direction:column;gap:2px;}
  .sk-m{font-size:9.5px;color:rgba(255,255,255,.42);font-weight:700;letter-spacing:.2px;white-space:nowrap;}
  .sk-m.on{color:#FFC53D;}
