
  :root{
    --bg:#C8E8FA;
    --ink:#1A2B45;
    --ink2:#1E4A72;
    --sub:#9DBCDB;
    --sub2:#5A9EC8;
    --sub3:#7AAECF;
    --blue:#3A9FE8;
    --blue2:#6EC5F5;
    --orange:#FF8C42;
    --green:#4ECB8D;
    --purple:#9B7FE8;
    --red:#FF6B6B;
    --teal:#3ECFCF;
    --yellow:#FFCA3A;
    --line:#EEF4F8;
  }
  *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
  html,body{margin:0;padding:0;height:100%}
  body{
    font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Segoe UI","Microsoft YaHei",sans-serif;
    color:var(--ink);
    background:#DFF0FA;
    /* 用 svh（小视口）而不是 dvh：手机上滑动时地址栏会伸缩，dvh 会跟着变 →
       整页高度抖动 + 文档被拖动，看起来就是「往下跳」。 */
    min-height:100vh;
    min-height:100svh;
    overscroll-behavior-y:none;   /* 内层列表滑到头不要带动整页 */
  }
  .shell{width:100%;min-height:100vh;min-height:100svh;display:flex;justify-content:center;background:#DFF0FA}
  .app{
    width:100%;
    max-width:100%;
    height:100vh;height:100dvh;height:100svh;
    min-height:0;
    display:flex;flex-direction:column;position:relative;
    background:var(--bg);
    box-shadow:0 24px 80px rgba(30,74,114,.18), 0 0 0 1px rgba(30,74,114,.06);
    border-radius:26px;overflow:hidden;
  }
  .screen{flex:1;display:flex;flex-direction:column;min-height:0;
    background-color:#B3EFFF !important;
    background-image:linear-gradient(180deg,#B3EFFF 0%,#CDEFFE 32%,#E9F8FF 66%,#FAFEFF 100%) !important}
  @keyframes fade{from{opacity:.4;transform:translateY(4px)}to{opacity:1;transform:none}}
  /* 一代是「顶部固定 + 中间独立滚动 + 底部固定」，滚动容器自带边界；
     这里补上 overscroll-behavior:contain —— 划到顶/底（或页面本来就短）时不再被浏览器
     弹回去（手机上就是那种"回弹"）。 */
  .scroll{flex:1;overflow-y:auto;scrollbar-width:none;padding:0 clamp(12px,3.5vw,20px);overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
  .scroll::-webkit-scrollbar{display:none}
  .home-fixed-top{flex-shrink:0;position:relative;z-index:6;background:transparent;padding:0 clamp(12px,3.5vw,20px)}
  .home-dashboard>.mod-label.home-sticky-label{position:static;width:100%;margin:0;margin-left:0;background:transparent;padding:0;height:auto;line-height:normal;border-radius:0;box-shadow:none}

  /* header */
  .hdr{display:flex;align-items:center;padding:calc(18px + env(safe-area-inset-top,0px)) clamp(14px,4vw,20px) 16px;gap:12px}
  .hdr .back{width:36px;height:36px;border-radius:50%;background:rgba(255,255,255,.72);border:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;cursor:pointer}
  .hdr h1{font-size:18px;font-weight:800;color:var(--ink2);margin:0;flex:1}
  .hdr .right{flex-shrink:0}
  .pill-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:16px;background:#fff;color:var(--blue);font-size:13px;font-weight:700;border:none;box-shadow:0 2px 10px rgba(0,0,0,.08);cursor:pointer}
  .btn{font-family:inherit;border:none;cursor:pointer}
  .modal-actions{display:flex;gap:10px;margin-top:16px;justify-content:flex-end}
  .modal-actions .btn{flex:1;padding:11px 14px;border-radius:12px;font-size:14px;font-weight:800;font-family:inherit;border:none;cursor:pointer}
  .modal-actions .btn.blue{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;box-shadow:0 4px 12px rgba(58,159,232,.27)}
  .modal-actions .btn.grey{background:#F1F6FB;color:#5A7A96;border:1px solid #E3EEF9}
  .btn:active{transform:scale(.96)}

  /* home */
  .home-top{padding:calc(18px + env(safe-area-inset-top,0px)) clamp(14px,5vw,20px) 16px}
  .home-top .row1{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
  .hi{font-size:14px;font-weight:600;color:var(--sub2);margin:0}
  .brand{font-size:20px;font-weight:800;color:var(--ink2);margin:0}
  .menu-btn{width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.55);border:none;display:flex;align-items:center;justify-content:center;cursor:pointer}
  .search-card{display:none;margin:0 16px 20px;background:rgba(255,255,255,.72);border-radius:16px;padding:16px}
  .search-row{display:flex;align-items:center;gap:8px;margin-bottom:12px}
  .search-box{flex:1;display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:12px;background:rgba(200,232,250,.5)}
  .search-box input{flex:1;border:none;outline:none;background:transparent;font-size:14px;font-weight:600;color:var(--ink)}
  .search-box input::placeholder{color:#9DBCDB}
  .filter-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:12px;font-size:12px;font-weight:700;border:none;cursor:pointer;color:#fff;flex-shrink:0}
  .stu-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
  .stu{display:flex;flex-direction:column;align-items:center;gap:6px;background:none;border:none;cursor:pointer;font-family:inherit}
  .stu .av{width:min(52px,12.5vw);height:min(52px,12.5vw);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:min(16px,3.8vw);font-weight:800;border:3px solid transparent;transition:transform .15s,box-shadow .15s}
  .stu span{font-size:12px;font-weight:700;line-height:1.2;text-align:center;color:#5A7A96}
  .stu.sel .av{transform:scale(1.08);border-color:#fff;outline:2px solid var(--c);outline-offset:2px;box-shadow:0 4px 14px rgba(0,0,0,.18)}
  .mod-label{font-size:14px;font-weight:700;color:#4A8AB5;margin:0 0 12px;padding:0 4px}
  .mod-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
  .mod-grid{scrollbar-width:thin;scrollbar-color:#4ECB8D transparent}
  .mod-grid::-webkit-scrollbar{height:6px}
  .mod-grid::-webkit-scrollbar-track{background:rgba(255,255,255,.35);border-radius:999px}
  .mod-grid::-webkit-scrollbar-thumb{background:linear-gradient(90deg,#3A9FE8,#4ECB8D);border-radius:999px}
  .module-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 4px}
  .module-tabs button{flex-shrink:0;padding:8px 13px;border-radius:999px;border:1px solid #D8EEFA;background:#fff;color:#3A9FE8;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit}
  .module-tabs button.on{background:#3A9FE8;color:#fff;border-color:#3A9FE8}
  .lesson-prep-list{display:flex;flex-direction:column;gap:12px;margin-top:14px}
  .prep-item{display:flex;align-items:center;gap:12px;width:100%;padding:14px;border-radius:18px;border:1px solid #EDF4F9;background:#fff;color:#1A2B45;text-align:left;cursor:pointer;font-family:inherit;box-shadow:none}
  .prep-item .p-ic{width:44px;height:44px;border-radius:14px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}
  .prep-item .p-ic svg{width:34px;height:34px;display:block}
  .prep-item .p-info{flex:1;min-width:0}
  .prep-item h4{font-size:15px;font-weight:800;color:#1A2B45;margin:0}
  .prep-item p{font-size:12px;font-weight:600;color:#7AA6C6;margin:3px 0 0}
  .prep-item .p-stat{font-size:12px;font-weight:800;color:#9DBCDB;flex-shrink:0}
  .prep-student{display:flex;align-items:center;gap:12px;margin:0 4px 16px;padding:14px;border-radius:18px;background:#fff;border:1px solid #EDF4F9}
  .prep-student .av{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:22px;font-weight:800;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);flex-shrink:0}
  .prep-student h2{margin:0;font-size:18px;font-weight:800;color:#1A2B45}
  .prep-student p{margin:5px 0 0;font-size:13px;font-weight:600;color:#7AA6C6}
  .prep-mod-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:0 4px 18px}
  .prep-mod{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 4px;border-radius:14px;background:#fff;border:1px solid #EDF4F9;font-weight:800;font-size:13px;color:#1E4A72;cursor:pointer;font-family:inherit}
  .prep-mod .ic{width:38px;height:38px;display:flex;align-items:center;justify-content:center}
  .prep-mod .ic svg{width:100%;height:100%;display:block}
  .prep-mod.on{border-color:var(--blue);background:#F0F9FF}
  .prep-word-list{display:flex;flex-direction:column;gap:10px}
  .prep-word-row{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #EDF4F9;border-radius:16px;padding:12px 14px}
  .prep-word-main{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:6px;background:none;border:none;cursor:pointer;font-family:inherit;text-align:left}
  .prep-word-en{font-size:20px;font-weight:800;color:#1A2B45}
  .prep-word-zh{font-size:15px;font-weight:600;color:#5A9EC8}
  .prep-book-btn{width:42px;height:42px;border-radius:12px;border:none;background:#EBF6FF;color:#3A9FE8;font-size:20px;cursor:pointer;flex-shrink:0}
  .mod{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 4px;border-radius:22px;background:rgba(255,255,255,.92);border:1px solid transparent;box-shadow:none;cursor:pointer;font-family:inherit}
  .mod .ic{width:44px;height:44px;display:flex;align-items:center;justify-content:center}
  .mod .ic svg{width:100%;height:100%;display:block}
  .mod span{font-size:12px;font-weight:700;line-height:1.2;color:var(--ink)}
  .mod.sel{border-color:var(--blue);box-shadow:none}
  .mod{position:relative}
  .mod-start{display:none;position:absolute;top:8px;right:8px;align-items:center;gap:4px;padding:6px 9px;border-radius:999px;border:none;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;font-size:11px;font-weight:800;cursor:pointer;box-shadow:0 4px 12px rgba(58,159,232,.3)}
  .home-hint{font-size:13px;font-weight:800;color:#1E4A72;margin:0 0 10px}
  .teacher-hello{display:block;margin:0 16px 40px;padding:2px 4px;background:none;border:none;box-shadow:none;font-size:35px;font-weight:800;color:#1E4A72;line-height:1.25;text-align:left}
  .teacher-card{display:flex;align-items:center;gap:14px;margin:4px 4px 18px;padding:16px;border-radius:20px;background:#fff;border:1px solid #EDF4F9}
  .teacher-card .t-av{width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:800;flex-shrink:0}
  .teacher-card .t-info h2{font-size:18px;font-weight:800;color:#1A2B45;margin:0}
  .teacher-card .t-info p{font-size:13px;font-weight:700;color:#5A9EC8;margin:5px 0 0}
  .home-fixed-top .welcome-bar{margin-top:18px}
  .student-class-list{display:flex;flex-direction:column;gap:12px}
  .student-class-card{display:flex;flex-direction:column;justify-content:space-between;width:100%;padding:10px 18px 10px 10px;border-radius:22px;background:#F5FAFF;color:#1A2B45;cursor:pointer;text-align:left;font-family:inherit;position:relative;overflow:hidden;border:1px solid #E1EFFB;box-shadow:0 8px 22px rgba(30,74,114,.10)}
  .student-class-card::after{display:none}
  .student-class-card.sel{outline:none;border-color:#C7E9DA;box-shadow:0 10px 24px rgba(78,203,141,.16)}
  .student-class-card:hover{outline:2px solid #4ECB8D;outline-offset:2px;border-color:#4ECB8D}
  .scc-top{display:flex;align-items:center;gap:12px;position:relative;z-index:1;flex:1 1 auto}
  .scc-left{display:flex;flex-direction:row;align-items:center;text-align:left;gap:12px;flex:1;min-width:0;padding-left:0}
  .scc-avatar .av{width:66px;height:66px;font-size:26px;font-weight:800;border-radius:50%;background:#DCEBFB;color:#2F5C7D;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}
  .scc-main{min-width:0;text-align:left;align-self:center}
  .scc-name{font-size:20px;font-weight:800;color:#1A2B45;line-height:1.15}
  .scc-grade{font-size:13px;font-weight:700;color:#6E8FA9;margin-top:3px;padding-left:15px}
  .scc-id{font-size:12px;font-weight:700;color:#93AEC4;margin-top:2px;letter-spacing:.3px;padding-left:15px}
  .scc-side{text-align:right;min-width:0;position:relative;z-index:1;flex-shrink:0;max-width:52%}
  .scc-bank{font-size:12px;font-weight:800;color:#5A7A96;white-space:normal;overflow-wrap:break-word;max-width:100%}
  .scc-count{font-size:12px;font-weight:700;color:#7A99B3;margin-top:4px;white-space:nowrap}
  .scc-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:10px;position:relative;z-index:1}
  .scc-btn{min-width:88px;padding:9px 14px;border-radius:999px;border:none;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit}
  .scc-btn.prep{background:#EAF4FF;color:#2F6FA8;border:1px solid #D2E7F9}
  .scc-btn.class{background:#3ECFCF;color:#fff;box-shadow:0 4px 12px rgba(62,207,207,.28)}
  .home-dashboard{display:flex;flex-direction:column;gap:18px}
  .home-left{min-width:0;display:flex;flex-direction:column;gap:16px}
  .home-right{min-width:0;display:flex;flex-direction:column;gap:16px}
  .home-training{background:#fff;border:1px solid #EDF4F9;border-radius:22px;padding:16px;box-shadow:0 8px 24px rgba(30,74,114,.08)}
  .profile-cards{display:flex;flex-direction:column;gap:14px;margin-bottom:16px}
  .welcome-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0}
  .welcome-text{font-size:18px;font-weight:800;color:#1E4A72;line-height:1.35}
  .welcome-info{min-width:0}
  .welcome-sub{font-size:9px;font-weight:600;color:#8AA6C0;line-height:1.4;margin-top:3px;letter-spacing:.2px}
  .welcome-av{width:46px;height:46px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#E7F1FA;color:#2F5C7D;font-weight:800;font-size:18px;flex-shrink:0}
  .cal-card{background:#fff;border:1px solid #EDF4F9;border-radius:22px;padding:16px;box-shadow:0 8px 24px rgba(30,74,114,.08)}
  .cal-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
  .cal-title{font-size:15px;font-weight:800;color:#1E4A72}
  .cal-nav{width:30px;height:30px;border-radius:50%;border:1px solid #D8EEFA;background:#fff;color:#3A9FE8;font-size:13px;font-weight:800;line-height:1;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center}
  .cal-nav:active{transform:scale(.94)}
  .cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px}
  .cal-wd{text-align:center;font-size:12px;font-weight:700;color:#9DBCDB;padding:6px 0}
  .cal-cell{position:relative}
  .cal-day{width:100%;height:38px;border:none;background:transparent;border-radius:50%;font-family:inherit;font-size:13px;font-weight:700;color:#1A2B45;cursor:pointer;display:flex;align-items:center;justify-content:center}
  .cal-day:hover{background:#F0F8FF}
  .cal-day.out{color:#C6D6E4}
  .cal-day.today{color:#3A9FE8}
  .cal-day.sel{background:#3A9FE8;color:#fff;box-shadow:0 6px 14px rgba(58,159,232,.32)}
  .cal-day.sel.out{color:#fff}
  .cal-dot{position:absolute;bottom:4px;left:50%;width:4px;height:4px;border-radius:50%;background:#4ECB8D;transform:translateX(-50%);pointer-events:none}
  .cal-day.sel+.cal-dot{background:#fff}
  .sched-card{background:#fff;border:1px solid #EDF4F9;border-radius:22px;padding:16px;box-shadow:0 8px 24px rgba(30,74,114,.08)}
  .sched-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
  .sched-head h3{margin:0;font-size:15px;font-weight:800;color:#1E4A72}
  .sched-sub{font-size:12px;font-weight:700;color:#9DBCDB;margin:0 0 4px}
  .sched-add{width:30px;height:30px;border-radius:50%;border:none;background:#3A9FE8;color:#fff;font-size:18px;font-weight:800;line-height:1;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 14px rgba(58,159,232,.3);flex-shrink:0}
  .sched-add:active{transform:scale(.94)}
  .sched-list{display:flex;flex-direction:column;gap:10px;margin-top:12px}
  .sched-row{display:flex;align-items:stretch;gap:12px}
  .sched-time{width:66px;flex-shrink:0;text-align:right;padding-top:12px;font-size:11px;font-weight:800;color:#9DBCDB;line-height:1.35}
  .sched-time b{display:block;font-size:13px;color:#5A7A96}
  .sched-item{flex:1;min-width:0;position:relative;background:#F0F7FE;border-radius:16px;padding:12px 34px 12px 14px}
  .sched-item h4{margin:0;font-size:14px;font-weight:800;color:#1A2B45}
  .sched-item p{margin:4px 0 0;font-size:12px;font-weight:600;color:#5A7A96;line-height:1.5}
  .sched-del{position:absolute;right:8px;top:8px;width:22px;height:22px;border-radius:50%;border:none;background:rgba(255,255,255,.8);color:#9DBCDB;font-size:13px;font-weight:800;line-height:1;cursor:pointer;font-family:inherit}
  .sched-del:hover{color:#FF6B6B}
  .sched-empty{padding:20px 0;text-align:center;font-size:13px;font-weight:600;color:#9DBCDB}
  .sched-input{width:100%;box-sizing:border-box;padding:12px 14px;border-radius:14px;border:2px solid #E7F1F9;background:#FBFCFF;font-family:inherit;font-size:14px;font-weight:600;color:#1A2B45;margin-bottom:10px;outline:none}
  .sched-input:focus{border-color:#3A9FE8}
  .modal-card.sched-modal{width:min(92vw,420px);max-height:88vh;overflow-y:auto;text-align:left}
  .sched-modal .sched-modal-title{font-size:15px;font-weight:800;color:#1E4A72;margin:0 0 12px;text-align:left}
  .sched-field{display:block;margin-bottom:10px}
  .sched-field>span{display:block;font-size:12px;font-weight:800;color:#5A7A96;margin:0 0 6px 2px}
  .sched-field .sched-input{margin-bottom:0}
  .sched-two{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
  .sched-two .sched-field{margin-bottom:0}
  select.sched-input{appearance:none;-webkit-appearance:none;background-image:none;cursor:pointer}
  input.sched-input[type="time"]{cursor:pointer}
  .sched-meet-row{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap}
  .sched-meet{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:999px;border:none;background:#3A9FE8;color:#fff;font-size:12px;font-weight:800;text-decoration:none;font-family:inherit;cursor:pointer}
  .sched-meet:hover{background:#2E8FD8}
  .sched-meet.ghost{background:#EAF3FA;color:#3A9FE8}
  .sched-meet.ghost:hover{background:#DCEBF8}
  .sched-meet.plain{background:#E7F1FA;color:#2F5C7D;cursor:default}
  .sched-sheet-list{display:flex;flex-direction:column;gap:8px}
  .sched-sheet-btn{width:100%;text-align:center;text-decoration:none;display:flex;align-items:center;justify-content:center;box-sizing:border-box;margin:0;padding:12px}
  .sched-sheet-btn.ghost2{background:#EAF3FA;color:#3A9FE8}
  .sched-sheet-btn.gray{background:#F1F5F9;color:#5A7A96}
  .sched-meet-raw{margin:8px 0 0;font-size:12px;font-weight:600;color:#8AA6C0;line-height:1.5;word-break:break-all}
  .read-pyr-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:16px;align-items:start}
  @media(max-width:900px){.read-pyr-split{grid-template-columns:minmax(0,1fr)}}
  .sent-tr-article{padding:10px 0;border-bottom:1px dashed #F0E7DE}
  .sent-tr-article:last-child{border-bottom:none}
  .sent-tr-title{font-size:.94em;font-weight:800;color:#1E4A72;margin:0 0 6px}
  .sent-tr-row{margin:0 0 8px}
  .sent-tr-row .en{font-size:1em;font-weight:500;color:#1A2B45;line-height:1.5;cursor:pointer}
  .sent-tr-row .en:active{opacity:.6}
  .sent-tr-row .zh{font-size:.93em;font-weight:500;color:#2F7FC1;line-height:1.5;margin-top:2px;padding-left:1.6em;display:none}
  .sent-tr-row .zh.show{display:block}
  .sent-tr-quote{font-size:.93em;font-weight:600;color:#2F7FC1;line-height:1.5;margin-top:6px}
  .pyr-mask{position:fixed;inset:0;background:rgba(15,23,42,.28);z-index:70}
  .pyr-drawer{position:fixed;top:0;right:0;bottom:0;width:min(430px,92vw);background:#fff;z-index:71;display:flex;flex-direction:column;box-shadow:-14px 0 44px rgba(0,0,0,.2);animation:pyrIn .22s ease}
  @keyframes pyrIn{from{transform:translateX(40px);opacity:.5}to{transform:none;opacity:1}}
  .pyr-drawer-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid #DCEAF5;flex-shrink:0}
  .pyr-drawer-head b{font-size:16px;font-weight:800;color:#1E4A72;flex:1}
  .pyr-drawer-body{flex:1;overflow-y:auto;padding:14px 16px 28px}
  .fr-card{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#fff;border-radius:18px;padding:16px;margin-bottom:12px;box-shadow:0 2px 12px rgba(0,0,0,.06)}
  .fr-left{min-width:0}
  .fr-name{font-size:16px;font-weight:800;color:#1A2B45}
  .fr-date{font-size:12px;font-weight:700;color:#9DBCDB;margin-top:4px}
  .fr-stats{font-size:12px;font-weight:700;color:#5A7A96;margin-top:10px;line-height:1.5}
  .fr-right{display:flex;flex-direction:column;align-items:flex-end;gap:10px;flex-shrink:0}
  .fr-tag{font-size:12px;font-weight:800;color:#5A7A96;background:#F1F5F9;border-radius:999px;padding:4px 10px;white-space:nowrap}
  .fr-pct{font-size:20px;font-weight:800;color:#3A9FE8;line-height:1}
  .listen-kit{background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 4px 18px rgba(0,0,0,.08);margin-bottom:14px}
  .listen-kit-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid #EEF4F8;flex-wrap:wrap}
  .listen-kit iframe{display:block;width:100%;height:calc(100vh - 220px);min-height:460px;border:0;background:#fff}
  .listen-kit:fullscreen{border-radius:0}
  .listen-kit:fullscreen .listen-kit-bar{background:#fff}
  .listen-kit:fullscreen iframe{height:calc(100% - 51px)}
  .rec-sid-chip{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:999px;background:rgba(255,255,255,.92);font-size:13px;font-weight:800;color:#3A9FE8;margin-bottom:12px}
  .teacher-biz-card{position:relative;overflow:hidden;border-radius:22px;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;padding:18px;box-shadow:0 12px 28px rgba(58,159,232,.22)}
  .teacher-biz-card::after{content:'';position:absolute;right:-40px;top:-40px;width:150px;height:150px;border-radius:50%;background:rgba(255,255,255,.16)}
  .teacher-biz-head{display:flex;align-items:center;gap:12px;position:relative;z-index:1}
  .teacher-biz-av{width:56px;height:56px;border-radius:50%;background:rgba(255,255,255,.25);display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:800;flex-shrink:0}
  .teacher-biz-name{font-size:20px;font-weight:800}
  .teacher-biz-org{font-size:12px;font-weight:700;opacity:.92;margin-top:4px}
  .teacher-biz-stats{display:flex;gap:10px;margin-top:16px;position:relative;z-index:1}
  .teacher-biz-stat{flex:1;background:rgba(255,255,255,.18);border-radius:14px;padding:10px}
  .teacher-biz-stat b{display:block;font-size:20px;font-weight:800}
  .teacher-biz-stat span{font-size:12px;font-weight:700;opacity:.9}
  .teacher-chart-card{background:rgba(255,255,255,.94);border-radius:22px;padding:16px;box-shadow:0 8px 24px rgba(30,74,114,.08)}
  .teacher-chart-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:14px}
  .teacher-chart-head h3{margin:0;font-size:15px;font-weight:800;color:#1E4A72}
  .tcc-head-actions{display:flex;align-items:center;gap:8px}
  .tcc-period{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:999px;border:1px solid #D8EEFA;background:#fff;color:#3A9FE8;font-size:12px;font-weight:800;cursor:pointer;font-family:inherit;transition:background .15s}
  .tcc-period:hover{background:#F0F8FF}
  .tcc-period:active{transform:scale(.96)}
  .tcc-caret{font-size:9px;line-height:1;opacity:.7}
  .teacher-chart-bars{display:flex;align-items:flex-end;gap:8px;height:170px;padding-top:18px}
  .tcc-bar{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:6px;height:100%;min-width:0}
  .tcc-bar i{display:block;width:100%;max-width:40px;min-height:4px;border-radius:8px 8px 0 0;background:linear-gradient(180deg,#6EC5F5,#3A9FE8)}
  .tcc-bar span{font-size:10px;font-weight:700;color:#7AA6C6;white-space:nowrap}
  .training-list{display:flex;flex-direction:column;gap:12px;margin-top:12px}
  .training-item{background:#fff;border:1px solid #EDF4F9;border-radius:18px;padding:14px}
  .training-title{font-size:15px;font-weight:800;color:#1A2B45}
  .training-content{font-size:13px;font-weight:600;color:#5A7A96;line-height:1.6;margin-top:6px;white-space:pre-wrap}
  .training-item img,.training-item video{display:block;width:100%;max-height:220px;object-fit:cover;border-radius:12px;margin-top:10px;background:#000}
  .training-time{font-size:11px;font-weight:700;color:#9DBCDB;margin-top:8px}
  .cta{width:calc(100% - 32px);margin:4px 16px 16px;display:flex;align-items:center;justify-content:center;gap:10px;padding:16px;border-radius:16px;font-size:14px;font-weight:700;color:#fff;border:none;cursor:pointer;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);box-shadow:0 6px 20px rgba(58,159,232,.4)}
  .spacer{height:24px}

  /* bottom nav */
  .nav{flex-shrink:0;background:#fff;border-top:1px solid #F1F5F9;box-shadow:0 -4px 20px rgba(0,0,0,.06);display:flex;align-items:center;justify-content:space-around;padding:8px 8px calc(10px + env(safe-area-inset-bottom,0px));z-index:10}
  .nav .tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;background:none;border:none;cursor:pointer;font-family:inherit}
  .nav .tab .ic{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:50%}
  .nav .tab.on .ic{background:#F0F9FF}
  .nav .tab span{font-size:12px;font-weight:600;color:var(--sub)}
  .nav .tab.on span{color:var(--blue)}

  /* cards */
  .card{background:#fff;border-radius:24px;padding:20px;box-shadow:0 4px 16px rgba(0,0,0,.07);margin-bottom:16px}
  .card .ttl{font-size:12px;font-weight:800;margin:0 0 12px;color:var(--sub)}
  .section-label{font-size:14px;font-weight:700;color:#4A8AB5;margin:0 0 12px;padding:0 4px}

  /* student card */
  .stu-line{display:flex;align-items:center;gap:16px}
  .stu-line .av{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:20px;font-weight:800;flex-shrink:0;box-shadow:0 4px 12px rgba(0,0,0,.12)}
  .stu-line .name{font-size:18px;font-weight:800;color:var(--ink);margin:0}
  .stu-line .meta{display:flex;align-items:center;gap:8px;margin-top:2px}
  .stu-line .meta .sid{font-size:12px;font-weight:600;color:var(--sub)}
  .dot{width:4px;height:4px;border-radius:50%;background:#D0E6F5}
  .grade{font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px}
  .lessons{margin-left:auto;display:flex;flex-direction:column;align-items:center;padding:8px 12px;border-radius:12px;background:#EBF6FF}
  .lessons b{font-size:20px;font-weight:800;line-height:1;color:var(--blue)}
  .lessons span{font-size:12px;font-weight:700;margin-top:2px;color:var(--blue)}

  .ghost-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:10px;border-radius:12px;font-size:14px;font-weight:800;border:none;cursor:pointer}
  .confirm-btn{width:100%;padding:16px;border-radius:16px;font-size:16px;font-weight:800;border:none;cursor:pointer;color:#fff}
  .confirm-btn[disabled]{background:#D8EEFA;color:#9DBCDB;box-shadow:none;cursor:not-allowed}

  /* duration */
  .dur-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
  .dur{display:flex;align-items:center;justify-content:center;gap:8px;padding:14px;border-radius:16px;font-size:14px;font-weight:700;background:#F0F7FF;color:var(--sub2);border:1.5px solid #D8EEFA;cursor:pointer;font-family:inherit}
  .dur.sel{background:var(--blue);color:#fff;border:none;box-shadow:0 4px 14px rgba(58,159,232,.35)}
  .dur-note{margin-top:12px;display:flex;align-items:center;justify-content:center;gap:6px;padding:8px;border-radius:12px;background:#EBF6FF;font-size:14px;font-weight:800;color:var(--blue)}

  /* study header card */
  .book-card{display:flex;align-items:center;gap:16px;background:#fff;border-radius:24px;padding:16px;box-shadow:0 4px 16px rgba(0,0,0,.07);margin-bottom:16px}
  .book-cover{width:80px;height:104px;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;flex-shrink:0;position:relative;overflow:hidden;box-shadow:0 6px 18px rgba(0,0,0,.15)}
  .book-cover .tag{font-size:10px;color:rgba(255,255,255,.9);font-weight:800;text-align:center;line-height:1.2;max-width:72px;padding:0 4px}
  .book-cover .spine{position:absolute;right:0;top:0;bottom:0;width:6px;background:rgba(0,0,0,.12)}
  .book-tile{width:56px;height:72px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;flex-shrink:0}
  .book-info{flex:1;min-width:0}
  .book-info h3{font-size:16px;font-weight:800;color:var(--ink);margin:0 0 4px}
  .badges{display:flex;align-items:center;gap:8px;margin-bottom:12px}
  .badge{font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;background:rgba(58,159,232,.1);color:var(--blue)}
  .stat{font-size:12px;font-weight:600;color:var(--sub)}
  .bar{height:10px;border-radius:999px;background:#EDF2F7;overflow:hidden}
  .bar>i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#3A9FE8,rgba(58,159,232,.53))}
  .two-btn{display:flex;gap:8px;margin-top:12px}
  .two-btn .primary{flex:1;padding:10px;border-radius:12px;font-size:12px;font-weight:800;border:none;cursor:pointer;background:var(--blue);color:#fff;box-shadow:0 4px 12px rgba(58,159,232,.27)}
  .two-btn .ghost2{flex:1;padding:10px;border-radius:12px;font-size:12px;font-weight:800;border:1.5px solid rgba(58,159,232,.27);background:rgba(58,159,232,.09);color:var(--blue);cursor:pointer}

  /* pyramid */
  .pyramid{display:flex;flex-direction:column;align-items:center;gap:6px}
  .plv{display:flex;align-items:center;justify-content:center;position:relative;height:42px;border-radius:12px;cursor:pointer;transition:transform .15s;color:#fff}
  .plv:active{transform:scale(.97)}
  .plv:hover{transform:scale(1.05)}
  .plv b{font-size:16px;font-weight:800}
  .plv em{position:absolute;right:8px;font-size:12px;font-weight:700;font-style:normal;color:rgba(255,255,255,.75)}
  .pyramid-desc{font-size:12px;font-weight:600;color:var(--sub);margin:0 0 16px}
  .pyramid-title{font-size:14px;font-weight:700;color:#4A8AB5;margin:0 0 4px}

  /* study game */
  .study-layout{display:flex;flex-direction:column;gap:16px}
  .study-main{display:flex;flex-direction:column;gap:16px}
  .study-game{background:#fff;border:1px solid #EDF4F9;border-radius:22px;padding:16px;box-shadow:0 8px 24px rgba(30,74,114,.08)}
  .study-game-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}
  .study-game-title{font-size:16px;font-weight:800;color:#1E4A72;margin:0}
  .study-game-score{font-size:13px;font-weight:800;color:#3A9FE8}
  .match-bank-select{width:100%;padding:8px 10px;border-radius:10px;border:1px solid #D8EEFA;background:#F5FBFF;color:#1E4A72;font-size:12px;font-weight:700;margin-bottom:10px;outline:none}
  .match-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
  .match-cell{min-height:64px;border-radius:14px;display:flex;align-items:center;justify-content:center;padding:8px;font-size:15px;font-weight:800;color:#1A2B45;background:#F3F8FE;border:1px solid #E3EEF8;cursor:pointer;user-select:none;text-align:center;word-break:break-word;overflow-wrap:anywhere;line-height:1.25;transition:transform .12s,outline .12s,opacity .18s}
  .match-cell.en{color:#1E4A72;background:#EBF6FF}
  .match-cell.zh{color:#B5472A;background:#FFF4EC}
  .match-cell.sel{outline:3px solid #3A9FE8;transform:scale(1.04)}
  .match-cell.gone{opacity:0;pointer-events:none}
  .match-cell.wrong{animation:matchShake .35s}
  @keyframes matchShake{0%,100%{transform:translateX(0)}20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}
  .study-game-btns{display:flex;gap:8px;margin-top:12px}
  .study-game-btns button{flex:1;padding:9px;border-radius:12px;font-size:12px;font-weight:800;border:none;cursor:pointer;background:#EBF6FF;color:#3A9FE8}

  /* review word list */
  .toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .chip{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:12px;font-size:12px;font-weight:700;background:#fff;color:var(--blue);box-shadow:0 2px 8px rgba(0,0,0,.07);border:none;cursor:pointer}
  .seg{display:flex;align-items:center;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.07)}
  .seg .lbl{padding:8px 10px;font-size:12px;font-weight:800;background:#fff;color:var(--ink);border-right:1px solid var(--line)}
  .seg button{padding:8px 10px;font-size:12px;font-weight:800;border:none;cursor:pointer;font-family:inherit}
  .seg .no{background:#FFF0F0;color:var(--red)}
  .seg .yes{background:#E8FBF2;color:var(--green);border-left:1px solid var(--line)}
  .fs-row{display:flex;align-items:center;gap:8px}
  .fs-row .lbl2{font-size:12px;font-weight:700;color:#7AAECF}
  .fs-btn{width:32px;height:32px;border-radius:12px;font-size:16px;font-weight:800;background:#fff;color:var(--blue);box-shadow:0 2px 8px rgba(0,0,0,.07);border:none;cursor:pointer}
  .fs-num{font-size:14px;font-weight:800;width:32px;text-align:center;color:var(--ink)}
  input[type="date"]{font-family:inherit;appearance:none;-webkit-appearance:none;min-height:20px;line-height:1.25}
  input[type="date"]::-webkit-calendar-picker-indicator{opacity:.6;cursor:pointer;border-radius:6px;padding:2px;transition:opacity .15s,transform .15s,background .15s}
  input[type="date"]::-webkit-calendar-picker-indicator:hover{opacity:1;transform:scale(1.12);background:rgba(58,159,232,.14)}
  .date-field{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;border-radius:12px;border:1px solid #D8E9F7;background:rgba(255,255,255,.92);color:#1A2B45;font-family:inherit;font-size:13px;font-weight:800;cursor:pointer;text-align:left;box-shadow:0 2px 8px rgba(0,0,0,.05);transition:border-color .15s,box-shadow .15s,transform .15s}
  .date-field:hover{border-color:#6EC5F5;box-shadow:0 4px 14px rgba(58,159,232,.14)}
  .date-field:active{transform:scale(.98)}
  .date-field svg{flex-shrink:0}
  .date-field .df-txt{flex:1;min-width:0}
  .date-field .df-arrow{font-size:11px;color:#9DBCDB;margin-left:2px}
  .date-picker-mask{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;padding:18px;background:rgba(26,43,69,.4);backdrop-filter:blur(2px)}
  .date-picker{width:min(100%,330px);background:#fff;border-radius:20px;box-shadow:0 18px 50px rgba(30,74,114,.28);overflow:hidden;font-family:inherit;animation:dpIn .18s ease}
  @keyframes dpIn{from{opacity:.3;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
  .dp-head{display:flex;align-items:center;gap:6px;padding:12px 12px 8px;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff}
  .dp-head .dp-nav{width:30px;height:30px;border-radius:10px;border:none;background:rgba(255,255,255,.2);color:#fff;font-size:17px;font-weight:800;cursor:pointer;font-family:inherit}
  .dp-head .dp-nav:hover{background:rgba(255,255,255,.34)}
  .dp-title{flex:1;text-align:center;font-size:15px;font-weight:800}
  .dp-x{width:30px;height:30px;border:none;border-radius:10px;background:rgba(255,255,255,.2);color:#fff;font-size:16px;font-weight:800;cursor:pointer;font-family:inherit}
  .dp-x:hover{background:rgba(255,255,255,.34)}
  .dp-week{display:grid;grid-template-columns:repeat(7,1fr);padding:8px 12px 4px}
  .dp-week span{text-align:center;font-size:11px;font-weight:800;color:#9DBCDB}
  .dp-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;padding:2px 12px 10px}
  .dp-grid .cal-cell{display:flex;align-items:center;justify-content:center;height:38px;border:none;border-radius:12px;background:transparent;color:#1A2B45;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:background .12s,color .12s,transform .12s}
  .dp-grid .cal-cell:hover{background:#EAF6FF;color:#3A9FE8}
  .dp-grid .cal-cell.today{box-shadow:inset 0 0 0 1.5px #3A9FE8}
  .dp-grid .cal-cell.sel{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;box-shadow:0 4px 10px rgba(58,159,232,.3)}
  .dp-grid .cal-empty{visibility:hidden}
  .dp-foot{display:flex;gap:8px;padding:8px 12px 12px}
  .dp-foot button{flex:1;padding:9px;border-radius:12px;border:none;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit}
  .dp-foot .dp-today{background:#EAF6FF;color:#3A9FE8}
  .dp-foot .dp-cancel{background:#F0F4F8;color:#5A7A96}
  .dp-foot button:hover{filter:brightness(.97)}
  .fs-box{display:inline-flex;align-items:center;gap:2px;background:#fff;border-radius:14px;box-shadow:0 2px 8px rgba(0,0,0,.07);padding:3px}
  .fs-box .fs-btn{width:34px;height:28px;border-radius:10px;font-size:14px;font-weight:800;background:#F0F7FF;color:var(--blue);border:none;cursor:pointer;font-family:inherit}
  .fs-box .fs-num{font-size:13px;font-weight:800;min-width:26px;text-align:center;color:var(--ink)}
  .sp-box{display:inline-flex;align-items:center;gap:2px;background:#fff;border-radius:14px;box-shadow:0 2px 8px rgba(0,0,0,.07);padding:3px}
  .sp-btn{padding:7px 10px;border:none;border-radius:10px;background:transparent;color:var(--blue);font-size:12px;font-weight:800;cursor:pointer;font-family:inherit}
  .sp-btn.on{background:#3A9FE8;color:#fff}
  .finish-btn{flex-shrink:0;padding:7px 12px;border-radius:12px;border:none;background:#FFE9E9;color:#E05353;font-size:12px;font-weight:800;cursor:pointer;font-family:inherit}
  .word-list{display:flex;flex-direction:column;gap:8px;padding-top:8px}
  .wrow{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:16px;background:#fff;box-shadow:0 2px 10px rgba(0,0,0,.06);border:1.5px solid transparent}
  .wrow.sel{border-color:var(--blue);background:#EBF6FF;box-shadow:0 4px 20px rgba(58,159,232,.22)}
  .wrow .wbody{flex:1;text-align:left;background:none;border:none;cursor:pointer;font-family:inherit;padding:0}
  .wrow .wbody .wline{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .wrow .wbody .en{font-weight:800;color:var(--ink)}
  .wrow .wbody .zh{font-weight:600;color:#5A7A96;font-size:12px;user-select:none}
  .wbtn{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;flex-shrink:0;font-family:inherit;background:#F0F4F8}
  .wbtn.check.on{background:var(--green);box-shadow:0 3px 8px rgba(78,203,141,.27)}
  .wbtn.cross.on{background:#FFE3E3;box-shadow:0 3px 8px rgba(255,107,107,.22)}
  .sticky-cta{flex-shrink:0;padding:8px 16px 20px}
  .sticky-cta .confirm-btn{font-size:16px}
  .teacher-nav-user{display:none}

  @media (min-width:760px){
    .teacher-hello{display:block;margin:0 16px 40px;padding:2px 4px;background:none;border:none;box-shadow:none;font-size:35px;font-weight:800;color:#1E4A72;line-height:1.25;text-align:left}
    .search-card{display:none}
    .mod-grid{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:16px;padding:6px 4px 14px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
    .mod{flex:0 0 auto;width:300px;min-height:420px;padding:40px 24px;justify-content:center;border-radius:36px;background:rgba(255,255,255,.94);border:1px solid transparent;box-shadow:none}
    .mod.sel{border-color:var(--blue);box-shadow:none}
    .mod .ic{width:112px;height:112px}
    .mod span{font-size:28px}
    .mod-start{padding:10px 16px;border-radius:999px;font-size:16px;top:14px;right:14px}
    .mod-start{display:inline-flex}
    .home-cta{display:none}
    .nav.teacher-nav{position:absolute;left:0;top:0;bottom:0;width:198px;height:100%;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;padding:24px 10px;border-top:none;border-right:1px solid rgba(255,255,255,.75);background:rgba(255,255,255,.72);backdrop-filter:blur(24px) saturate(150%);-webkit-backdrop-filter:blur(24px) saturate(150%);box-shadow:8px 0 30px rgba(30,74,114,.08)}
    .teacher-nav-user{display:flex;flex-direction:column;align-items:center;gap:9px;width:100%;padding:0 4px 16px;margin-bottom:12px;border-bottom:1px solid rgba(255,255,255,.9)}
    .teacher-nav-org{width:100%;text-align:center;font-weight:800;color:#2F5C7D;line-height:1.3;letter-spacing:.4px;white-space:nowrap;overflow:hidden}
    .nav.teacher-nav .tab{flex:0 0 auto;width:100%;padding:10px 0}
    .screen:has(> .teacher-nav){padding-left:198px}
  }

  /* 首页两栏：>=1000px 才分左右两栏，760~999px 仍是单列（右栏在下面） */
  @media (min-width:1000px){
    .home-dashboard{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(320px,1fr);align-items:start;gap:16px}
    .home-dashboard>.mod-label.home-sticky-label{grid-column:1;grid-row:1;margin-top:16px}
    .home-left{order:0;align-self:start;grid-column:1;grid-row:2}
    .home-right{grid-column:2;grid-row:2;align-self:start}
    /* 首页：整页不滚，左「学员列表」与右「日历/日程」各自独立滚动 */
    .screen.home-screen .scroll{overflow:hidden;display:flex;flex-direction:column}
    .screen.home-screen .home-dashboard{flex:1 1 auto;min-height:0;height:100%;grid-template-rows:auto minmax(0,1fr)}
    .screen.home-screen .home-left{height:100%;min-height:0;align-self:stretch}
    .screen.home-screen .home-left>.home-student-search,
    .screen.home-screen .home-left>.gen1-active-banner{flex:0 0 auto}
    .screen.home-screen .home-right>.home-training{flex:0 0 auto;max-height:42%;overflow-y:auto}
    .screen.home-screen .home-left>.student-class-list{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:5px 6px}
    .screen.home-screen .home-left>.student-class-list>*{flex:0 0 auto}
    .screen.home-screen .home-left>.student-class-list::-webkit-scrollbar{width:6px}
    .screen.home-screen .home-left>.student-class-list::-webkit-scrollbar-thumb{background:rgba(120,160,195,.35);border-radius:999px}
    .screen.home-screen .home-right{height:100%;min-height:0;align-self:stretch;overflow:hidden}
    .screen.home-screen .home-right>.home-right-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:16px;padding-right:4px}
    .screen.home-screen .home-right>.home-right-scroll>*{flex:0 0 auto}
    .screen.home-screen .home-right>.home-right-scroll::-webkit-scrollbar{width:6px}
    .screen.home-screen .home-right>.home-right-scroll::-webkit-scrollbar-thumb{background:rgba(120,160,195,.35);border-radius:999px}
    .screen.home-screen .spacer{display:none}
  }

  @media (min-width:760px){
    .teacher-biz-card,.teacher-chart-card{margin-top:0;margin-bottom:0}
    .profile-cards{display:flex;flex-direction:column;gap:14px}
    .profile-cards .teacher-biz-card,.profile-cards .teacher-chart-card{grid-area:auto;width:100%;max-width:none;height:auto}
    .profile-cards .teacher-biz-card{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:20px}
    .profile-cards .teacher-biz-head{flex:0 1 auto;min-width:0}
    .profile-cards .teacher-biz-stats{margin-top:0;flex:1;max-width:560px}
    .profile-cards .tcc-bar i{max-width:64px}
  }

  @media (min-width:780px){
    .study-layout{display:grid;grid-template-columns:minmax(0,684px) minmax(320px,540px);align-items:start;gap:16px;justify-content:center}
    .study-layout.read-full{grid-template-columns:minmax(0,1fr);justify-content:stretch}
    .study-game{position:sticky;top:0}
  }

  @media (min-width:1220px){
    .home-dashboard{gap:9px}
    .teacher-chart-card .teacher-chart-head{flex-wrap:wrap;margin-bottom:8px}
    .teacher-chart-card .teacher-chart-bars{height:136px;padding-top:8px}
  }

  /* sheet */
  .sheet-wrap{position:absolute;inset:0;background:rgba(15,23,42,.35);z-index:50;display:flex;align-items:flex-end}
  .sheet{width:100%;background:#fff;border-radius:28px 28px 0 0;padding:18px 16px 24px;max-height:78%;overflow-y:auto;box-shadow:0 -10px 40px rgba(0,0,0,.2);animation:up .22s ease}
  @keyframes up{from{transform:translateY(30px);opacity:.5}to{transform:none;opacity:1}}
  .sheet h3{font-size:18px;font-weight:800;color:var(--ink2);margin:0 0 14px;text-align:center}
  .bank{display:flex;align-items:center;gap:12px;padding:12px;border-radius:16px;background:#F7FAFC;border:2px solid transparent;cursor:pointer;font-family:inherit;width:100%;text-align:left}
  .bank+.bank{margin-top:10px}
  .bank.sel{border-color:var(--blue);background:#F0F9FF}
  .bank .cover{width:52px;height:68px;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;flex-shrink:0;position:relative;overflow:hidden;box-shadow:0 6px 18px rgba(0,0,0,.12)}
  .bank .cover span{font-size:8px;color:rgba(255,255,255,.9);font-weight:800;text-align:center;line-height:1.2;max-width:44px;padding:0 4px}
  .bank .cover i{position:absolute;right:0;top:0;bottom:0;width:6px;background:rgba(0,0,0,.12)}
  .bank .binfo{flex:1}
  .bank .binfo h4{font-size:14px;font-weight:800;color:var(--ink);margin:0}
  .bank .binfo p{font-size:12px;font-weight:600;color:var(--sub);margin:2px 0 6px}
  .bank .mini{height:6px;border-radius:999px;background:#EDF2F7;overflow:hidden}
  .bank .mini>i{display:block;height:100%;border-radius:999px}

  /* phonics */
  .ph-card{width:100%;border-radius:24px;padding:24px;text-align:left;background:#fff;box-shadow:0 4px 18px rgba(0,0,0,.09);border:none;cursor:pointer;font-family:inherit}
  .ph-card+.ph-card{margin-top:16px}
  .ph-card .ph-head{display:flex;align-items:center;gap:16px;margin-bottom:12px}
  .ph-card .ph-ic{width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:30px}
  .ph-card h4{font-size:18px;font-weight:800;color:var(--ink);margin:0}
  .ph-card p{font-size:14px;font-weight:600;color:var(--sub);margin:2px 0 0}
  .ph-go{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:800}

  /* article */
  .art{display:flex;flex-direction:column;gap:10px;background:#fff;border-radius:24px;padding:18px;box-shadow:0 4px 16px rgba(0,0,0,.07)}
  .art h4{font-size:17px;font-weight:800;color:var(--ink);margin:0}
  .art .art-meta{display:flex;align-items:center;gap:10px;font-size:12px;font-weight:700;color:var(--sub)}
  .art .art-actions{display:flex;gap:8px;flex-wrap:wrap}
  .art .act{flex:1;min-width:52px;padding:8px 6px;border-radius:12px;font-size:12px;font-weight:800;border:none;cursor:pointer;background:#F0F7FF;color:var(--blue)}

  /* records */
  .rec-card{display:flex;align-items:center;gap:14px;background:#fff;border-radius:45px 14px 14px 45px;overflow:hidden;padding:0 16px 0 0;box-shadow:0 4px 16px rgba(58,159,232,.08);margin-bottom:12px}
  .rec-card .av{width:88px;height:88px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:22px;flex-shrink:0;overflow:hidden;margin:0}
  .rec-card .rec-mid{flex:1;min-width:0}
  .rec-card .rec-name{font-size:16.5px;font-weight:800;color:var(--ink);margin:0;line-height:1.25}
  .rec-card .rec-sub{font-size:12.5px;font-weight:700;color:var(--sub);margin-top:5px;line-height:1.3}
  .rec-card .rec-right{display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex-shrink:0}
  .rec-card .rec-date{font-size:12.5px;font-weight:800;color:#5A9EC8;white-space:nowrap}
  .rec-card .rec-acts{display:flex;align-items:center;gap:10px}
  .rec-act{width:32px;height:32px;border:none;background:transparent;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}
  .rec-act svg{width:100%;height:100%;display:block}
  .rec-act:active{transform:scale(.92)}
  .rec-act-print svg{transform:scale(1.02);transform-origin:center}
  .rep-hdr{align-items:center;padding-bottom:12px;overflow:hidden}
  .rep-head-txt{flex:1;min-width:0;padding-left:2px}
  .hdr .rep-title{font-family:'Heiti SC','STHeitiSC-Light','黑体','黑体-简',STHeiti,SimHei,'PingFang SC','Microsoft YaHei',sans-serif;font-size:18px;font-weight:400;color:var(--ink2);margin:0;text-align:left;line-height:1.3;word-break:break-word}
  .rep-date{font-size:12px;font-weight:800;color:#3A9FE8;margin-top:3px}
  .rep-vec{width:clamp(120px,26vw,209px);height:clamp(120px,26vw,209px);flex-shrink:0;margin:-16px -8px 0 0}
  .rep-vec img,.rep-vec svg{width:100%;height:100%;object-fit:contain;display:block;transform:scaleX(-1)}
  .rep-group{border:2px solid transparent;border-radius:20px;padding:14px 16px;margin-bottom:14px;
    background-image:linear-gradient(#fff,#fff),linear-gradient(180deg,#3A9FE8 0%,#78BDF1 50%,#CFE7FB 100%);
    background-origin:border-box;background-clip:padding-box,border-box;box-shadow:0 2px 14px rgba(58,159,232,.10)}
  .rep-bank-badge{width:54px;height:54px;border-radius:50%;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:800;line-height:1.1}
  .rep-bank-badge span:first-child{font-size:11px}
  .rep-bank-badge span:last-child{font-size:12px;margin-top:1px}
  .detail-ic{width:24px;height:24px;display:flex;align-items:center;justify-content:center}
  .detail-ic svg{width:100%;height:100%;display:block}

  /* review plan */
  .date-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--blue);background:#EBF6FF;padding:4px 10px;border-radius:999px}
  .plan-card{background:#fff;border-radius:20px;padding:16px;box-shadow:0 2px 12px rgba(0,0,0,.06);margin-bottom:12px}
  .plan-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
  .plan-head .d{font-size:14px;font-weight:800;color:var(--ink)}
  .plan-head .n{font-size:12px;font-weight:800;color:var(--blue);background:#EBF6FF;padding:2px 10px;border-radius:999px}
  .rv-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px 8px;margin-top:12px}
  .rv-grid-item{display:flex;flex-direction:column;align-items:center;gap:6px;border:none;background:none;padding:0;cursor:pointer;font-family:inherit;min-width:0}
  .rv-grid-item:active{transform:scale(.95)}
  .rv-grid-av{display:flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;overflow:hidden;flex-shrink:0;box-shadow:0 2px 8px rgba(30,74,114,.12)}
  .rv-grid-av .av{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:800;overflow:hidden}
  .rv-grid-name{font-size:12px;font-weight:700;color:var(--ink);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .plan-avatars{display:flex;gap:8px;margin-bottom:12px}
  .plan-avatars .av{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:800;box-shadow:0 2px 6px rgba(0,0,0,.15)}
  .rv-stu-list{display:flex;flex-direction:column;gap:8px;margin:0 0 2px}
  .rv-stu{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;background:#F4F9FE;border:none;width:100%;text-align:left;cursor:pointer;font-family:inherit}
  .rv-stu .av{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:800;flex-shrink:0;overflow:hidden}
  .rv-stu span{font-size:14px;font-weight:700;color:var(--ink)}
  .review-progress{position:absolute;top:10px;right:6px;bottom:10px;width:4px;border-radius:999px;background:rgba(122,174,207,.18);overflow:hidden;opacity:0;transition:opacity .18s ease}
  .review-progress.show{opacity:1}
  .review-progress-bar{position:absolute;top:0;left:0;width:100%;border-radius:999px;background:linear-gradient(180deg,#3A9FE8,#4ECB8D)}
  .review-end{padding:12px 0 22px;text-align:center;font-size:12px;font-weight:600;color:#9DBCDB}

  .menu-item{display:flex;align-items:center;justify-content:space-between;padding:16px;border-radius:16px;background:rgba(255,255,255,.9);margin-bottom:12px;cursor:pointer}
  .menu-item span{font-size:14px;font-weight:700;color:var(--ink)}

  /* profile */
  .profile-head{padding:calc(18px + env(safe-area-inset-top,0px)) 20px 32px;display:flex;flex-direction:column;align-items:center}
  .profile-head .av{width:80px;height:80px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:30px;font-weight:800;background:var(--blue);margin-bottom:12px}
  .profile-head h2{font-size:18px;font-weight:800;color:var(--ink2);margin:0}
  .profile-head p{font-size:14px;font-weight:600;color:var(--sub2);margin:2px 0 0}

  /* memorize (开始学新) */
  .mem-wrap{flex:1;display:flex;flex-direction:column;min-height:0;padding:0 16px 14px;overflow:hidden}
  .mem-top{flex-shrink:0;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px;margin:4px 0 12px}
  .mem-gnav{display:flex;align-items:center;gap:8px}
  .mem-nav{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;border-radius:12px;font-size:12px;font-weight:800;background:#fff;color:var(--blue);box-shadow:0 2px 8px rgba(0,0,0,.07);border:none;cursor:pointer;font-family:inherit}
  .mem-nav[disabled]{background:#EDF4F9;color:#B7C9DB;cursor:not-allowed}
  .mem-grp{font-size:13px;font-weight:800;color:var(--ink2)}
  .mem-grid{flex:1;display:flex;flex-direction:column;gap:8px;min-height:0;overflow-y:auto;scrollbar-width:none}
  .mem-grid::-webkit-scrollbar{display:none}
  .mem-word{flex:0 0 auto;display:flex;align-items:stretch;background:#fff;border:1px solid #3A9FE8;border-radius:14px;box-shadow:0 2px 12px rgba(0,0,0,.07);cursor:pointer;font-family:inherit;min-height:0;overflow:hidden;text-align:left;transition:background-color .42s ease,box-shadow .42s ease,border-color .42s ease}
  .mem-inner{display:flex;flex-direction:column;align-items:flex-start;gap:3px;flex:1;min-width:0}
  .mem-main{flex:1;display:flex;align-items:center;border:none;background:none;padding:6px 8px 6px 14px;cursor:pointer;font-family:inherit;text-align:left;min-width:0}
  .mem-note{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:34px;border:none;background:none;cursor:pointer;padding:0;color:var(--blue)}
  /* 选中的单词：浅蓝底（和「单词学习」页签的 on 色一致 rgba(58,159,232,.14)）+ 不变的细蓝框；
     去掉 animation，避免点的时候边框闪一下 */
  .mem-word.sel{background:rgba(58,159,232,.14);border-color:var(--blue);box-shadow:0 6px 20px rgba(58,159,232,.28)}
  .mem-word.ghost{background:transparent;box-shadow:none;border:none;pointer-events:none}
  .mem-word.mem-listen{justify-content:center;align-items:center;padding:6px 14px}
  .listen-spk{display:inline-flex;align-items:center;justify-content:center}
  .mem-bank{font-size:11px;font-weight:700;color:#34506A;text-align:left;padding:0 clamp(14px,4vw,20px) 0 calc(clamp(14px,4vw,20px) + 48px);margin:-8px 0 8px;letter-spacing:1px}
  .note-overlay{align-items:stretch;padding:16px}
  .note-panel{width:min(100%,640px);margin:auto;background:#fff;border-radius:20px;box-shadow:0 16px 40px rgba(30,74,114,.25);display:flex;flex-direction:column;overflow:hidden;max-height:92vh}
  .note-tools{display:flex;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line);flex-shrink:0}
  .note-tool{flex:1;padding:9px;border-radius:12px;border:1.5px solid transparent;background:#F4F9FC;color:#5A7A96;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit}
  .note-tool.on{background:rgba(58,159,232,.12);border-color:var(--blue);color:var(--blue)}
  .note-scroll{height:56vh;overflow-y:auto;background:#F7FBFF;scrollbar-width:thin}
  .note-scroll canvas{display:block;width:100%;background:#fff}
  .note-footer{display:flex;gap:10px;padding:12px;border-top:1px solid var(--line);flex-shrink:0}
  .note-cancel{flex:1;padding:12px;border-radius:14px;border:1.5px solid rgba(26,43,69,.15);background:#fff;color:var(--ink);font-size:15px;font-weight:800;cursor:pointer;font-family:inherit}
  .note-save{flex:1;padding:12px;border-radius:14px;border:none;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;font-size:15px;font-weight:800;cursor:pointer;font-family:inherit}
  .cut-wrap{flex:1;display:flex;flex-direction:column;min-height:0;padding:0 16px 16px;overflow:hidden}
  .cut-list{flex:1;overflow-y:auto;scrollbar-width:none;display:flex;flex-direction:column;gap:8px;min-height:0;padding-bottom:4px}
  .cut-list::-webkit-scrollbar{display:none}
  .cut-actions{display:flex;flex-direction:row;gap:4px;align-items:stretch;justify-content:center;flex:0 0 72px;padding:6px;border-left:1px solid var(--line)}
  .cut-arrow{flex:1;border:none;border-radius:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:900;font-family:inherit}
  .cut-arrow.green{background:rgba(78,203,141,.18);color:#2BB779}
  .cut-arrow.red{background:rgba(255,107,107,.16);color:#F05656}
  .cut-boxes{flex-shrink:0;display:flex;gap:10px;margin-top:12px}
  .cut-box{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px;border-radius:16px;border:none;cursor:pointer;font-family:inherit}
  .cut-box.green{background:rgba(78,203,141,.22);color:#2BB779}
  .cut-box.red{background:rgba(255,107,107,.18);color:#F05656}
  .cut-box span{font-size:12px;font-weight:800}
  .cut-box b{font-size:20px;font-weight:900}
  .cut-done{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;width:100%;max-width:280px;margin:0 auto;min-height:0}
  .cut-done button{width:100%;padding:13px;border-radius:14px;border:none;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit}
  .cut-done .recheck{background:rgba(58,159,232,.14);color:var(--blue);border:1.5px solid rgba(58,159,232,.35)}
  .cut-done .next{background:#1E5F8E;color:#fff;box-shadow:0 4px 12px rgba(30,95,142,.28)}
  /* 文章卡片标题：最多两行，超出用 … 省略 */
  .rd-card-title{display:-webkit-box;display:box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;box-orient:vertical;overflow:hidden;text-overflow:ellipsis;height:2.7em;max-height:2.7em;word-break:break-word;line-height:1.35}
  .m-en{font-weight:800;color:var(--ink);line-height:1.15;word-break:break-word}
  .m-en.bounce{animation:slideUp .22s ease-out}
  .m-phon{font-size:12px;font-weight:600;color:var(--sub2);word-break:break-word}
  .m-zh{font-size:13px;font-weight:700;color:#5A7A96;word-break:break-word}
  .mem-split{flex:1;display:flex;gap:10px;min-height:0;overflow-y:auto;align-items:flex-start}
  .mem-split .mem-grid{flex:0 0 40%;min-width:0}
  .mem-detail{flex:0 0 60%;min-width:0;background:#fff;border-radius:16px;box-shadow:0 2px 12px rgba(0,0,0,.06);padding:12px 14px;overflow-y:auto;scrollbar-width:none}
  .mem-detail::-webkit-scrollbar{display:none}
  .det-title{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}
  .det-phon{font-size:12px;font-weight:600;color:var(--sub2)}
  .det-zh{font-size:13px;font-weight:700;color:#5A7A96}
  .det-head{border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}
  .det-wordrow{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
  .det-wordrow .m-en{cursor:pointer}
  .det-phonrow{margin-top:4px;display:inline-block;cursor:pointer}
  .wsyl{display:inline-block;cursor:pointer;transform-origin:center bottom;transition:color .18s ease}
  .wsyl.on{color:#3A9FE8;animation:sylBounce .3s ease}
  .wsyl-dot{color:#9DBCDB;font-weight:800;padding:0 2px}
  .det-phonemes{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
  .det-phonemes .phon{padding:.45em .85em;border-radius:10px;background:#FFF3E0;border:1.5px solid #F7D9AE;color:#B86E12;font-weight:800;line-height:1;cursor:pointer;font-family:inherit;transition:background .15s ease,border-color .15s ease,color .15s ease}
  .det-phonemes .phon.on{background:#FFD166;border-color:#E79A00;color:#7A4300}
  @keyframes sylBounce{0%{transform:scale(1)}45%{transform:scale(1.18)}100%{transform:scale(1)}}
  .det-sec{margin-bottom:12px}
  .det-sec h4{margin:0 0 4px;font-size:12px;font-weight:800;color:var(--blue)}
  .det-sec p{margin:0;font-size:13px;font-weight:600;color:var(--ink);line-height:1.5;word-break:break-word}
  .det-ex{font-style:normal;margin:0;line-height:1.5;font-weight:700;color:#C24C7A}
  .det-exzh{margin:6px 0 0;line-height:1.5;font-weight:700;color:#C24C7A}
  .det-excapsule{background:#FFE3EE;border:1.5px solid #F7B6CF;color:#C24C7A;border-radius:14px;padding:10px 12px}
  .det-img{display:block;width:auto;max-width:100%;max-height:170px;object-fit:contain;border-radius:12px;background:#F7FAFC;margin:0 0 12px}
  .det-img-fail{padding:14px;border-radius:12px;background:#FFF3F3;color:#C05050;font-size:12px;font-weight:700;margin:0 0 12px}
  .det-exwrap{cursor:pointer}
  .det-sec p b{font-weight:800}
  @keyframes selIn{from{border-color:transparent;box-shadow:0 2px 12px rgba(0,0,0,.07)}to{border-color:var(--blue);box-shadow:0 6px 20px rgba(58,159,232,.28)}}
  @keyframes slideUp{from{transform:translateY(12px)}to{transform:translateY(0)}}
  .toast{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:rgba(26,43,69,.92);color:#fff;font-size:13px;font-weight:600;padding:10px 16px;border-radius:999px;z-index:200;white-space:nowrap;max-width:86vw;animation:toastIn .18s ease}
  @keyframes toastIn{from{opacity:.5;transform:translate(-50%,-50%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
  .warn{display:flex;align-items:center;gap:10px;padding:16px;border-radius:16px;background:#FFF5E9;color:#C7781E;font-size:14px;font-weight:700;border:1.5px dashed #FFC97A}


  /* modal */
  .modal-overlay{position:fixed;inset:0;background:rgba(26,43,69,.45);display:flex;align-items:center;justify-content:center;z-index:300;padding:24px}
  .modal-card{width:min(86%,320px);background:#fff;border-radius:20px;padding:24px 20px;text-align:center;box-shadow:0 16px 40px rgba(30,74,114,.25);animation:up .22s ease}
  .modal-card p{margin:0 0 20px;font-size:15px;font-weight:700;color:#1A2B45;line-height:1.55}
  .modal-ok{width:100%;padding:12px;border:none;border-radius:14px;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;font-size:15px;font-weight:800;cursor:pointer;font-family:inherit}
  .modal-ok:active{transform:scale(.98)}

  /* class sheet */
  .class-sheet{position:fixed;inset:0;z-index:330;background:rgba(26,43,69,.45);display:flex;align-items:center;justify-content:center;padding:20px}
  .class-sheet-card{width:min(92vw,860px);height:min(560px,86vh);max-height:88vh;overflow:auto;border-radius:30px;background:#fff;border:1px solid #E6F0F8;box-shadow:0 24px 60px rgba(30,74,114,.22);animation:classSheetUp .28s cubic-bezier(.22,.9,.35,1) forwards;display:flex;flex-direction:column}
  @keyframes classSheetUp{from{transform:translateY(42px);opacity:.5}to{transform:none;opacity:1}}
  .class-sheet-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;flex-shrink:0;color:#1A2B45;border-bottom:1px solid #EFF5FA}
  .class-sheet-head h2{margin:0;font-size:20px;font-weight:800;color:#1A2B45}
  .class-sheet-close{width:34px;height:34px;border-radius:50%;border:none;background:#F1F6FB;color:#5A7A96;font-size:18px;cursor:pointer}
  .class-sheet-body{flex:1;display:flex;min-height:0}
  .class-sheet-left{width:34%;min-width:220px;background:#F7FAFD;border-right:1px solid #EFF5FA;padding:22px 14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:#fff}
  .class-sheet-left .av{width:64px;height:64px;font-size:28px;font-weight:800;border-radius:50%;background:#E7F1FA;color:#2F5C7D;overflow:hidden;display:flex;align-items:center;justify-content:center}
  .class-sheet-stu-name{font-size:22px;font-weight:800;color:#1A2B45;line-height:1.15}
  .class-sheet-stu-grade{font-size:14px;font-weight:700;color:#6E8FA9;margin-top:4px}
  .class-sheet-stu-id{font-size:12px;font-weight:700;color:#93AEC4;margin-top:3px}
  .class-sheet-stu-hours{font-size:14px;font-weight:800;color:#3A9FE8;margin-top:4px}
  .class-sheet-right{flex:1;min-width:0;padding:16px;display:flex;flex-direction:column;gap:12px;overflow:auto;background:#fff}
  .class-sheet-vocab{align-self:flex-start;padding:9px 14px;border-radius:999px;border:1px solid #DCEBF8;background:#EFF6FD;color:#2F6FA8;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit}
  .class-sheet-slots{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .class-sheet-slot{border:2px dashed #D5E6F4;border-radius:18px;padding:14px;min-height:84px;color:#5A7A96;font-size:14px;font-weight:700;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center}
  .class-sheet-slot.filled{background:#F5FAFF;border-style:solid;border-color:#CFE6F9;color:#1A2B45}
  .class-sheet-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .class-sheet-custom{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px;border:1.5px solid #E3EFF9;border-radius:16px;background:#FBFDFF}
  .class-sheet-custom input{flex:1;min-width:130px;padding:10px 12px;border:none;border-radius:12px;font-size:14px;font-weight:800;color:#1A2B45;outline:none}
  .class-sheet-custom button{padding:10px 14px;border:none;border-radius:12px;font-size:14px;font-weight:800;cursor:pointer;color:#fff;background:#3A9FE8}
  .class-sheet-custom button.ghost{background:#EFF6FD;color:#2F6FA8}
  .class-sheet-mod{display:flex;align-items:center;gap:10px;width:100%;padding:12px 14px;border:1.5px solid #E7F1F9;border-radius:16px;background:#fff;color:#1A2B45;font-size:14px;font-weight:800;cursor:pointer;text-align:left;font-family:inherit;transition:all .18s ease}
  .class-sheet-mod:hover{border-color:#C9E3F7;background:#FAFDFF}
  .class-sheet-mod .cs-ic{width:34px;height:34px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
  .class-sheet-mod .cs-ic svg{width:100%;height:100%;display:block}
  .cs-ic{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;vertical-align:middle}
  .cs-ic svg{width:24px;height:24px;display:block}
  .class-sheet-mod.sel{border-color:#3A9FE8;background:#F2F9FF;box-shadow:0 2px 10px rgba(58,159,232,.16)}
  .class-sheet-start{display:none;position:sticky;bottom:0;margin-top:2px;padding:14px 16px;border:none;border-radius:16px;background:#3A9FE8;color:#fff;font-size:16px;font-weight:800;box-shadow:0 6px 18px rgba(58,159,232,.3);cursor:pointer;box-shadow:0 8px 24px rgba(0,0,0,.16);font-family:inherit}
  .class-sheet-start.show{display:block}

  /* 一代老师端“选择课程”弹窗：图片头部 + 课程卡片 */
  .lq-wb-mask{position:fixed;inset:0;z-index:330;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center}
  .lq-wb-card{width:90%;max-width:480px;max-height:70vh;display:flex;flex-direction:column;align-items:center}
  .lq-wb-header{width:100%;flex-shrink:0;border-radius:19px 19px 0 0;overflow:hidden;background:#63C8F5;line-height:0}
  .lq-wb-header img{width:100%;display:block}
  .lq-wb-body{width:100%;background:#fff;border-radius:0 0 19px 19px;display:flex;flex-direction:column;overflow:hidden;flex:1;min-height:0;margin-top:-2px}
  .lq-wb-scroll{width:100%;padding:15px 20px;box-sizing:border-box;overflow-y:auto;display:flex;flex-direction:column;gap:15px;min-height:0}
  .lq-wb-item{position:relative;width:100%;height:123px;padding:0;border:none;background:transparent;font-family:inherit;text-align:left;cursor:pointer;display:block;flex-shrink:0}
  .lq-wb-cover{position:absolute;left:0;top:0;width:90px;height:123px;border-radius:10px;object-fit:cover;z-index:1;background:#E8FAFF}
  .lq-wb-cardbody{position:absolute;left:0;right:0;bottom:0;height:123px;background:#E8FAFF;border-radius:10px;box-shadow:0 0 1px 0 rgba(0,0,0,.08);overflow:hidden}
  .lq-wb-badge{position:absolute;right:0;top:0;width:81px;height:19px;background:rgba(255,161,94,.72);border-top-right-radius:10px;border-bottom-left-radius:10px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#000}
  .lq-wb-title{position:absolute;left:96px;right:8px;top:17px;font-size:17px;font-weight:700;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25}
  .lq-wb-progress{position:absolute;left:101px;top:75px;font-size:11px;font-weight:700;color:#000}
  .lq-wb-bar{position:absolute;left:96px;right:8px;top:92px;height:12px;background:#D9D9D9;border-radius:10px;overflow:hidden}
  .lq-wb-bar i{display:block;height:100%;background:#48C5FF;border-radius:10px}
  .lq-wb-empty{padding:30px 0;text-align:center;font-size:14px;color:rgba(0,0,0,.3)}
  @media(max-width:640px){
    .class-sheet-card{width:94vw;max-height:90vh}
    .class-sheet-body{flex-direction:column}
    .class-sheet-left{width:100%;min-width:0;flex-direction:row;justify-content:center;gap:10px;padding:14px}
    .class-sheet-left .av{width:56px;height:56px;font-size:22px}
    .class-sheet-right{width:100%}
  }

  /* login */
  .login-wrap{flex:1;display:flex;flex-direction:column;overflow-y:auto;padding:calc(20px + env(safe-area-inset-top,0px)) 18px 24px;scrollbar-width:none}
  .login-wrap::-webkit-scrollbar{display:none}
  .login-inner{margin:auto;display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center;width:100%}
  .login-title{font-family:"Comic Sans MS","Chalkboard SE","Comic Neue","Arial Rounded MT Bold","PingFang SC",sans-serif;font-weight:800;font-size:clamp(27px,6.2vw,35px);line-height:1.35;color:var(--ink2);max-width:620px;margin:0;transform:translateY(-50%)}
  .login-title-img{display:block;height:2.7em;width:auto;max-width:min(86vw,620px);margin:0 auto;object-fit:contain;transform:translateY(-50%);font-size:clamp(27px,6.2vw,35px)}
  .mascots{display:flex;align-items:flex-start;justify-content:center;gap:10px;position:relative;z-index:1;overflow:hidden;height:min(22.7vw,96px);transform:translateX(5%);transition:transform .3s ease}
  .mascot-svg{width:min(48vw,204px);height:auto;filter:drop-shadow(0 10px 18px rgba(30,74,114,.16))}
  .mascot-svg + .mascot-svg{transform:translateX(-20%)}
  .mascot-svg:last-child{position:relative;z-index:2}
  .mascots .mouth-neutral{transition:opacity .3s ease}
  .mascots .eyes{transition:opacity .3s ease}
  .mascots .mouth-surprised{opacity:0;transition:opacity .3s ease}
  .mascots .eyes-wide{opacity:0;transition:opacity .3s ease}
  .mascots .eyes-squint{opacity:0;transition:opacity .3s ease}
  .mascots.state-account .mouth-neutral{opacity:0}
  .mascots.state-account .eyes{opacity:0}
  .mascots.state-account .mouth-surprised{opacity:1}
  .mascots.state-account .eyes-wide{opacity:1}
  .mascots.state-password .eyes{opacity:0}
  .mascots.state-password .eyes-wide{opacity:0}
  .mascots.state-password .eyes-squint{opacity:1}
  .login-form{width:min(94%,367px);display:flex;flex-direction:column;gap:12px;background:#fff;padding:20px;border-radius:20px;box-shadow:0 12px 34px rgba(30,74,114,.14);position:relative;z-index:2;margin-top:-16px}
  .login-form input{width:100%;padding:13px 14px;border-radius:14px;border:1.5px solid #E4F0F9;background:#fff;font-size:15px;font-weight:600;color:var(--ink);outline:none;font-family:inherit}
  .login-form input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(58,159,232,.12)}
  .login-btn{width:100%;padding:14px;border-radius:14px;border:none;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;font-size:16px;font-weight:800;cursor:pointer;font-family:inherit}
  .login-btn:active{transform:scale(.98)}
  .login-links{display:flex;justify-content:center}
  /* 版本号：贴在整页最底部，蓝色小字 */
  .login-ver{flex:0 0 auto;margin:0 auto 2px;padding-top:14px;font-size:11.5px;font-weight:800;color:#3A9FE8;letter-spacing:.3px;text-align:center}
  .login-forgot{background:none;border:none;color:#5A7A96;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;text-decoration:underline;padding:2px}
  /* admin */
  .admin-top{display:flex;align-items:center;justify-content:space-between;padding:calc(18px + env(safe-area-inset-top,0px)) clamp(14px,4vw,20px) 12px}
  .admin-top h1{font-size:20px;font-weight:800;color:var(--ink2);margin:0}
  .admin-top p{font-size:12px;color:var(--sub2);margin:4px 0 0}
  .admin-tabs{display:flex;gap:10px;padding:0 clamp(14px,4vw,20px) 14px}
  .admin-tabs button{flex:1;padding:11px;border-radius:14px;border:none;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit;background:#fff;color:var(--sub2);box-shadow:0 2px 10px rgba(0,0,0,.06)}
  .admin-tabs button.on{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;box-shadow:0 6px 18px rgba(58,159,232,.35)}
  .admin-card{background:#fff;border-radius:18px;padding:14px;box-shadow:0 4px 16px rgba(0,0,0,.06);margin-bottom:14px}
  .admin-card h3{font-size:14px;font-weight:800;color:var(--ink2);margin:2px 2px 12px}
  .admin-head,.admin-row{display:flex;align-items:center;gap:6px;margin-bottom:8px}
  .admin-head span{font-size:11px;font-weight:700;color:var(--sub3);display:block}
  .admin-cell{display:flex}
  .adm-inp{width:100%;min-width:0;padding:8px 9px;border-radius:10px;border:1.5px solid #E4F0F9;background:#FBFDFF;font-size:13px;font-weight:600;color:var(--ink);outline:none;font-family:inherit}
  .adm-inp:focus{border-color:var(--blue)}
  .adm-btn{min-width:52px;padding:8px 10px;border-radius:10px;border:none;font-size:12px;font-weight:800;cursor:pointer;font-family:inherit;flex-shrink:0;background:#EBF6FF;color:var(--blue)}
  .adm-btn.on{background:var(--blue);color:#fff}
  .adm-btn.off{background:#F1F5F9;color:var(--sub2)}
  .adm-btn.del{background:#FFEDED;color:#FF6B6B}
  .adm-btn.add{background:var(--blue);color:#fff}
  .adm-btn.wide{width:100%;margin-top:8px;padding:11px}
  .adm-count{font-size:12px;font-weight:800;color:var(--sub2);flex-shrink:0;min-width:42px;text-align:center}
  .admin-bank{display:flex;align-items:center;gap:6px;margin-bottom:8px}
  .admin-row.word{background:#FBFDFF;border:1px solid #EEF4F8;border-radius:10px;padding:6px}
  .admin-row.add{background:#F4FAFF;border:1.5px dashed #C7E3F7;border-radius:12px;padding:8px}
  .adm-area{width:100%;min-height:90px;margin-top:10px;padding:10px;border-radius:12px;border:1.5px solid #E4F0F9;background:#FBFDFF;font-size:12px;font-weight:600;color:var(--ink);font-family:inherit;resize:vertical;outline:none}
  .admin-card.tip p{font-size:12px;color:var(--sub2);line-height:1.6;margin:0}

  /* 阅读文章学习 */
  .read-stages{display:flex;gap:8px;padding:10px 16px 12px;flex-shrink:0}
  .read-stage{flex:1;min-width:0;padding:11px 8px;background:#fff;color:#9DBCDB;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;border:none;margin:0;border-radius:12px;transition:background .15s,color .15s}
  .read-stage:hover{background:#EAF5FF;color:#2F7FC1}
  .read-stage.on{background:#3A9FE8;color:#fff}
  .read-stage.lock{opacity:.45;cursor:not-allowed}
  .read-panes{flex:1;display:flex;gap:14px;padding:0 16px 16px;min-height:0}
  .read-article,.read-questions{background:#fff;border-radius:18px;box-shadow:0 4px 16px rgba(0,0,0,.06);padding:16px;overflow:auto;min-width:0;font-size:inherit}
  .read-article{flex:1.25;position:relative}
  .read-questions{flex:1}
  .combined-split{display:flex;gap:16px;min-height:100%;height:100%}
  .combined-left,.combined-right{overflow-y:auto;height:100%;min-height:0}
  .combined-left{flex:0 0 44%;min-width:0;border-right:1px dashed #F0E7DE;padding-right:14px}
  .combined-right{flex:1;min-width:0}
  @media(max-width:760px){.combined-split{flex-direction:column}.combined-left{border-right:none;padding-right:0;border-bottom:1px dashed #F0E7DE;padding-bottom:12px}}
  .read-title{font-size:1.067em;font-weight:800;color:#1A2B45;margin:0 0 12px}
  .para{margin-bottom:8px;padding:8px 10px;border-radius:12px;border:1px solid transparent;transition:background .15s}
  .para:hover{background:transparent}
  .para.on{background:#EAF5FF;border-color:#A8D4F5}
  .para-tr{font-size:0.867em;color:#2F7FC1;background:#F2F8FF;border-radius:8px;padding:8px 10px;margin-top:8px;line-height:1.6;white-space:pre-wrap}
  .sen{font-size:inherit;line-height:1.5;color:#1A2B45}
  /* 文章正文里的段落块：浏览器默认给 <p> 上下各 16px 外边距，
     叠加段落容器的内/外边距后「行距」看着特别宽 —— 统一收紧 */
  .sen p,.sen h1,.sen h2,.sen h3,.sen h4,.sen h5,.sen h6,.sen blockquote{margin:0 0 .28em}
  .sen p:last-child,.sen h1:last-child,.sen h2:last-child,.sen h3:last-child,.sen h4:last-child,.sen blockquote:last-child{margin-bottom:0}
  .sen ul,.sen ol{margin:0 0 .28em;padding-left:1.25em}
  .sen li{margin:0}
  .rd-sent{border-radius:5px;padding:0 2px;margin:0 -1px;transition:background .12s;cursor:default}
  .rd-ans{text-decoration:underline;text-underline-offset:3px;font-weight:700;color:#1E4A72}
  /* 阅读板块：鼠标划到哪一句，整句高亮成亮黄色 */
  .rd-sent:hover{background:#FFEB3B;color:#1A2B45}
  .rd-sent.speakable{cursor:pointer;user-select:none}
  .rd-sent.speakable:hover{background:#FFEB3B;color:#1A2B45}
  .rd-sent.playing{background:#CFE7FF;color:#1E4A72}
  .rd-vocabadd .rd-sent:hover{background:transparent}
  .rd-vocabadd .rd-sent{cursor:text}
  .rd-tools{display:inline-flex;gap:3px;margin:0 2px 0 5px;vertical-align:middle;font-size:12px}
  .rd-tools button{border:1px solid #CFE3F4;background:#F5FAFF;color:#2F7FC1;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:800;cursor:pointer;font-family:inherit;line-height:1.6;white-space:nowrap}
  .rd-tools button:hover{background:#EAF5FF;border-color:#A8D4F5}
  .rd-tools button.on{background:#3A9FE8;border-color:#3A9FE8;color:#fff}
  .rd-ans-mark{text-decoration:underline;text-decoration-color:#E8724C;text-decoration-thickness:2px;text-underline-offset:3px;color:#C05621;font-weight:800}
  .rd-sent-no{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#1E4A72;color:#fff;font-size:12px;font-weight:800;line-height:1;margin:0 5px 0 1px;vertical-align:middle;flex-shrink:0}
  .rd-sent-inline{margin:8px 0 10px;background:#FBF7F2;border:1px solid #EFE7DD;border-radius:12px;padding:10px 12px;max-width:100%;box-sizing:border-box;overflow-x:hidden;min-width:0}
  .rd-sent-panel:empty{display:none}
  .rd-ana{margin:0.35em 0 0.55em;padding:0.45em 0.7em;border-radius:0.5em;background:#F7FBFF;border:1px solid #E4F0FA;font-size:0.6em;max-width:100%;box-sizing:border-box;overflow-wrap:anywhere;word-break:break-word;min-width:0}
  .rd-ana-h{font-weight:800;color:#2F7FC1;margin-bottom:0.35em;font-size:1.05em}
  .rd-ana-row{color:#1A2B45;line-height:1.85;overflow-wrap:anywhere;word-break:break-word;min-width:0}
  .rd-ana-row b{color:#2F7FC1;font-weight:800}
  .rd-ana-part{padding-left:1.1em;color:#1A2B45;line-height:1.85;overflow-wrap:anywhere;word-break:break-word;min-width:0}
  .rd-ana-part i{font-style:normal;color:#7AA6C6;font-weight:700}
  .rd-ana-body{color:#1A2B45;line-height:1.85;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}
  .rd-ana-pill{display:inline-block;border-radius:8px;padding:0.05em 0.45em;margin:0.1em 0.15em;line-height:1.7;white-space:normal;overflow-wrap:anywhere;word-break:break-word;max-width:100%;box-sizing:border-box}
  .rd-flex{display:flex;align-items:center;gap:0.3em;flex-wrap:wrap;min-width:0}
  .rd-ana-part .rd-hide,.rd-ana-row .rd-hide{min-width:0;max-width:100%;overflow-wrap:anywhere;word-break:break-word}
  .rd-hide b{font-weight:800}
  .rd-vsec{margin:0 0 0.8em;padding:0.55em 0.75em;border-radius:0.5em;background:#FFFFFF;border:1px solid #E4F0FA;font-size:0.6em}
  .rd-vsec-h{font-size:1.35em;font-weight:800;color:#1E4A72;margin-bottom:0.25em}
  .rd-vsec-tip{color:#7AA6C6;margin-bottom:0.5em;line-height:1.6}
  .rd-vsec-btns{display:flex;flex-wrap:wrap;gap:0.4em}
  .rd-vsplit{display:flex;gap:12px;align-items:stretch;height:100%;min-height:0}
  .rd-vsplit-main{flex:0 0 70%;max-width:70%;min-width:0;overflow:auto}
  .rd-vsplit-side{flex:0 0 30%;max-width:30%;min-width:0;overflow:auto}
  .rd-ph-panel{background:#fff;border-radius:14px;box-shadow:0 4px 16px rgba(0,0,0,.06);padding:0 12px 12px;font-size:0.78em}
  .rd-ph-head{font-weight:800;color:#1E4A72;margin-bottom:6px;font-size:1.05em}
  .rd-ph-row{display:flex;align-items:center;gap:8px;padding:8px 4px;border-bottom:1px dashed #EDF4FA}
  .rd-col-head{font-weight:800;color:#1E4A72;margin:0;font-size:0.95em;padding:12px 4px 8px}
  .rd-ph-en{border:none;background:transparent;padding:0;font-family:inherit;font-size:1em;font-weight:800;color:#1A2B45;word-break:break-word;line-height:1.5;cursor:pointer;text-align:left}
  .rd-ph-en:hover{color:#2F7FC1}
  .rd-ph-zh{font-size:0.9em;color:#5A7A96;margin-top:2px}
  @media(max-width:760px){.rd-vsplit{flex-direction:column}.rd-vsplit-main,.rd-vsplit-side{flex:0 0 auto;max-width:100%;width:100%}}
  .rp-txt{border:none;background:transparent;font-family:inherit;font-size:14px;font-weight:800;color:#1A2B45;cursor:pointer;padding:2px 4px;border-radius:6px;text-align:left}
  .rp-txt:hover{background:#EAF5FF;color:#2F7FC1}
  .rp-zh{font-size:13px;font-weight:700;color:#5A7A96}
  .rp-spk{border:none;background:#F5FAFF;border-radius:50%;width:30px;height:30px;cursor:pointer;font-size:14px;flex-shrink:0}
  .rp-spk:hover{background:#EAF5FF}
  .rp-add{border:1px solid #CFE3F4;background:#fff;color:#2F7FC1;font-size:12px;font-weight:800;border-radius:999px;padding:5px 12px;cursor:pointer;font-family:inherit;flex-shrink:0}
  .rp-add:hover{background:#EAF5FF}
  .rp-add.on{background:#3A9FE8;border-color:#3A9FE8;color:#fff}
  .rp-x{border:none;background:#F1F6FB;color:#5A7A96;width:30px;height:30px;border-radius:50%;font-size:15px;font-weight:800;line-height:1;cursor:pointer;flex-shrink:0}
  .rp-x:hover{background:#E3EEF9;color:#1E4A72}
  .rd-ana-h{font-size:1.35em}
  .rd-hide{display:none}
  .rd-eye{display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:#9DBCDB;cursor:pointer;padding:0 0.25em;vertical-align:middle;font-family:inherit}
  .rd-eye:hover{color:#3A9FE8}
  .rd-eye.on{color:#3A9FE8}
  .read-vw{display:inline;cursor:pointer;border-radius:5px;padding:0 1px;transition:background .12s,color .12s}
  /* 鼠标碰到哪个单词：该单词下划线 + 亮黄色高亮（只有这个单词，整句不高亮） */
  .read-vw:hover{background:#FFF7A8;text-decoration:underline;text-decoration-color:#FFC400;text-decoration-thickness:2px;text-underline-offset:3px}
  .read-vw.on{background:#CFE7FF;color:#1E4A72;font-weight:800}
  .read-vw.on:hover{background:#FFE970}
  .read-article .read-vocab .rv-tag{font-size:10px !important}
  .read-article .chap-fig{margin:16px 0;text-align:center}
  .read-article .chap-fig-stage{position:relative;display:inline-block;max-width:100% !important;vertical-align:top;z-index:1}
  .read-article .chap-fig-img{max-width:100% !important;border-radius:12px;display:block;margin:0 auto}
  .read-article .chap-fig-rs{display:none}
  .read-article .chap-bubble{position:absolute;transform:translate(-50%,-100%);z-index:3;max-width:56%}
  .read-article .chap-bubble-text{display:block;min-width:44px;padding:5px 10px;background:#fff;border:1px solid #111;border-radius:14px;font-size:14px;font-weight:600;color:#111;box-shadow:0 1px 3px rgba(0,0,0,.12);line-height:1.4;word-break:break-word}
  .read-article .chap-bubble-text:after{content:'';position:absolute;left:50%;bottom:-8px;transform:translateX(-50%);width:0;height:0;border:7px solid transparent;border-top-color:#111;border-bottom:0}
  .read-article .chap-bubble-x{display:none}
  .read-article .bub-spk{width:18px;height:18px;min-width:18px;margin-right:4px;vertical-align:middle;flex:none}.read-article .bub-spk svg{width:100%;height:100%}
  .read-article .shape-wrap{display:inline-block;position:relative;vertical-align:middle;margin:4px;z-index:10}
  .read-article .shape-wrap .shape{display:block;max-width:100%;height:auto}
  .read-article .shape-wrap .shape-x{display:none}
  .read-article .shape-wrap .shape-rs{display:none}
  .read-article .shape-wrap .shape-mv{display:none}
  .read-article .text-box-wrap{display:block;position:relative;left:auto;top:auto;margin:10px 0;width:100%;min-height:46px;z-index:10}
  .read-article .chap-fig-stage .text-box-wrap{display:inline-block;position:absolute;margin:0;width:auto;min-width:40px;min-height:46px;z-index:6;max-width:80%}
  .read-article .text-box{display:block;width:100%;min-height:46px;box-sizing:border-box;padding:8px 10px;border:1.5px dashed #3A9FE8;border-radius:10px;background:rgba(255,255,255,.96);font-size:14px;line-height:1.5;color:#1A2B45;white-space:pre-wrap;word-break:break-word}
  .read-article .text-box:empty:before{content:attr(data-ph);color:#9BA5AF}
  .read-article .text-box-handle,.read-article .text-box-x,.read-article .text-box-rs{display:none}
  .read-article .shape-text{width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:15px;font-weight:700;color:inherit;outline:none;line-height:1.3;padding:10px;box-sizing:border-box;overflow:hidden;word-break:break-word}
  .spk{display:inline-flex;width:24px;height:24px;border-radius:50%;background:#EAF5FF;align-items:center;justify-content:center;margin-right:6px;cursor:pointer;border:none;flex-shrink:0}
  .word{cursor:pointer;border-radius:5px;padding:0 1px}
  .word:hover{background:#EAF5FF}
  .word.on{background:#CFE7FF;color:#1E4A72}
  .phrase{cursor:pointer;border-radius:5px;padding:0 2px;background:#EAF5FF;border-bottom:2px solid #6EC5F5}
  .phrase.on{background:#CFE7FF}
  .sen-block{margin-bottom:10px;border-bottom:1px dashed #F0E7DE;padding-bottom:10px}
  .sen-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
  .sen.editing{outline:1.5px dashed #C8D9E8;outline-offset:4px;border-radius:8px;min-height:1.6em;background:rgba(255,255,255,.55)}
  .mini-btn{font-size:12px;font-weight:700;padding:4px 9px;border-radius:8px;border:1px solid #EAD9CB;background:#fff;color:#8B5A34;cursor:pointer;font-family:inherit}
  .annot{font-size:0.8em;color:#2F7FC1;background:#F5FAFF;border-radius:8px;padding:6px 8px;margin-top:6px}
  .mini-btn.on{background:linear-gradient(135deg,#FF8C42,#FFB37E);color:#fff;border-color:transparent;box-shadow:0 3px 8px rgba(255,140,66,.28)}
  /* 阅读板块整体蓝色主题（不影响其它板块的 .mini-btn） */
  .rd-th .mini-btn{border-color:#CFE3F4;color:#2F7FC1}
  .rd-th .mini-btn.on{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;border-color:transparent;box-shadow:0 3px 8px rgba(58,159,232,.28)}
  .rd-th .pill-btn{color:#3A9FE8}
  .rd-th .fs-btn,.rd-th .lbl2,.rd-th .fs-num{color:#2F7FC1}
  .empty{padding:22px;text-align:center;color:#9DBCDB;font-size:0.867em}
  .ia{border-radius:4px;padding:0 2px}
  /* 段落下面的生词横向排列（原来是竖着一列） */
  .read-vocab{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0 0 8px}
  .rv-item{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .rv-tag{font-size:10px;font-weight:800;padding:1px 6px;border-radius:999px;background:#E6F2FF;color:#2F7FC1}
  .rv-tag.ph{background:#E3F2FD;color:#2A78C0}
  .rv-en{font-size:0.95em;font-weight:800;color:#1A2B45;cursor:pointer;border-bottom:1px dashed #C7D7E6;padding:0 2px}
  .rv-en:hover{color:#3A9FE8}
  .rv-zh{font-size:0.867em;color:#2F7FC1;background:#EFF7FF;border-radius:6px;padding:1px 6px;cursor:pointer;outline:none;border-bottom:1px dashed rgba(47,127,193,.45)}
  /* 语法课程 */
  .mm-root{display:inline-flex;align-items:center;gap:6px;padding:9px 14px;border-radius:14px;background:linear-gradient(135deg,#9B7FE8,#C3B4F2);color:#fff;font-size:14px;font-weight:800;cursor:pointer;margin:6px 0;box-shadow:0 4px 12px rgba(155,127,232,.28)}
  .mm-node{display:inline-block;padding:7px 12px;border-radius:10px;background:#fff;border:1px solid #E2DBF5;color:#4E3D82;font-size:13px;font-weight:700;cursor:pointer;margin:4px 0}
  .mm-node.mm-parent{background:#F6F2FF;border-color:#C9BCEF}
  .mm-toggle{margin-left:4px;color:#9B7FE8;font-weight:900}
  .mm-root .mm-toggle{color:#fff}
  .grammar-opt{display:block;width:100%;text-align:left;padding:9px 11px;margin-bottom:7px;border:1px solid #E5E0F2;border-radius:10px;background:#FAF8FF;color:#3E3560;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}
  .grammar-opt span{color:#9B7FE8;margin-right:6px}
  .grammar-opt.on{background:#EEE8FF;border-color:#B9A6F2;color:#4E3D82}
  .g-blank{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #E5E0F2;border-radius:10px;background:#FAF8FF;color:#3E3560;font-size:13px;font-weight:600;font-family:inherit}
  .grammar-tabs{display:flex;gap:6px;overflow-x:auto;padding:10px 16px 11px;background:transparent;border-top:none;flex-shrink:0}
  .grammar-tab{flex:0 0 auto;padding:8px 14px;border-radius:999px;border:1.5px solid #CFE3F4;background:transparent;color:#3A9FE8;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit;white-space:nowrap}
  .grammar-tab.on{background:#3A9FE8;border-color:#3A9FE8;color:#fff;box-shadow:0 3px 8px rgba(58,159,232,.28)}
  .card h1,.card h2,.card h3,.card h4,.card h5,.card h6{line-height:1.35;margin:.5em 0 .35em;color:#4E3D82}
  .card pre{background:#F4F1FB;border-radius:10px;padding:10px;margin:8px 0}
  .card code{background:#F4F1FB;border-radius:5px;padding:1px 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em}
  .card ul{padding-left:20px;margin:6px 0}
  .card li{margin:4px 0}
  .mm-tree{overflow:auto;padding:10px 4px;text-align:left}
  .mm-tree ul{display:flex;flex-direction:column;justify-content:center;list-style:none;margin:0;padding:0;position:relative}
  .mm-tree li{display:flex;align-items:center;position:relative;padding:5px 0;margin:0;height:40px;overflow:visible}
  .mm-chip.root{--mm-bg:#F1ECFC;--mm-line:#C4B7EC;--mm-fg:#7C5FD0}
  .mm-chip.lv1{--mm-bg:#E8F4FD;--mm-line:#9ACFF4;--mm-fg:#3F96CF}
  .mm-chip.lv2{--mm-bg:#E9F8F0;--mm-line:#99D8B9;--mm-fg:#45A27F}
  .mm-chip.lv3{--mm-bg:#FFF3E7;--mm-line:#F5C79B;--mm-fg:#D9924C}
  .mm-chip.lv4{--mm-bg:#FDEEF3;--mm-line:#F0AAC1;--mm-fg:#D17095}
  .mm-chip.lv5{--mm-bg:#FFF7E1;--mm-line:#EAD184;--mm-fg:#BD9B34}
  .mm-kids{--mm-line:#D9CFF5}
  .mm-kids-lv-1{--mm-line:#83C7F0}
  .mm-kids-lv-2{--mm-line:#82D6A9}
  .mm-kids-lv-3{--mm-line:#F3B57E}
  .mm-kids-lv-4{--mm-line:#EF93AC}
  .mm-kids-lv-5{--mm-line:#E6C56A}
  .mm-tree ul.mm-kids{margin-left:20px;padding-left:16px;position:relative}
  .mm-tree ul.mm-kids:before{content:'';position:absolute;left:-20px;top:50%;width:20px;height:0;border-top:1.5px solid var(--mm-line)}
  .mm-tree ul.mm-kids.mm-single:before{width:36px}
  .mm-tree ul.mm-kids.mm-single > li:before{display:none}
  .mm-tree ul.mm-kids > li:first-child:not(:only-child):before{content:'';position:absolute;left:-16px;top:50%;width:16px;height:11px;border-top:1.5px solid var(--mm-line);border-left:1.5px solid var(--mm-line);border-top-left-radius:11px}
  .mm-tree ul.mm-kids > li:not(:first-child):not(:last-child):before{content:'';position:absolute;left:-16px;top:50%;width:16px;height:0;border-top:1.5px solid var(--mm-line)}
  .mm-tree ul.mm-kids > li:last-child:not(:only-child):before{content:'';position:absolute;left:-16px;top:50%;width:16px;height:11px;border-bottom:1.5px solid var(--mm-line);border-left:1.5px solid var(--mm-line);border-bottom-left-radius:11px;transform:translateY(-11px)}
  .mm-tree ul.mm-kids > li:first-child:not(:only-child):after{content:'';position:absolute;left:-16px;top:calc(50% + 11px);bottom:0;border-left:1.5px solid var(--mm-line)}
  .mm-tree ul.mm-kids > li:not(:first-child):not(:last-child):after{content:'';position:absolute;left:-16px;top:0;bottom:0;border-left:1.5px solid var(--mm-line)}
  .mm-tree ul.mm-kids > li:last-child:not(:only-child):after{content:'';position:absolute;left:-16px;top:0;bottom:calc(50% + 11px);border-left:1.5px solid var(--mm-line)}
  .mm-chip{display:inline-flex;align-items:center;gap:7px;padding:0 14px;height:30px;box-sizing:border-box;border-radius:999px;border:1.5px solid var(--mm-line);background:var(--mm-bg);color:var(--mm-fg);font-size:13px;font-weight:800;cursor:pointer;box-shadow:0 3px 10px rgba(78,61,130,.10);white-space:nowrap;position:relative;z-index:1}
  .mm-toggle{width:18px;height:18px;border-radius:999px;border:1.5px solid var(--mm-line);color:var(--mm-fg);background:rgba(255,255,255,.7);display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:900;flex-shrink:0;line-height:1}


  .rv-zh:focus{background:#F2F8FF;box-shadow:0 0 0 2px rgba(58,159,232,.28)}
  .read-vocab-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
  .read-vocab-head .read-title{margin:0}
  .rv-btns{display:flex;gap:8px}
  .rv-btns-block{margin:2px 0 8px}
  .rv-btn{width:34px;height:34px;border-radius:50%;border:none;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;font-size:20px;font-weight:800;line-height:1;cursor:pointer;box-shadow:0 4px 12px rgba(58,159,232,.3);font-family:inherit}
  .rv-btn.minus{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);box-shadow:0 4px 12px rgba(58,159,232,.3)}
  .rv-btn.on{background:linear-gradient(135deg,#4ECB8D,#7BE3A8);box-shadow:0 0 0 2px rgba(78,203,141,.28)}
  .rv-mark{background:#DDF0FB;color:#2A78C0;border:none;border-radius:7px;padding:2px 7px;margin:0 1px;white-space:nowrap}
  .read-hover-word{background:#CFE7FF;border-radius:4px;text-decoration:underline;text-decoration-color:#3A9FE8;text-decoration-thickness:2px;text-underline-offset:2px;cursor:pointer}
  .ana-hl{display:inline-block;padding:1px 7px;margin:1px 2px;border:1px solid #3A9FE8;border-radius:999px;background:#EAF5FD;color:#1A2B45;font-size:inherit;line-height:inherit}
  .ana-hl.c0{background:#FFD9E8;border-color:#F3BFD1}
  .ana-hl.c1{background:#FFE3D2;border-color:#F2CCAF}
  .ana-hl.c2{background:#FFF3C7;border-color:#EBD98F}
  .ana-hl.c3{background:#C9F2D8;border-color:#A8E2BE}
  .ana-hl.c4{background:#CBE7F5;border-color:#A9D7EC}
  .ana-hl.c5{background:#E7D9F7;border-color:#CFBFE9}
  .ana-hl.c6{background:#DDF0D8;border-color:#B8E2BE}
  .ana-hl.c7{background:#F7EAD8;border-color:#E4D0AE}
  .ana-hl.c8{background:#D5ECF2;border-color:#A7D5E2}
  .ana-hl.c9{background:#F8D7E0;border-color:#ECB8C7}
  .rv-item.sel{border:1.5px solid #3A9FE8;background:#EFF8FF;border-radius:8px;padding:2px 4px}
  .sel-annot{position:fixed;z-index:80;display:flex;flex-direction:column;align-items:stretch;gap:8px;background:#fff;border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.2);padding:8px;max-width:340px}
  .sel-annot .sel-row{display:flex;gap:6px;align-items:center}
  .sel-annot input{flex:1;min-width:0;border:1.5px solid #E4F0F9;border-radius:8px;padding:7px 9px;font-size:13px;font-family:inherit;outline:none;color:#1A2B45}
  .sel-annot button{border:none;border-radius:8px;padding:7px 10px;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;font-weight:700;font-size:12px;cursor:pointer;font-family:inherit;white-space:nowrap}
  .sel-annot .sel-x{background:#F0F4F8;color:#5A7A96;padding:7px 9px}
  .sel-colors{display:flex;gap:6px;flex-wrap:wrap}
  .sw{width:20px;height:20px;border-radius:50%;cursor:pointer;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.12);flex-shrink:0}
  .sw.on{box-shadow:0 0 0 2px #8B5A34}
  .q-title{font-size:0.933em;font-weight:700;line-height:1.6;margin:0 0 12px}
  .opt{display:block;width:100%;text-align:left;padding:11px 12px;border-radius:12px;border:1.5px solid #DCEAF5;background:#fff;font-size:0.867em;font-weight:600;color:#1A2B45;margin-bottom:8px;cursor:pointer;font-family:inherit}
  .opt.sel{border-color:#3A9FE8;background:#EFF7FF}
  .opt.correct{border-color:#4ECB8D;background:#E6F9F0}
  .opt.wrong{border-color:#FF6B6B;background:#FFEDED}
  .gap-slot{display:inline-block;min-width:3.2em;text-align:center;border-bottom:2px dashed #3A9FE8;color:#2F7FC1;font-weight:800;cursor:pointer;padding:0 6px}
  .gap-slot.on{background:#EFF7FF;border-bottom-style:solid}
  /* 填空题：横线上直接输入答案 */
  .gap-inp{display:inline-block;min-width:5.2em;max-width:11em;border:1px solid #BBDCF7;border-bottom:2px solid #3A9FE8;background:#F4FAFF;border-radius:8px;padding:1px 6px;font-size:0.95em;font-weight:800;color:#1A2B45;font-family:inherit;outline:none;text-align:center;vertical-align:baseline}
  .gap-inp:focus{background:#E6F3FF;border-color:#3A9FE8;box-shadow:0 0 0 2px rgba(58,159,232,.18)}
  .gap-inp::placeholder{color:#9DBCDB;font-weight:700}
  .gap-slot.ok{background:#D9F5E3;border-bottom:2px solid #2BB779;color:#1B7A46}
  .gap-slot.bad{background:#FFE3E3;border-bottom:2px solid #FF6B6B;color:#C0392B}
  .gap-ans-fix{display:inline-block;margin-left:.28em;color:#1B7A46;font-weight:800;font-size:0.95em}
  .gap-src-wrap{display:inline-block;margin-left:.3em;white-space:nowrap}
  .gap-slot.picking{background:#FFF3B0;border-bottom-color:#FFB300}
  .gapline{padding:9px 2px;border-bottom:1px dashed #EDF4FA}
  .gap-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .gapq{font-size:0.82em;font-weight:700;color:#1A2B45;line-height:1.75;margin-bottom:5px}
  .cz-foot{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap}
  .cz-mark{font-size:0.78em;font-weight:800}
  .gapno{font-size:0.8em;font-weight:800;color:#5A7A96;min-width:3.6em}
  .gapletter{border:1.5px solid #DCEAF5;background:#fff;color:#1A2B45;font-weight:800;border-radius:9px;min-width:2.1em;padding:4px 8px;cursor:pointer;font-family:inherit}
  .gapletter.on{border-color:#3A9FE8;background:#EFF7FF;color:#2F7FC1}
  .gapletter.ok{border-color:#4ECB8D;background:#E6F9F0;color:#1B7A46}
  .gapletter.bad{border-color:#FF6B6B;background:#FFEDED;color:#B93A3A}
  .gapmark{font-size:0.78em;font-weight:800;color:#4ECB8D}
  .gap-pop{position:relative;display:inline-block}
  .gap-pop-list{position:absolute;top:100%;left:0;z-index:30;display:flex;flex-direction:column;gap:4px;padding:6px;background:#fff;border:1px solid #CFE3F4;border-radius:10px;box-shadow:0 10px 24px rgba(30,74,114,.18);max-height:170px;overflow-y:auto;-webkit-overflow-scrolling:touch}
  .gap-chip{flex:0 0 auto;border:1.5px solid #CFE3F4;background:#F5FAFF;color:#2F7FC1;font-weight:800;border-radius:999px;min-width:2.6em;padding:6px 12px;cursor:pointer;font-family:inherit}
  .gap-exp-box{margin-top:8px;padding:9px 11px;border:1px solid #D7E9F8;border-left:4px solid #3A9FE8;border-radius:10px;background:#F7FBFF;font-size:0.78em;line-height:1.8;color:#2F5C7D}
  .gap-exp-box b{color:#1E4A72}
  .gap-exp.on{background:#3A9FE8;border-color:#3A9FE8;color:#fff}
  .gap-chip:hover{background:#EAF5FF}
  .gap-chip.cancel{color:#8A96A3;border-color:#E3E9F0;background:#F7FAFD}
  .gapopt{display:flex;gap:8px;padding:6px 2px;font-size:0.85em;color:#1A2B45;line-height:1.6}
  .gapopt b{color:#3A9FE8;flex-shrink:0}
  .cz-card{background:#fff;border:1px solid #EAF3FA;border-radius:12px;padding:10px 12px;margin-bottom:10px}
  .cz-q{display:flex;gap:8px;font-size:0.92em;font-weight:700;color:#1A2B45;line-height:1.7;margin-bottom:8px}
  .cz-no{flex-shrink:0;min-width:1.6em;height:1.6em;border-radius:50%;background:#EAF5FF;color:#2F7FC1;font-size:0.85em;font-weight:800;display:inline-flex;align-items:center;justify-content:center}
  .cz-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .cz-opt{display:flex;gap:6px;align-items:flex-start;text-align:left;padding:8px 10px;border:1.5px solid #DCEAF5;background:#fff;border-radius:10px;font-size:0.82em;color:#1A2B45;line-height:1.55;font-family:inherit;cursor:pointer}
  .cz-opt b{color:#3A9FE8;flex-shrink:0}
  .cz-opt.on{border-color:#3A9FE8;background:#EFF7FF;color:#2F7FC1;box-shadow:0 0 0 2px rgba(58,159,232,.18) inset}
  .cz-opt.ok{border-color:#4ECB8D;background:#E6F9F0;color:#1B7A46}
  .cz-opt.bad{border-color:#FF6B6B;background:#FFEDED;color:#B93A3A}
  .gap-no{color:#5A7A96;font-weight:800;font-size:0.9em;margin-right:2px}
  .gap-ok{color:#2BB779;font-weight:800;margin:0 4px}
  .gap-bad{color:#E5484D;font-weight:800;margin:0 4px}
  .gap-ans{color:#1B7A46;font-weight:800;margin-right:6px}
  .gap-exp{border:1px solid #CFE3F4;background:#F5FAFF;color:#2F7FC1;font-size:0.72em;font-weight:800;border-radius:999px;padding:2px 8px;cursor:pointer;font-family:inherit;vertical-align:middle}
  .gap-exp:hover{background:#EAF5FF}
  .gapopt{display:flex;gap:8px;align-items:flex-start;width:100%;text-align:left;padding:8px 10px;border:1.5px solid #DCEAF5;background:#fff;border-radius:12px;font-size:0.85em;color:#1A2B45;line-height:1.6;font-family:inherit;cursor:default;margin-bottom:8px}
  .gapopt.pick{cursor:pointer}
  .gapopt.pick:hover{border-color:#3A9FE8;background:#EFF7FF}
  .gapopt b{color:#3A9FE8;flex-shrink:0}
  .opt-src-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}
  .opt-src-wrap .opt{margin-bottom:0;flex:1;min-width:0}
  .rd-src-btn{flex-shrink:0;border:1px solid #CFE3F4;background:#F5FAFF;color:#2F7FC1;font-size:0.78em;font-weight:800;border-radius:999px;padding:7px 11px;cursor:pointer;font-family:inherit;white-space:nowrap}
  .rd-src-btn:hover{background:#EAF5FF;border-color:#A8D4F5}
  .rd-src-hi{background:#FFF3B0 !important;border-radius:6px;box-shadow:inset 0 -2px 0 #FFD34D;transition:background .18s}
  .q-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
  .q-nav .count{font-size:0.8em;font-weight:700;color:#9DBCDB}
  .read-modal{max-width:520px}
  .analysis-grid{display:grid;gap:10px}
  .analysis-grid .item{background:#F5FAFF;border-radius:10px;padding:10px 12px}
  .analysis-grid .item b{display:block;font-size:0.8em;color:#2F7FC1;margin-bottom:4px}
  .analysis-grid .item div{font-size:0.867em;color:#1A2B45;line-height:1.6}
  .draw-tools{position:fixed;left:10px;bottom:110px;z-index:160;background:#fff;border-radius:16px;box-shadow:0 10px 30px rgba(0,0,0,.28);padding:10px;display:flex;flex-direction:column;gap:8px;width:250px;max-height:calc(100vh - 150px);overflow:auto;box-sizing:border-box}
  .draw-tools .draw-drag-handle{display:flex;align-items:center;justify-content:center;gap:6px;height:28px;border-radius:9px;background:#F2EDFB;color:#5A4E86;font-size:12px;font-weight:800;cursor:grab;user-select:none;touch-action:none;flex:0 0 auto}
  .draw-tools .draw-drag-handle:active{cursor:grabbing}
  .draw-tools .dt-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
  .draw-tools button{flex:1;min-width:0;border:1px solid #E5E0F2;border-radius:10px;background:#FAF8FF;color:#5A4E86;font-size:12px;font-weight:800;padding:7px 4px;cursor:pointer;font-family:inherit;line-height:1.1}
  .draw-tools button.on{background:#9B7FE8;border-color:#9B7FE8;color:#fff}
  .draw-tools .sw{width:22px;height:22px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #D9D0F0;cursor:pointer;flex:0 0 auto}
  .draw-tools .sw.on{box-shadow:0 0 0 2px #9B7FE8}
  .draw-tools .draw-color-wheel{width:34px;height:34px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #D9D0F0;background:conic-gradient(#FF6B6B,#FFCA3A,#4ECB8D,#3A9FE8,#9B7FE8,#E872C0,#FF6B6B);cursor:pointer;flex:0 0 auto}
  .draw-tools .draw-color-value{font-size:11px;font-weight:800;color:#5A4E86;max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .draw-tools .dp-box{display:flex;flex-direction:column;gap:6px;padding:8px;border:1px solid #F1D9F0;border-radius:12px;background:#FFF9FE}
  .draw-tools .dp-row{display:grid;grid-template-columns:74px 1fr 40px;gap:6px;align-items:center;font-size:11px;font-weight:700;color:#5A4E86}
  .draw-tools .dp-row input[type=range]{width:100%;margin:0}
  .draw-tools .dp-row output{text-align:right;color:#9B7FE8;font-weight:800}
  .draw-tools .dp-flag{flex:1;min-width:0;border:1px solid #E5E0F2;border-radius:10px;background:#FAF8FF;color:#5A4E86;font-size:11px;font-weight:800;padding:6px 4px;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;gap:4px}
  .draw-tools .dp-flag.on{background:#9B7FE8;border-color:#9B7FE8;color:#fff}
  #drawCanvas{position:fixed;inset:0;width:100%;height:100%;z-index:150;pointer-events:none;display:none;touch-action:none}
  #drawCanvas.on{display:block;pointer-events:auto;cursor:url('pen-cursor.svg') 12 12, crosshair}
  .draw-typing{position:fixed;z-index:170;background:rgba(255,255,255,.92);border:1px dashed #9B7FE8;border-radius:6px;padding:2px 5px;font-family:inherit;font-size:16px;outline:none;min-width:60px;max-width:80vw;color:#1A2B45;box-shadow:0 4px 14px rgba(0,0,0,.15);white-space:pre}
  .pic-book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:12px}
  .pic-book-card{display:flex;flex-direction:column;gap:8px;border:none;background:#fff;border-radius:18px;padding:10px 10px 12px;cursor:pointer;box-shadow:0 6px 18px rgba(210,120,180,.14);font-family:inherit;text-align:left}
  .pic-book-cover{position:relative;height:132px;border-radius:12px;overflow:hidden;display:flex;align-items:center;justify-content:center}
  .pic-book-cover .pic-book-emoji{position:absolute;font-size:34px;filter:drop-shadow(0 4px 8px rgba(0,0,0,.18))}
  .pic-book-name{font-size:13px;font-weight:800;color:#5B2B4E;line-height:1.35}
  .pic-book-meta{font-size:11px;font-weight:700;color:#C57BA8}
  .pic-stage-wrap{flex:1;display:flex;padding:0 12px;min-height:0}
  .pic-stage{position:relative;flex:1;min-height:0;border-radius:16px;background-color:#fff;overflow:hidden;box-shadow:0 6px 20px rgba(180,90,140,.16);touch-action:none;cursor:default}
  .pic-stage.panning{cursor:grabbing}
  .pic-canvas{position:absolute;inset:0;transform-origin:center center;background-size:contain;background-position:center;background-repeat:no-repeat;touch-action:none}
  .pic-stage .pic-empty{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#C57BA8;font-size:14px;font-weight:700;pointer-events:none}
  .pic-text{position:absolute;transform:translate(-50%,-50%);padding:4px 9px;background:rgba(20,42,68,.5);border-radius:8px;font-weight:800;line-height:1.35;text-shadow:0 1px 3px rgba(0,0,0,.25);cursor:pointer;user-select:none;touch-action:none;box-sizing:border-box;max-width:92%;pointer-events:auto}
  .pic-text.pic-text-ghost{background:transparent;color:transparent;text-shadow:none;border:none;padding:6px 10px}
  .pic-text.pic-hit{background:transparent;color:transparent;text-shadow:none;border:none;box-shadow:none;padding:0;border-radius:2px;cursor:pointer!important;pointer-events:auto;z-index:6}
  .pic-text.pic-sentence{display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.78);border:1.5px solid #6EC5F5;border-radius:8px;color:#1A2B45;text-shadow:none;padding:2px 6px;overflow:hidden;transition:transform .16s ease,box-shadow .16s ease;z-index:6}
  .pic-text.pic-sentence.playing{transform:translate(-50%,-50%) scale(1.1);border-color:#3A9FE8;box-shadow:0 6px 18px rgba(58,159,232,.35);z-index:8}
  .pic-sentence-doc{display:flex;flex-direction:column;gap:12px;padding:14px 0}
  .pic-sentence-chip{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:12px 14px;border:1.5px solid #D7EEFB;border-radius:14px;background:#fff;color:#1A2B45;font-size:17px;font-weight:800;line-height:1.5;text-align:left;cursor:pointer;font-family:inherit;box-shadow:0 3px 12px rgba(180,90,140,.08);transition:transform .16s ease,border-color .16s ease,box-shadow .16s ease}
  .pic-sentence-chip:hover{border-color:#6EC5F5}
  .pic-sentence-chip.playing{transform:scale(1.1);border-color:#3A9FE8;box-shadow:0 6px 18px rgba(58,159,232,.28);z-index:2}
  .pic-sentence-chip-text{flex:1}
  .pic-sentence-chip-play{width:30px;height:30px;border-radius:50%;background:#EAF6FF;color:#3A9FE8;display:flex;align-items:center;justify-content:center;flex:0 0 auto;font-size:14px}
  .pic-pdf-workspace{flex:1;display:flex;gap:10px;min-height:0;padding:0 12px 12px}
  .pic-pdf-scroll{flex:1;overflow:auto;padding:10px 12px;min-height:0;background:#F4E7EF;border-radius:14px;touch-action:pan-x pan-y;overscroll-behavior:contain}
  .pic-pdf-viewer{min-height:100%;display:flex;align-items:flex-start;justify-content:center}
  .pic-pdf-loading{min-height:320px;display:flex;align-items:center;justify-content:center;color:#B23B8C;font-size:14px;font-weight:800}
  .pic-pdf-page{position:relative;margin:0 auto;background:#fff;box-shadow:0 6px 22px rgba(120,50,95,.22)}
  .pic-pdf-page canvas{display:block;width:100%;height:100%}
  .pic-pdf-draw-canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:2;pointer-events:none;touch-action:none}
  .pic-pdf-draw-canvas.on{pointer-events:auto;z-index:6;cursor:url('pen-cursor.svg') 12 12, crosshair}
  .pic-pdf-page.draw-on .pic-pdf-box-layer{pointer-events:none}
  .pic-pdf-text-layer{position:absolute;inset:0;overflow:hidden;line-height:1;color:transparent;user-select:none;cursor:default;pointer-events:none;transform-origin:0 0}
  .pic-pdf-text-layer span{position:absolute;white-space:pre;color:transparent;cursor:text;transform-origin:0 0;user-select:text}
  .pic-pdf-text-layer ::selection{background:rgba(58,159,232,.30)}
  .pic-pdf-page.select-mode .pic-pdf-text-layer{pointer-events:auto;user-select:text;cursor:text}
  .pic-pdf-page.select-mode .pic-pdf-text-layer span{color:transparent;cursor:text;user-select:text}
  .pic-pdf-page.select-mode .pic-pdf-box-layer{pointer-events:none}
  .pic-pdf-page.select-mode .pic-pdf-sentence{pointer-events:none}
  .pic-pdf-box-layer{position:absolute;inset:0;overflow:hidden;pointer-events:none}
  .pic-pdf-sentence{position:absolute;border:2px solid transparent;background:transparent;border-radius:8px;cursor:pointer;pointer-events:auto;transition:border-color .16s ease,background .16s ease;z-index:5}
  .pic-pdf-sentence.playing{border-color:transparent;background:transparent;z-index:8}
  .pic-pdf-zoom-clone{position:absolute;z-index:7;border:2px solid #3A9FE8;background-color:transparent;background-repeat:no-repeat;border-radius:8px;pointer-events:none;box-shadow:0 6px 18px rgba(58,159,232,.25)}
  .pic-pdf-zoom-clone::after{content:'';position:absolute;right:-10px;top:-14px;width:28px;height:28px;background:url('bofang.svg') center/contain no-repeat;border:none;box-shadow:none}
  .pic-pdf-tools{display:flex;gap:8px;padding:10px 12px 0}
  .pic-pdf-tools .pic-nav{flex:1}
  .pic-mini-btn{display:inline-flex;align-items:center;gap:3px;padding:5px 8px;border-radius:12px;border:none;background:#fff;color:#B23B8C;font-size:11px;font-weight:800;box-shadow:0 2px 8px rgba(0,0,0,.06);cursor:pointer}
  .pic-mini-btn.on{background:#E872C0;color:#fff}
  .pic-mini-btn.draw-on{background:#3A9FE8;color:#fff}
  .pic-mini-btn.select-on{background:#E872C0;color:#fff}
  .pic-mini-btn.read-on{background:#4ECB8D;color:#fff}
  .pic-pdf-side{width:250px;flex-shrink:0;overflow-y:auto;background:#fff;border-radius:14px;box-shadow:0 4px 16px rgba(120,50,95,.08);padding:12px;color:#1A2B45;min-height:0}
  .pic-pdf-side h3{margin:0 0 10px;font-size:13px;font-weight:800;color:#B23B8C}
  .pic-side-add{display:flex;gap:6px;margin-bottom:10px}
  .pic-side-add input{flex:1;min-width:0;border:1px solid #F1C4E0;border-radius:9px;padding:7px 8px;font-size:12px;color:#1A2B45;outline:none;background:#FFF9FD}
  .pic-side-add button{border:none;border-radius:9px;background:#E872C0;color:#fff;font-size:12px;font-weight:800;padding:0 10px;cursor:pointer}
  .pic-side-item{display:flex;align-items:flex-start;gap:6px;border:1px solid #F3DCEB;border-radius:10px;padding:8px;margin-bottom:8px;background:#FFF9FD}
  .pic-side-item .w{font-weight:800;color:#1A2B45;font-size:13px}
  .pic-side-item .t{color:#7A6B7B;font-size:12px;line-height:1.35;margin-top:2px}
  .pic-side-item button{flex-shrink:0;border:none;background:#FFE9F2;color:#D4558F;width:20px;height:20px;border-radius:50%;font-size:12px;line-height:1;cursor:pointer}
  .pic-side-note{width:100%;min-height:96px;resize:vertical;border:1px solid #F1C4E0;border-radius:10px;padding:8px;font-size:12px;line-height:1.45;color:#1A2B45;background:#FFF9FD;outline:none;box-sizing:border-box;font-family:inherit}
  .pic-zoom-text{position:absolute;transform:translate(-50%,-50%);color:#1A2B45;font-weight:800;text-shadow:0 1px 2px #fff,0 0 4px #fff;pointer-events:none;z-index:6;white-space:nowrap;opacity:0;transition:opacity .25s ease}
  .pic-text.in-vocab{box-shadow:0 0 0 2px #FFCA3A;background:rgba(232,114,192,.72)}
  .pic-tools{display:flex;gap:10px;padding:12px 14px}
  .pic-zoom{display:flex;align-items:center;justify-content:center;gap:10px;padding:2px 14px 0}
  .pic-zoom-btn{min-width:40px;padding:8px 12px;border-radius:12px;border:1.5px solid #F1C4E0;background:#fff;color:#B23B8C;font-size:15px;font-weight:800;cursor:pointer;font-family:inherit}
  .pic-zoom-pct{min-width:52px;text-align:center;font-size:13px;font-weight:800;color:#B23B8C}
  .pic-tool{flex:1;padding:10px;border-radius:14px;border:1.5px solid #F1C4E0;background:#fff;color:#B23B8C;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit}
  .pic-tool.on{background:#E872C0;border-color:#E872C0;color:#fff}
  .pic-bottom{display:flex;align-items:center;gap:8px;padding:0 14px 18px}
  .pic-nav{padding:9px 10px;border-radius:12px;border:1.5px solid #F1C4E0;background:#fff;color:#B23B8C;font-size:12px;font-weight:800;cursor:pointer;font-family:inherit;white-space:nowrap}
  .pic-page-no{flex:1;text-align:center;font-size:13px;font-weight:800;color:#B23B8C}
  .pic-toc-item{display:block;width:100%;text-align:left;padding:11px 12px;border:1px solid #F3DCEB;border-radius:12px;background:#FDF7FB;color:#5B2B4E;font-size:14px;font-weight:700;margin-bottom:8px;cursor:pointer;font-family:inherit}
  @media(max-width:760px){.read-panes{flex-direction:column;overflow:auto}.read-article,.read-questions{overflow:visible}}
  @media(max-width:760px){.pic-pdf-workspace{flex-direction:column;overflow:auto}.pic-pdf-side{width:100%;max-height:44%}.pic-pdf-scroll{max-height:56%}}
  .class-timer{position:fixed;top:calc(14px + env(safe-area-inset-top,0px));right:14px;z-index:220;background:rgba(26,43,69,.94);color:#fff;font-size:12px;font-weight:800;padding:7px 12px;border-radius:999px;box-shadow:0 6px 18px rgba(0,0,0,.22);pointer-events:none;letter-spacing:.5px}

  .ipa-capsule{display:inline-flex;align-items:center;justify-content:center;min-width:74px;padding:14px 12px;border-radius:999px;border:2px solid #FFD9E8;background:#fff;color:#FF6B6B;font-size:20px;font-weight:800;cursor:pointer;box-shadow:0 6px 16px rgba(255,107,107,.10);font-family:inherit}
  .ipa-capsule.on{border-color:#FF6B6B;background:#FFF0F3;transform:scale(1.04)}
  .ipa-ph-wrap{position:relative;flex:1;min-height:0;display:flex;overflow:hidden}
  .ipa-ph-carousel{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;padding:4px 16px 8px;width:100%;height:100%;-webkit-overflow-scrolling:touch}
  .ipa-ph-page{flex:0 0 88%;scroll-snap-align:center;background:#fff;border-radius:18px;padding:14px;box-shadow:0 10px 30px rgba(30,74,114,.10);height:fit-content;max-height:100%;overflow:auto}
  .ipa-mini-video{position:absolute;top:10px;right:18px;z-index:5;width:48px;height:48px;border-radius:12px;background:#1A2B45;color:#fff;border:none;font-size:16px;font-weight:800;box-shadow:0 6px 16px rgba(0,0,0,.22);cursor:pointer;object-fit:cover}
  .ipa-nav{width:38px;height:38px;border-radius:50%;border:none;background:#FF6B6B;color:#fff;font-size:16px;font-weight:800;cursor:pointer;flex-shrink:0}
  .ipa-split-line{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:8px}
  .ipa-split-line span{font-size:12px;color:#7AAECF;font-weight:700}
  .ipa-chip{display:inline-flex;align-items:center;justify-content:center;padding:8px 10px;border-radius:12px;background:#FFEBEB;color:#FF6B6B;border:none;font-size:15px;font-weight:800;cursor:pointer}
  .ipa-phon-big{font-size:30px;font-weight:800;color:#FF6B6B;cursor:pointer;margin-top:4px}
  .ipa-quiz-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
  .ipa-quiz-opt{position:relative;padding:16px 10px;border:2px solid #FFE3E3;border-radius:14px;background:#FFF7F8;color:#FF6B6B;font-size:18px;font-weight:800;cursor:pointer;font-family:inherit}
  .ipa-quiz-play{display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:#FF6B6B;font-size:16px;cursor:pointer;margin-left:6px;vertical-align:middle}
  .ipa-lesson-layout{display:flex;flex-direction:column;gap:16px;max-width:1200px;margin:0 auto}
  .ipa-lesson-scroll{padding-left:0}
  .ipa-zone{display:flex;flex-direction:column;gap:16px;width:100%}
  .ipa-zone .card{margin-bottom:0;width:100%;border-radius:0 18px 18px 0}
  .ipa-detail-card{width:100%;min-width:0}
  @media(min-width:1000px){
    .ipa-lesson-layout{flex-direction:row;align-items:flex-start;max-width:none;margin:0}
    .ipa-zone{flex:0 0 15%;max-width:15%}
    .ipa-detail-card{flex:1;min-width:0;position:sticky;top:0}
  }
  .ipa-pick-grid{display:flex;flex-direction:column;align-items:stretch;gap:6px;padding:2px}
  .ipa-pick-btn{display:flex;flex:1 1 auto;align-items:center;justify-content:flex-start;width:100%;min-height:40px;border-radius:999px;background:#fff;font-size:16px;font-weight:800;cursor:pointer;font-family:inherit;transition:transform .12s,box-shadow .12s,border-color .12s,background .12s;padding:0 14px;border:1px solid transparent}
  .ipa-pick-btn.v{color:#FF6B6B;border-color:#F0AFC6}
  .ipa-pick-btn.v:hover{border-color:#E896B2;background:#FFF7F9}
  .ipa-pick-btn.c{color:#3A9FE8;border-color:#9FC9F0}
  .ipa-pick-btn.c:hover{border-color:#6FB7EC;background:#F2F9FF}
  .ipa-pick-btn.v.on{background:rgba(255,107,107,.14);color:#FF6B6B;border-color:rgba(232,150,178,.7)}
  .ipa-pick-btn.c.on{background:rgba(58,159,232,.14);color:#3A9FE8;border-color:rgba(63,151,232,.7)}
  .ipa-detail-card{background:#fff;border-radius:18px;box-shadow:0 6px 20px rgba(30,74,114,.1);padding:16px;min-width:0;box-sizing:border-box}
  .ipa-lesson-layout .ipa-detail-card{height:calc(100vh - 70px);min-height:340px;overflow-y:auto;scrollbar-width:none}
  .ipa-lesson-layout .ipa-detail-card::-webkit-scrollbar{display:none;width:0;height:0}
  /* 语法句型课五个页签共用：右侧白框圆角 + 标题无蓝框、上移 5%、蓝色虚线 */
  .gm-blue .ipa-lesson-layout .ipa-detail-card{border-radius:20px;box-shadow:0 6px 20px rgba(30,74,114,.1)}
  .gm-blue .ipa-detail-inner>.gm-pat-big{background:transparent!important;box-shadow:none!important;color:var(--gm-pat-color,#1E4A72)!important;border-radius:0!important;padding:6px 12px 10px!important;transform:translateY(-5%);border-bottom:2px dashed #3A9FE8!important;margin-bottom:2px}
  .gm-blue .ipa-detail-inner>.gm-pat-big .gm-pat-txt{color:var(--gm-pat-color,#1E4A72)!important}
  .gm-blue .ipa-detail-inner>.gm-pat-big .gm-pat-zh{color:#6E5AA8!important;opacity:1!important}
  .ipa-detail-inner{display:flex;flex-direction:column;gap:12px}
  /* 知识点讲解：桌面端整块固定在一屏内，左侧句型列表和右侧 PPT 各自不产生页面级滚动 */
  .gm-blue.gm-know-mode .ipa-lesson-scroll{height:100%;overflow:hidden}
  /* 只让卡片内部自适应；栏宽、间距、高度、内边距全部继承其他页签，避免切换时右边框跳动。 */
  .gm-blue.gm-know-mode .ipa-lesson-layout{height:100%;min-height:0}
  .gm-blue.gm-know-mode .ipa-zone{height:100%;min-height:0}
  .gm-blue.gm-know-mode .ipa-zone .card{flex:1;min-height:0;overflow-y:auto}
  .gm-blue.gm-know-mode #gmTabBody,.gm-blue.gm-know-mode #gmTabBody *{user-select:none!important;-webkit-user-select:none!important;-webkit-touch-callout:none!important}
  .gm-blue.gm-know-mode #gmTabBody img{pointer-events:none!important;-webkit-user-drag:none!important;user-drag:none!important}
  .gm-blue.gm-know-mode .ipa-detail-card{overflow:hidden}
  /* 知识点标题：去掉原来的蓝色渐变标题框，只保留文字，并在下方加蓝色虚线。 */
  .gm-blue.gm-know-mode .ipa-detail-inner>.gm-pat-big{background:transparent!important;box-shadow:none!important;color:var(--gm-pat-color,#1E4A72)!important;border-radius:0!important;padding:6px 12px 10px!important;transform:translateY(-5%);border-bottom:2px dashed #3A9FE8!important;margin-bottom:2px}
  .gm-blue.gm-know-mode .ipa-detail-inner>.gm-pat-big .gm-pat-txt{color:var(--gm-pat-color,#1E4A72)!important}
  .gm-blue.gm-know-mode .ipa-detail-inner>.gm-pat-big .gm-pat-zh{color:#6E5AA8!important;opacity:1!important}
  .gm-blue.gm-know-mode .ipa-detail-inner{height:100%;min-height:0}
  .gm-blue.gm-know-mode #gmTabBody{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
  .gm-blue.gm-know-mode .gm-know-viewport{position:relative;flex:1;min-height:0;width:100%;overflow:hidden;background:#DDEBF7}
  .gm-blue.gm-know-mode .gm-know-ambient{position:absolute;left:50%;top:50%;width:912px;height:513px;overflow:hidden;transform-origin:center center;filter:blur(12px) saturate(.85);opacity:.32;pointer-events:none}
  .gm-blue.gm-know-mode .gm-know-viewport #gmStage{position:absolute;left:50%;top:50%;width:912px;height:513px;max-height:none;aspect-ratio:16/9;margin:0;transform-origin:center center;z-index:2;box-shadow:0 8px 28px rgba(30,74,114,.16)}
  @media(max-width:999px){
    .gm-blue.gm-know-mode .ipa-lesson-scroll{height:100%;overflow:hidden}
    .gm-blue.gm-know-mode .ipa-lesson-layout{flex-direction:column;height:100%;gap:6px}
    .gm-blue.gm-know-mode .ipa-zone{display:block;flex:0 0 auto;width:100%;height:104px;max-height:104px}
    .gm-blue.gm-know-mode .ipa-zone .card{height:104px;padding:8px;overflow:hidden;border-radius:14px}
    .gm-blue.gm-know-mode .ipa-pick-grid{flex-direction:row;overflow-x:auto;overflow-y:hidden;padding-bottom:4px}
    .gm-blue.gm-know-mode .ipa-pick-btn{flex:0 0 auto;width:auto;min-width:126px;min-height:34px}
    .gm-blue.gm-know-mode .ipa-detail-card{flex:1;width:100%;height:auto;max-height:none;overflow:hidden}
    .gm-blue.gm-know-mode #gmTabBody{overflow:hidden}
  }
  .ipa-detail-top{display:flex;flex-direction:column;align-items:stretch;gap:12px}
  .ipa-sound-big{display:flex;align-items:center;justify-content:center;gap:8px;align-self:center;padding:16px 22px;border:none;border-radius:18px;color:#fff;font-size:30px;font-weight:800;cursor:pointer;font-family:inherit}
  .ipa-sound-big.v{background:linear-gradient(135deg,#FF6B6B,#FF9FB4);box-shadow:0 8px 22px rgba(255,107,107,.32)}
  .ipa-sound-big.c{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);box-shadow:0 8px 22px rgba(58,159,232,.32)}
  .ipa-sound-big .spk-i{font-size:16px;opacity:.9}
  .ipa-detail-acts{display:flex;flex-wrap:wrap;gap:8px}
  .ipa-tabs.v .ipa-tab{border-color:#F3CFDD;color:#C4697F}
  .ipa-tabs.v .ipa-tab:hover{border-color:#F0AFC6;background:#FFF7F9}
  .ipa-tabs.v .ipa-tab.on{background:rgba(255,107,107,.14);color:#FF6B6B;border-color:#F0AFC6}
  .ipa-tabs.c .ipa-tab{border-color:#C8E2F7;color:#3A7CB8}
  .ipa-tabs.c .ipa-tab:hover{border-color:#9FC9F0;background:#F2F9FF}
  .ipa-tabs.c .ipa-tab.on{background:rgba(58,159,232,.14);color:#3A9FE8;border-color:#9FC9F0}
  .ipa-video-box{position:relative;width:100%;min-width:0}
  .ipa-video-box video{width:90%;margin:0 auto;display:block;aspect-ratio:16/9;border-radius:14px;background:#000}
  .ipa-zoom{position:absolute;right:8px;bottom:8px;border:none;border-radius:10px;background:rgba(26,43,69,.75);color:#fff;font-size:12px;font-weight:800;padding:6px 10px;cursor:pointer;font-family:inherit}
  .ipa-no-video{flex:1;min-width:220px;min-height:120px;display:flex;align-items:center;justify-content:center;border-radius:14px;background:linear-gradient(135deg,#FFD9E8,#FFEFF2);color:#D46A85;font-size:14px;font-weight:800}
  .sent-corpus-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}
  @media(max-width:820px){.sent-corpus-grid{grid-template-columns:repeat(4,1fr)}}
  .sent-topic-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
  @media(max-width:620px){.sent-topic-grid{grid-template-columns:repeat(2,1fr)}}
  .sent-topic-card{background:#fff;border:1px solid #EFF2F6;border-radius:14px;overflow:hidden;text-align:left;cursor:pointer;font-family:inherit;padding:0;box-shadow:0 3px 12px rgba(26,43,69,.07)}
  .sent-topic-cover{position:relative;width:100%;height:94px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:900;font-size:13px;letter-spacing:.5px;overflow:hidden}
  .sent-topic-cover img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
  .sent-topic-brand{position:absolute;left:8px;bottom:6px;z-index:3;font-size:11px;font-weight:900;color:#fff;letter-spacing:.4px;text-shadow:0 1px 2px rgba(0,0,0,.3);max-width:80%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
  .sent-topic-cover:after{content:'';position:absolute;left:0;right:0;bottom:0;height:38px;background:linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.22))}
  .sent-topic-badge{position:absolute;top:6px;right:6px;z-index:3;background:rgba(0,0,0,.38);color:#fff;font-size:10px;font-weight:800;border-radius:999px;padding:2px 8px}
  .sent-topic-pill{position:absolute;top:6px;left:6px;z-index:3;font-size:10px;font-weight:800;border-radius:999px;padding:2px 8px}
  .sent-topic-body{padding:8px 10px 10px}
  .sent-topic-title{font-size:13px;font-weight:800;color:#1A2B45;line-height:1.35;margin:0 0 4px}
  .sent-topic-meta{font-size:11px;color:#7A90A6;font-weight:700;line-height:1.5}
  .ipa-tip-title,.ipa-word-title{font-size:14px;font-weight:800;color:#1A2B45}
  .ipa-tip{font-size:15px;font-weight:700;color:#8B5A34;background:#FFF6F2;border:1px solid #F6E3DC;border-radius:12px;padding:10px 12px;line-height:1.6}
  .ipa-word-row{display:flex;align-items:center;gap:10px;padding:8px;border:1px solid #F0E8F2;border-radius:12px;background:#FDFBFF;margin-bottom:8px}
  .ipa-word-row img{width:38px;height:38px;object-fit:contain;border-radius:8px;background:#fff;flex-shrink:0}
  .ipa-word-btn{border:1.5px solid;border-radius:12px;background:#fff;font-size:18px;font-weight:800;padding:6px 12px;cursor:pointer;font-family:inherit}
  .ipa-word-phon{font-size:14px;font-weight:700;color:#5A7A96}
  .ipa-tabs{display:flex;flex-wrap:wrap;gap:8px}
  .ipa-tab{padding:8px 13px;border-radius:999px;border:1px solid #D8DEE8;background:#fff;color:#5A7A96;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit}
  .ipa-tab:hover{border-color:#9FC9F0;background:#F5FAFF}
  .ipa-tab.on{background:rgba(58,159,232,.14);color:#3A9FE8;border-color:#9FC9F0}
  .ipa-tip.md{font-weight:400}
  .ipa-tip.rich p{margin:0 0 6px}
  .ipa-tip.rich ul,.ipa-tip.rich ol{margin:6px 0 6px 20px;padding:0}
  .ipa-tip.rich li{margin:2px 0}
  .ipa-tip.rich b,.ipa-tip.rich strong{font-weight:800}
  .ipa-tip.rich table{border-collapse:collapse}
  .ipa-tip.rich td,.ipa-tip.rich th{border:1px solid #F0DCD4;padding:3px 6px}
  .ipa-tip.md img{max-width:100%;border-radius:10px;margin:6px 0}
  .ipa-tip img,.ipa-tip.rich img{display:block;max-width:100%;height:auto;border-radius:10px;margin:8px auto}
  .ipa-tip .rich img{display:block}
  .ipa-quiz-q{padding:10px;border:1px solid #FFE3E3;border-radius:12px;background:#FFF9FA;margin-bottom:8px}
  .ipa-q-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
  .ipa-q-head b{font-size:14px;color:#1A2B45}
  .ipa-q-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .ipa-qopt{min-height:48px;border-radius:10px;border:1.5px solid #F2DCE0;background:#fff;color:#1A2B45;font-size:14px;font-weight:700;cursor:pointer;font-family:inherit}
  .ipa-qopt.correct{background:#E8FBF2;border-color:#4ECB8D;color:#1F9D6A}
  .ipa-qopt.wrong{background:#FFEBEB;border-color:#FF6B6B;color:#D04545}
  .ipa-wcard{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 12px;border:1px solid #F0E8F2;border-radius:14px;background:#FDFBFF;margin-bottom:10px;width:max-content;max-width:100%;box-sizing:border-box}
  .ipa-wcar{display:flex;align-items:center;justify-content:center;gap:6px;max-width:100%;margin:0 auto}
  .ipa-wmid{flex:0 1 auto;min-width:0;max-width:100%;display:flex;flex-direction:column;align-items:center}
  .ipa-warrow{flex:0 0 auto;width:44px;height:44px;border-radius:50%;border:none;background:#fff;color:#3A9FE8;font-size:26px;font-weight:800;cursor:pointer;font-family:inherit;box-shadow:0 3px 10px rgba(30,74,114,.1)}
  .ipa-warrow:hover:not(:disabled){background:#EAF6FF}
  .ipa-warrow:disabled{opacity:.3;cursor:not-allowed}
  .ipa-wword{border:none;background:none;font-size:78px;font-weight:800;cursor:pointer;font-family:inherit;padding:4px 8px;line-height:1.15;white-space:nowrap}
  .ipa-wphon{border:none;background:#FFF2F4;color:#D04545;font-size:33px;font-weight:700;border-radius:12px;padding:6px 16px;cursor:pointer;font-family:inherit}
  .ipa-wnav{display:flex;align-items:center;justify-content:center;margin-top:8px}
  .ipa-wnav span{font-size:13px;font-weight:800;color:#7A90A6;min-width:52px;text-align:center}
  .ipa-wsplit{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center;min-height:6px;margin-top:2px}
  .wsplit-lbl{font-size:11px;font-weight:800;color:#7AAECF}
  .ipa-wchip{display:inline-flex;align-items:center;justify-content:center;min-width:34px;padding:7px 10px;border-radius:999px;background:#F0F7FF;border:1px solid #CBE7FA;color:#3A9FE8;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit}
  .ipa-wchip:hover{background:#E3F2FF}
  .video-full-mask{position:fixed;inset:0;z-index:1300;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.9);padding:16px}
  .video-full-mask video{width:min(100%,900px);max-height:92vh;border-radius:14px;background:#000;box-shadow:0 20px 60px rgba(0,0,0,.5)}
  /* ===== 词汇量测试 ===== */
  .vt-lv{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:#F5FAFF;border:1px solid #E7F1FA;margin-bottom:8px}
  .vt-lv .o{width:26px;height:26px;border-radius:50%;background:#3A9FE8;color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;flex-shrink:0}
  .vt-lv .t{flex:1;min-width:0}
  .vt-lv .t b{display:block;font-size:14px;font-weight:800;color:#1A2B45}
  .vt-lv .t em{display:block;font-style:normal;font-size:11.5px;font-weight:600;color:#9DBCDB;margin-top:3px}
  .vt-lv .s{font-size:12px;font-weight:800;flex-shrink:0}
  .vt-rec{display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:14px;background:#F7FAFD;border:1px solid #EDF4FA;margin-bottom:8px;font-family:inherit;cursor:pointer}
  .vt-rec b{display:block;font-size:13.5px;font-weight:800;color:#1A2B45}
  .vt-rec em{display:block;font-style:normal;font-size:11.5px;font-weight:600;color:#9DBCDB;margin-top:2px}
  .vt-qcard{background:#fff;border-radius:22px;padding:30px 20px;text-align:center;box-shadow:0 6px 22px rgba(58,159,232,.09);cursor:pointer;margin-bottom:16px}
  .vt-qcard .w{font-size:40px;font-weight:800;color:#1A2B45;line-height:1.2;word-break:break-word}
  .vt-qcard .p{font-size:15px;font-weight:600;color:#9DBCDB;margin-top:8px}
  .vt-qcard .tip{display:flex;align-items:center;justify-content:center;gap:5px;font-size:12px;font-weight:700;color:#9DBCDB;margin-top:12px}
  .vt-opts{display:flex;flex-direction:column;gap:10px}
  .vt-opt{display:flex;align-items:center;gap:12px;padding:15px 16px;border-radius:16px;background:#fff;border:1.5px solid #E7F1FA;text-align:left;cursor:pointer;font-family:inherit;box-shadow:0 2px 10px rgba(0,0,0,.04)}
  .vt-opt:active{border-color:#3A9FE8;background:#F4FAFF}
  .vt-opt .k{width:26px;height:26px;border-radius:50%;background:#EAF4FD;color:#3A9FE8;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;flex-shrink:0}
  .vt-opt .v{flex:1;min-width:0;font-size:15px;font-weight:700;color:#1A2B45;line-height:1.4}
  .vt-skip{margin-top:14px;width:100%;padding:14px;border-radius:16px;border:1.5px dashed #CFE3F4;background:#FBFDFF;color:#5A7A96;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit}
  .vt-badge{display:inline-block;padding:5px 16px;border-radius:999px;font-size:13px;font-weight:800}
  .vt-grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;text-align:center}
  .vt-grid4 b{display:block;font-size:20px;font-weight:800}
  .vt-grid4 span{display:block;font-size:11.5px;font-weight:700;color:#9DBCDB;margin-top:2px}
  .vt-path{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed #EDF4FA}
  .vt-path:last-child{border-bottom:none}
  .vt-path .lv{flex:1;min-width:0;font-size:13px;font-weight:800;color:#1A2B45}
  .vt-path .rs{font-size:12px;font-weight:700;color:#5A7A96}
  .vt-path .st{font-size:12px;font-weight:800}
  .vt-report-hero{text-align:center;background:linear-gradient(160deg,#F2F9FF,#EAF4FD)}
  .vt-report-hero .lbl{font-size:12px;font-weight:800;color:#5A9EC8;margin:0}
  .vt-report-hero .big{font-size:52px;font-weight:800;color:#3A9FE8;line-height:1.15;margin:4px 0 2px}
  .vt-report-hero .lv{font-size:12.5px;font-weight:700;color:#5A7A96;margin:0}
  .vt-tb{width:100%;border-collapse:collapse;font-size:13px}
  .vt-tb th{padding:9px 10px;text-align:left;font-size:12px;font-weight:800;color:#5A9EC8;border-bottom:1px solid #EDF4FA}
  .vt-tb td{padding:9px 10px;font-weight:600;color:#1A2B45;border-bottom:1px dashed #F0F6FB}
  .table-wrap{overflow-x:auto}

  /* ===== 抗遗忘复习反馈 ===== */
  .rvmod-tile{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center}
  .rvmod-tile svg{width:100%;height:100%;display:block}
  .rvmod-ic{width:20px;height:20px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center}
  .rvmod-ic svg{width:100%;height:100%;display:block}
  .af-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin:2px 0 12px}
  .af-date{font-size:12.5px;font-weight:700;color:#7AA6C6}
  .af-brand{text-align:right}
  .af-brand b{display:block;font-size:12px;font-weight:800;color:#3A9FE8}
  .af-brand em{display:block;font-style:normal;font-size:16px;font-weight:800;color:#1A2B45;margin-top:2px}
  .af-card{background:#fff;border-radius:20px;padding:16px;box-shadow:0 4px 16px rgba(58,159,232,.08);margin-bottom:12px}
  .af-row.wrong{background:#FFF3F3}
  .af-row.wrong .en{color:#C0392B}
  .gm-fb-group{margin-top:10px}
  .gm-fb-kind{font-size:12px;font-weight:800;color:#7A5FC0;margin:2px 0 4px}
  .gm-fb-row{align-items:flex-start}
  .gm-fb-txt{flex:1;min-width:0;font-size:13px;font-weight:700;color:#1A2B45;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}
  .af-row.wrong .gm-fb-txt{color:#C0392B}
  .af-title{font-size:14px;font-weight:800;color:#3A9FE8;margin:0 0 6px}
  .af-stu{display:flex;align-items:center;gap:12px;margin-bottom:14px}
  .af-stu .av{width:52px;height:52px;border-radius:50%;overflow:hidden;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#EAF3FA;color:#3A9FE8;font-size:18px;font-weight:800}
  .af-stu .info{flex:1;min-width:0}
  .af-stu .nm{font-size:16px;font-weight:800;color:#1A2B45}
  .af-stu .mt{font-size:12px;font-weight:700;color:#9DBCDB;margin-top:3px}
  .af-teacher{font-size:12px;font-weight:700;color:#5A7A96;flex-shrink:0;text-align:right}
  .af-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
  .af-stat{background:#F5FAFF;border-radius:14px;padding:12px 4px;text-align:center}
  .af-stat b{display:block;font-size:16px;font-weight:800;color:#3A9FE8;white-space:nowrap}
  .af-stat span{display:block;font-size:11px;font-weight:700;color:#7AA6C6;margin-top:3px}
  .af-stat.on{background:#EAF7F1}
  .af-stat.on b{color:#2BB779}
  .af-row{display:flex;align-items:center;gap:8px;padding:11px 0;border-bottom:1px dashed #EDF4FA}
  .af-row:last-child{border-bottom:none}
  .af-row .en{font-size:17px;font-weight:800;color:#1A2B45}
  .af-row .cn{flex:1;min-width:0;font-size:13px;font-weight:600;color:#5A7A96}
  .af-row .times{font-size:11.5px;font-weight:800;color:#FF6B6B;background:#FFF1F0;border-radius:999px;padding:3px 9px;flex-shrink:0}
  .af-empty{text-align:center;padding:26px 12px;font-size:14px;font-weight:800;color:#2BB779}
  .af-bar{display:flex;gap:8px;padding:10px 16px calc(12px + env(safe-area-inset-bottom,0px))}
  .af-btn{flex:1;padding:12px 4px;font-size:13px;font-weight:800;border-radius:14px;background:#fff;color:#3A9FE8;border:1.5px solid #CFE3F4;box-shadow:none}
  .af-btn-primary{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;border:none;box-shadow:0 8px 24px rgba(58,159,232,.4)}

  /* 手机横屏提示（学生进非单词课程、且手机还竖着的时候） */
  #lqRotateHint{position:fixed;left:50%;bottom:14px;transform:translateX(-50%);z-index:2147482500;display:none;
    background:rgba(30,74,114,.94);color:#fff;font-size:12px;font-weight:800;padding:9px 14px;border-radius:999px;
    box-shadow:0 6px 18px rgba(30,74,114,.32);align-items:center;gap:8px;white-space:nowrap}
  body.lq-need-landscape #lqRotateHint{display:flex}
  #lqRotateHint .ic{font-size:15px;display:inline-block;animation:lqRot .9s ease-in-out infinite alternate}
  @keyframes lqRot{from{transform:rotate(0)}to{transform:rotate(90deg)}}

  /* 同屏互动：对方的鼠标（远端光标 + 悬停高亮） */
  #rtcCursor{position:fixed;left:0;top:0;z-index:2147483000;pointer-events:none;display:none;will-change:transform}
  #rtcCursor .rtc-curdot{width:12px;height:12px;border-radius:50%;background:#E8724C;box-shadow:0 0 0 2.5px rgba(255,255,255,.95),0 3px 8px rgba(0,0,0,.35);transform:translate(-50%,-50%)}
  #rtcCursor .rtc-curlbl{position:absolute;left:11px;top:11px;font-size:10px;font-weight:800;color:#fff;background:#E8724C;padding:1px 6px;border-radius:8px;white-space:nowrap;box-shadow:0 2px 6px rgba(0,0,0,.25)}

  /* ===== 句型课 · 21 天抗遗忘（四个板块用页签切换，不再并排挤成一排）===== */
  .gm-af-tabs{display:flex;gap:8px;padding:0 2px 10px;overflow-x:auto;flex-shrink:0}
  .gm-af-tab{flex:1 1 0;min-width:76px;padding:9px 10px;border-radius:12px;border:1px solid #E4DAF7;background:#fff;color:#6C5A99;font-weight:800;font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap}
  .gm-af-tab.on{background:#9B7FE8;border-color:#9B7FE8;color:#fff;box-shadow:0 4px 12px rgba(155,127,232,.35)}
  .gm-af-wrap{overflow:visible;background:#fff;border:1px solid #E4DAF7;border-radius:16px;box-shadow:0 4px 16px rgba(80,55,150,.06)}
  .gm-af-grid{display:block;min-width:0}
  .gm-af-random{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:7px 14px;border-radius:999px;border:1px solid #E4DAF7;background:#F4F0FF;color:#6A51C9;font-size:12px;font-weight:800;font-family:inherit;white-space:nowrap;cursor:pointer;box-shadow:0 2px 8px rgba(155,127,232,.2)}
  .gm-af-random:active{transform:scale(.97)}
  .gm-af-rec{padding:9px 12px;background:#FAF8FF;border-top:1px solid #E4DAF7;border-bottom:1px solid #E4DAF7;font-size:12px;font-weight:800;color:#6C5A99}
  .gm-af-cell{padding:10px 12px;border-bottom:1px solid #EEE8FA;min-width:0}
  .gm-af-item{background:#FCFBFF;border:1px solid #ECE6FA;border-radius:10px;padding:9px 10px;margin-bottom:7px}
  .gm-af-item:last-child{margin-bottom:0}
  .gm-af-line{display:flex;align-items:flex-start;gap:10px}
  .gm-af-main{flex:1;min-width:0}
  .gm-af-prompt{display:block;width:100%;border:none;background:none;padding:0;text-align:left;font-family:inherit;cursor:pointer;color:#2A3150;font-size:15px;font-weight:800;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}
  .gm-af-prompt:hover{color:#6E4DC2}
  .gm-af-answer{margin-top:6px;padding-top:6px;border-top:1px dashed #DED3F5;color:#6C4BB5;font-size:15px;font-weight:800;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}
  .gm-af-sub{font-size:11px;color:#9A8AB7;font-weight:700;margin-bottom:4px}
  .gm-af-empty{font-size:12px;color:#A99ABF;font-weight:700;padding:7px 0}
  .gm-af-ops{display:flex;align-items:center;gap:6px;margin-top:0;flex-wrap:nowrap;flex-shrink:0}
  .gm-af-ops .wbtn{position:static;transform:none;width:32px;height:32px;min-width:32px;padding:0}
  .gm-af-ops .wbtn svg{width:18px;height:15px}
  .gm-af-speak{border:1px solid #D8CBF1;background:#F5F0FF;color:#6C4BB5;border-radius:7px;padding:3px 6px;font-size:11px;font-weight:800;cursor:pointer;font-family:inherit}
  .gm-af-rec-title{white-space:pre-wrap}

  /* 实时课堂：两个摄像头贴着界面最右边、上下排列；尺寸仍是原 390px 的 90% 那一版
     —— 直角、底色跟系统主题一致，右边让出去的位置由 body 的 padding-right 补上 */
  body.rtc-docked{padding-right:var(--rtc-dock-w,0px)}
  body.rtc-docked .app{border-radius:0}
  #rtcDock{--rtc-frame-w:min(184px,46vw);
    position:fixed;right:0;top:10px;z-index:2147482000;border-radius:0;
    width:calc(var(--rtc-frame-w) + 12px);
    background-color:#B3EFFF;background-image:linear-gradient(180deg,#B3EFFF 0%,#CDEFFE 32%,#E9F8FF 66%,#FAFEFF 100%);
    box-shadow:-6px 0 16px rgba(30,74,114,.16)}
  #rtcDock.big{--rtc-frame-w:min(352px,56vw)}
  #rtcDock .rtc-vrow{display:flex;flex-direction:column;gap:6px;padding:6px 6px 0}
  #rtcDock .rtc-cell{position:relative;width:var(--rtc-frame-w);background-color:#CDEFFE;overflow:hidden;border-radius:0}
  #rtcDock .rtc-cell::before{content:'';display:block;padding-top:56.25%}
  #rtcDock video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:transparent;border-radius:0}
  #rtcDock .rtc-tag{position:absolute;left:0;bottom:0;z-index:2;font-size:10px;font-weight:800;color:#1E4A72;background:rgba(255,255,255,.72);padding:1px 6px;border-radius:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #rtcDock .rtc-state{position:absolute;left:0;top:0;z-index:2;max-width:88%;font-size:10px;font-weight:800;color:#1E4A72;background:rgba(255,255,255,.82);padding:2px 5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-radius:0}
  #rtcDock .rtc-bar{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:6px}
  #rtcDock .rtc-bar .mini-btn{background:#fff;color:#2B6CB0;border-radius:0;padding:6px 4px;font-size:11px;box-shadow:0 2px 8px rgba(30,74,114,.12);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #rtcDock .rtc-bar .mini-btn.off{opacity:.45}
  #rtcDock .rtc-bar .mini-btn.rec{background:#E8724C;color:#fff;opacity:1}
  /* 手机这种窄屏：摄像头框再小一点、按钮竖排，别把上课内容挤没了 */
  @media (max-width:560px){
    #rtcDock{--rtc-frame-w:min(130px,37vw)}
    #rtcDock .rtc-bar{grid-template-columns:1fr}
    #rtcDock .rtc-bar .mini-btn{font-size:10px;padding:5px 3px}
  }

  /* 只有最外层「网页外壳」是直角；里面的卡片、按钮、头像等全部保持原来的样子 */
  .app,.shell{border-radius:0 !important}

  /* 学员端：界面文字一律不可长按选中/复制（避免点单词发音时弹出复制菜单、
     也避免学员直接复制题目答案）。输入框、可编辑区、放大镜选题模式例外。 */
  body.stu-ui, body.stu-ui *{
    -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none;
    -webkit-touch-callout:none;
  }
  body.stu-ui input, body.stu-ui textarea, body.stu-ui [contenteditable="true"],
  body.stu-ui .pic-pdf-text-layer.select-on, body.stu-ui .pic-pdf-page.select-mode .pic-pdf-text-layer,
  body.stu-ui .pic-pdf-page.select-mode .pic-pdf-text-layer span{
    -webkit-user-select:text; -moz-user-select:text; -ms-user-select:text; user-select:text;
    -webkit-touch-callout:default;
  }

  /* ===== 语法·句型 课件（PPT）学习页 ===== */
  .gm-stage{position:relative;width:100%;aspect-ratio:16/9;background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 6px 22px rgba(78,61,130,.14);container-type:inline-size}
  .gm-legacy{position:absolute;left:8%;right:8%;top:20%;font-size:17px;font-size:1.864035cqw;line-height:1.9;color:#33475B;text-align:center}
  .gm-el{position:absolute;overflow:hidden}
  .gm-tx{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;padding:4px 6px;padding:0.438596cqw 0.657895cqw;line-height:1.5;white-space:pre-wrap;border-radius:4px;border-radius:0.438596cqw;overflow:hidden}
  .gm-art{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;font-weight:900;letter-spacing:1px;letter-spacing:0.109649cqw;-webkit-background-clip:text;background-clip:text;color:transparent;white-space:pre-wrap;text-align:center}
  .gm-table{width:100%;height:100%;border-collapse:collapse;table-layout:fixed}
  .gm-table td{border:1px solid #B9CFE4;border-width:0.109649cqw;padding:2px 5px;padding:0.219298cqw 0.548246cqw;font-size:13px;font-size:1.425439cqw;line-height:1.4;vertical-align:middle;overflow:hidden;word-break:break-word}
  .gm-img{width:100%;height:100%;display:block}
  .gm-media{width:100%;height:100%;background:#000;display:block}
  .gm-audio{display:flex;align-items:center;gap:6px;gap:0.657895cqw;width:100%;height:100%;padding:0 6px;padding:0 0.657895cqw;background:#F2F8FE;border:1px solid #CFE3F4;border-width:0.109649cqw;border-radius:6px;border-radius:0.657895cqw}
  .gm-audio audio{flex:1;height:26px;height:2.850877cqw}
  .gm-shp{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative}
  .gm-shp-round{border-radius:10px;border-radius:1.096491cqw}
  .gm-shp-circle,.gm-shp-ellipse{border-radius:50%}
  .gm-shp-triangle::before,.gm-shp-diamond::before,.gm-shp-arrow::before,.gm-shp-chevron::before,.gm-shp-star::before{content:'';position:absolute;inset:0;background:var(--fill,#E8F3FF)}
  .gm-shp-triangle::before{clip-path:polygon(50% 0,100% 100%,0 100%)}
  .gm-shp-diamond::before{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}
  .gm-shp-arrow::before{clip-path:polygon(0 35%,60% 35%,60% 0,100% 50%,60% 100%,60% 65%,0 65%)}
  .gm-shp-chevron::before{clip-path:polygon(0 0,75% 0,100% 50%,75% 100%,0 100%,25% 50%)}
  .gm-shp-star::before{clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)}
  .gm-shp-cloud{border-radius:50%;background:var(--fill,#E8F3FF)}
  .gm-shp-callout{border-radius:8px;border-radius:0.877193cqw;background:var(--fill,#E8F3FF)}
  .gm-shp-line{height:0;border-top:3px solid #3A9FE8;border-top-width:0.328947cqw;align-self:center;width:100%}
  .gm-shp-tx{position:relative;z-index:2;font-size:15px;font-size:1.644737cqw;font-weight:700;color:#20476B;text-align:center;padding:2px 6px;padding:0.219298cqw 0.657895cqw;white-space:pre-wrap}
  .gm-icon{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:min(6.4vw,44px);font-size:4.824561cqw;line-height:1}
  .gm-link{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:17px;font-size:1.864035cqw;font-weight:800;text-decoration:underline}
  .gm-mm{display:flex;align-items:center;gap:10px;gap:1.096491cqw;width:100%;height:100%;padding:6px;padding:0.657895cqw}
  .gm-mm-r{flex:0 0 34%;background:linear-gradient(135deg,#3A9FE8,#6EC5F5);color:#fff;font-weight:800;font-size:15px;font-size:1.644737cqw;padding:10px;padding:1.096491cqw;border-radius:10px;border-radius:1.096491cqw;text-align:center}
  .gm-mm-list{flex:1;display:flex;flex-direction:column;gap:6px;gap:0.657895cqw}
  .gm-mm-b{position:relative;background:#EAF5FF;border:1px solid #B9D9F2;border-width:0.109649cqw;border-radius:8px;border-radius:0.877193cqw;padding:7px 10px;padding:0.767544cqw 1.096491cqw;font-size:14px;font-size:1.535088cqw;font-weight:700;color:#2F5C7D}
  .gm-mm-b::before{content:'';position:absolute;left:-10px;left:-1.096491cqw;top:50%;width:10px;width:1.096491cqw;height:1px;background:#9CC9EC}
  /* 上方四个浅蓝胶囊按钮：未选中=白底蓝边框，选中=透明浅蓝 */
  .gm-pills{flex-shrink:0;display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:0 clamp(12px,3.5vw,20px) 10px}
  .gm-pill{height:40px;border-radius:999px;border:1.5px solid #9CC9EC;background:#fff;color:#2F7FC1;font-size:13px;font-weight:800;font-family:inherit;cursor:pointer;padding:0 4px;transition:background .15s,color .15s}
  .gm-pill.on{background:rgba(58,159,232,.14);border-color:#7FB9E8;color:#1E4A72}
  .gm-body{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}
  /* 右下角两个小圆箭头 */
  .gm-arrows{position:absolute;right:12px;bottom:14px;display:flex;align-items:center;gap:8px;z-index:6}
  .gm-arrowhint{font-size:11px;font-weight:800;color:#8C7DB6;background:rgba(255,255,255,.82);padding:3px 9px;border-radius:999px}
  .gm-arrow{width:34px;height:34px;border-radius:50%;border:1.5px solid #9CC9EC;background:#fff;color:#2F7FC1;font-size:16px;line-height:1;font-family:inherit;cursor:pointer;box-shadow:0 4px 12px rgba(58,159,232,.18);display:flex;align-items:center;justify-content:center;padding:0}
  .gm-arrow[disabled]{opacity:.32}
  .gm-arrow:active{background:rgba(58,159,232,.16)}
  .gm-card{background:#fff;border-radius:20px;padding:22px 16px;box-shadow:0 4px 16px rgba(78,61,130,.1);margin-bottom:12px}
  .gm-pat{color:#1A2B45;font-weight:800;word-break:break-word}
  /* 后台句型编辑支持回车换行：所有句型相关文本按原样保留换行和连续空格。 */
  .gm-pat,.gm-pat-txt,.gm-pat-big,.gm-pat-zh,.gm-ex-en,.gm-ex-zh,.gm-q-t,.gm-q-a,.gm-reveal,.gm-opt,.gm-sent .en,.gm-sent .zh,.gm-dzh,.gm-dbody{white-space:pre-wrap;overflow-wrap:anywhere}
  .gm-pat-zh{font-size:17px;font-weight:800;color:#6E5AA8;text-align:center;margin-top:14px;line-height:1.7}
  /* 句型标题：中文和句型在同一个框里（句型在左、中文在右，字体与句型一致） */
  .gm-pat-big{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap}
  .gm-pat-txt{min-width:0;word-break:break-word}
  .gm-pat-big .gm-pat-zh{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;color:#fff;opacity:.94;margin:0;text-align:left}
  .gm-blue .gm-pat-big .gm-pat-zh{color:#fff}
  .gm-tip{font-size:12px;font-weight:700;color:#B3A3D6;text-align:center;margin-top:10px}
  .gm-ex{border-top:1px dashed #EDE6FA;padding:12px 2px;cursor:pointer}
  .gm-ex:first-child{border-top:none}
  .gm-ex-en{color:#1A2B45;font-weight:800;word-break:break-word}
  .gm-ex-zh{font-size:16px;font-weight:700;color:#6E5AA8;text-align:center;margin-top:8px;line-height:1.7}
  .gm-q{border-top:1px dashed #EDE6FA;padding:12px 2px}
  .gm-q:first-child{border-top:none}
  .gm-q-t{font-size:15px;font-weight:800;color:#1A2B45;line-height:1.7;margin-bottom:8px}
  .gm-blank{width:100%;height:42px;border:1.5px solid #CFE3F4;border-radius:12px;padding:0 12px;font-size:15px;font-family:inherit;color:#1A2B45;background:#F8FCFF}
  .gm-blank:focus{outline:none;border-color:#3A9FE8;background:#fff}
  .gm-q-a{margin-top:8px;font-size:13px;font-weight:800;color:#E5484D}
  .gm-q-a.ok{color:#2BB779}
  .gm-opt{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:1.5px solid #DCE6F0;background:#fff;border-radius:12px;padding:9px 12px;margin-bottom:7px;font-size:14px;font-weight:700;color:#2F5C7D;font-family:inherit;cursor:pointer}
  .gm-opt b{color:#3A9FE8}
  .gm-opt.on{background:rgba(58,159,232,.14);border-color:#7FB9E8}
  .gm-opt.ok{background:#E8F8EF;border-color:#4ECB8D}
  .gm-opt.bad{background:#FFEFEF;border-color:#FF9B9B}
  .gm-pat-big{display:block;width:100%;padding:16px 18px;border:none;border-radius:18px;color:#fff;font-weight:800;cursor:pointer;font-family:inherit;background:linear-gradient(135deg,#9B7FE8,#C5AAFF);box-shadow:0 8px 22px rgba(155,127,232,.3);word-break:break-word}
  .gm-pat-big:active{filter:brightness(.96)}
  .gm-pick{justify-content:flex-start;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-color:#D9CCF5;color:#6E5AA8}
  .gm-pick:hover{background:#F7F3FF;border-color:#B9A3EC}
  .gm-pick.on{background:rgba(155,127,232,.16);border-color:#B9A3EC;color:#5B45A0}
  .gm-dtop{flex-shrink:0;display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 clamp(12px,3.5vw,20px) 10px}
  .gm-dtab{height:40px;border-radius:999px;border:1.5px solid #9CC9EC;background:#fff;color:#2F7FC1;font-size:14px;font-weight:800;font-family:inherit;cursor:pointer}
  .gm-dtab.on{background:rgba(58,159,232,.14);border-color:#7FB9E8;color:#1E4A72}
  .gm-cehead{margin:12px 4px 8px;font-size:12px;font-weight:800;color:#8C7DB6}
  .gm-drow{display:flex;align-items:center;gap:10px;background:#fff;border-radius:16px;padding:12px 14px;margin-bottom:10px;box-shadow:0 3px 12px rgba(78,61,130,.08)}
  .gm-dbody{flex:1;min-width:0}
  .gm-dzh{margin-top:6px;color:#6E5AA8}
  .gm-dbtns{display:flex;gap:8px;flex:0 0 auto}
  .gm-dbtn{width:44px;height:44px;border-radius:50%;border:1.5px solid #D8DEE8;background:#fff;font-size:19px;font-weight:900;color:#B3C0CE;cursor:pointer;font-family:inherit;line-height:1;padding:0}
  .gm-dbtn.ok.on{background:#2BB779;border-color:#2BB779;color:#fff}
  .gm-dbtn.bad.on{background:#E5484D;border-color:#E5484D;color:#fff}
  .gm-dbar{flex-shrink:0;display:flex;align-items:center;gap:10px;padding:10px clamp(12px,3.5vw,20px) calc(12px + env(safe-area-inset-bottom,0px));background:#fff;border-top:1px solid #EFE7FB;font-size:14px;font-weight:800;color:#4E3D82}
  .gm-dbar b{color:#9B7FE8;font-size:18px}
  .gm-dbar span{flex:1;font-size:12px;font-weight:700;color:#8C7DB6}
  .gm-spk{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:32px;height:32px;border-radius:50%;border:1.5px solid #CFE3F4;background:#F5FAFF;font-size:15px;cursor:pointer;line-height:1;padding:0;font-family:inherit}
  .gm-spk:active{background:#E8F3FF}
  .gm-btn{height:42px;padding:0 22px;border-radius:999px;border:1.5px solid #9CC9EC;background:#fff;color:#2F7FC1;font-size:14px;font-weight:800;font-family:inherit;cursor:pointer}
  .gm-btn:active{background:rgba(58,159,232,.14)}
  .gm-sent{background:#fff;border-radius:20px;padding:18px 16px;box-shadow:0 4px 16px rgba(78,61,130,.1);margin-bottom:12px}
  .gm-sent .zh{font-size:15px;line-height:1.8;color:#1A2B45;font-weight:700}
  .gm-sent .en{font-size:19px;line-height:1.7;color:#1A2B45;font-weight:800;word-break:break-word}
  .gm-sent .pg{font-size:11px;font-weight:800;color:#B3A3D6;margin-top:8px}
  .gm-spk{display:flex;align-items:center;justify-content:center}
  /* 翻页箭头：放在「知识点讲解」框里面的右下角（跟着滚动吸附住） */
  .gm-arrows-in{position:sticky;bottom:4px;align-self:flex-end;margin-top:6px}
  /* 绿勾：和句型框一样高，贴在框最右边并把描边盖住（-1px 正好压住 1px 边框） */
  .gm-seen{position:absolute;right:-1px;top:-1px;bottom:-1px;min-width:34px;padding:0 10px;border-radius:0 999px 999px 0;background:#2BB779;color:#fff;font-size:15px;font-weight:900;display:flex;align-items:center;justify-content:center;line-height:1;z-index:3;pointer-events:none}
  /* 填空：点一下看答案（不是输入框） */
  .gm-reveal{display:block;width:100%;text-align:left;margin-top:6px;padding:9px 12px;border:1.5px dashed #BFDDF5;border-radius:12px;background:#F7FBFF;color:#3A9FE8;font-weight:800;font-size:15px;cursor:pointer;font-family:inherit}
  .gm-reveal:active{background:#EFF7FF}
  /* 点开之后：答案就显示在这个虚线框里（框保留） */
  .gm-reveal.show{border-style:solid;border-color:#9FE0BC;background:#F3FCF7;color:#23855B;cursor:default;font-weight:800}
  .gm-reveal.show b{color:#1E7A52}
  /* 句型课右侧（除左边句型列表外）统一字体：英文 Times New Roman，中文黑体 */
  .gm-blue .ipa-detail-inner, .gm-blue .ipa-detail-inner *{font-family:'Times New Roman',Times,SimHei,'Heiti SC',STHeiti,'Microsoft YaHei',sans-serif !important}
  /* 「单词学习」页签 / 剪纸盒用的是阅读那套界面 → 字体必须和阅读一致（覆盖上面那条） */
  .gm-blue .ipa-detail-inner .mem-shell, .gm-blue .ipa-detail-inner .mem-shell *,
  .gm-blue .ipa-detail-inner .cut-wrap, .gm-blue .ipa-detail-inner .cut-wrap *{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Segoe UI","Microsoft YaHei",sans-serif !important}
  /* 句型课统一用站内蓝色主题（不影响自然拼读/音标那两套配色） */
  .gm-blue .gm-pat-big{background:linear-gradient(135deg,#3A9FE8,#6EC5F5);box-shadow:0 8px 22px rgba(58,159,232,.3)}
  .gm-blue .gm-pick{border-color:#BFDDF5;color:#2F7FC1;position:relative;padding-right:14px;min-height:44px;overflow:visible}
  /* 文字自己负责截断，绿勾才不会被 overflow:hidden 裁掉（裁掉就盖不住描边） */
  .gm-pick-txt{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gm-pick-pad{flex:0 0 30px}
  .gm-blue .gm-pick:hover{background:#F2F9FF;border-color:#7FB9E8}
  .gm-blue .gm-pick.on{background:rgba(58,159,232,.16);border-color:#7FB9E8;color:#1E4A72}
  .gm-blue .gm-pat-zh,.gm-blue .gm-ex-zh,.gm-blue .gm-dzh{color:#2F7FC1}
  .gm-blue .gm-tip,.gm-blue .gm-sent .pg{color:#93B4CE}
  .gm-blue .gm-cehead,.gm-blue .gm-dbar span{color:#7FA3BE}
  .gm-blue .gm-arrowhint{color:#7FA3BE;background:rgba(255,255,255,.9)}
  .gm-blue .gm-dbar{color:#1E4A72;border-top-color:#E3F0F8}
  .gm-blue .gm-dbar b{color:#3A9FE8}
  .gm-blue .gm-stage,.gm-blue .gm-card,.gm-blue .gm-sent,.gm-blue .gm-drow{box-shadow:0 6px 20px rgba(30,74,114,.1)}
  .gm-blue .gm-ex,.gm-blue .gm-q{border-top-color:#EAF3FA}
  /* 元素动画 */
  .gm-anim{animation-duration:var(--gmd,.5s);animation-timing-function:ease;animation-fill-mode:both}
  .gm-fx-fade,.gm-fx-appear{animation-name:gmFade}
  .gm-fx-flyIn{animation-name:gmFly}
  .gm-fx-floatIn{animation-name:gmFloat}
  .gm-fx-wipe{animation-name:gmWipe}
  .gm-fx-zoom{animation-name:gmZoom}
  .gm-fx-split{animation-name:gmSplit}
  .gm-fx-wheel{animation-name:gmWheel}
  .gm-fx-pulse{animation-name:gmPulse}
  .gm-fx-spin{animation-name:gmSpin}
  .gm-fx-grow{animation-name:gmGrow}
  .gm-fx-colorPulse{animation-name:gmColorPulse}
  .gm-fx-disappear,.gm-fx-fadeOut{animation-name:gmOut}
  .gm-fx-flyOut{animation-name:gmFlyOut}
  .gm-fx-zoomOut{animation-name:gmZoomOut}
  @keyframes gmFade{from{opacity:0}to{opacity:1}}
  @keyframes gmFly{from{opacity:0;transform:translate(var(--gfx,0px),var(--gfy,56px))}to{opacity:1;transform:none}}
  @keyframes gmFloat{from{opacity:0;transform:translateY(calc(var(--gfy,56px) * .45))}to{opacity:1;transform:none}}
  @keyframes gmWipe{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0 0 0 0)}}
  @keyframes gmZoom{from{opacity:0;transform:scale(.25)}to{opacity:1;transform:none}}
  @keyframes gmSplit{from{clip-path:inset(50% 0 50% 0);opacity:0}to{clip-path:inset(0 0 0 0);opacity:1}}
  @keyframes gmWheel{from{clip-path:polygon(50% 50%,50% 50%,50% 50%,50% 50%);opacity:.3}to{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%);opacity:1}}
  @keyframes gmPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}
  @keyframes gmSpin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
  @keyframes gmGrow{from{transform:scale(.7)}to{transform:scale(1)}}
  @keyframes gmColorPulse{0%,100%{filter:none}50%{filter:saturate(2.2) hue-rotate(35deg)}}
  @keyframes gmOut{from{opacity:1}to{opacity:0}}
  @keyframes gmFlyOut{from{opacity:1;transform:none}to{opacity:0;transform:translate(var(--gfx2,0px),var(--gfy2,-56px))}}
  @keyframes gmZoomOut{from{opacity:1;transform:none}to{opacity:0;transform:scale(.25)}}
  /* 幻灯片切换 */
  .gm-run{animation-duration:var(--gmtd,.5s);animation-timing-function:ease;animation-fill-mode:both}
  .gm-tr-fade.gm-run{animation-name:gmFade}
  .gm-tr-smooth.gm-run{animation-name:gmSmooth}
  .gm-tr-cut.gm-run{animation-name:gmCut}
  .gm-tr-wipe.gm-run{animation-name:gmTrWipe}
  .gm-tr-shape.gm-run{animation-name:gmTrShape}
  .gm-tr-dissolve.gm-run{animation-name:gmTrDissolve}
  .gm-tr-newsflash.gm-run{animation-name:gmTrFlash}
  .gm-tr-wheel.gm-run{animation-name:gmTrWheel}
  .gm-tr-none.gm-run{animation-name:none}
  @keyframes gmSmooth{from{opacity:.35;transform:translateX(10%)}to{opacity:1;transform:none}}
  @keyframes gmCut{from{opacity:1}to{opacity:1}}
  @keyframes gmTrWipe{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0 0 0 0)}}
  @keyframes gmTrShape{from{clip-path:circle(0% at 50% 50%)}to{clip-path:circle(75% at 50% 50%)}}
  @keyframes gmTrDissolve{from{opacity:0;filter:blur(6px)}to{opacity:1;filter:none}}
  @keyframes gmTrFlash{0%{opacity:0}25%{opacity:1}40%{opacity:.25}60%{opacity:1}80%{opacity:.5}100%{opacity:1}}
  @keyframes gmTrWheel{from{clip-path:polygon(50% 50%,50% 50%,50% 50%,50% 50%);opacity:.4}to{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%);opacity:1}}
