﻿  *{box-sizing:border-box;margin:0;padding:0}
  [hidden]{display:none!important}
  :root{
    --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC","Source Han Sans SC",Roboto,"Helvetica Neue",Arial,sans-serif;
    --font-serif:"Noto Serif SC","Source Han Serif SC","Songti SC","STSong","SimSun",ui-serif,Georgia,serif;
    --bg:#f3ecdf; --card:#fffaf1; --elevated:#fff8ea; --text:#29241d; --muted:#6d6457;
    --brand:#2e6b4f; --brand2:#b07a4b;
    --ok:#1f8a66; --warn:#b07a4b; --bad:#c0392b;
    --line:#e4d9c4; --border:#e4d9c4; --radius:14px; --inputBg:#f5eedd;
    --shadow:0 1px 2px rgba(60,45,20,.05), 0 6px 16px -10px rgba(60,45,20,.18);
    --shadow-hover:0 2px 4px rgba(60,45,20,.06), 0 10px 22px -10px rgba(60,45,20,.24);
    --sp-1:4px; --sp-2:8px; --sp-3:16px; --sp-4:24px;
    --m-solid:#1f8a66;
    --m-good:#1f8a66;
    --m-fuzzy:#b07a4b;
    --m-weak:#c0392b;
    --m-new:#c9c0b0;
    --m-mastered:#2e6b4f;
    --vvh:100svh; /* 视口高度，iOS 键盘弹起时由 JS 动态更新，避免 modal 被键盘遮挡 */
  }
  body{
    font-family:var(--font);
    background:var(--bg); color:var(--text); min-height:100vh; min-height:100svh; overflow-x:hidden;
    padding:24px 16px 60px; -webkit-font-smoothing:antialiased;
    line-break:strict; hanging-punctuation:allow-end; overflow-wrap:break-word;
    /* PWA 全屏模式 safe-area 适配（不被状态栏/底部指示条遮挡） */
    padding-top:calc(24px + env(safe-area-inset-top));
    padding-bottom:calc(60px + env(safe-area-inset-bottom));
    padding-left:calc(16px + env(safe-area-inset-left));
    padding-right:calc(16px + env(safe-area-inset-right));
  }
  body::before{content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;
    background-image:url("/paper-warm.jpg?v=b163");background-size:cover;background-position:right top;background-repeat:no-repeat}
  body::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
    background:rgba(243,236,223,.2)}
  html[data-theme="dark"] body::before{background-image:url("/paper-dark.jpg?v=b163");background-repeat:repeat;background-size:760px 760px;background-position:left top}
  html[data-theme="dark"] body::after{background:none}
  @media(max-width:768px){
    body::before{background-position:center top}
  }
  .wrap{max-width:880px;margin:0 auto;position:relative}

  .head{display:flex;flex-direction:column;align-items:stretch;gap:13px;margin-bottom:18px;padding:14px 4px 0}
  .head-main{min-width:0;flex:0 0 auto}
  h1{font-size:22px;font-weight:700;letter-spacing:-.4px;margin:2px 0 0;line-height:1.3;overflow-wrap:anywhere}
  #bookTitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .head-badges-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px;min-width:0}
  .type-badge{font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;background:#e9ebdb;color:var(--brand);letter-spacing:0}
  .type-badge.recite{background:#e4ecd5;color:#096f4e}
  .type-badge.mistake{background:#fbf0da;color:#96600c}
  .type-badge .ic{width:14px;height:14px;vertical-align:-2px;margin-right:3px}
  .sub{font-size:13px;color:var(--muted);margin-top:7px;line-height:1.5;overflow-wrap:anywhere}
  #deadlineLabel{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .head-actions{display:flex;gap:7px;flex:0 0 auto;min-width:0;flex-wrap:nowrap;justify-content:flex-start;align-items:center}
  .user-avatar-shell{position:relative;display:inline-block;flex:0 0 auto;margin-left:auto;line-height:0;font-size:0;border-radius:50%}
  .user-avatar-wrap{display:block;background:none;border:none;padding:0;cursor:pointer;line-height:0;border-radius:50%}
  /* 个人中心入口固定在第一行最右：头像与同步角标作为整体靠右 */
  .user-avatar-btn{width:40px;height:40px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:0;border:2px solid var(--brand);background:var(--card);color:var(--brand);font-size:15px;font-weight:700;overflow:hidden;transition:.16s}
  .user-avatar-btn img{width:100%;height:100%;object-fit:cover;border-radius:50%}
  .user-avatar-btn .av-text{color:var(--brand);font-weight:700;line-height:1}
  .user-avatar-wrap:active .user-avatar-btn{transform:scale(.95)}
  .ghost-btn{
    background:var(--card);border:1px solid var(--line);color:var(--muted);
    padding:8px 12px;border-radius:10px;font-size:13px;cursor:pointer;
    font-family:inherit;white-space:nowrap;transition:.15s;flex:0 0 auto;
  }
  .ghost-btn:active{transform:scale(.98)}

  .card{background:var(--card);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);margin-bottom:16px;border:1px solid rgba(44,38,32,.03)}
  h2{font-size:15px;font-weight:600;margin-bottom:14px}
  .muted{color:var(--muted);font-weight:400;font-size:13px}
  .hint{font-size:12.5px;color:var(--muted);line-height:1.7;margin-top:12px}
  /* ux-16：内联表单校验——字段红边框 + 字段下红字（复用 --bad 语义色） */
  .input-error{border-color:var(--bad) !important;}
  .field-error{color:var(--bad);font-size:12px;line-height:1.45;margin-top:5px;}
  /* ux-18：列表 shimmer 骨架条（复用 --border/--card，切任务/异步同步期间占位） */
  .shimmer-row{list-style:none;height:52px;border-radius:12px;margin:0 0 10px;background:var(--card);display:flex;align-items:center;padding:0 16px;gap:12px;overflow:hidden}
  .shimmer-block{height:14px;border-radius:6px;background:var(--border);animation:shimmerFade 1.4s ease-in-out infinite}
  .shimmer-block.date{width:88px;flex:0 0 auto}
  .shimmer-block.page{width:40%;flex:0 1 auto}
  .shimmer-block.delta{width:52px;flex:0 0 auto;margin-left:auto}
  .shimmer-block.del{width:20px;height:20px;border-radius:50%;flex:0 0 auto}
  @keyframes shimmerFade{0%,100%{opacity:.5}50%{opacity:1}}
  /* 评价真实性永久提醒：常驻、低打扰、不指责 */
  .honest-hint{
    font-size:12px;line-height:1.65;color:#6d5a36;
    background:#fdf6e3;border:1px solid #f0e2b8;border-radius:10px;
    padding:8px 12px;margin:10px 0 0;
  }
  html[data-theme="dark"] .honest-hint{
    color:#d8c79a;background:#2c2718;border-color:#4a3f22;
  }
  .row-between{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;gap:10px}

  /* ============ 欢迎页 ============ */
  .welcome{
    position:relative;overflow:hidden;text-align:center;
    padding:60px 32px 52px;border-radius:16px;color:#fff;
    background:var(--brand);
    box-shadow:0 20px 46px -24px rgba(35,83,61,.45);
  }
  html[data-theme="dark"] .welcome{background:#2f5d57}
  html[data-theme="dark"] .profile-hero{background:#2f5d57}
  .welcome>*{position:relative;z-index:1}
  .welcome-badge{
    width:86px;height:86px;margin:0 auto 20px;border-radius:26px;font-size:42px;
    display:flex;align-items:center;justify-content:center;line-height:1;
    background:none;box-shadow:none;
  }
  .welcome h2{font-size:30px;font-weight:800;letter-spacing:-.5px;margin-bottom:10px;color:#fff}
  .welcome-tagline{font-size:13.5px;font-weight:600;color:rgba(255,255,255,.9);letter-spacing:5px;margin-bottom:22px}
  .welcome-feats{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-bottom:30px}
  .welcome-feat{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.14);
    border:1px solid rgba(255,255,255,.22);border-radius:999px;padding:7px 15px;font-size:12.5px;font-weight:600}
  .welcome .primary{
    background:#fff;color:var(--brand);font-weight:700;padding:14px 46px;font-size:15px;
    border-radius:999px;box-shadow:0 14px 28px -12px rgba(0,0,0,.4);transition:.18s;
  }
  .welcome-sync-row{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:16px;flex-wrap:wrap}
  .welcome-sync-user{font-size:13px;color:rgba(255,255,255,.8);background:rgba(255,255,255,.12);padding:6px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.2)}
  .welcome-sync-row .ghost-btn{background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.32);color:#fff;font-size:13px;padding:8px 18px;border-radius:999px;font-weight:600;cursor:pointer}
  .welcome-sync-row .ghost-btn:hover{background:rgba(255,255,255,.28)}
  .welcome-sync-row .ghost-btn:disabled{opacity:.5;cursor:not-allowed}
  .welcome-types{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:32px}
  .wtype{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.18);border-radius:15px;padding:16px 12px}
  .wtype .wt-ico{font-size:24px;line-height:1;margin-bottom:8px}
  .wtype .wt-name{font-weight:700;font-size:14px;margin-bottom:5px}
  .wtype .wt-desc{font-size:11.5px;color:rgba(255,255,255,.82);line-height:1.6}

  /* ============ 新手引导（重写） ============ */
  .g-num{
    flex:0 0 auto;width:24px;height:24px;border-radius:50%;
    background:var(--brand);color:#fff;
    font-size:12px;font-weight:700;
    display:flex;align-items:center;justify-content:center;
    margin-top:1px;
  }
  .g-head{display:flex;align-items:flex-start;gap:11px;margin-bottom:8px}
  .g-title{font-weight:700;font-size:15px;line-height:1.5;letter-spacing:-.1px}
  .g-content{padding-left:35px;font-size:13.5px;line-height:1.8;color:var(--text)}
  .g-content p{margin-bottom:6px}
  .g-content p:last-child{margin-bottom:0}
  .g-content .g-note{color:var(--muted);font-size:12.5px;line-height:1.7}
  .g-callout{
    background:#faf6ec;border-radius:10px;
    padding:11px 14px;margin:8px 0;
    font-size:13px;line-height:1.85;
  }
  .g-callout.warm{background:#fdf8ec;border:1px solid #f5e4b8}
  .g-section{margin-bottom:22px}
  .g-section:last-child{margin-bottom:0}

  .kinsoku{line-break:strict;hanging-punctuation:allow-end;overflow-wrap:break-word;word-break:normal}

  input[type=number],input[type=date],input[type=text],input[type=email],input[type=password],select,textarea{
    font-family:inherit;font-size:14px;padding:9px 12px;border:1px solid var(--line);
    border-radius:8px;background:var(--inputBg);color:var(--text);outline:none;width:100%;
    transition:border-color .15s, box-shadow .15s, background .15s;
  }
  /* 触屏设备（手机/平板）：输入框字号小于16px时 iOS 聚焦会自动放大整页，统一设为16px */
  @media (pointer:coarse){
    input[type=number],input[type=date],input[type=text],input[type=email],input[type=password],select,textarea{font-size:16px}
  }
  input:focus,select:focus,textarea:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px rgba(46,107,79,.16)}
  input[type=email]:focus,input[type=password]:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px rgba(46,107,79,.16)}
  select{
    cursor:pointer;appearance:none;-webkit-appearance:none;
    background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%238a7f6d' d='M6 8L2 4h8z'/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;
  }
  .grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px}
  .field{display:flex;flex-direction:column;gap:6px}
  .field span{font-size:12.5px;color:var(--muted)}

  .primary{
    background:var(--brand);color:#fff;border:none;
    padding:10px 24px;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;
    font-family:inherit;transition:.15s;white-space:nowrap;
    box-shadow:0 2px 8px -4px rgba(60,45,20,.18);
  }
  .primary:active{transform:scale(.98)}
  .primary:disabled{background:#d8cfc0;box-shadow:none;color:#fff;opacity:1;cursor:not-allowed;filter:none}
  html[data-theme="dark"] .primary:disabled{background:#4a628e;color:#8aa0c0}
  .danger-btn{
    background:var(--card);border:1px solid #e8c4bd;color:var(--bad);
    padding:8px 16px;border-radius:10px;font-size:13px;cursor:pointer;font-family:inherit;
    transition:.15s;
  }
  .soft-btn{
    background:var(--card);border:1px solid var(--line);color:var(--text);
    padding:8px 16px;border-radius:10px;font-size:13px;cursor:pointer;font-family:inherit;
    transition:.15s;
  }

  .checkin{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}
  .checkin input[type=date]{width:auto;flex:0 0 auto}
  .page-input{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--muted);padding-bottom:9px}
  .page-input input{width:104px;text-align:center;font-size:15px;font-weight:600;color:var(--text);padding:9px 6px}
  .page-input input.page-opt{width:96px;font-weight:500;color:var(--muted)}
  .page-input .page-dash{color:#c9bda8}
  .page-input input::-webkit-outer-spin-button,.page-input input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
  .page-input input{appearance:textfield;-moz-appearance:textfield}
  .mode-mini{background:none;border:none;color:var(--brand,#2e6b4f);cursor:pointer;font-size:12.5px;padding:6px 4px 6px 2px;font-family:inherit;white-space:nowrap;opacity:.85}
  .date-quick{display:inline-flex;gap:2px;padding-bottom:9px}
  .date-quick .mode-mini{padding:6px 8px}
  .set-part{display:inline-flex;align-items:center;gap:6px;margin-left:6px;padding-left:10px;border-left:1px dashed var(--line,#e8dfd0);color:var(--muted);font-size:13px}
  .set-part input{width:64px;font-size:14px;font-weight:500;padding:8px 4px}
  .checkin-block{display:flex;flex-direction:column;gap:2px}
  .checkin-sub{font-size:12px;color:var(--muted);padding:0 2px}

  .mode-badge{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;background:#efe6d4;color:#7a6f5f;letter-spacing:0;display:inline-flex;align-items:center;gap:4px}
  .mode-badge .ic{width:14px;height:14px;flex:0 0 auto}
  .mode-badge.set{background:#fbe4ec;color:#b02a6e}
  .mode-badge.mistake-free{background:#e4f0e4;color:#3d7a3d}
  .linked-badge{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;background:#fef3c7;color:#92400e;letter-spacing:0;margin-left:4px;display:inline-flex;align-items:center;gap:4px}
  .linked-badge .ic{width:14px;height:14px;flex:0 0 auto}
  .linked-badge.clickable{cursor:pointer}
  .type-tag+.mode-tag-inline{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;background:#efe6d4;color:#7a6f5f;display:inline-flex;align-items:center;gap:4px}
  .type-tag+.mode-tag-inline .ic{width:13px;height:13px;flex:0 0 auto}
  .type-tag+.mode-tag-inline.set{background:#fbe4ec;color:#b02a6e}
  .type-tag+.mode-tag-inline.mistake-free{background:#e4f0e4;color:#3d7a3d}

  .ps-editor{border:1px solid var(--line);border-radius:12px;padding:12px;margin-top:6px}
  .ps-row{display:flex;gap:8px;align-items:center;margin-bottom:8px}
  .ps-row input.ps-name{flex:1;min-width:0}
  .ps-row input.ps-w{width:84px;flex:0 0 auto;text-align:center}
  .ps-row .ps-pct{color:var(--muted);font-size:13px;flex:0 0 auto}
  .ps-row .ps-del{flex:0 0 auto;width:28px;height:32px;border:none;background:#faf6ec;color:#8a8175;border-radius:8px;cursor:pointer;line-height:1;display:inline-flex;align-items:center;justify-content:center}
  .ps-sum{font-size:12px;color:var(--muted);margin:2px 0 8px}
  .ps-sum.bad{color:var(--warn)}
  .ps-add{background:none;border:1px dashed #d8cdb8;color:var(--brand);border-radius:9px;padding:7px 12px;font-size:13px;cursor:pointer;font-family:inherit;width:100%}
  .lock-hint{display:flex;gap:7px;align-items:flex-start;font-size:12px;color:var(--muted);background:#faf6ec;border-radius:9px;padding:8px 11px;margin-top:8px;line-height:1.6}
  .lock-hint b{color:#8a8175;font-weight:600}

  .set-scope{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:9px;font-size:14px;color:var(--muted)}
  .set-scope select{padding:9px 10px;border:1px solid var(--line);border-radius:10px;font-size:14px;font-family:inherit;color:var(--text);background:var(--card);min-width:120px}
  .pct-wrap{display:inline-flex;align-items:center;gap:6px}
  .pct-wrap input{width:72px;text-align:center;padding:9px 6px;font-size:15px;font-weight:600}
  .pct-chips{display:inline-flex;gap:5px}
  .pct-chip{border:1px solid var(--line);background:#fff;color:var(--muted);border-radius:8px;padding:5px 9px;font-size:12px;cursor:pointer;font-family:inherit;transition:.15s}
    .pct-chip.active{background:#e9ebdb;border-color:var(--brand);color:var(--brand);font-weight:600}
  .sec-multi{position:relative;flex:1 1 220px;min-width:180px}
  .sec-multi-btn{
    width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:10px;
    background:#fff;text-align:left;font-size:14px;cursor:pointer;font-family:inherit;
    display:flex;flex-wrap:wrap;gap:4px;align-items:center;color:var(--text);min-height:38px;
  }
  .sec-multi-panel{
    position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;
    border:1px solid var(--line);border-radius:10px;
    box-shadow:0 10px 30px rgba(0,0,0,.12);z-index:60;max-height:300px;overflow-y:auto;padding:6px;
  }
  .sec-multi-row{
    display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;
    cursor:pointer;font-size:13.5px;user-select:none;
  }
  .sec-multi-row.sel{background:#e9ebdb;font-weight:600}
  .sec-multi-row .ck{width:16px;font-weight:700;color:#2e6b4f;flex:0 0 auto}
  .sec-multi-row .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .sec-multi-row .w{font-size:11.5px;color:var(--muted);flex:0 0 auto}
  .sec-multi-actions{
    display:flex;gap:6px;padding:6px 4px 2px;border-top:1px solid var(--line);margin-top:4px;
  }
  .sec-multi-act{
    flex:1;border:none;background:#e9ebdb;color:#2e6b4f;padding:7px;
    border-radius:8px;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;
  }
  .set-scope-pct{
    display:flex;flex-direction:column;gap:8px;margin-top:10px;padding:10px 12px;
    border:1px solid var(--line);border-radius:8px;background:#faf6ec;
  }
  .set-scope-pct .ssp-head{font-size:12.5px;color:var(--muted);margin-bottom:2px}
  .set-scope-pct .ssp-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
  .set-scope-pct .ssp-name{
    flex:1 1 120px;min-width:0;font-size:13.5px;font-weight:600;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }
  .set-scope-pct .ssp-pct{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto}
  .set-scope-pct .ssp-input{
    width:72px;text-align:center;padding:7px 6px;font-size:14px;font-weight:600;
  }
  .set-scope-pct .pct-chips{display:inline-flex;gap:5px;flex:0 0 auto}

  .pp-summary{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  .pp-kpi{flex:1;min-width:110px;background:#faf6ec;border-radius:12px;padding:11px 14px}
  .pp-kpi .n{font-size:20px;font-weight:700}
  .pp-kpi .l{font-size:12px;color:var(--muted);margin-top:2px}
  .pp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:10px;margin-top:18px}
  .pp-cell{border:1.5px solid var(--line);border-radius:11px;padding:9px 6px;text-align:center;cursor:pointer;background:#fff;transition:.12s;user-select:none}
  .pp-cell .c-no{font-size:13px;font-weight:600;color:var(--text)}
  .pp-cell .c-pct{font-size:11px;margin-top:3px;color:var(--muted)}
  .pp-cell.done{background:#e8f7f0;border-color:#9fdcc2}
  .pp-cell.done .c-no,.pp-cell.done .c-pct{color:var(--ok)}
  .pp-cell.part{background:#fdf6e7;border-color:#f0d29a}
  .pp-cell.part .c-no,.pp-cell.part .c-pct{color:#c9850a}
  .pp-cell-detail{grid-column:1/-1;border:1px solid var(--line);border-radius:11px;padding:11px 13px;background:#faf6ec;display:none}
  .pp-cell-detail.open{display:block}
  .pp-sec-row{display:flex;align-items:center;gap:10px;margin-bottom:7px;font-size:13px}
  .pp-sec-row:last-child{margin-bottom:0}
  .pp-sec-name{flex:0 0 96px;color:var(--text);font-weight:500}
  .pp-sec-track{flex:1;height:8px;background:#ebe3d4;border-radius:6px;overflow:hidden;display:flex;align-items:center}
  .pp-sec-fill{height:100%;border-radius:6px;background:var(--brand)}
  .pp-sec-val{flex:0 0 46px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}
  .pp-legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-top:14px;flex-wrap:wrap}
  .pp-legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}
  .ps-tpl-row{margin:2px 0 8px}
  .ps-tpl-row select{width:100%;padding:7px 10px;border:1px dashed var(--line);border-radius:9px;font-size:13px;background:#faf6ec;color:var(--text)}
  .ri-note{width:100%;margin-top:6px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;font-size:12.5px;color:var(--text);background:#fff;transition:.15s}
  .ri-note::placeholder{color:#b9b7cc}
  .ri-note.prefilled{color:#aaa}
  .ri-note:focus{color:var(--text)}
  .ri-lastnote{display:inline-block;background:#f1ece0;border-radius:6px;padding:1px 7px;font-size:11.5px;color:#8a8175}
  .dash-hero{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:20px 22px;margin:0 0 16px;color:var(--text);box-shadow:var(--shadow)}
  .dash-hero .greet-big{font-size:22px;font-weight:700;letter-spacing:-.2px;line-height:1.3;color:var(--text)}
  .dash-hero .greet-sub{font-size:13px;color:var(--muted);margin-top:5px}
  .dash-hero .hero-status{font-size:15px;font-weight:600;line-height:1.6;margin-top:14px;color:var(--brand)}
  .dash-hero .hero-enc{font-size:13px;color:var(--muted);margin-top:8px;line-height:1.5}
  .dash-hero.urgent{border-color:var(--bad)}
  .dash-hero.urgent .hero-status{color:var(--bad)}
  /* 考研倒计时 */
  .kaoyan{margin:0 0 16px;background:var(--card);
    border:1px solid var(--line);border-radius:16px;padding:22px 24px;color:var(--text);
    box-shadow:var(--shadow)}
  .kaoyan .ky-label{font-size:12px;color:var(--muted);letter-spacing:2px;font-weight:600}
  .kaoyan .ky-days{font-size:48px;font-weight:800;letter-spacing:-2px;line-height:1;margin:8px 0 18px;color:var(--brand)}
  .kaoyan .ky-days small{font-size:17px;font-weight:800;color:var(--muted);margin-left:8px;letter-spacing:0;position:relative;top:-4px}
  .kaoyan .ky-divider{height:1px;background:var(--line);margin:0 0 16px}
  .kaoyan .ky-quote-tag{font-size:10.5px;color:var(--muted);letter-spacing:3px;margin-bottom:8px;font-weight:600}
  .kaoyan .ky-quote{font-size:15.5px;line-height:1.6;color:var(--text);max-width:100%;font-weight:400;overflow-wrap:break-word;word-break:normal;hyphens:auto}
  .kaoyan.exam-day{border-color:var(--bad)}
  .kaoyan.exam-day .ky-days{color:var(--bad)}
  .kaoyan.exam-done{border-color:var(--ok)}
  .kaoyan.exam-done .ky-days{color:var(--ok)}
  /* 每周小结卡片（温暖琥珀色，区别于紫色考研卡） */
  .weekly-review{margin:0 0 16px;border-radius:16px;padding:18px 22px;
    background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow)}
  .weekly-review .wr-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  .weekly-review .wr-title{font-size:15px;font-weight:700;color:var(--brand)}
  .weekly-review .wr-date{font-size:12px;color:var(--muted)}
  .weekly-review .wr-stats{display:flex;gap:10px;margin-bottom:14px}
  .weekly-review .wr-stat{flex:1;background:var(--bg);border-radius:12px;padding:10px 6px 8px;text-align:center}
  .weekly-review .wr-stat.wr-compare-up .wr-num::before{content:'↑';font-size:.9em;margin-right:1px;vertical-align:baseline}
  .weekly-review .wr-stat.wr-compare-down .wr-num::before{content:'↓';font-size:.9em;margin-right:1px;vertical-align:baseline}
  .weekly-review .wr-stat.wr-compare-up .wr-num{color:#2e7d32}
  .weekly-review .wr-stat.wr-compare-down .wr-num{color:#c62828}
  .weekly-review .wr-stat.wr-compare-flat .wr-num{color:var(--muted)}
  .weekly-review .wr-num{font-size:21px;font-weight:800;color:var(--brand);line-height:1.1;word-break:keep-all}
  .weekly-review .wr-lab{font-size:11px;color:var(--muted);margin-top:3px;line-height:1.2}
  .weekly-review .wr-msg{font-size:14px;font-weight:600;color:var(--text);line-height:1.55;margin-bottom:9px}
  .weekly-review .wr-tip{font-size:12.5px;color:var(--muted);line-height:1.55;background:var(--bg);border-radius:10px;padding:9px 12px}
  .dash-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 4px}
  .dash-card{background:#fbf6ec;border:1px solid var(--line);border-radius:14px;padding:16px 14px;text-align:center}
  .dash-num{font-size:28px;font-weight:800;letter-spacing:-.5px;line-height:1.1}
  .dash-lab{font-size:12px;color:var(--muted);margin-top:6px;line-height:1.4}
  .dash-proj{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
  .dash-proj:last-child{border-bottom:none}
  .dash-proj .dp-name{flex:0 0 130px;font-size:13.5px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dash-proj .dp-bar{flex:1;height:8px;background:#ebe3d4;border-radius:6px;overflow:hidden;display:flex}
  .dash-proj .dp-fill{height:100%;background:var(--brand)}
  .dash-proj .dp-pct{flex:0 0 52px;text-align:right;font-size:12.5px;color:var(--muted)}
  .dash-proj .ts-chip{flex:0 0 96px;width:96px;display:inline-flex;align-items:center;justify-content:center;gap:4px;font-size:11.5px;font-weight:600;padding:4px 8px;border-radius:20px;line-height:1.3;white-space:nowrap;overflow:hidden}
  .ts-done{background:rgba(46,107,79,.1);color:#2e6b4f;border:1px solid rgba(46,107,79,.25)}
  .ts-partial{background:#fdf3e0;color:#b9770e;border:1px solid #f3d9a8}
  .ts-todo{background:#fdeaec;color:#b02e24;border:1px solid #f3bcc2}
  .ts-none{background:#f1f0f6;color:#8f8ca0;border:1px solid #e2e0ec}
  .ts-chip svg{width:13px;height:13px;flex-shrink:0}
  html[data-theme="dark"] .ts-done{background:rgba(131,188,169,.18);color:#83bca9;border-color:rgba(131,188,169,.35)}
  html[data-theme="dark"] .ts-partial{background:rgba(205,174,112,.16);color:#e0c88f;border-color:rgba(205,174,112,.32)}
  html[data-theme="dark"] .ts-todo{background:rgba(221,148,139,.16);color:#e3a0a4;border-color:rgba(221,148,139,.32)}
  html[data-theme="dark"] .ts-none{background:rgba(150,150,170,.12);color:#9aa4bc;border-color:rgba(150,150,170,.25)}
  .rec-qbtn{outline:2px solid transparent;outline-offset:1px;opacity:.55;flex:1;min-width:0;text-align:center;padding:9px 6px;font-size:13px;min-height:40px;display:inline-flex;align-items:center;justify-content:center}
  #reciteQuality{display:flex;gap:8px;width:100%;align-items:stretch}
  .rec-qbtn:focus{outline:none}
  .rec-qbtn.active{opacity:1;outline-color:currentColor}
  .rec-qbtn.q-good{outline-color:transparent}
  .rec-qbtn.q-good.active{opacity:1;background:#096f4e;color:#fff}
  .rec-qbtn.q-fuzzy.active{opacity:1;background:#96600c;color:#fff}
  .rec-qbtn.q-forgot.active{opacity:1;background:#b02e24;color:#fff}
  .pp-ranges{display:flex;flex-direction:column;gap:12px}
  .pp-range-block .pp-range-t{font-size:13px;font-weight:600;margin-bottom:7px}
  .pp-chips{display:flex;flex-wrap:wrap;gap:6px}
  .pp-chip{font-size:12.5px;padding:4px 10px;border-radius:999px;font-variant-numeric:tabular-nums}
  .pp-chip.ok{background:#e8f7f0;color:var(--ok)}
  .pp-chip.no{background:#f8e5de;color:var(--bad)}
  .pp-chip.unit{background:#e9ebdb;color:var(--brand);font-weight:600}
  .pp-unit-row{margin-bottom:12px}
  .pp-unit-head{display:flex;justify-content:space-between;font-size:13px;margin-bottom:5px}
  .pp-unit-track{height:9px;background:#ebe3d4;border-radius:6px;overflow:hidden}
  .pp-unit-fill{height:100%;background:var(--brand);border-radius:6px}
  .pp-empty{color:var(--muted);font-size:13px;text-align:center;padding:24px 0}

  /* 完成情况看板：洞察区 */
  .pp-insight{margin-bottom:16px}
  .pp-insight .wb-section-title{margin:14px 0 8px}
  .pp-insight-title{font-size:13px;font-weight:700;margin:14px 0 8px;color:var(--text)}
  .pp-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:8px}
  .pp-stat{background:var(--inputBg);border-radius:10px;padding:9px 11px}
  .pp-stat .v{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.25}
  .pp-stat .k{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.35}
  .pp-stat .v.up{color:var(--ok)} .pp-stat .v.down{color:var(--bad)} .pp-stat .v.warn{color:#96600c}
  .pp-eta-box{background:#faf6ec;border:1px solid var(--line);border-radius:12px;padding:11px 14px;font-size:12.5px;line-height:1.9;color:var(--text)}
  .pp-eta-box b{font-variant-numeric:tabular-nums}
  .pp-gap-warn{font-size:12.5px;color:#96600c;margin-top:8px;line-height:1.6}

  .recite-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:12px}
  .recite-grid-2{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-top:12px}
  .recite-grid-2 .field{min-width:0}
  .page-range{display:flex;align-items:flex-end;gap:6px;grid-column:span 2}
  .page-range .field{flex:1}
  .page-range-sep{padding-bottom:11px;color:var(--muted);font-size:14px;flex:0 0 auto}
  .recite-grid-2 input[type="date"]{min-width:0!important;width:100%!important;box-sizing:border-box;-webkit-appearance:none;appearance:none;max-width:100%}

  /* 连续录入：提交后沿用上次的页码/套卷号，用警告色标记，提醒用户确认后再提交下一条（防止忘记改页码）*/
  .page-retained{
    color:var(--warn) !important;
    font-weight:700 !important;
    border-color:var(--warn) !important;
    background:rgba(224,138,0,.12) !important;
  }
  html[data-theme="dark"] .page-retained{background:rgba(212,162,78,.16) !important}
  .page-retained::selection{background:rgba(224,138,0,.28)}
  .recite-preview{
    margin-top:12px;padding:10px 14px;background:#f5f4fc;
    border-radius:10px;font-size:12.5px;color:var(--muted);line-height:1.55;
  }
  .recite-preview strong{color:var(--brand);font-weight:600}
  .recite-preview.overdue{background:#fbf0da;color:#a57010}
  .recite-preview.overdue strong{color:#96600c}
  .recite-preview.mastered{background:#e4ecd5;color:#096f4e}
  .recite-preview.mastered strong{color:#096f4e}
  @media(max-width:768px){
    .recite-grid{grid-template-columns:1fr 1fr}
    .recite-grid .field:nth-child(1){grid-column:span 2}
    .recite-grid-2{grid-template-columns:1fr 1fr}
    .recite-grid-2 .field:nth-child(1){grid-column:span 2}
    .recite-grid .field,.recite-grid-2 .field{min-width:0}
    .recite-grid input,.recite-grid-2 input{width:100%;min-width:0}
  }

  .review-list{list-style:none}
  .review-item{
    display:flex;align-items:center;gap:14px;padding:14px;
    background:#faf6ec;border-radius:12px;margin-bottom:10px;
    border:1px solid var(--line);
    border-left-width:4px;
    border-left-color:var(--m-new);
    transition:border-color .15s, box-shadow .15s, background .15s;
  }
  .review-item:last-child{margin-bottom:0}
  .review-item.m-solid{border-left-color:var(--m-solid)}
  .review-item.m-good{border-left-color:var(--m-good)}
  .review-item.m-fuzzy{border-left-color:var(--m-fuzzy)}
  .review-item.m-weak{border-left-color:var(--m-weak)}
  .review-item.m-mastered{border-left-color:var(--m-mastered)}
  .review-item.overdue-item{background:#fffdf6}
  .ri-main{flex:1;min-width:0}
  .ri-content{font-weight:600;font-size:14.5px;word-break:break-all;line-height:1.4;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .ri-meta{font-size:12px;color:var(--muted);margin-top:4px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .ri-meta .overdue-tag{color:#96600c;font-weight:600}
  .ri-actions{display:flex;gap:6px;flex:0 0 auto;flex-wrap:wrap}
  .ri-group{display:flex;gap:6px;flex:0 0 auto;min-width:0}
  .q-btn{
    border:none;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;
    padding:7px 12px;border-radius:8px;transition:.15s;
  }
  .q-btn:active{transform:scale(.96)}
  .q-good{background:#e4ecd5;color:#096f4e}
  .q-fuzzy{background:#fbf0da;color:#96600c}
  .q-forgot{background:#f8e5de;color:#b02e24}
  .review-count{font-size:12px;font-weight:600;background:var(--brand);color:#fff;padding:2px 9px;border-radius:999px;min-width:22px;text-align:center}
  .review-count.overdue{background:#96600c}
  /* 保持期复习（已掌握内容的定期巩固） */
  .retention-count{font-size:11.5px;font-weight:600;background:#e6faf5;color:#0d9488;padding:2px 9px;border-radius:999px;cursor:default}
  .retention-divider{list-style:none;margin:14px 0 8px;padding:0}
  .retention-divider span{display:block;font-size:12px;font-weight:600;color:#0d9488;background:#f0fbf8;border:1px dashed #99e6d8;border-radius:8px;padding:7px 12px;text-align:center}
  .review-item.retention-item{background:#f6fdfb;border-left-color:#14b8a6}
  .retention-tag{font-size:10.5px;font-weight:600;color:#0d9488;background:#ccfbf1;padding:1px 7px;border-radius:6px}
  .ri-meta .retention-overdue-tag{color:#96600c;font-weight:600}
  /* 关键薄弱点：反复错的题，考前最该拿下的点（正向"重点"标记，而非红色告警） */
  .ri-meta .weak-key-tag{font-size:10.5px;font-weight:700;color:#2e6b4f;background:#e9ebdb;padding:1px 7px;border-radius:6px;white-space:nowrap}
  .ri-meta .ri-quick-tag{font-size:10px;font-weight:700;letter-spacing:.5px;color:#2e6b4f;background:#e9ebdb;border:1px solid #b9d2c4;padding:0 5px;border-radius:5px;white-space:nowrap}
  html[data-theme="dark"] .ri-meta .ri-quick-tag{color:#83bca9;background:rgba(131,188,169,.15);border-color:rgba(131,188,169,.35)}
  .ri-meta .retry-cnt{font-size:10.5px;font-weight:600;color:#96600c;background:#fbf0da;padding:1px 7px;border-radius:6px;white-space:nowrap;display:inline-flex;align-items:center;gap:3px}

  /* ============ 评价小反馈：点击「记得/模糊/忘记」后条目原地给出结果反馈再退场 ============ */
  .review-item{position:relative}
  .review-item.fx-out{pointer-events:none;animation:riFxLeave .26s ease-in 1.05s forwards}
  .review-item.fx-out .ri-main,
  .review-item.fx-out .ri-actions{opacity:0;transform:translateX(-10px);transition:opacity .16s ease,transform .16s ease}
  .ri-fx{
    position:absolute;inset:0;z-index:2;display:none;
    align-items:center;justify-content:center;gap:9px;flex-wrap:wrap;
    border-radius:inherit;padding:12px;text-align:center;
    font-size:14px;font-weight:700;line-height:1.4;
  }
  .review-item.fx-out .ri-fx{display:flex;animation:riFxPop .2s cubic-bezier(.2,1.3,.4,1) both}
  .ri-fx .ri-fx-ic{font-size:18px;line-height:1}
  .fx-good .ri-fx{background:#e4ecd5;color:#096f4e}
  .fx-fuzzy .ri-fx{background:#fbf0da;color:#96600c}
  .fx-forgot .ri-fx{background:#f8e5de;color:#b02e24}
  @keyframes riFxPop{from{opacity:0;transform:scale(.82)}to{opacity:1;transform:scale(1)}}
  @keyframes riFxLeave{to{opacity:0;transform:translateX(26px) scale(.98)}}
  @media (prefers-reduced-motion: reduce){
    .review-item.fx-out{animation-duration:.01s;animation-delay:.12s}
    .review-item.fx-out .ri-fx{animation:none}
  }
  .q-retention-pass{background:#e6faf5;color:#0d9488}
  .q-retention-fail{background:#fbf0da;color:#96600c}
  .retention-expand{list-style:none;margin:2px 0 0;padding:0;text-align:center;cursor:pointer}
  .retention-expand span{display:inline-block;font-size:12px;font-weight:600;color:#0d9488;background:#f0fbf8;border:1px solid #99e6d8;border-radius:999px;padding:7px 16px;transition:.15s}
  .mode-tag{font-size:11.5px;font-weight:500;background:#e9ebdb;color:#2e6b4f;border:1px solid #cddccb;padding:2px 10px;border-radius:999px;cursor:pointer;transition:all .15s}
  .mode-tag.classic{background:#f1ede4;color:#6b655c;border-color:#d8d2c4}
  .mode-help-card{border-radius:12px;padding:14px;margin-bottom:12px}
  .mode-help-card.mode-classic{background:#faf6ec}
  .mode-help-card.mode-balanced{background:#e9ebdb}
  .mode-help-card.mode-common{background:#fdf8ec}
  .mode-help-card[onclick], .mode-help-card.clickable{cursor:pointer;transition:all .15s}
  .pressure-bars{display:flex;align-items:flex-end;gap:4px;height:48px}
  .pressure-bar{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px}
  .pressure-bar-fill{width:100%;border-radius:3px 3px 0 0;min-height:2px;transition:height .2s}
  .pressure-bar-label{font-size:9.5px;color:var(--muted)}
  .pressure-tag{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px}
  .pressure-ok{background:#dcfce7;color:#166534}
  .pressure-mid{background:#fef9c3;color:#854d0e}
  .pressure-high{background:#ffedd5;color:#9a3412}
  .pressure-over{background:#fee2e2;color:#991b1b}

  .overdue-banner{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:12px 14px;background:#fdf8ec;border:1px solid #f5e4b8;
    border-radius:12px;margin-bottom:12px;flex-wrap:wrap;
  }
  .ob-text{display:flex;align-items:center;gap:8px;font-size:13px;color:#8a6a12;flex:1;min-width:200px;flex-wrap:wrap}
  .ob-icon{font-size:16px;flex:0 0 auto}
  .ob-main strong{color:#96600c;font-weight:700}
  .ob-sub{color:#a8842c;font-size:12px}
  .ob-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
  .ob-hint{font-size:12px;color:#a8842c;margin-right:2px}
  .ob-btn{
    background:#fff;border:1px solid #f0d898;color:#a57010;
    font-family:inherit;font-size:12px;font-weight:600;
    padding:6px 12px;border-radius:8px;cursor:pointer;transition:.15s;
  }
  .ob-btn:active{transform:scale(.96)}

  .excess-banner{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:12px 14px;background:#e9ebdb;border:1px solid #b9d2c4;
    border-radius:12px;margin-bottom:12px;flex-wrap:wrap;
  }
  .excess-banner .ob-text{color:#23533d}
  .excess-banner .ob-main strong{color:#2e6b4f}
  .excess-banner .ob-sub{color:#2e6b4f}
  .excess-banner .ob-hint{color:#2e6b4f}
  .excess-banner .ob-btn{background:#fff;border:1px solid #b9d2c4;color:#2e6b4f}
  .excess-banner .ob-advice{display:flex;align-items:center;gap:8px;width:100%;margin-top:8px;padding-top:8px;border-top:1px dashed #b9d2c4;font-size:12.5px;color:#23533d;flex-wrap:wrap}
  .excess-banner .ob-advice-text{flex:1;min-width:200px}
  .excess-banner .ob-advice-btn{background:#2e6b4f;color:#fff;border:none;border-radius:8px;padding:4px 12px;font-size:12px;cursor:pointer;font-family:inherit}
  .excess-banner .ob-advice-btn:active{transform:scale(.96)}
  html[data-theme="dark"] .excess-banner .ob-advice{border-top-color:#4a628e;color:#83bca9}
  html[data-theme="dark"] .excess-banner .ob-advice-btn{background:#83bca9;color:#10302a}

  /* [v3] 档2中性信息条（灰色，无警示色） */
  .excess-banner[data-mode="neutral"]{background:var(--bg);border-color:var(--border)}
  .excess-banner[data-mode="neutral"] .ob-text{color:var(--muted)}
  .excess-banner[data-mode="neutral"] .ob-main strong{color:var(--text)}

  /* [v3] 档3积压横幅（琥珀色系） */
  .excess-banner.tier3{background:#fdf6e3;border-color:#e8d5a3}
  .excess-banner.tier3 .ob-text{color:#8a6a12}
  .excess-banner.tier3 .ob-main strong{color:#96600c}
  .excess-banner.tier3 .ob-sub{color:#a8842c}
  .excess-banner.tier3 .ob-btn{background:#fff;border-color:#e8d5a3;color:#a57010}
  html[data-theme="dark"] .excess-banner.tier3{background:#3a3520;border-color:#6b5d30}
  html[data-theme="dark"] .excess-banner.tier3 .ob-text{color:#d4b870}
  html[data-theme="dark"] .excess-banner.tier3 .ob-main strong{color:#e8c878}

  /* [v3] 琥珀色策略条 */
  .tight-strategy-bar{background:#fdf6e3;border:1px solid #e8d5a3;margin-bottom:12px}
  .tight-strategy-bar .ob-text{color:#8a6a12}
  .tight-strategy-bar .ob-main{color:#8a6a12;font-size:12.5px;line-height:1.6}
  .tight-strategy-bar .ob-btn{background:#fff;border:1px solid #e8d5a3;color:#a57010;font-size:11.5px;padding:4px 10px}
  html[data-theme="dark"] .tight-strategy-bar{background:#3a3520;border-color:#6b5d30}
  html[data-theme="dark"] .tight-strategy-bar .ob-text{color:#d4b870}
  html[data-theme="dark"] .tight-strategy-bar .ob-main{color:#d4b870}
  html[data-theme="dark"] .tight-strategy-bar .ob-btn{background:#2c2818;border-color:#6b5d30;color:#d4b870}

  /* [v3] 配置矛盾独立条 */
  .config-warn-bar{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--bg);border:1px solid var(--border);border-radius:10px;margin-bottom:10px;font-size:12.5px;color:var(--text);flex-wrap:wrap}
  .config-warn-bar .ob-advice-text{flex:1;min-width:200px}
  .config-warn-bar .ob-advice-btn{background:var(--brand);color:#fff;border:none;border-radius:8px;padding:4px 12px;font-size:12px;cursor:pointer;font-family:inherit}
  .config-warn-bar .ob-advice-btn:active{transform:scale(.96)}

  /* [v3] 身后排队灰字 */
  #behindQueue{font-size:12px;color:var(--muted)}

  /* ===== M1-M6 + S1-S4 审美修复 ===== */
  /* M1: excess-banner默认档深色覆盖（排除专用模式避免层叠冲突） */
  html[data-theme="dark"] .excess-banner:not(.tight-strategy-bar):not(.tier3):not([data-mode="expired"]):not(.celebrate){background:#2c3f63;border-color:#556c94}
  html[data-theme="dark"] .excess-banner:not(.tight-strategy-bar):not(.tier3):not([data-mode="expired"]):not(.celebrate) .ob-text{color:#b6c3d8}
  html[data-theme="dark"] .excess-banner:not(.tight-strategy-bar):not(.tier3):not([data-mode="expired"]):not(.celebrate) .ob-main strong{color:#83bca9}
  html[data-theme="dark"] .excess-banner:not(.tight-strategy-bar):not(.tier3):not([data-mode="expired"]):not(.celebrate) .ob-sub,
  html[data-theme="dark"] .excess-banner:not(.tight-strategy-bar):not(.tier3):not([data-mode="expired"]):not(.celebrate) .ob-hint{color:#b6c3d8}
  /* celebrate 完成条深色：回到品牌浅绿底，配深字 */
  html[data-theme="dark"] .excess-banner.celebrate{background:var(--brand);border-color:var(--brand)}

  /* M2: deadlinePassedBanner过期模式（琥珀色） */
  .excess-banner[data-mode="expired"]{background:#fdf8ec;border-color:#f5e4b8}
  .excess-banner[data-mode="expired"] .ob-text,
  .excess-banner[data-mode="expired"] .ob-main strong,
  .excess-banner[data-mode="expired"] .ob-sub{color:#8a6a12}
  html[data-theme="dark"] .excess-banner[data-mode="expired"]{background:#2c2818;border-color:#5a4a20}
  html[data-theme="dark"] .excess-banner[data-mode="expired"] .ob-text,
  html[data-theme="dark"] .excess-banner[data-mode="expired"] .ob-main strong,
  html[data-theme="dark"] .excess-banner[data-mode="expired"] .ob-sub{color:#d4b870}

  /* M3: #excessAdvice flex布局 + 独立按钮样式 */
  #excessAdvice{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .ob-advice-btn{background:var(--brand);color:#fff;border:none;border-radius:8px;padding:4px 12px;font-size:12px;cursor:pointer;font-family:inherit;flex:0 0 auto}
  .ob-advice-btn:active{transform:scale(.96)}
  html[data-theme="dark"] .ob-advice-btn{background:#83bca9;color:#10302a}

  /* M4: 后移按钮/逾期数 class */
  .ob-btn.postpone-btn{border-color:#b8860b;color:#b8860b}
  html[data-theme="dark"] .ob-btn.postpone-btn{border-color:#d4b870;color:#d4b870}
  .overdue-count{color:#b8860b}
  html[data-theme="dark"] .overdue-count{color:#d4b870}

  /* M5: .ob-btn全局深色兜底 */
  html[data-theme="dark"] .ob-btn{background:#2c3f63;border-color:#556c94;color:#cdae70}

  /* M6: ⚡提前标签 */
  .pull-fwd-tag{background:#fdf6e3;color:#b8860b;border-radius:4px;padding:1px 4px;font-size:11px}
  html[data-theme="dark"] .pull-fwd-tag{background:#2c3a4e;color:#d4b870}

  /* [P0-2] M6 冲刺模式徽章 */
  .recite-sprint-badge{display:inline-block;margin-left:8px;font-size:11px;font-weight:600;color:#96600c;background:#fdf6e3;border:1px solid #e8d5a3;padding:2px 8px;border-radius:999px;vertical-align:middle}
  html[data-theme="dark"] .recite-sprint-badge{background:#3a3520;color:#d4b870;border-color:#6b5d30}

  /* S1: 次级按钮 */
  .ob-advice-btn.secondary{background:transparent;color:var(--muted);border:1px solid var(--border)}
  html[data-theme="dark"] .ob-advice-btn.secondary{color:#b6c3d8;border-color:#556c94}

  /* S2: 归档实心按钮 */
  .ob-btn.archive-btn{background:#b8860b;color:#fff}
  html[data-theme="dark"] .ob-btn.archive-btn{background:#d4b870;color:#2c2818}

  /* S3: behindQueue高积压数字 */
  .behind-queue-high{color:#b8860b}
  html[data-theme="dark"] .behind-queue-high{color:#d4b870}

  /* S4: 数字tabular-nums统一 */
  .excess-banner .ob-main strong, #behindQueue b, #pullFwdNote, .ob-advice-text b{font-variant-numeric:tabular-nums}

  /* ===== 顶部两张统计卡：统一三行骨架（标题 / 数据 / 底部），任何状态下左右等高、中心线对齐 ===== */
  .stats{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;align-items:stretch}
  .stat{
    background:var(--card);
    border-radius:var(--radius);padding:24px;
    box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.7);
    border:1px solid var(--line);
    display:flex;flex-direction:column;min-height:224px;min-width:0;
    position:relative;overflow:hidden;
    transition:background .15s, color .15s;
  }
  .stat .label{font-size:13.5px;color:var(--muted);font-weight:500;margin-bottom:18px;flex-shrink:0}
  /* 三行骨架：标题区固定 / 数据区弹性且垂直居中 / 底部区等高 */
  .card-header{margin-bottom:18px;flex-shrink:0}
  .card-data-area{flex:1 1 auto;min-height:0;min-width:0;display:flex;flex-direction:column;align-items:stretch;justify-content:center}
  .stat-merged .card-data-area{flex-direction:row;align-items:center;justify-content:flex-start;gap:18px}
  .card-footer{margin-top:14px;flex-shrink:0;min-width:0}
  .card-footer-placeholder{margin-top:14px;height:32px;flex-shrink:0}
  /* 大数字（两卡共用 .stat-num，JS 按字符长度加 num-sm / num-xs 自动降档） */
  .stat .value{margin:0}
  .stat-num{font-size:44px;font-weight:800;letter-spacing:-1px;line-height:1.1;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}
  .stat-num small{font-size:18px;font-weight:600;color:var(--muted);margin-left:7px;letter-spacing:0;white-space:nowrap}
  .stat-num.num-sm{font-size:37px}
  .stat-num.num-sm small{font-size:15px;margin-left:6px}
  .stat-num.num-xs{font-size:30px;letter-spacing:-.5px}
  .stat-num.num-xs small{font-size:13px;margin-left:5px}
  /* 副文本固定预留两行，进度条位置不随文案长短跳动 */
  .stat .foot{font-size:12.5px;color:var(--muted);line-height:1.5;margin-top:8px;min-height:38px;overflow-wrap:anywhere}
  /* 合并卡片：环形进度 + 倒计时 */
  .ring-wrap{position:relative;width:76px;height:76px;flex:0 0 76px}
  .ring-wrap svg{width:100%;height:100%;transform:rotate(-90deg)}
  .ring-bg{fill:none;stroke:rgba(128,128,128,.15);stroke-width:7}
  .ring-fg{fill:none;stroke:url(#ringGrad);stroke-width:7;stroke-linecap:round;transition:stroke-dashoffset .5s}
  html[data-theme="dark"] .ring-fg{stroke:url(#ringGradDark)}
  html[data-theme="dark"] .ring-bg{stroke:rgba(255,255,255,.16)}
  .ring-text{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0}
  .ring-pct{font-size:17px;font-weight:700;line-height:1}
  .ring-lab{font-size:10px;color:var(--muted);margin-top:2px;white-space:nowrap}
  .merged-right{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;justify-content:center}
  .merged-summary{font-size:13px;color:var(--muted);margin-top:7px;line-height:1.5;overflow-wrap:anywhere}
  /* 今日目标进度条 + 状态化鼓励（全宽软横幅，长文案可优雅换两行） */
  .daily-goal{width:100%;margin:14px 0 0;padding:0;border-top:none;min-width:0}
  .dg-line{font-size:13px;font-weight:600;color:var(--text);line-height:1.4;font-variant-numeric:tabular-nums;margin-bottom:8px;min-height:18px;overflow-wrap:anywhere}
  .dg-bar{height:8px;border-radius:999px;background:rgba(128,128,128,.12);overflow:hidden}
  .dg-fill{height:100%;width:0;border-radius:999px;background:var(--brand);transition:width .45s ease, background .3s;box-shadow:none}
  .dg-praise{display:block;width:100%;padding:7px 14px;border-radius:12px;background:rgba(46,107,79,.08);color:var(--brand);font-size:12.5px;font-weight:500;line-height:1.45;min-height:32px;text-align:left;word-break:break-word;overflow-wrap:anywhere}
  /* 窄屏：两卡堆叠为单列，数字与环形图同步缩小 */
  @media(max-width:600px){
    .stats{grid-template-columns:1fr;gap:12px}
    .stat{padding:20px;min-height:0}
    .stat .label,.card-header{margin-bottom:14px}
    .stat-num{font-size:38px}
    .stat-num.num-sm{font-size:32px}
    .stat-num.num-xs{font-size:27px}
    .stat-num small{font-size:16px;margin-left:6px}
    .stat .foot{min-height:0}
    .ring-wrap{flex-basis:68px;width:68px;height:68px}
    .stat-merged .card-data-area{gap:14px}
    .card-footer,.card-footer-placeholder{margin-top:12px}
  }
  .daily-goal.dg-almost .dg-fill{background:var(--warn)}
  .dg-praise.dg-almost{background:rgba(176,122,75,.1);color:var(--warn);border:1px solid rgba(176,122,75,.18)}
  .daily-goal.dg-done .dg-fill{background:var(--ok)}
  .dg-praise.dg-done{background:rgba(31,138,102,.1);color:var(--ok);border:1px solid rgba(31,138,102,.18)}
  .daily-goal.dg-over .dg-fill{background:var(--warn)}
  .dg-praise.dg-over{background:rgba(176,122,75,.1);color:var(--warn);border:1px solid rgba(176,122,75,.18)}
  .daily-goal.dg-done-all .dg-fill{background:var(--ok)}
  .dg-praise.dg-done-all{background:rgba(31,138,102,.1);color:var(--ok);border:1px solid rgba(31,138,102,.18)}
  .dg-praise.dg-idle{background:rgba(46,107,79,.06);color:var(--brand);border:1px solid rgba(46,107,79,.12)}
  .dg-praise.dg-progress{background:rgba(46,107,79,.08);color:var(--brand);border:1px solid rgba(46,107,79,.15)}
  .daily-goal.dg-progress .dg-fill{background:var(--brand)}
  /* 深色模式胶囊颜色适配 */
  html[data-theme="dark"] .dg-praise.dg-idle{background:rgba(131,188,169,.1);color:#83bca9;border-color:rgba(131,188,169,.2)}
  html[data-theme="dark"] .dg-praise.dg-progress{background:rgba(131,188,169,.12);color:#83bca9;border-color:rgba(131,188,169,.22)}
  html[data-theme="dark"] .dg-praise.dg-almost{background:rgba(205,174,112,.12);color:#e0c88f;border-color:rgba(205,174,112,.22)}
  html[data-theme="dark"] .dg-praise.dg-done{background:rgba(120,186,160,.12);color:#abdcc4;border-color:rgba(120,186,160,.22)}
  html[data-theme="dark"] .dg-praise.dg-over{background:rgba(205,174,112,.12);color:#e0c88f;border-color:rgba(205,174,112,.22)}
  html[data-theme="dark"] .dg-praise.dg-done-all{background:rgba(120,186,160,.12);color:#abdcc4;border-color:rgba(120,186,160,.22)}

  .status{display:flex;gap:14px;align-items:flex-start;padding:16px 18px;border-radius:12px;margin:10px 0;background:var(--card);border:1px solid var(--line)}
  .status.ok{border-left:4px solid var(--ok)}
  .status.info{border-left:4px solid var(--brand)}
  .status.warn{border-left:4px solid var(--warn)}
  .status.bad{border-left:4px solid var(--bad)}
  .status-icon{font-size:22px;line-height:1.2;flex-shrink:0;margin-top:2px}
  .status-body{flex:1;min-width:0}
  .status-title{font-weight:600;margin-bottom:8px;font-size:15px;color:var(--text);line-height:1.4}
  .status-desc{font-size:13px;color:var(--muted);line-height:1.8}
  .status-desc b{color:var(--text);font-weight:600}
  .status-desc strong{color:var(--text);font-weight:600}
  .status-desc br{margin-bottom:6px;display:block;content:""}
  /* 深色模式状态卡 */
  html[data-theme="dark"] .status{border-color:var(--line)}

  .bar-wrap{position:relative;padding:16px 0 5px}
  .bar{height:12px;background:#ebe3d4;border-radius:999px;overflow:hidden}
  .bar-fill{height:100%;background:var(--brand);border-radius:999px;transition:width .5s cubic-bezier(.4,0,.2,1)}
  .bar-time{position:absolute;top:5px;width:2px;height:22px;background:#ffb020;border-radius:2px;transform:translateX(-1px)}
  .bar-time::before{content:'今天';position:absolute;top:-13px;left:50%;transform:translateX(-50%);font-size:9.5px;color:#e0a020;white-space:nowrap;line-height:1}
  .legend{display:flex;gap:18px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin:10px 0 6px}
  .legend span{display:flex;align-items:center;gap:6px}
  .dot{width:9px;height:9px;border-radius:3px;display:inline-block}
  #chart{width:100%;display:block;margin-top:6px}

  .unit-list{list-style:none}
  .unit-item{padding:12px 0;border-bottom:1px solid var(--line)}
  .unit-item:last-child{border-bottom:none}
  .unit-head{display:flex;justify-content:space-between;align-items:center;font-size:13.5px;margin-bottom:6px;gap:10px;flex-wrap:wrap}
  .unit-name{font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
  .unit-range{color:var(--muted);font-size:12px;flex:0 0 auto}
  .unit-bar{height:8px;background:#ebe3d4;border-radius:999px;overflow:hidden}
  .unit-bar-fill{height:100%;background:var(--brand);border-radius:999px;transition:width .4s}
  .unit-current{font-size:11.5px;color:var(--brand);font-weight:600}
  .unit-progress{font-size:11.5px;color:var(--muted);margin-top:5px}

  .m-badge{
    font-size:11.5px;font-weight:600;
    padding:2px 9px;border-radius:999px;
    display:inline-flex;align-items:center;gap:4px;
    letter-spacing:0;
  }
  .m-badge.m-solid{background:#d1f0e0;color:#096f4e}
  .m-badge.m-good{background:#e4ecd5;color:#096f4e}
  .m-badge.m-fuzzy{background:#fbf0da;color:#96600c}
  .m-badge.m-weak{background:#f8e5de;color:#b02e24}
  .m-badge.m-new{background:#f0eef9;color:#8b86a8}
  .m-badge.m-mastered{background:#e9ebdb;color:var(--brand)}
  .m-badge .dot-sm{width:6px;height:6px;border-radius:50%;background:currentColor}

  .records{list-style:none}
  .records li{
    display:flex;align-items:center;gap:10px;padding:12px 2px;flex-wrap:wrap;
    border-bottom:1px solid var(--line);font-size:14px;
    border-left:3px solid transparent;
    padding-left:10px;border-radius:4px;
    transition:.15s;
  }
  .records li:last-child{border-bottom:none}
  .records li.m-solid{border-left-color:var(--m-solid)}
  .records li.m-good{border-left-color:var(--m-good)}
  .records li.m-fuzzy{border-left-color:var(--m-fuzzy)}
  .records li.m-weak{border-left-color:var(--m-weak)}
  .records li.m-mastered{border-left-color:var(--m-mastered)}
  .r-line{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
  .r-line-main{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
  .r-line-meta{display:flex;align-items:center;gap:8px;flex:0 0 auto;white-space:nowrap}
  .r-date{color:var(--muted);width:110px;flex:0 0 auto;font-size:13px}
  .r-page{font-weight:600;flex:0 0 auto;font-variant-numeric:tabular-nums;color:var(--muted);font-size:13px}
  .quick-record-badge{
    background:#e9ebdb;border:1px solid #b9d2c4;color:#2e6b4f;
    font-family:inherit;font-size:10px;font-weight:700;letter-spacing:.5px;
    padding:1px 6px;border-radius:6px;cursor:pointer;transition:.15s;flex:0 0 auto;
    line-height:1.4;
  }
  .quick-record-badge:hover{background:#d8e6dc;border-color:#9cc4b0}
  html[data-theme="dark"] .quick-record-badge{background:rgba(131,188,169,.15);border-color:rgba(131,188,169,.35);color:#83bca9}
  html[data-theme="dark"] .quick-record-badge:hover{background:rgba(131,188,169,.25)}
  .r-content{font-weight:600;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .r-delta{color:var(--ok);font-weight:600;font-size:12.5px;font-variant-numeric:tabular-nums;flex:0 0 auto}
  .r-delta.zero{color:#c3cbd9}
  .r-del{background:none;border:none;color:#b6c3d8;cursor:pointer;line-height:1;padding:5px;border-radius:7px;font-family:inherit;flex:0 0 auto;transition:.15s;display:inline-flex;align-items:center;justify-content:center}
  .early-review-btn{
    background:#e9ebdb;border:1px solid #b9d2c4;color:#2e6b4f;
    font-family:inherit;font-size:11px;font-weight:600;
    padding:3px 8px;border-radius:7px;cursor:pointer;transition:.15s;flex:0 0 auto;
  }
  .badge{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;background:#e9ebdb;color:var(--brand);flex:0 0 auto}
  .badge-ok{background:#e4ecd5;color:#096f4e}
  .badge-warn{background:#fbf0da;color:#96600c}
  .badge-muted{background:#f0eef9;color:#8b86a8}
  .empty{font-size:13px;color:var(--muted);padding:8px 2px}

  .footer{text-align:center;font-size:12px;color:var(--muted);margin-top:22px;line-height:1.7}

  .mask{
    position:fixed;inset:0;background:rgba(44,38,32,.45);
    display:flex;align-items:center;justify-content:center;
    padding:20px;z-index:100;overscroll-behavior:contain;
  }
  .modal{
    background:var(--elevated);border-radius:20px;padding:26px;width:100%;max-width:520px;
    box-shadow:0 24px 70px -20px rgba(44,38,32,.45);
    max-height:90vh;max-height:90svh;max-height:calc(var(--vvh) * 0.9);overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;
    animation:pop .18s ease-out;
  }
  @keyframes pop{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
  .modal h2{font-size:19px;margin-bottom:6px}
  .modal .msub{font-size:13px;color:var(--muted);margin-bottom:20px;line-height:1.6}
  .modal label{display:flex;flex-direction:column;gap:6px;font-size:12.5px;color:var(--muted);margin-bottom:14px}
  .modal .two-col{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  .modal .two-col label{margin-bottom:14px}
  .modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;gap:10px}
  .modal-head h2{margin-bottom:0}
  .x-btn{
    background:none;border:none;color:var(--muted);line-height:1;
    cursor:pointer;padding:6px;border-radius:7px;font-family:inherit;transition:.15s;
    display:inline-flex;align-items:center;justify-content:center;
  }
  /* 纯图标关闭按钮：不要 button>.ic 的 5px 右间距，否则图标被推偏 */
  .x-btn>.ic,.r-del>.ic,.pi-del>.ic,.ps-del>.ic,.rt-del>.ic,.reason-del>.ic,#storageWarnClose>.ic,.iar-close>.ic,.ai-legal-close>.ic,.nb-close>.ic,.unit-action-btn>.ic{margin-right:0}
  html[data-theme="dark"] .x-btn{color:#b6c3d8}
  .modal-actions{display:flex;align-items:center;gap:10px;margin-top:18px;flex-wrap:wrap}
  .modal-actions .spacer{flex:1}
  .sec-title{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.5px;text-transform:uppercase;margin:22px 0 10px;padding-top:16px;border-top:1px solid var(--line)}
  .sec-title:first-of-type{border-top:none;padding-top:0;margin-top:0}

  .form-import-hint{
    display:flex;align-items:center;justify-content:center;gap:6px;
    margin-top:18px;padding-top:18px;
    border-top:1px solid var(--line);
    font-size:12.5px;color:var(--muted);
    flex-wrap:wrap;
  }
  .link-btn{
    background:none;border:none;padding:0;
    color:var(--brand);font-family:inherit;font-size:12.5px;font-weight:600;
    cursor:pointer;text-decoration:underline;
    text-underline-offset:3px;text-decoration-thickness:1px;
    transition:.15s;
  }

  .type-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
  .type-opt{cursor:pointer;position:relative;display:block}
  .type-opt input{position:absolute;opacity:0;pointer-events:none}
  .type-opt-inner{
    display:flex;flex-direction:column;align-items:center;gap:4px;
    padding:14px 8px;border-radius:12px;border:1.5px solid var(--line);
    background:#faf6ec;transition:.15s;text-align:center;
  }
  .type-opt input:checked + .type-opt-inner{border-color:var(--brand);background:#e9ebdb}
  .type-opt .type-icon{font-size:22px;line-height:1}
  .type-opt .type-name{font-size:13px;font-weight:600;color:var(--text)}
  .type-opt .type-desc{font-size:10.5px;color:var(--muted);line-height:1.3}

  .seg{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .seg-opt{cursor:pointer;position:relative;display:block}
  .seg-opt input{position:absolute;opacity:0;pointer-events:none}
  .seg-opt span{display:block;text-align:center;padding:10px 8px;border-radius:10px;border:1.5px solid var(--line);background:#faf6ec;font-size:13px;color:var(--muted);transition:.15s}
  .seg-opt input:checked + span{border-color:var(--brand);background:#e9ebdb;color:var(--text);font-weight:600}

  .project-list{list-style:none;margin-bottom:18px;max-height:52vh;overflow-y:auto;padding:2px}
  .project-item{
    display:flex;align-items:center;gap:12px;
    padding:13px 14px;border-radius:12px;cursor:pointer;
    transition:.15s;border:1.5px solid transparent;margin-bottom:8px;background:#faf6ec;
    border-left-width:4px;
    border-left-color:transparent;
  }
  .project-item.active{background:#e9ebdb;border-color:#b9d2c4;border-left-color:var(--brand)}
  .project-item.type-exercise.active{border-left-color:var(--brand)}
  .project-item.type-recite.active{border-left-color:#096f4e}
  .project-item.type-mistake.active{border-left-color:#96600c}
  .project-item.type-recite:not(.active){border-left-color:#bfe8d4}
  .project-item.type-mistake:not(.active){border-left-color:#f5ddb3}
  .pi-icon{font-size:20px;flex:0 0 auto;line-height:1}
  .pi-main{flex:1;min-width:0}
  .pi-name{
    font-weight:600;font-size:14.5px;
    display:flex;align-items:center;gap:8px;flex-wrap:wrap;
    min-width:0;
  }
  .pi-name-text{
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
    min-width:0;flex:0 1 auto;max-width:100%;
  }
  .pi-meta{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.4}

  /* 排序模式 */
  .project-item.sort-mode{background:var(--elevated);cursor:default}
  .pi-sort-btns{display:flex;flex-direction:column;gap:4px;flex:0 0 auto}
  .pi-sort-btn{
    width:28px;height:24px;display:flex;align-items:center;justify-content:center;
    border:1px solid var(--line);background:var(--card);color:var(--brand);cursor:pointer;
    border-radius:8px;padding:0;line-height:1;transition:.15s;
  }
  .pi-sort-btn:hover{background:var(--brand);color:#fff;border-color:var(--brand)}
  .pi-sort-btn:active{transform:scale(.95)}
  .pi-sort-btn:disabled{color:var(--line);cursor:default;background:transparent;border-color:var(--line)}
  .pi-sort-btn:disabled:hover{background:transparent;color:var(--line);border-color:var(--line)}
  .text-btn{background:none;border:none;cursor:pointer;font-family:inherit;transition:.15s}
  .text-btn:hover{background:rgba(46,107,79,.08)}

  .type-tag{
    font-size:10.5px;font-weight:600;
    padding:2px 8px;border-radius:999px;
    flex:0 0 auto;letter-spacing:.2px;
    background:#e9ebdb;color:var(--brand);
    display:inline-flex;align-items:center;gap:4px;
  }
  .type-tag .ic{width:13px;height:13px;flex:0 0 auto}
  .type-tag.recite{background:#e4ecd5;color:#096f4e}
  .type-tag.mistake{background:#fbf0da;color:#96600c}

  .pi-del{
    background:none;border:none;color:#b6c3d8;cursor:pointer;
    line-height:1;padding:5px;border-radius:7px;font-family:inherit;transition:.15s;
    display:inline-flex;align-items:center;justify-content:center;
  }

  .unit-edit-row{display:grid;grid-template-columns:2fr 1fr 1fr auto;gap:8px;margin-bottom:8px;align-items:center}
  .unit-edit-row input{font-size:13px;padding:7px 10px}
  .unit-edit-del{background:none;border:none;color:#b6c3d8;cursor:pointer;font-size:20px;padding:2px 8px;border-radius:7px;font-family:inherit}
  .unit-edit-btn{background:none;border:1px solid var(--border);color:var(--muted);cursor:pointer;font-size:11px;padding:2px 6px;border-radius:5px;font-family:inherit;white-space:nowrap}
  /* 新版单元编辑器 */
  .unit-edit-row{margin-bottom:8px}
  .unit-edit-main{display:flex;align-items:center;gap:8px;padding:10px 12px;background:var(--card);border:1px solid var(--border);border-radius:12px;transition:border-color .15s}
  .unit-tree-line{color:#cbd5e1;font-size:15px;user-select:none;flex-shrink:0}
  input.unit-name-input{flex:1;min-width:0;width:auto;border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:13.5px;font-family:inherit;background:var(--bg);color:var(--text)}
  input.unit-name-input:focus{outline:none;border-color:#2e6b4f;background:var(--card);box-shadow:none}
  .unit-page-group{display:flex;align-items:center;gap:4px;flex-shrink:0}
  input.unit-page-input{width:48px;min-width:48px;border:1px solid var(--border);border-radius:6px;padding:6px 4px;font-size:12.5px;text-align:center;font-family:inherit;background:var(--bg);color:var(--text)}
  input.unit-page-input:focus{outline:none;border-color:#2e6b4f;background:var(--card);box-shadow:none}
  .unit-page-sep{color:#94a3b8;font-size:12px;flex-shrink:0}
  .unit-actions{display:flex;gap:3px;align-items:center;flex-shrink:0}
  .unit-action-btn{width:28px;height:28px;background:none;border:1px solid var(--border);color:#8a8175;cursor:pointer;border-radius:6px;font-family:inherit;font-size:14px;display:flex;align-items:center;justify-content:center;transition:all .15s}
  html[data-theme="dark"] .unit-edit-main{background:#3a5079;border-color:#556c94}
  html[data-theme="dark"] input.unit-name-input,html[data-theme="dark"] input.unit-page-input{background:#2c3f63;border-color:#556c94;color:var(--text)}
  html[data-theme="dark"] input.unit-name-input:focus,html[data-theme="dark"] input.unit-page-input:focus{background:#4a628e}
  .add-row-btn{
    background:#f3efe3;border:1px dashed #d8c9a6;color:var(--brand);
    padding:8px 14px;border-radius:10px;font-size:13px;cursor:pointer;font-family:inherit;
    width:100%;transition:.15s;
  }

  .data-actions{display:flex;gap:10px;flex-wrap:wrap}

  .toast{
    position:fixed;top:calc(24px + env(safe-area-inset-top));left:50%;
    transform:translate(-50%, -20px);
    background:var(--card);color:var(--text);border-radius:16px;padding:16px 22px;
    box-shadow:0 20px 50px -12px rgba(44,38,32,.35), 0 0 0 1px rgba(44,38,32,.05);
    display:flex;align-items:center;gap:14px;
    max-width:min(420px, calc(100vw - 32px));
    opacity:0;transition:opacity .3s, transform .3s;
    z-index:200;pointer-events:none;
  }
  .toast.show{opacity:1;transform:translate(-50%, 0)}
  html[data-theme="dark"] .toast{box-shadow:0 20px 50px -12px rgba(0,0,0,.6), 0 0 0 1px rgba(255,255,255,.06)}
  .toast-icon{flex:0 0 auto;line-height:1}
  .toast-body{min-width:0}
  .toast-title{font-weight:700;font-size:15px;margin-bottom:3px}
  .toast-desc{font-size:12.5px;color:var(--muted);line-height:1.5}

  /* 应用内提醒（移动端 Notification API 不可用时的兜底） */
  .inapp-reminder{
    position:fixed;top:24px;left:50%;transform:translateX(-50%) translateY(-150%);
    width:min(460px,calc(100vw - 32px));max-height:calc(100vh - 48px);z-index:999999;
    background:#fffdf8;
    border-radius:20px;padding:20px 22px 20px 18px;
    box-shadow:0 20px 50px -12px rgba(60,45,20,.3),0 8px 20px rgba(0,0,0,.12);
    border:1px solid var(--line);
    transition:transform .4s cubic-bezier(.34,1.56,.64,1),opacity .3s ease;
    opacity:0;pointer-events:none;
    display:flex;gap:16px;align-items:center;
    overflow-y:auto;
    font-family:var(--font);
  }
  .inapp-reminder.show{transform:translateX(-50%) translateY(0);opacity:1;pointer-events:auto}
  .inapp-reminder .iar-icon{flex:0 0 auto;width:48px;height:48px;border-radius:14px;background:var(--brand);display:flex;align-items:center;justify-content:center;font-size:24px;box-shadow:0 4px 12px rgba(60,45,20,.2)}
  .inapp-reminder .iar-content{flex:1;min-width:0}
  .inapp-reminder .iar-title{font-weight:700;font-size:15px;margin-bottom:6px;color:var(--text);letter-spacing:.2px}
  .inapp-reminder .iar-body{font-size:13px;line-height:1.75;color:var(--muted);white-space:pre-line;word-break:break-word}
  .inapp-reminder .iar-close{position:absolute;top:12px;right:14px;font-size:20px;opacity:.35;cursor:pointer;line-height:1;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:all .2s;color:var(--text)}

  .wb-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:18px}
  .wb-stat{text-align:center;padding:12px 6px;border-radius:12px;background:var(--inputBg)}
  .wb-stat .num{font-size:26px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}
  .wb-stat .lab{font-size:11px;color:var(--muted);margin-top:3px}
  .wb-stat.s-total .num{color:var(--text)}
  .wb-stat.s-mastered .num{color:var(--ok)}
  .wb-stat.s-due .num{color:var(--warn)}
  .wb-stat.s-weak .num{color:var(--bad)}
  .wb-section-title{font-size:13px;font-weight:700;margin:18px 0 10px;color:var(--text)}
  .wb-list{list-style:none;min-height:120px;max-height:320px;overflow-y:auto;margin-bottom:8px}
  .wb-item{
    display:flex;align-items:center;gap:10px;padding:11px 12px;
    border-radius:10px;margin-bottom:6px;background:#faf6ec;
    border:1px solid var(--line);border-left-width:4px;
    transition:.15s;
  }
  .wb-item.m-weak{border-left-color:var(--m-weak)}
  .wb-item.m-fuzzy{border-left-color:var(--m-fuzzy)}
  .wb-item.m-good{border-left-color:var(--m-good)}
  .wb-item.m-solid{border-left-color:var(--m-solid)}
  .wb-item.m-mastered{border-left-color:var(--m-mastered)}
  .wb-item.m-new{border-left-color:var(--m-new)}
  .wb-item-main{flex:1;min-width:0}
  .wb-item-content{font-weight:600;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .wb-item-meta{font-size:11.5px;color:var(--muted);margin-top:2px;display:flex;gap:6px;flex-wrap:wrap}
  .wb-score{
    font-size:12px;font-weight:700;padding:3px 8px;border-radius:8px;
    flex:0 0 auto;font-variant-numeric:tabular-nums;
  }
  .wb-score.s-red{background:#f8e5de;color:#b02e24}
  .wb-score.s-yellow{background:#fbf0da;color:#96600c}
  .wb-score.s-green{background:#e4ecd5;color:#096f4e}
  .wb-units{margin-bottom:8px}
  .wb-reasons{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}
  .wb-reasons-card{display:flex;gap:18px;align-items:center;background:#faf6ec;border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:10px}
  .wb-pie{flex:0 0 auto}
  .wb-pie-legend{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
  .wb-pie-row{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;padding:4px 6px;border-radius:8px}
  .wb-pie-row .dot{width:11px;height:11px;border-radius:50%;flex:0 0 auto}
  .wb-pie-row .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .wb-pie-row .ct{font-weight:700;font-variant-numeric:tabular-nums}
  .wb-pie-row .pc{font-size:11.5px;color:var(--muted);width:42px;text-align:right}
  .wb-reason-detail{margin-bottom:10px}
  .wb-reason-detail .rd-head{font-size:13px;font-weight:700;margin:6px 0 8px;color:#2e6b4f}
  .wb-reason-detail .rd-item{display:flex;justify-content:space-between;gap:10px;padding:7px 10px;background:var(--card);border:1px solid var(--line);border-radius:8px;margin-bottom:5px;font-size:12.5px}
  .wb-reason-chip{font-size:12.5px;padding:6px 12px;border-radius:999px;background:#fbf0da;color:#8a6a12;border:1px solid #f0dfae}
  .wb-reason-chip b{font-size:14px;margin-left:4px}
  .wb-reason-chip[draggable]{cursor:grab;user-select:none}
  .reason-pill{display:inline-block;font-size:11px;font-weight:600;padding:1px 8px;border-radius:999px;vertical-align:middle;margin-right:4px;margin-bottom:2px}
  .qe-reason-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--border);border-radius:999px;background:var(--bg);font-size:12px;cursor:pointer;font-family:inherit;color:var(--text);transition:.15s}
  .qe-reason-chip:hover{border-color:#b9d2c4}
  .qe-reason-chip.on{background:#e9ebdb;border-color:#b9d2c4;color:#2e6b4f;font-weight:600}
  .qe-reason-chip .qe-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
  html[data-theme="dark"] .qe-reason-chip.on{background:rgba(131,188,169,.15);border-color:rgba(131,188,169,.35);color:#83bca9}
  .qe-add-reason{display:inline-flex;align-items:center;gap:4px;padding:4px 12px;border:1px dashed #b9d2c4;border-radius:999px;background:transparent;color:#2e6b4f;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;margin-top:8px;transition:.15s}
  .qe-add-reason:hover{background:#e9ebdb;border-style:solid}
  html[data-theme="dark"] .qe-add-reason{border-color:rgba(131,188,169,.4);color:#83bca9}
  html[data-theme="dark"] .qe-add-reason:hover{background:rgba(131,188,169,.12);border-style:solid}
  .reason-dd{position:relative}
  .reason-dd-btn{width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;text-align:left;font-size:13px;cursor:pointer;font-family:inherit;display:flex;flex-wrap:wrap;gap:4px;align-items:center}
  .reason-dd-panel{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.12);z-index:60;max-height:280px;overflow-y:auto;padding:6px}
  .reason-dd-row{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;cursor:pointer;font-size:13px}
  .reason-dd-row.sel{background:#e9ebdb;font-weight:600}
  .reason-dd-dot{width:10px;height:10px;border-radius:50%;flex:0 0 auto}
  .reason-dd-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .reason-dd-handle{color:#c0bdd6;cursor:grab;font-size:14px;flex:0 0 auto;padding:0 2px}
  .reason-dd-check{width:16px;flex:0 0 auto;font-weight:700;color:#2e6b4f;text-align:center}
  .reason-del{flex:0 0 auto;width:18px;height:18px;line-height:18px;text-align:center;border-radius:50%;color:#b02e24;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
  .tag-btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 12px;font-size:12.5px;cursor:pointer;font-family:inherit;color:#555;transition:.15s}
  #reasonPopover{position:fixed;z-index:200;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.15);max-height:260px;overflow-y:auto;padding:6px;width:230px}
  #reasonPopover .rp-row{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;cursor:pointer;font-size:13px}
  #reasonPopover .rp-row.sel{background:#e9ebdb;font-weight:600}
  #reasonPopover .rp-check{width:16px;font-weight:700;color:#2e6b4f}
  #reasonPopover .rp-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .reason-dd-add{width:100%;border:none;background:#e9ebdb;color:#2e6b4f;padding:9px;border-radius:8px;margin-top:6px;cursor:pointer;font-family:inherit;font-size:13px;font-weight:600}
  .reason-dd-hint{font-size:11px;color:var(--muted);padding:6px 4px 2px}
  .mini-link{border:none;background:none;color:var(--brand);font-size:11px;cursor:pointer;margin-left:6px;font-family:inherit}
  select#reciteErrTagSel{font-weight:600}
  .wb-reason-none{font-size:12.5px;color:var(--muted)}
  .wb-notepad{width:100%;min-height:72px;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.6;resize:vertical;background:#fffdf5;color:#5a4a12}
  .wb-notepad:focus{outline:2px solid #e8c766}
  .wb-unit-row{margin-bottom:10px}
  .wb-unit-head{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:4px}
  .wb-unit-bar{height:8px;background:#ebe3d4;border-radius:999px;overflow:hidden}
  .wb-unit-group{margin-bottom:14px}
  .wb-unit-group-head{display:flex;justify-content:space-between;align-items:center;font-size:13.5px;font-weight:600;margin-bottom:4px;padding:6px 10px;background:var(--card);border-radius:8px}
  .wb-unit-group-bar{height:4px;background:#ebe3d4;border-radius:3px;margin-bottom:6px;overflow:hidden}
  .wb-unit-items{list-style:none;margin:0;padding:0}
  .wb-unit-fill{height:100%;border-radius:999px;transition:width .4s}
  .wb-filter{display:flex;gap:6px;margin-bottom:20px;flex-wrap:wrap}
  .wb-filter-btn{
    background:#f0eef9;border:1px solid transparent;color:var(--muted);
    font-family:inherit;font-size:12px;font-weight:600;
    padding:5px 12px;border-radius:999px;cursor:pointer;transition:.15s;
  }
  .wb-filter-btn.active{background:var(--brand);color:#fff}
  .wb-filter-btn:focus-visible{outline:2px solid var(--brand);outline-offset:1px;border-radius:999px}
  .wb-empty{text-align:center;color:var(--muted);font-size:13px;padding:24px 0}
  .wb-subtitle{font-size:12.5px;color:var(--muted);line-height:1.6;margin:-6px 0 14px}
  .wb-dist{margin:-4px 0 16px}
  .wb-dist-bar{display:flex;height:14px;border-radius:7px;overflow:hidden;background:#f1f1f7}
  .wb-dist-seg{height:100%;transition:flex .3s}
  .wb-dist-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:8px;font-size:11.5px;color:var(--muted)}
  .wb-dist-legend .d{display:inline-flex;align-items:center;gap:5px}
  .wb-dist-legend .d i{width:10px;height:10px;border-radius:3px;display:inline-block}
  .wb-dist-legend b{color:var(--text);font-variant-numeric:tabular-nums}

  /* ===== 打卡热力图（重设计版） ===== */
  :root{
    --hm-0:#e8e2d4;--hm-1:#c2e0d2;--hm-2:#8cc9b0;--hm-3:#4ea07e;--hm-4:#2e6b4f;
    --hm-cell:16px;--hm-gap:3px;--hm-radius:4px;--hm-today-ring:var(--brand);
  }
  html[data-theme="dark"]{
    --hm-0:#3c5078;--hm-1:#3d6b5c;--hm-2:#5a9a82;--hm-3:#78baa0;--hm-4:#a8dcc8;--hm-today-ring:#bfe8d6;
  }
  .wb-heatmap-wrap{margin:0 0 24px;padding:16px 14px;background:var(--inputBg);border-radius:14px;border:1px solid var(--border);max-width:880px}
  .wb-heat-stats{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  /* 统计卡：无悬停动态，仅静态凹槽，数字 tabular-nums */
  .wb-heat-stats .hstat{flex:1;min-width:80px;padding:10px 12px;background:var(--card);border-radius:10px;border:1px solid var(--border);text-align:center}
  .wb-heat-stats .hstat .hstat-num{font-size:22px;font-weight:700;color:var(--brand);font-variant-numeric:tabular-nums;line-height:1.2}
  .wb-heat-stats .hstat .hstat-lab{font-size:11px;color:var(--muted);margin-top:2px}
  .wb-heatmap-months{display:flex;gap:0;margin-bottom:6px;padding-left:26px;font-size:10px;color:var(--muted);height:14px;overflow:hidden;line-height:14px}
  .wb-heatmap-months span{flex:0 0 auto;text-align:left;font-weight:500;white-space:nowrap}
  .wb-heatmap-dow{display:flex;flex-direction:column;gap:var(--hm-gap);font-size:9px;color:var(--muted);width:20px;text-align:right;padding-top:0;line-height:var(--hm-cell);flex-shrink:0}
  .wb-heatmap-scroll{overflow-x:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:4px}
  .wb-heatmap-scroll::-webkit-scrollbar{height:6px}
  .wb-heatmap-scroll::-webkit-scrollbar-track{background:transparent}
  .wb-heatmap-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
  .wb-heatmap{display:flex;gap:var(--hm-gap);flex-wrap:nowrap}
  .wb-heatmap-col{display:flex;flex-direction:column;gap:var(--hm-gap);position:relative}
  .hm-col-label{height:14px;line-height:14px;font-size:10px;color:var(--muted);white-space:nowrap;overflow:visible;font-weight:500}
  /* 格子：无 hover 缩放/发光，仅保留 cursor:pointer 与按压反馈 */
  .hm-cell{width:var(--hm-cell);height:var(--hm-cell);border-radius:var(--hm-radius);cursor:pointer;flex:0 0 auto;border:1px solid transparent;position:relative}
  .hm-cell:active{transform:scale(.9)}
  .hm-cell.hm-0{background:var(--hm-0)}
  .hm-cell.hm-1{background:var(--hm-1)}
  .hm-cell.hm-2{background:var(--hm-2)}
  .hm-cell.hm-3{background:var(--hm-3)}
  .hm-cell.hm-4{background:var(--hm-4)}
  /* 今天：静态 outline 环，删除脉冲发光 */
  .hm-cell.hm-today{outline:2px solid var(--hm-today-ring);outline-offset:1px;z-index:1}
  .hm-cell.hm-future{background:transparent;border:1px dashed var(--border);cursor:default}
  .wb-heatmap-empty{text-align:center;padding:28px 16px;color:var(--muted);font-size:13px;line-height:1.6}
  .wb-heatmap-empty .empty-icon{font-size:32px;margin-bottom:10px;opacity:.5}
  .wb-heatmap-empty .empty-hint{font-size:12px;opacity:.8;margin-top:4px}
  .wb-heatmap-legend{display:flex;align-items:center;gap:10px;margin-top:12px;flex-wrap:wrap}
  .wb-heatmap-legend .legend-item{display:inline-flex;align-items:center;gap:3px}
  .wb-heatmap-legend .hm-cell{cursor:default;width:12px;height:12px}
  .wb-heatmap-legend .legend-num{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
  /* === 月历热力图（个人薄弱点看板）：默认当月、可切换、固定6行不跳变 === */
  .wb-heatmap-nav{display:flex;align-items:center;justify-content:center;gap:14px;margin:6px 0 10px}
  .wb-heat-month-label{font-size:15px;font-weight:700;min-width:110px;text-align:center;font-variant-numeric:tabular-nums}
  .wb-heat-nav-btn{width:34px;height:34px;padding:0;font-size:20px;line-height:1;display:inline-flex;align-items:center;justify-content:center}
  .wb-calendar-dow{display:grid!important;grid-template-columns:repeat(7,1fr);gap:4px;width:auto!important;flex-direction:row!important;text-align:center!important;padding:0!important;line-height:1.4!important;font-size:11.5px!important;color:var(--muted)!important;margin-bottom:4px}
  .wb-calendar-dow span{padding:2px 0}
  .wb-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;min-height:240px}
  .wb-cal-cell{position:relative;height:60px;border-radius:8px;background:var(--hm-0);border:1px solid var(--border);display:flex;align-items:flex-start;justify-content:flex-end;padding:4px 6px;cursor:pointer;box-sizing:border-box}
  .wb-cal-cell.wb-cal-empty{background:var(--hm-0);border:1px solid var(--border);opacity:.3;cursor:default}
  .wb-cal-cell.hm-1{background:var(--hm-1)}
  .wb-cal-cell.hm-2{background:var(--hm-2)}
  .wb-cal-cell.hm-3{background:var(--hm-3)}
  .wb-cal-cell.hm-4{background:var(--hm-4)}
  .wb-cal-num{font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1;color:rgba(41,36,29,.6)}
  .wb-cal-cell.hm-3 .wb-cal-num{color:rgba(41,36,29,.75)}
  .wb-cal-cell.hm-4 .wb-cal-num{color:#fff}
  .wb-cal-today{outline:2px solid var(--brand);outline-offset:-2px}
  .wb-cal-future .wb-cal-num{opacity:.5}
  .wb-cal-cell:active{transform:scale(.96)}
  html[data-theme="dark"] .wb-cal-num{color:rgba(231,237,246,.6)}
  html[data-theme="dark"] .wb-cal-cell.hm-3 .wb-cal-num{color:rgba(231,237,246,.85)}
  html[data-theme="dark"] .wb-cal-cell.hm-4 .wb-cal-num{color:#1a2540}
  .wb-heat-detail{margin-top:12px;margin-bottom:16px;padding:16px;background:var(--card);border-radius:14px;border:1px solid var(--border);box-shadow:var(--shadow);max-width:880px;min-height:200px}
  /* 计划圆点标记（未来/过去有计划复习的日期） */
  .wb-cal-plan-dot{position:absolute;bottom:4px;right:5px;width:5px;height:5px;border-radius:50%;background:var(--brand);opacity:.7}
  .wb-cal-cell.wb-cal-future .wb-cal-plan-dot{opacity:.9}
  /* 掌握状态徽章 */
  .hm-badge{display:inline-block;font-size:10px;padding:1px 6px;border-radius:4px;font-weight:600;margin-right:6px;vertical-align:middle;line-height:1.5}
  .hm-badge-done{background:#d4ede0;color:#1e5638}
  .hm-badge-overdue{background:#f5d9d0;color:#8a3a1e}
  .hm-badge-learning{background:#e3ddc8;color:#6b5a1e}
  .hm-badge-new{background:#e0e0e0;color:#666}
  html[data-theme="dark"] .hm-badge-done{background:#2a4a3a;color:#a8dcc8}
  html[data-theme="dark"] .hm-badge-overdue{background:#4a2a2a;color:#f0b8a8}
  html[data-theme="dark"] .hm-badge-learning{background:#3a3a2a;color:#e0d090}
  html[data-theme="dark"] .hm-badge-new{background:#3a3a3a;color:#aaa}
  /* 未来7天计划预览 */
  .hd-future-day{display:flex;align-items:baseline;gap:8px;padding:6px 10px;border-radius:8px;background:var(--inputBg);margin-bottom:4px;font-size:12.5px}
  .hd-future-date{font-weight:600;color:var(--text);min-width:72px;font-variant-numeric:tabular-nums}
  .hd-future-count{color:var(--brand);font-weight:700;min-width:32px}
  .hd-future-preview{color:var(--muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .wb-heat-plan-note{font-size:11px;color:var(--muted);margin-bottom:8px;font-style:italic}
  .wb-heat-detail-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;font-weight:700;font-size:15px}
  .wb-heat-detail-section{margin-bottom:14px}
  .wb-heat-detail-section:last-child{margin-bottom:0}
  .wb-heat-detail-section h4{font-size:11px;color:var(--muted);margin:0 0 8px;font-weight:600;letter-spacing:.3px}
  .wb-heat-detail-list{height:150px;overflow-y:auto;font-size:13px;line-height:1.6}
  .wb-heat-detail-list .hd-item{padding:6px 10px;border-radius:8px;background:var(--inputBg);margin-bottom:4px}
  .wb-heat-detail-list .hd-item .hd-meta{color:var(--muted);font-size:11px;margin-left:6px}
  .wb-heat-detail-empty{color:var(--muted);font-size:12px;font-style:italic;padding:8px 0}
  .wb-heat-detail-rate{font-size:13px;color:var(--muted);margin-bottom:10px;display:flex;align-items:baseline;gap:6px}
  .wb-heat-detail-rate b{color:var(--brand);font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
  html[data-theme="dark"] .wb-heatmap-wrap{background:var(--input);border-color:var(--input-border)}
  html[data-theme="dark"] .wb-heat-stats .hstat{background:var(--card);border-color:var(--line)}
  html[data-theme="dark"] .wb-heat-detail{background:var(--card);border-color:var(--line)}
  html[data-theme="dark"] .wb-heat-detail-list .hd-item{background:var(--input)}
  html[data-theme="dark"] .hd-future-day{background:var(--input);color:var(--text)}
  html[data-theme="dark"] .hd-future-day .hd-future-date{color:var(--text)}
  html[data-theme="dark"] .hd-future-day .hd-future-preview{color:var(--muted)}
  html[data-theme="dark"] .wb-cal-cell{border-color:var(--input-border)}
  html[data-theme="dark"] .wb-cal-cell.wb-cal-empty{border-color:var(--input-border)}
  @media (max-width:480px){
    .wb-heatmap-wrap{padding:12px 10px}
    .wb-heat-stats{gap:6px}
    .wb-heat-stats .hstat{padding:8px 6px;min-width:70px}
    .wb-heat-stats .hstat .hstat-num{font-size:18px}
    .wb-heat-stats .hstat .hstat-lab{font-size:10px}
    .wb-heat-detail{padding:12px}
    .wb-heatmap-legend{font-size:10px}
    .wb-cal-cell{height:48px;padding:3px 4px}
    .wb-cal-num{font-size:10px}
  }

  .skip-btn{
    background:none;border:none;color:var(--muted);cursor:pointer;
    font-size:11.5px;padding:4px 8px;border-radius:6px;font-family:inherit;
    transition:.15s;flex:0 0 auto;white-space:nowrap;
  }
  .review-done-tag{
    font-size:11px;font-weight:600;padding:3px 10px;border-radius:8px;
    background:#e4ecd5;color:#096f4e;flex:0 0 auto;white-space:nowrap;
  }
  .review-done-tag .edit-hint{opacity:.7;font-weight:400;margin-left:4px;cursor:pointer;text-decoration:underline}
  html[data-theme="dark"] .review-done-tag{background:#2c4450;color:#78baa0}

  .warn-icon{font-size:40px;text-align:center;margin-bottom:10px}
  .warn-text{font-size:14px;line-height:1.7;color:var(--text);margin-bottom:16px}
  .warn-text strong{color:var(--bad)}
  .warn-options{display:flex;flex-direction:column;gap:8px}
  .warn-opt{
    display:flex;align-items:center;gap:10px;padding:12px 14px;
    border:1.5px solid var(--line);border-radius:12px;cursor:pointer;
    transition:.15s;background:#faf6ec;font-size:13.5px;
  }
  .warn-opt.selected{border-color:var(--brand);background:#e9ebdb}
  .warn-opt-icon{font-size:18px;flex:0 0 auto}
  .warn-opt-text{flex:1}
  .warn-opt-desc{font-size:11.5px;color:var(--muted);margin-top:2px}

  .hist-toggle{
    background:none;border:none;color:var(--brand);cursor:pointer;
    font-size:11.5px;padding:2px 6px;font-family:inherit;text-decoration:underline;
    text-underline-offset:2px;
  }
  .hist-panel{
    margin:6px 0 0 20px;padding:8px 12px;background:#f7f6fc;
    border-radius:8px;font-size:12px;flex-basis:100%;
  }
  .hist-row{display:flex;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid var(--line)}
  .hist-row:last-child{border-bottom:none}
  .hist-date{color:var(--muted);flex:0 0 64px;white-space:nowrap}
  .hist-row .muted{flex:0 0 auto;white-space:nowrap;font-size:11.5px}
  .hist-btns{display:flex;gap:4px;margin-left:auto;flex:0 0 auto}
  .hist-note{flex:1 1 100%;color:#8a6a12;background:#fdf6e3;border-radius:6px;padding:4px 9px;font-size:12px;line-height:1.5}
  .hist-q-btn{flex:0 0 auto;white-space:nowrap;
    border:none;cursor:pointer;font-family:inherit;font-size:11px;font-weight:600;
    padding:3px 8px;border-radius:5px;background:var(--card);border:1px solid var(--line);color:var(--muted);
  }
  .hist-q-btn.active-good{background:#e4ecd5;color:#096f4e;border-color:#bfe8d4}
  .hist-q-btn.active-fuzzy{background:#fbf0da;color:#96600c;border-color:#f5ddb3}
  .hist-q-btn.active-forgot{background:#f8e5de;color:#b02e24;border-color:#f5c5c9}

  /* 平板/窄窗口：按钮仍保持一行，整体更紧凑 */
  @media(min-width:561px) and (max-width:720px){
    .head-actions{gap:6px}
    .head-actions .ghost-btn{padding:7px 10px;font-size:12.5px;border-radius:9px}
    .head-actions .user-avatar-btn{width:36px;height:36px;font-size:14px}
  }
  /* 中等屏幕：标题独占一行，按钮组移到下方整齐排列 */
  @media(max-width:560px){
    .head{flex-direction:column;align-items:stretch;gap:12px;position:relative}
    .head-main,.head-actions{flex:1 1 100%;max-width:100%}
    .head-actions{flex-wrap:wrap;justify-content:flex-start;padding-right:48px}
    .head-actions .ghost-btn{flex:1 1 auto;min-width:max-content;padding:9px 12px;justify-content:center}
    .head-actions .user-avatar-shell{position:absolute;right:0;top:0;flex:none}
  }

  @media(max-width:520px){
    .r-date{width:auto;flex:0 0 auto}
    .r-line{flex-direction:column;align-items:stretch;gap:6px}
    .r-line-main{gap:8px}
    .r-line-meta{flex-wrap:wrap;row-gap:6px;white-space:normal}
    .r-del{align-self:flex-start}
    h1{font-size:18px}
    .modal .two-col{grid-template-columns:1fr;gap:0}
    .modal .two-col label{margin-bottom:14px}
    .type-picker{grid-template-columns:1fr}
    .review-item{flex-direction:column;align-items:stretch}
    .ri-actions{flex-direction:column;align-items:stretch;gap:6px}
    .ri-group{width:100%;gap:6px}
    .ri-group-q .q-btn{flex:1 1 0;min-width:0;text-align:center;white-space:nowrap;padding:9px 6px}
    .ri-group-extra .tag-btn,.ri-group-extra .skip-btn{flex:1 1 0;min-width:0;min-height:44px;justify-content:center;padding:9px 6px}
    .ri-group-ret .q-btn{flex:1 1 0;min-width:0;min-height:44px;padding:9px 6px}
    .skip-btn{background:#fff;border:1px solid var(--line);color:#555}
    html[data-theme="dark"] .skip-btn{background:var(--card);border-color:var(--line);color:var(--text)}
    .unit-edit-row{grid-template-columns:1fr 1fr 1fr auto;gap:5px}
    .toast{top:12px;padding:14px 18px}
    .overdue-banner{padding:11px 12px}
    .ob-text{font-size:12.5px}
    .ob-hint{display:none}
    .welcome{padding:46px 22px 40px}
    .welcome-badge{width:72px;height:72px;font-size:36px;border-radius:22px;margin-bottom:16px}
    .welcome h2{font-size:24px;margin-bottom:8px}
    .welcome-tagline{font-size:12.5px;letter-spacing:3px;margin-bottom:20px}
    .welcome-feats{gap:8px;margin-bottom:24px}
    .welcome-types{grid-template-columns:1fr;gap:10px;margin-top:24px}
    .wb-stats{grid-template-columns:repeat(2,1fr)}
    .dash-grid{grid-template-columns:repeat(2,1fr);gap:8px}
    .dash-num{font-size:22px}
    .dash-card{padding:12px 8px}
    .dash-lab{font-size:11px}
    .dash-proj .dp-name{flex:0 0 90px;font-size:12.5px}
    .dash-hero{padding:18px 18px}
    .dash-hero .greet-big{font-size:22px}
    .kaoyan{padding:22px 22px}
    .kaoyan .ky-days{font-size:40px}
    .kaoyan .ky-quote{max-width:100%;font-size:14.5px}
    .weekly-review{padding:16px 16px}
    .weekly-review .wr-stats{gap:6px}
    .weekly-review .wr-stat{padding:8px 4px 6px}
    .weekly-review .wr-num{font-size:17px}
    .weekly-review .wr-lab{font-size:10px;margin-top:2px}
    .weekly-review .wr-msg{font-size:13px}
    .weekly-review .wr-tip{font-size:12px}
    .retention-count{font-size:10.5px;padding:2px 7px}
    /* 小屏 modal 内边距收紧，避免两侧留白挤压内容 */
    .modal{padding:18px 16px;max-height:calc(var(--vvh) * 0.94)}
    /* 触控目标 ≥44px（WCAG / iOS HIG），避免误触 */
    .q-btn,.ob-btn,.pct-chip,.early-review-btn,.x-btn,.r-del,.r-wrong,.nb-close{min-height:44px;min-width:44px}
    .r-del{padding:0 14px}
    /* 移动端输入框 ≥16px，防止 iOS Safari 聚焦自动缩放页面 */
    input,textarea,select{font-size:16px !important}
    .page-input input,.pct-wrap input,.set-part input{font-size:16px !important}
  }
  /* 360px 及以下：dash-grid 单列，数字不换行 */
  @media(max-width:360px){
    .dash-grid{grid-template-columns:1fr}
  }

  /* 深色模式：由 html[data-theme] 控制（JS 依用户选择 + 系统偏好决定） */
  html[data-theme="dark"]{
    --bg:#273859;
    --card:#3a5079;
    --text:#e7edf6;
    --muted:#b6c3d8;
    --line:#556c94;
    --border:#556c94;
    --shadow:0 1px 2px rgba(0,0,0,.35), 0 10px 28px -16px rgba(0,0,0,.55);
    --shadow-hover:0 2px 4px rgba(0,0,0,.4), 0 14px 34px -16px rgba(0,0,0,.6);
    --elevated:#4a628e;
    --brand:#83bca9;
    --brand2:#cdae70;
    --ok:#78baa0;
    --warn:#cdae70;
    --bad:#dd948b;
    --m-solid:#78baa0;
    --m-good:#78baa0;
    --m-fuzzy:#cdae70;
    --m-weak:#dd948b;
    --m-new:#556c94;
    --m-mastered:#83bca9;
    --input:#2c3f63;--input-border:#5d7499;--focus-border:#86a9da;--title-accent:#b2c6e0;--num-hi:#f3ede0;--brand-txt:#add8c9;--ok-txt:#abdcc4;
  }
  html[data-theme="dark"] body{background:var(--bg);color:var(--text)}
  html[data-theme="dark"] input[type=number],
  html[data-theme="dark"] input[type=date],
  html[data-theme="dark"] input[type=text],
  html[data-theme="dark"] input[type=email],
  html[data-theme="dark"] input[type=password],
  html[data-theme="dark"] select,
  html[data-theme="dark"] textarea{
    background:#2c3f63;color:var(--text);border-color:var(--line);
  }
  html[data-theme="dark"] input[type=date]::-webkit-calendar-picker-indicator{filter:invert(0.8) brightness(1.3);cursor:pointer}
  html[data-theme="dark"] input:focus,
  html[data-theme="dark"] select:focus,
  html[data-theme="dark"] textarea:focus{background:#4a628e;border-color:#86a9da;box-shadow:0 0 0 3px rgba(134,169,218,.25)}
  html[data-theme="dark"] .card,
  html[data-theme="dark"] .stat,
  html[data-theme="dark"] .modal{background:var(--card)}
  /* 统计卡在深色下：描边与微光同步换色（覆盖上面的纯色 background） */
  html[data-theme="dark"] .stat{
    background:var(--card);
    border-color:var(--line);
    box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.05);
  }
  html[data-theme="dark"] #settingsDirtyBar{background:#2c3a4e!important;border-color:#4a5a75!important;color:#e0c070!important}
  html[data-theme="dark"] .pp-chip.ok{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] #pressurePanel{background:#3a5079!important;border-color:var(--border)!important}
  html[data-theme="dark"] #spreadPressureHint{background:#3a5079!important;color:var(--muted)!important}
  html[data-theme="dark"] #comfortAdvice{background:#2c3a4e!important;border-color:#4a5a75!important;color:#e0c070!important}
  html[data-theme="dark"] #randomReviewConfirmWarn{background:#2c3a4e!important;color:#e0c070!important}
  html[data-theme="dark"] .ghost-btn,
  html[data-theme="dark"] .soft-btn{background:#2c3f63;color:var(--muted);border-color:var(--line)}
  html[data-theme="dark"] .warn-opt{background:#2c3f63;border-color:var(--line);color:var(--text)}
  html[data-theme="dark"] .warn-opt.selected{background:#4a628e;border-color:var(--brand)}
  html[data-theme="dark"] .danger-btn{background:#3a3040;border-color:#5a4048;color:#e3a0a4}
  html[data-theme="dark"] .review-item,
  html[data-theme="dark"] .wb-item,
  html[data-theme="dark"] .pp-cell,
  html[data-theme="dark"] .pp-stat,
  html[data-theme="dark"] .wb-stat,
  html[data-theme="dark"] .dash-card,
  html[data-theme="dark"] .dash-proj,
  html[data-theme="dark"] .project-item,
  html[data-theme="dark"] .sec-multi-btn,
  html[data-theme="dark"] .reason-dd-btn,
  html[data-theme="dark"] .tag-btn,
  html[data-theme="dark"] .pct-chip,
  html[data-theme="dark"] .hist-q-btn,
  html[data-theme="dark"] .sec-multi-panel,
  html[data-theme="dark"] .reason-dd-panel,
  html[data-theme="dark"] #reasonPopover,
  html[data-theme="dark"] .hist-panel,
  html[data-theme="dark"] .pp-kpi,
  html[data-theme="dark"] .g-callout,
  html[data-theme="dark"] .lock-hint,
  html[data-theme="dark"] .set-scope-pct,
  html[data-theme="dark"] .overdue-banner,
  html[data-theme="dark"] .recite-preview,
  html[data-theme="dark"] .wb-reasons-card,
  html[data-theme="dark"] .pp-eta-box,
  html[data-theme="dark"] .pp-cell-detail{
    background:var(--card);color:var(--text);border-color:var(--line);
  }
  /* 修复：modal(card) 内原本无边框、靠浅底色区分的统计盒被刷成 card 同色而“框消失”，
     深色统一改内嵌凹槽色 #2c3f63 + 细边框，在 card 弹窗上形成清晰凹陷小格 */
  html[data-theme="dark"] .pp-kpi,
  html[data-theme="dark"] .pp-stat,
  html[data-theme="dark"] .wb-stat,
  html[data-theme="dark"] .pp-eta-box{background:#2c3f63;border:1px solid var(--line)}
  /* 深色：亮青绿实心交互元素（按钮/选中tab/徽章/序号）上的文字改深色——白字在亮 brand 上仅 2.16:1；
     亮 brand 底对页面底/卡片对比 5.42/3.74，深字 #10302a 对比 6.58，全部达标 */
  html[data-theme="dark"] .primary,
  html[data-theme="dark"] .auth-tab.active,
  html[data-theme="dark"] .admin-tab.active,
  html[data-theme="dark"] .ad-seg button.active,
  html[data-theme="dark"] .wb-filter-btn.active,
  html[data-theme="dark"] .badge-admin,
  html[data-theme="dark"] .review-count,
  html[data-theme="dark"] .ad-batchbar,
  html[data-theme="dark"] .g-num,
  html[data-theme="dark"] .install-steps li::before,
  html[data-theme="dark"] .reg-step.active .reg-step-num,
  html[data-theme="dark"] .reg-step.done .reg-step-num{color:#10302a}
  html[data-theme="dark"] #swUpdateBar{color:#10302a !important}
  html[data-theme="dark"] .sec-multi-row.sel,
  html[data-theme="dark"] .reason-dd-row.sel,
  html[data-theme="dark"] .project-item.active{background:#4a628e}
  html[data-theme="dark"] #reasonPopover .rp-row.sel{background:#4a628e;color:var(--text)}
  html[data-theme="dark"] #reasonPopover .rp-row.sel .rp-check{color:#7fc7a4}
  html[data-theme="dark"] .type-opt-inner,
  html[data-theme="dark"] .seg-opt span{background:#2c3f63;color:var(--muted);border-color:var(--line)}
  html[data-theme="dark"] .ri-note{background:#2c3f63;color:var(--text);border-color:var(--line)}
  html[data-theme="dark"] .ri-note::placeholder{color:#8293ad}
  html[data-theme="dark"] .ri-lastnote{background:#4a628e;color:#cdae70}
  html[data-theme="dark"] .type-opt input:checked + .type-opt-inner,
  html[data-theme="dark"] .seg-opt input:checked + span{background:#4a628e;color:var(--text)}
  html[data-theme="dark"] .review-item.overdue-item{background:#22314f}
  html[data-theme="dark"] .pp-cell.part{background:#22314f}
  html[data-theme="dark"] .pp-cell.done{background:#26394a}
  html[data-theme="dark"] .mask{background:rgba(0,0,0,.6)}
  html[data-theme="dark"] .wb-notepad{background:#22314f;color:#d8c8a0}
  html[data-theme="dark"] .bar{background:#33496f}
  html[data-theme="dark"] .unit-bar,
  html[data-theme="dark"] .dash-proj .dp-bar,
  html[data-theme="dark"] .pp-sec-track,
  html[data-theme="dark"] .pp-unit-track,
  html[data-theme="dark"] .wb-unit-bar,
  html[data-theme="dark"] .wb-unit-group-bar,
  html[data-theme="dark"] .pp-dist-bar{background:#33496f}
  /* Bug 3：深色模式下「逾期横幅」文字对比度，避免浅底琥珀字看不清 */
  html[data-theme="dark"] .overdue-banner .ob-text{color:#cdae70}
  html[data-theme="dark"] .overdue-banner .ob-main strong{color:#e0c88f}
  html[data-theme="dark"] .overdue-banner .ob-sub{color:#b99f6a}
  html[data-theme="dark"] .overdue-banner .ob-btn{background:#4a628e;color:#cdae70;border-color:#4a5a75}

  /* ============ 简约优化 ============ */
  /* 任务切换淡入反馈 */
  .app-switch{animation:appSwitch .35s ease-out}
  @keyframes appSwitch{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}

  /* 禁用移动端点击高亮，消除iOS 300ms点击延迟 */
  button,a,[role=button]{-webkit-tap-highlight-color:transparent;touch-action:manipulation}

  /* 日期快捷按钮：简约胶囊 */
  .date-quick{display:inline-flex;gap:6px;padding-bottom:9px;align-items:center}
  .date-quick .mode-mini{
    padding:6px 14px;border-radius:999px;font-size:12.5px;font-weight:600;
    background:#faf6ec;border:1px solid var(--line);color:var(--muted);
    opacity:1;text-decoration:none;transition:all .18s ease;white-space:nowrap;
  }
  .date-quick .mode-mini:active{transform:scale(.96)}

  /* 深色模式补充 */
  html[data-theme="dark"] .date-quick .mode-mini{background:#2c3f63;border-color:#556c94;color:#b6c3d8}
  html[data-theme="dark"] .type-badge{background:#33496f;color:#83bca9}
  html[data-theme="dark"] .type-badge.recite{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] .type-badge.mistake{background:#22314f;color:#cdae70}
  html[data-theme="dark"] .m-badge.m-solid{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] .m-badge.m-good{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] .m-badge.m-fuzzy{background:#22314f;color:#e6c87a}
  html[data-theme="dark"] .m-badge.m-weak{background:#3a3040;color:#e3a0a4}
  html[data-theme="dark"] .m-badge.m-new{background:#2c3f63;color:#b6c3d8}
  html[data-theme="dark"] .m-badge.m-mastered{background:#33496f;color:#83bca9}
  html[data-theme="dark"] .badge{background:#33496f;color:#83bca9}
  html[data-theme="dark"] .badge-ok{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] .badge-warn{background:#22314f;color:#e6c87a}
  html[data-theme="dark"] .badge-muted{background:#2c3f63;color:#b6c3d8}
  html[data-theme="dark"] .q-good{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] .q-fuzzy{background:#22314f;color:#e6c87a}
  html[data-theme="dark"] .q-forgot{background:#3a3040;color:#e3a0a4}
  html[data-theme="dark"] .fx-good .ri-fx{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] .fx-fuzzy .ri-fx{background:#22314f;color:#e6c87a}
  html[data-theme="dark"] .fx-forgot .ri-fx{background:#3a3040;color:#e3a0a4}
  /* 保持期复习深色模式 */
  html[data-theme="dark"] .retention-count{background:#2c4450;color:#83bca9}
  html[data-theme="dark"] .retention-divider span{color:#83bca9;background:#26394a;border-color:#3f5e66}
  html[data-theme="dark"] .review-item.retention-item{background:#26394a;border-left-color:#83bca9}
  html[data-theme="dark"] .retention-tag{color:#83bca9;background:#2c4450}
  html[data-theme="dark"] .ri-meta .retention-overdue-tag{color:#e6c87a}
  html[data-theme="dark"] .ri-meta .weak-key-tag{color:#cdae70;background:#2c3a4e}
  html[data-theme="dark"] .ri-meta .retry-cnt{color:#d8b878;background:#2c3a4e}
  html[data-theme="dark"] .q-retention-pass{background:#2c4450;color:#83bca9}
  html[data-theme="dark"] .q-retention-fail{background:#22314f;color:#e6c87a}
  html[data-theme="dark"] .retention-expand span{color:#83bca9;background:#26394a;border-color:#3f5e66}
  /* 每周小结卡片深色模式 */
  /* weekly-review 已改用 var(--card)/var(--brand)，深色随变量自适应，无需琥珀覆盖 */
  html[data-theme="dark"] .mode-badge{background:#2c3f63;color:#b6c3d8}
  html[data-theme="dark"] .mode-badge.set{background:#40303c;color:#d8a0b8}
  html[data-theme="dark"] .mode-badge.mistake-free{background:#26394a;color:#abdcc4}
  html[data-theme="dark"] .linked-badge{background:#2c3a4e;color:#e0c88f}
  html[data-theme="dark"] .type-tag+.mode-tag-inline{background:#2c3f63;color:#b6c3d8}
  html[data-theme="dark"] .type-tag+.mode-tag-inline.set{background:#40303c;color:#d8a0b8}
  html[data-theme="dark"] .type-tag+.mode-tag-inline.mistake-free{background:#26394a;color:#abdcc4}

  /* 掌握确认弹窗 */
  .cm-modal{max-width:440px;padding:24px 20px 20px}
  .cm-header{text-align:center;margin-bottom:16px}
  .cm-icon{font-size:36px;margin-bottom:8px}
  .cm-title{font-size:18px;font-weight:700;color:var(--text);margin:0}
  .cm-body{margin-bottom:16px}
  .cm-item-name{font-size:15px;font-weight:600;color:var(--text);margin-bottom:8px;text-align:center}
  .cm-eval{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 14px;font-size:13px;color:var(--text);margin-bottom:8px;line-height:1.6}
  .cm-eval strong{color:var(--brand)}
  .cm-suggest{font-size:12.5px;color:var(--muted);line-height:1.6;padding:0 4px}
  .cm-suggest strong{color:var(--bad)}
  .cm-options{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
  .cm-opt{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1.5px solid var(--line);border-radius:12px;background:var(--card);cursor:pointer;transition:.15s;text-align:left;font-family:inherit}
  .cm-opt:active{transform:scale(.99)}
  .cm-opt:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 2px rgba(46,107,79,.18)}
  .cm-opt-icon{font-size:20px;flex:0 0 auto}
  .cm-opt-main{flex:1;min-width:0}
  .cm-opt-title{font-size:14px;font-weight:600;color:var(--text)}
  .cm-opt-desc{font-size:11.5px;color:var(--muted);margin-top:2px}
  .cm-opt-primary{border-color:var(--brand);background:rgba(46,107,79,.1)}
  .cm-opt-primary .cm-opt-title{color:var(--brand)}
  .cm-custom-panel{width:100%;margin-top:10px;display:none}
  .cm-opt.expanded .cm-custom-panel{display:block}
  .cm-custom-panel input{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:var(--bg);color:var(--text);box-sizing:border-box;margin-bottom:6px}
  .cm-preview{font-size:11.5px;color:var(--muted);line-height:1.6;margin-bottom:8px}
  .cm-preview strong{color:var(--brand)}
  .cm-footer{display:flex;gap:10px}
  .cm-kbd-hint{display:flex;align-items:center;gap:6px;justify-content:center;margin-bottom:10px;padding:6px 12px;background:var(--card);border:1px solid var(--line);border-radius:10px;font-size:12px;color:var(--muted)}
  .cm-kbd-key{display:inline-block;padding:1px 7px;border:1px solid var(--line);border-radius:5px;font-weight:600;color:var(--brand);background:var(--bg);font-size:11px;margin:0 2px 0 6px}
  .cm-master-hint{display:flex;align-items:center;gap:4px;margin-bottom:12px;padding:8px 12px;background:var(--bg);border:1px dashed var(--line);border-radius:10px;font-size:12px;color:var(--muted);cursor:pointer;user-select:none}
  .cm-master-hint input[type="checkbox"]{width:14px;height:14px;cursor:pointer;flex-shrink:0}
  html[data-theme="dark"] .cm-opt{background:#2c3f63;border-color:var(--line)}
  html[data-theme="dark"] .cm-opt-primary{background:rgba(131,188,169,.14)}
  html[data-theme="dark"] .cm-eval{background:#3a5079}
  html[data-theme="dark"] .cm-custom-panel input{background:#3a5079;border-color:var(--line)}

  /* 薄弱点饼图文字 */
  .wb-pie-num{fill:#333}
  .wb-pie-label{fill:#888}
  html[data-theme="dark"] .wb-pie-num{fill:#e7edf6}
  html[data-theme="dark"] .wb-pie-label{fill:#b6c3d8}

  /* 历史记录备注 */
  html[data-theme="dark"] .hist-note{background:#22314f;color:#cdae70}

  /* 加载遮罩 */
  .busy-mask{position:fixed;inset:0;z-index:300;background:rgba(44,38,32,.45);display:flex;align-items:center;justify-content:center}
  .busy-card{background:#fff;border-radius:16px;padding:22px 26px;width:260px;box-shadow:0 18px 50px -18px rgba(44,38,32,.5);text-align:center}
  .busy-text{font-size:14px;font-weight:600;color:#333}
  .busy-track{height:6px;background:#ebe3d4;border-radius:999px;margin-top:14px;overflow:hidden}
  .busy-bar{height:100%;width:30%;border-radius:999px;background:var(--brand);animation:busySlide 1.1s ease-in-out infinite}
  html[data-theme="dark"] .busy-mask{background:rgba(0,0,0,.6)}
  html[data-theme="dark"] .busy-card{background:#22314f;box-shadow:0 18px 50px -18px rgba(0,0,0,.7)}
  html[data-theme="dark"] .busy-text{color:#e7edf6}
  html[data-theme="dark"] .busy-track{background:#556c94}

  /* 首屏加载界面（消除白屏，页面加载时立即显示，渲染完成后隐藏） */
  #splashScreen{position:fixed;inset:0;z-index:99999;background:#f6f1e7;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .3s ease}
  #splashScreen.splash-hide{opacity:0;pointer-events:none}
  .splash-logo{width:88px;height:88px;display:flex;align-items:center;justify-content:center;margin-bottom:20px}
  .splash-logo img{width:88px;height:88px;display:block;object-fit:contain}
    html[data-theme="dark"] #splashScreen{background:#273859}
      .splash-text{color:var(--muted);font-size:14px;margin-bottom:16px;letter-spacing:.5px}
  .splash-spinner{width:28px;height:28px;border:3px solid rgba(46,107,79,.25);border-top-color:var(--brand);border-radius:50%;animation:splashSpin .8s linear infinite}
  @keyframes splashSpin{to{transform:rotate(360deg)}}
  /* 新增元素的黑夜模式适配 */
  html[data-theme="dark"] #pressurePanel{background:#3a5079;border-color:#556c94}
  html[data-theme="dark"] .pressure-bar-label{color:#b6c3d8}
  html[data-theme="dark"] #spreadPressureHint{background:#3a5079}
  html[data-theme="dark"] .mode-tag{background:rgba(131,188,169,.14);color:var(--brand);border-color:rgba(131,188,169,.3)}
  html[data-theme="dark"] .mode-tag.classic{background:#3a5079;color:#b6c3d8;border-color:#556c94}
  html[data-theme="dark"] #totalLockSection{border-top-color:#556c94}
  html[data-theme="dark"] .pressure-ok{background:#2c4450;color:#78baa0}
  html[data-theme="dark"] .pressure-mid{background:#22314f;color:#e6c87a}
  html[data-theme="dark"] .pressure-high{background:#2c3a4e;color:#d9a06a}
  html[data-theme="dark"] .pressure-over{background:#3a3040;color:#e3a0a4}
  html[data-theme="dark"] #wbMasteredActions{background:#3a5079}
  html[data-theme="dark"] .mode-help-card.mode-classic{background:#3a5079;border:1px solid #556c94}
  html[data-theme="dark"] .mode-help-card.mode-balanced{background:#33496f}
  html[data-theme="dark"] .mode-help-card.mode-common{background:#22314f}
  html[data-theme="dark"] .mode-help-card.mode-balanced div[style*="color:#2e6b4f"]{color:#83bca9!important}
  html[data-theme="dark"] .mode-help-card.mode-common div[style*="color:#8a6a12"]{color:#cdae70!important}
  html[data-theme="dark"] #randomReviewConfirmWarn{background:#22314f;color:#cdae70}

  /* 第7轮补全：8 个浅色背景类在深色下的覆盖，避免白亮刺眼 */
  html[data-theme="dark"] .g-callout.warm{background:#22314f;border-color:#4a5a75}
  html[data-theme="dark"] .ps-add{border-color:#556c94;color:#cdae70}
  html[data-theme="dark"] .sec-multi-act{background:#33496f;color:#cdae70}
  html[data-theme="dark"] .add-row-btn{background:#33496f;border-color:#556c94;color:#cdae70}
  html[data-theme="dark"] .reason-dd-add{background:#33496f;color:#cdae70}
  html[data-theme="dark"] .early-review-btn{background:#4a628e;border-color:#556c94;color:#cdae70}
  html[data-theme="dark"] .wb-filter-btn{background:#33496f;color:var(--muted)}
  html[data-theme="dark"] .wb-filter-btn.active{background:var(--brand);color:#10302a}
  html[data-theme="dark"] .wb-filter-btn:focus-visible{outline-color:#83bca9}
  html[data-theme="dark"] .lock-hint{background:#2c3f63;color:var(--muted)}
  html[data-theme="dark"] .wb-notepad{background:#3a5079;color:var(--text)}
  html[data-theme="dark"] .wb-unit-bar,html[data-theme="dark"] .wb-unit-group-bar,
  html[data-theme="dark"] .wb-dist-bar{background:#556c94}

  /* iOS Safari：聚焦 font-size<16px 的输入框会自动缩放页面，手机（≤640px）强制 16px；
     iPad 竖屏 768px 不强制，保持紧凑排版（iOS 仅在 <16px 时才缩放，iPad 可接受原值） */
  @media (max-width: 640px) {
    input, select, textarea { font-size: 16px !important; }
  }

  /* 键盘导航可见焦点环（鼠标点击不显示，Tab 键才显示） */
  :focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
  button:focus:not(:focus-visible),[tabindex]:focus:not(:focus-visible){outline:none}

  /* 减弱动效偏好：尊重系统"减少动态效果"设置，关闭浮动/淡入动画 */
  @media (prefers-reduced-motion: reduce){
    *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
    .welcome-badge{animation:none}
  }

  /* 按钮 disabled 统一视觉反馈：半透明 + 禁点 + 禁手型 */
  button:disabled,.btn:disabled,.soft-btn:disabled,.primary:disabled,.danger-btn:disabled,
  .q-btn:disabled,.ob-btn:disabled,.pct-chip:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}

  /* === 账号系统 & 云端同步 CSS === */
  .sync-indicator{display:inline-flex;align-items:center;justify-content:center;width:10px;height:10px;border-radius:50%;margin-left:2px;flex:0 0 auto}
  .user-avatar-shell>.sync-indicator{position:absolute;right:-2px;bottom:-2px;width:12px;height:12px;margin-left:0;border:2px solid var(--bg);box-sizing:border-box}
  .sync-indicator.sync-ok{background:#096f4e}
  .sync-indicator.sync-ing{background:var(--brand);animation:syncPulse 1.2s ease-in-out infinite}
  .sync-indicator.sync-fail{background:#e5484d}
  @keyframes syncPulse{0%,100%{opacity:1}50%{opacity:.4}}
  .auth-tabs{display:flex;gap:0;margin-bottom:20px;border-radius:12px;background:var(--bg);padding:4px}
  .auth-tab{flex:1;text-align:center;padding:10px 0;border-radius:9px;cursor:pointer;font-size:14px;font-weight:600;color:var(--muted);transition:.15s;border:none;background:none;font-family:inherit}
  .auth-tab.active{background:var(--brand);color:#fff;box-shadow:none}
  .auth-brand{text-align:center;margin-bottom:20px}
  .auth-brand-icon{width:56px;height:56px;margin:0 auto 10px;border-radius:16px;font-size:28px;display:flex;align-items:center;justify-content:center;background:none;box-shadow:none}
  .auth-brand h2{font-size:20px;font-weight:800;color:var(--brand);margin-bottom:4px}
  .auth-brand p{font-size:12.5px;color:var(--muted)}
  .auth-error{display:none;background:#f8e5de;border:1px solid #f5c5c9;color:#b02e24;border-radius:10px;padding:10px 14px;font-size:13px;margin-bottom:14px;line-height:1.5}
  .auth-error.show{display:block}
  html[data-theme="dark"] .auth-error{background:#3a3040;border-color:#5a4048;color:#e3a0a4}
  .pw-strength{margin:-8px 0 14px;display:flex;flex-direction:column;gap:6px}
  .pw-strength-bar{display:flex;gap:4px;height:4px;border-radius:2px;overflow:hidden}
  .pw-strength-seg{flex:1;border-radius:2px;background:var(--line);transition:.2s}
  .pw-strength-seg.s1{background:#e5484d}
  .pw-strength-seg.s2{background:#96600c}
  .pw-strength-seg.s3{background:#096f4e}
  .pw-strength-text{font-size:11.5px;color:var(--muted)}
  /* ===== 个人中心 ===== */
  .profile-modal{padding:0;max-width:440px;overflow:hidden;display:flex;flex-direction:column;max-height:90vh;max-height:90svh;max-height:calc(var(--vvh) * .9)}
  .profile-hero{position:relative;background:var(--brand);padding:30px 24px 22px;display:flex;flex-direction:column;align-items:center;color:#fff}
  .profile-x{position:absolute;top:8px;right:10px;color:rgba(255,255,255,.82);font-size:26px;padding:2px 9px;border-radius:8px}
  .profile-hero .profile-avatar{width:78px;height:78px;border-radius:50%;font-size:38px;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.2);border:3px solid rgba(255,255,255,.55);color:#fff;overflow:hidden;box-shadow:0 10px 26px -8px rgba(0,0,0,.3)}
  .profile-avatar img{width:100%;height:100%;object-fit:cover}
  .profile-hero-name{font-size:19px;font-weight:700;margin-top:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .profile-hero-sub{font-size:12px;color:rgba(255,255,255,.88);margin-top:3px;display:inline-flex;align-items:center;gap:5px}
  .profile-chip{margin-top:14px;display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.35);color:#fff;font-size:12.5px;font-weight:600;padding:7px 14px;border-radius:999px;cursor:pointer;font-family:inherit;transition:.15s}
  .profile-body{padding:20px 22px 22px;flex:1 1 auto;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
  .profile-group{background:var(--bg);border-radius:14px;padding:16px 16px 15px;margin-bottom:14px}
  .profile-group-title{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.4px;margin-bottom:13px}
  .profile-field{display:flex!important;flex-direction:column!important;gap:6px;font-size:12.5px;color:var(--muted);margin-bottom:12px!important}
  .profile-block-btn{width:100%;padding:11px;border-radius:11px;font-size:14px;font-weight:600}
  .change-email-box{display:flex;flex-direction:column;gap:9px;margin:2px 0 13px;padding:13px;border-radius:12px;background:var(--bg)}
  .change-email-box input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;font-size:13.5px;font-family:inherit;background:var(--card);color:var(--text);box-sizing:border-box}
  html[data-theme="dark"] .change-email-box{background:#3a5079}
  .profile-group .sync-status-box{background:transparent;padding:0;margin:0}
  html[data-theme="dark"] .profile-group{background:#273859}
  /* 安装引导 */
  .install-hero{display:flex;flex-direction:column;align-items:center;padding:8px 0 18px}
  .install-hero-icon{width:72px;height:72px;border-radius:18px;box-shadow:0 10px 24px -12px rgba(60,45,20,.25)}
  .install-hero-name{font-size:17px;font-weight:700;margin-top:12px}
  .install-hero-desc{font-size:12.5px;color:var(--muted);margin-top:3px}
  .install-steps{margin:0;padding-left:0;list-style:none;counter-reset:istep}
  .install-steps li{counter-increment:istep;position:relative;padding:12px 12px 12px 44px;margin-bottom:10px;background:var(--bg);border-radius:12px;font-size:13.5px;color:var(--text);line-height:1.55}
  .install-steps li::before{content:counter(istep);position:absolute;left:12px;top:12px;width:22px;height:22px;border-radius:50%;background:var(--brand);color:#fff;font-size:12.5px;font-weight:700;display:flex;align-items:center;justify-content:center}
  .install-steps li small{color:var(--muted)}
  html[data-theme="dark"] .install-steps li{background:#3a5079}
  .sync-status-box{background:var(--bg);border-radius:12px;padding:14px 16px;margin-bottom:14px;display:flex;align-items:center;gap:12px}
  .sync-status-dot{width:10px;height:10px;border-radius:50%;flex:0 0 auto}
  .sync-status-dot.ok{background:#096f4e}
  .sync-status-dot.ing{background:var(--brand);animation:syncPulse 1.2s ease-in-out infinite}
  .sync-status-dot.fail{background:#e5484d}
  .sync-status-info{flex:1}
  .sync-status-label{font-size:13px;font-weight:600;color:var(--text)}
  .sync-status-time{font-size:11.5px;color:var(--muted);margin-top:2px}
  .site-footer{display:flex;justify-content:center;align-items:center;gap:0;flex-wrap:wrap;font-size:11px;color:#8a8175;margin-top:16px;line-height:1;padding-bottom:env(safe-area-inset-bottom)}
  .site-footer a{color:#8a8175;text-decoration:none;transition:.15s;display:inline-flex;align-items:center}
  .site-footer .police-beian{display:inline-flex;align-items:center;gap:0;margin-left:0}
  .site-footer .beian-sep{margin:0 8px;color:#8a8175;user-select:none}
  html[data-theme="dark"] .site-footer{color:#556c94}
  html[data-theme="dark"] .site-footer a{color:#556c94}
  html[data-theme="dark"] .site-footer .beian-sep{color:#556c94}
  html[data-theme="dark"] .auth-tabs{background:#273859}
  html[data-theme="dark"] .auth-tab{color:#b6c3d8}
  html[data-theme="dark"] .auth-tab.active{color:#fff}
  html[data-theme="dark"] .sync-status-box{background:#3a5079}
  html[data-theme="dark"] .pw-strength-seg{background:#4a628e}
  .admin-tabs{display:flex;gap:0;margin-bottom:18px;border-radius:12px;background:var(--bg);padding:4px}
  .admin-tab{flex:1;text-align:center;padding:9px 0;border-radius:9px;cursor:pointer;font-size:13px;font-weight:600;color:var(--muted);transition:.15s;border:none;background:none;font-family:inherit}
  .admin-tab.active{background:var(--brand);color:#fff;box-shadow:none}
  html[data-theme="dark"] .admin-tabs{background:#273859}
  html[data-theme="dark"] .admin-tab{color:#b6c3d8}
  html[data-theme="dark"] .admin-tab.active{color:#fff}
  /* 切换标签时各页保持稳定高度，避免 modal 随内容多少上下跳变 */
  #adminMask [id^="adminPane"]{min-height:420px}
  @media(max-width:560px){ #adminMask [id^="adminPane"]{min-height:340px} }
  /* 新建任务弹窗切换类型(刷题/错题/背书)时保持高度稳定；窄屏不强制，避免内容被挤压 */
  #formMask .modal{min-height:560px}
  @media(max-width:620px){ #formMask .modal{min-height:0} }
  .stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
  @media(max-width:560px){ .stat-grid{grid-template-columns:repeat(2,1fr)} }
  .stat-card{background:var(--bg);border-radius:12px;padding:14px;text-align:center}
  .stat-card .num{font-size:24px;font-weight:800;color:var(--brand)}
  .stat-card .lab{font-size:11.5px;color:var(--muted);margin-top:4px}
  html[data-theme="dark"] .stat-card{background:#273859}
  .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -4px;padding:0 4px}
  #adminPaneOverview,#adminPaneUsers,#adminPaneInvites{min-height:300px}
  #adminPaneUsers>.table-wrap,#adminPaneInvites>.table-wrap{max-height:330px;overflow-y:auto;overscroll-behavior:contain}
  .admin-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:480px}
  .admin-table th{text-align:left;padding:8px 10px;border-bottom:2px solid var(--line);color:var(--muted);font-weight:600;white-space:nowrap}
  .admin-table td{padding:8px 10px;border-bottom:1px solid var(--line);color:var(--text);white-space:nowrap}
  .badge-admin{display:inline-block;background:var(--brand);color:#fff;font-size:10px;padding:2px 8px;border-radius:999px;font-weight:600;margin-left:6px;vertical-align:middle}
  .badge-disabled{display:inline-block;background:#f8e5de;color:#b02e24;font-size:10px;padding:2px 8px;border-radius:999px;font-weight:600}
  .badge-active{display:inline-block;background:#e4ecd5;color:#096f4e;font-size:10px;padding:2px 8px;border-radius:999px;font-weight:600}
  .badge-used{display:inline-block;background:#f0f0f5;color:var(--muted);font-size:10px;padding:2px 8px;border-radius:999px}
  .badge-unused{display:inline-block;background:#e9ebdb;color:var(--brand);font-size:10px;padding:2px 8px;border-radius:999px}
  .invite-code-display{font-family:monospace;font-size:16px;font-weight:700;letter-spacing:2px;background:var(--bg);padding:10px 16px;border-radius:10px;text-align:center;color:var(--brand);cursor:pointer;margin:8px 0;user-select:all}
  html[data-theme="dark"] .invite-code-display{background:#3a5079}
  #adminPaneUsers .admin-table{min-width:720px;table-layout:fixed}
  #adminPaneUsers .admin-table th:nth-child(1),#adminPaneUsers .admin-table td:nth-child(1){width:36px;min-width:36px;padding-left:6px;padding-right:6px}
  #adminPaneUsers .admin-table th:nth-child(2),#adminPaneUsers .admin-table td:nth-child(2){width:42px;min-width:42px}
  #adminPaneUsers .admin-table th:nth-child(3),#adminPaneUsers .admin-table td:nth-child(3){width:88px;min-width:88px;max-width:88px;overflow:hidden;text-overflow:ellipsis}
  #adminPaneUsers .admin-table th:nth-child(4),#adminPaneUsers .admin-table td:nth-child(4){width:130px;min-width:130px;max-width:130px;overflow:hidden;text-overflow:ellipsis}
  #adminPaneUsers .admin-table th:nth-child(5),#adminPaneUsers .admin-table td:nth-child(5){width:52px;min-width:52px}
  #adminPaneUsers .admin-table th:nth-child(6),#adminPaneUsers .admin-table td:nth-child(6){width:42px;min-width:42px;text-align:center}
  #adminPaneUsers .admin-table th:nth-child(7),#adminPaneUsers .admin-table td:nth-child(7){width:102px;min-width:102px}
  #adminPaneUsers .admin-table th:nth-child(8),#adminPaneUsers .admin-table td:nth-child(8){width:102px;min-width:102px}
  #adminPaneUsers .admin-table td:last-child{width:190px;min-width:190px}
  .adm-ops{display:flex;gap:6px;flex-wrap:wrap;width:190px}
  .adm-op{padding:4px 9px !important;font-size:11.5px !important;white-space:nowrap;flex:0 0 auto}
  .adm-danger{color:#b02e24 !important;border-color:rgba(201,48,56,.35) !important}
  .adm-role-badge{display:block;width:100%;text-align:center;margin-bottom:5px;font-size:10.5px;padding:1px 0}
  /* 邀请码使用者列：固定宽度，超过3人折叠 */
  #adminPaneInvites .admin-table th:nth-child(5),#adminPaneInvites .admin-table td:nth-child(5){width:170px;min-width:170px;max-width:170px;white-space:normal;vertical-align:top}
  .ub-collapsed{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;max-width:170px}
  .ub-expanded{display:flex;flex-wrap:wrap;gap:4px;align-items:center;line-height:1.8;width:100%}
  .ub-tag{display:inline-block;padding:1px 7px;border-radius:10px;background:rgba(46,107,79,.1);color:var(--text);font-size:11.5px;white-space:nowrap;flex:0 0 auto}
  html[data-theme="dark"] .ub-tag{background:rgba(131,188,169,.18);color:#c8d6e5}
  .ub-link{color:var(--brand);font-size:11.5px;cursor:pointer;text-decoration:none;white-space:nowrap;flex:0 0 auto}
  .ub-link:hover{text-decoration:underline}
  /* 表头排序指示箭头 */
  .sort-th{cursor:pointer;user-select:none;position:relative}
  .sort-th:hover{color:var(--brand)}
  .sort-th::after{content:'⇅';margin-left:3px;font-size:10px;opacity:.35}
  .sort-th.sort-asc::after{content:'↑';opacity:1;color:var(--brand)}
  .sort-th.sort-desc::after{content:'↓';opacity:1;color:var(--brand)}
  .batch-bar{display:none;align-items:center;gap:12px;padding:8px 12px;background:rgba(46,107,79,.08);border:1px solid rgba(46,107,79,.2);border-radius:8px;font-size:13px}
  .batch-bar.show{display:flex}
  /* 摆烂/未打卡提醒：纸感学院派风格，替代原刺眼黄底 */
  .lazy-warning{display:flex;align-items:flex-start;gap:8px;margin-top:10px;padding:10px 14px;border-radius:10px;background:rgba(46,107,79,.07);border:1px solid rgba(46,107,79,.18);font-size:12.5px;color:var(--text);line-height:1.65}
  .lazy-warning-icon{font-size:15px;line-height:1.5;flex-shrink:0}
  html[data-theme="dark"] .lazy-warning{background:rgba(131,188,169,.1);border-color:rgba(131,188,169,.25);color:#c8d6e5}


  /* === 管理员面板扩展（admin-31~56）=== */
  .ad-seg{display:inline-flex;background:var(--bg);border-radius:9px;padding:3px;gap:2px}
  html[data-theme="dark"] .ad-seg{background:#3a5079}
  .ad-seg button{border:none;background:none;font-family:inherit;font-size:12px;font-weight:600;color:var(--muted);padding:5px 12px;border-radius:7px;cursor:pointer;transition:.15s}
  .ad-seg button.active{background:var(--brand);color:#fff}
  .chart-card{background:var(--bg);border-radius:12px;padding:14px 16px;margin-bottom:14px}
  html[data-theme="dark"] .chart-card{background:#273859}
  .chart-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px;gap:10px;flex-wrap:wrap}
  .chart-title{font-size:13.5px;font-weight:700;color:var(--text)}
  .chart-sub{font-size:11px;color:var(--muted)}
  .chart-bars{display:flex;align-items:flex-end;gap:3px;height:90px}
  .chart-col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;min-width:0}
  .chart-bar{width:100%;max-width:20px;border-radius:4px 4px 0 0;background:var(--brand);min-height:2px;cursor:pointer;transition:opacity .15s}
  .chart-bar.alt{background:var(--brand2)}
  .chart-bar.zero{background:var(--line);cursor:default}
  html[data-theme="dark"] .chart-bar.zero{background:#556c94}
  .ret-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;text-align:center}
  .ret-num{font-size:22px;font-weight:800;color:var(--brand);font-variant-numeric:tabular-nums}
  .ret-lab{font-size:11px;color:var(--muted);margin-top:3px}
  .ad-toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
  .ad-toolbar input[type=text],.ad-toolbar select{width:auto;flex:0 1 170px;padding:8px 10px;font-size:13px}
  .ad-table-check{width:16px;height:16px;cursor:pointer;accent-color:var(--brand)}
  .ad-pager{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:12px;flex-wrap:wrap;font-size:12.5px;color:var(--muted)}
  .ad-pager .ad-pager-btns{display:flex;gap:6px;align-items:center}
  .ad-batchbar{display:none;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;background:var(--brand);color:#fff;font-size:12.5px;margin-bottom:12px;flex-wrap:wrap}
  .ad-batchbar.show{display:flex}
  .ad-batchbar button{background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:8px;padding:5px 12px;font-size:12px;cursor:pointer;font-family:inherit}
  .drawer-mask{position:fixed;inset:0;background:rgba(44,38,32,.45);z-index:110;display:flex;justify-content:flex-end}
  html[data-theme="dark"] .drawer-mask{background:rgba(0,0,0,.6)}
  .drawer{background:var(--card);width:100%;max-width:420px;height:100%;overflow-y:auto;padding:20px 18px;box-shadow:-10px 0 40px -18px rgba(44,38,32,.5);animation:drawIn .2s ease-out}
  @keyframes drawIn{from{transform:translateX(40px);opacity:.6}to{transform:none;opacity:1}}
  .drawer h3{font-size:16px;margin-bottom:4px}
  .drawer .dsub{font-size:12px;color:var(--muted);margin-bottom:14px}
  .dsec{font-size:11.5px;font-weight:700;color:var(--muted);letter-spacing:.4px;margin:16px 0 8px}
  .drow{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:6px 0;border-bottom:1px solid var(--line)}
  .drow span{color:var(--muted)}
  .drow b{font-weight:600;text-align:right;word-break:break-all}
  .login-row{font-size:12px;padding:7px 0;border-bottom:1px solid var(--line)}
  .login-row .lr-ip{font-family:monospace;color:var(--text)}
  .login-row .lr-device{display:inline-block;margin-left:8px;font-size:10.5px;background:var(--card);border:1px solid var(--line);padding:1px 7px;border-radius:999px;color:var(--muted)}
  .login-row .lr-meta{color:var(--muted);font-size:11px;margin-top:2px;word-break:break-all}
  .ud-status-badge{display:inline-block;margin-left:8px;font-size:10.5px;padding:2px 8px;border-radius:999px;background:var(--card);border:1px solid var(--line);color:var(--muted)}
  .ud-status-badge.ud-status-ok{background:rgba(46,107,79,.1);color:#2e6b4f;border-color:rgba(46,107,79,.2)}
  .ud-status-badge.ud-status-warn{background:rgba(176,122,75,.1);color:#b07a4b;border-color:rgba(176,122,75,.2)}
  .ud-status-badge.ud-status-bad{background:rgba(192,57,43,.1);color:#c0392b;border-color:rgba(192,57,43,.2)}
  html[data-theme="dark"] .ud-status-badge.ud-status-ok{background:rgba(131,188,169,.15);color:#83bca9;border-color:rgba(131,188,169,.25)}
  html[data-theme="dark"] .ud-status-badge.ud-status-warn{background:rgba(205,174,112,.15);color:#cdae70;border-color:rgba(205,174,112,.25)}
  html[data-theme="dark"] .ud-status-badge.ud-status-bad{background:rgba(224,122,110,.15);color:#e07a6e;border-color:rgba(224,122,110,.25)}
  .ud-projects{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 10px}
  .ud-proj-item{display:flex;align-items:center;gap:8px;font-size:11.5px;padding:4px 0;border-bottom:1px solid var(--line)}
  .ud-proj-item:last-child{border-bottom:none}
  .ud-proj-name{flex:1;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ud-proj-type{font-size:10px;background:var(--bg);border:1px solid var(--line);padding:1px 6px;border-radius:4px;color:var(--muted);flex-shrink:0}
  .ud-proj-progress{font-family:monospace;color:var(--muted);font-size:10.5px;flex-shrink:0}
  .badge-revoked{display:inline-block;background:#efe7dd;color:var(--muted);font-size:10px;padding:2px 8px;border-radius:999px}
  html[data-theme="dark"] .badge-revoked{background:#4a628e}
  .badge-deleted{display:inline-block;background:#f8e5de;color:var(--bad);font-size:10px;padding:2px 8px;border-radius:999px}
  .conf-pass{margin-top:4px}
  .sort-th{cursor:pointer;user-select:none}
  .backup-ok{color:var(--ok);font-weight:600}
  .backup-stale{color:var(--bad);font-weight:600}
  .backup-none{color:var(--muted)}
  .metric-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:10px}
  @media(max-width:560px){.metric-grid{grid-template-columns:repeat(2,1fr)}}
  .metric-cell{background:var(--bg);border-radius:10px;padding:10px 12px}
  html[data-theme="dark"] .metric-cell{background:#3a5079}
  .metric-cell .mv{font-size:19px;font-weight:800;color:var(--brand);font-variant-numeric:tabular-nums}
  .metric-cell .ml{font-size:11px;color:var(--muted);margin-top:3px}
  /* === 云端存储用量卡片 === */
  .storage-card{background:var(--bg);border-radius:12px;padding:14px 16px;margin-bottom:16px}
  html[data-theme="dark"] .storage-card{background:#273859}
  .storage-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}
  .storage-title{font-size:13.5px;font-weight:700;color:var(--text)}
  .storage-value{font-size:22px;font-weight:800;color:var(--brand);font-variant-numeric:tabular-nums;line-height:1}
  .storage-pct-sign{font-size:14px;font-weight:700;margin-left:1px}
  .storage-bar{height:8px;border-radius:99px;background:var(--line);overflow:hidden}
  html[data-theme="dark"] .storage-bar{background:#556c94}
  .storage-bar-fill{height:100%;border-radius:99px;background:var(--brand);width:0;transition:width .5s ease}
  .storage-bar-fill.warn{background:var(--warn)}
  .storage-bar-fill.danger{background:var(--bad)}
  .storage-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:9px;font-size:11.5px;color:var(--muted);flex-wrap:wrap}
  .storage-warn{font-weight:600}
  .storage-warn.warn{color:#d97706}
  .storage-warn.danger{color:#dc2626}

  /* === 活跃趋势柱状图（纯 CSS） === */
  .trend-card{background:var(--bg);border-radius:12px;padding:14px 16px}
  html[data-theme="dark"] .trend-card{background:#3a5079}
  .trend-title{font-size:13.5px;font-weight:700;color:var(--text);margin-bottom:14px}
  .trend-bars{display:flex;align-items:flex-end;gap:4px;height:70px}
  .trend-bar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%}
  .trend-bar-col{width:100%;max-width:18px;border-radius:4px 4px 0 0;background:var(--brand);min-height:2px;transition:height .4s ease}
  .trend-bar-col.zero{background:var(--line)}
  html[data-theme="dark"] .trend-bar-col.zero{background:#556c94}
  .trend-bar-label{font-size:8.5px;color:var(--muted);margin-top:4px;white-space:nowrap}

  /* === 系统信息 === */
  #adminPaneSystem{min-height:300px}
  .sys-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  @media(max-width:640px){ .sys-grid{grid-template-columns:1fr} }
  .sys-info-card{background:var(--bg);border-radius:12px;padding:16px}
  html[data-theme="dark"] .sys-info-card{background:#3a5079}
  .sys-info-title{font-size:13.5px;font-weight:700;color:var(--text);margin-bottom:12px}
  .sys-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px solid var(--line);font-size:12.5px}
  .sys-row:last-child{border-bottom:none}
  .sys-row span{color:var(--muted)}
  .sys-row b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums;text-align:right}
  .sys-meter-label{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:7px}
  .sys-meter-label span:first-child{color:var(--muted)}
  .sys-meter-label span:last-child{font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
  .sys-meter{height:8px;border-radius:99px;background:var(--line);overflow:hidden}
  html[data-theme="dark"] .sys-meter{background:#556c94}
  .sys-meter-fill{height:100%;border-radius:99px;background:var(--brand);width:0;transition:width .5s ease}
  .sys-meter-fill.warn{background:var(--warn)}
  .sys-meter-fill.danger{background:var(--bad)}
  .sys-meter-detail{font-size:11px;color:var(--muted);margin-top:7px}

  .admin-input-row{display:flex;gap:8px;align-items:flex-end;margin-bottom:12px;flex-wrap:wrap}
  .admin-input-row label{flex:1;min-width:80px}

  /* === 云端存储卡片 === */
  .storage-card{background:var(--bg);border-radius:12px;padding:14px 16px;margin-bottom:16px}
  html[data-theme="dark"] .storage-card{background:#273859}
  .storage-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}
  .storage-title{font-size:13.5px;font-weight:700;color:var(--text)}
  .storage-value{font-size:22px;font-weight:800;color:var(--brand);font-variant-numeric:tabular-nums;line-height:1}
  .storage-pct-sign{font-size:14px;font-weight:700;margin-left:1px}
  .storage-bar{height:8px;border-radius:999px;background:var(--line);overflow:hidden}
  .storage-bar-fill{height:100%;border-radius:999px;background:var(--brand);width:0;transition:width .4s ease}
  .storage-bar-fill.warn{background:var(--warn)}
  .storage-bar-fill.danger{background:var(--bad)}
  .storage-foot{display:flex;justify-content:space-between;align-items:center;margin-top:9px;gap:8px;flex-wrap:wrap}
  .storage-foot #storageDetail{font-size:11.5px;color:var(--muted)}
  .storage-warn{font-size:11.5px;font-weight:600;color:#f59e0b}
  .storage-warn.danger{color:#dc2626}

  /* === 活跃趋势柱状图 === */
  .trend-card{background:var(--bg);border-radius:12px;padding:14px 16px}
  html[data-theme="dark"] .trend-card{background:#3a5079}
  .trend-title{font-size:13.5px;font-weight:700;color:var(--text);margin-bottom:14px}
  .trend-bars{display:flex;align-items:flex-end;gap:4px;height:70px}
  .trend-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:3px}
  .trend-bar{width:100%;max-width:18px;border-radius:4px 4px 0 0;background:var(--brand);min-height:2px;opacity:.85;transition:height .4s ease}
  .trend-bar.zero{opacity:.18}
  .trend-bar.today{opacity:1;box-shadow:0 0 0 1px var(--brand)}
  .trend-x{font-size:8.5px;color:var(--muted);line-height:1}

  /* === 系统信息 === */
  #adminPaneSystem{min-height:300px}
  .sys-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  @media(max-width:640px){ .sys-grid{grid-template-columns:1fr} }
  .sys-info-card{background:var(--bg);border-radius:12px;padding:14px 16px}
  html[data-theme="dark"] .sys-info-card{background:#3a5079}
  .sys-info-title{font-size:13.5px;font-weight:700;color:var(--text);margin-bottom:12px}
  .sys-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid var(--line);font-size:12.5px}
  .sys-row:last-child{border-bottom:none}
  .sys-row span{color:var(--muted)}
  .sys-row b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
  .sys-meter-label{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:6px}
  .sys-meter-label span:first-child{color:var(--muted)}
  .sys-meter-label span:last-child{font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
  .sys-meter{height:8px;border-radius:999px;background:var(--line);overflow:hidden}
  .sys-meter-fill{height:100%;border-radius:999px;background:var(--brand);width:0;transition:width .4s ease}
  .sys-meter-fill.warn{background:var(--warn)}
  .sys-meter-fill.danger{background:var(--bad)}
  .sys-meter-detail{font-size:11px;color:var(--muted);margin-top:6px}
  @media(max-width:600px){
    .auth-brand-icon{width:48px;height:48px;font-size:24px}
    .profile-avatar{width:60px;height:60px;font-size:30px}
    .site-footer{font-size:10.5px;padding:0 8px;word-break:break-all}
    .modal{padding:20px 16px}
  }
  /* === 密码可见性切换 === */
  .pw-wrap{position:relative}
  .pw-toggle{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:var(--muted);padding:5px;display:flex;align-items:center;justify-content:center;border-radius:6px;opacity:.7;transition:opacity .15s,background .15s;line-height:0}
  .pw-wrap input{padding-right:40px}
  .login-wall-notice{text-align:center;font-size:12.5px;color:var(--muted);margin:0 0 12px;line-height:1.5;padding:8px 12px;background:var(--bg);border-radius:8px}
  html[data-theme="dark"] .login-wall-notice{background:#273859}
  /* 密码小眼睛 */
  .pwd-wrap{position:relative;display:flex;align-items:center}
  .pwd-wrap input{flex:1;padding-right:40px !important}
  .pwd-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;font-size:16px;color:var(--muted);padding:4px 6px;border-radius:6px;line-height:1;user-select:none}
  .register-hint{text-align:center;font-size:11.5px;color:var(--brand);margin:-8px 0 10px;display:none}
  .register-hint.show{display:block}
  /* === 三步流程进度指示器 === */
  .reg-steps{display:flex;align-items:flex-start;justify-content:center;margin:4px 0 22px}
  .reg-step{display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:64px}
  .reg-step-num{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;background:var(--bg);color:var(--muted);border:2px solid var(--border);transition:all .25s;z-index:1}
  .reg-step-label{font-size:11px;color:var(--muted);margin-top:7px;white-space:nowrap;transition:color .25s}
  .reg-step.active .reg-step-num{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 2px 8px rgba(60,45,20,.2)}
  .reg-step.active .reg-step-label{color:var(--brand);font-weight:600}
  .reg-step.done .reg-step-num{background:var(--brand);border-color:var(--brand);color:#fff}
  .reg-step.done .reg-step-label{color:var(--brand)}
  .reg-step-line{flex:1;height:2px;background:var(--border);margin-top:13px;margin-left:4px;margin-right:4px;min-width:24px;border-radius:1px;transition:background .25s}
  .reg-step.done + .reg-step-line{background:var(--brand)}
  /* 认证弹窗顶部品牌区 */
  .auth-brand{display:flex;flex-direction:column;align-items:center;margin:4px 0 20px}
  .auth-brand-icon{width:64px;height:64px;border-radius:16px;overflow:hidden;box-shadow:none}
  .auth-brand-icon img{width:100%;height:100%;display:block;object-fit:cover}
  .auth-brand-name{font-size:19px;font-weight:700;margin-top:12px;letter-spacing:.3px}
  .auth-brand-sub{font-size:12.5px;color:var(--muted);margin-top:3px}
  /* 方案B 学院派：标题衬线（正文与数字保持系统无衬线、tabular-nums） */
  h1,h2{line-height:1.6}
  .welcome h2{line-height:1.4}

/* ============ 自习室（Study Room）样式 — UI 重设计版 ============ */
.sr-fullmask{background:rgba(44,38,32,.55)}
.sr-modal.sr-room-modal{max-width:560px}

/* 引导页 */
.sr-welcome-hero{
  width:72px;height:72px;margin:12px auto 12px;border-radius:22px;font-size:25px;
  display:flex;align-items:center;justify-content:center;line-height:0;
  color:var(--brand);
  background:linear-gradient(135deg,rgba(46,107,79,.12),rgba(176,122,75,.10));
  border:1px solid var(--border);box-shadow:var(--shadow);
}
.sr-welcome-title{font-size:15px;font-weight:600;text-align:center;color:var(--muted);margin-bottom:22px;line-height:1.7;font-family:var(--font-serif)}
.sr-entry-card{
  display:flex;align-items:center;gap:14px;width:100%;padding:14px 16px;margin-bottom:12px;
  background:var(--card);border:1px solid var(--border);border-radius:14px;cursor:pointer;text-align:left;
  box-shadow:var(--shadow);transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;
}
.sr-entry-card:hover{border-color:var(--brand);box-shadow:var(--shadow-hover);transform:translateY(-1px)}
.sr-entry-card:active{transform:scale(.985)}
.sr-entry-icon{
  flex:0 0 auto;width:44px;height:44px;border-radius:12px;font-size:16px;line-height:0;
  display:flex;align-items:center;justify-content:center;color:var(--brand);
  background:rgba(46,107,79,.09);border:1px solid rgba(46,107,79,.12);
}
.sr-entry-text{flex:1;min-width:0}
.sr-entry-title{font-size:15px;font-weight:700;color:var(--text)}
.sr-entry-sub{font-size:12.5px;color:var(--muted);margin-top:3px}

/* 房间信息栏 */
.sr-room-info{
  background:var(--inputBg);border:1px solid var(--border);border-radius:14px;
  padding:16px 18px;margin-bottom:16px;box-shadow:var(--shadow);
}
.sr-room-name-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.sr-room-name{font-size:18px;font-weight:700;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-serif);letter-spacing:.2px}
.sr-member-count{font-size:12.5px;color:var(--muted);flex:0 0 auto;font-variant-numeric:tabular-nums}
.sr-visibility-badge{flex:0 0 auto;font-size:11px;font-weight:600;color:var(--brand);background:rgba(46,107,79,.09);border:1px solid rgba(46,107,79,.14);padding:3px 10px;border-radius:999px}
.sr-room-code-row{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--muted);flex-wrap:wrap}
.sr-room-code-label{flex:0 0 auto}
.sr-room-code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:15px;font-weight:700;letter-spacing:3px;color:var(--text);background:var(--elevated);padding:3px 11px;border-radius:8px;border:1px solid var(--border);box-shadow:inset 0 1px 2px rgba(60,45,20,.05)}
.sr-copy-btn{margin-left:auto;padding:4px 10px;font-size:12px;white-space:nowrap}

/* 房主操作行 + 房间内广场入口 */
.sr-owner-actions{display:flex;align-items:center;gap:10px;margin:0 0 12px;flex-wrap:wrap}
.sr-disband-btn{padding:5px 12px;font-size:12.5px}
.sr-plaza-room-btn{width:100%;margin:0 0 16px}

/* 成员列表 */
.sr-privacy-row{background:var(--inputBg);border-radius:12px;padding:12px 14px;margin-bottom:16px;border:1px solid var(--border)}
html[data-theme="dark"] .sr-privacy-row{background:var(--input);border-color:var(--input-border)}
.sr-member-list-title{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.8px;text-transform:uppercase;margin:6px 0 10px;padding-top:14px;border-top:1px solid var(--line);display:flex;align-items:center;gap:6px}
.sr-badge-help-btn{width:18px;height:18px;border-radius:50%;border:none;background:rgba(46,107,79,.10);color:var(--brand);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .15s;flex:0 0 auto;padding:0;line-height:1}
.sr-badge-help-btn:hover{background:rgba(46,107,79,.18)}
.sr-badge-help-btn svg{width:10px;height:10px;max-width:10px;max-height:10px;display:block}
/* 徽章说明弹窗 */
.sr-badge-help-modal{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;padding:20px}
.sr-badge-help-mask{position:absolute;inset:0;background:rgba(0,0,0,.4);backdrop-filter:blur(2px)}
.sr-badge-help-panel{position:relative;background:var(--card);border:1px solid var(--border);border-radius:16px;box-shadow:0 12px 40px rgba(0,0,0,.15);max-width:420px;width:100%;max-height:80vh;overflow-y:auto}
.sr-badge-help-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line);font-size:15px;font-weight:700;color:var(--text)}
.sr-badge-help-close{background:none;border:none;font-size:20px;color:var(--muted);cursor:pointer;line-height:1;padding:0 4px}
.sr-badge-help-close:hover{color:var(--text)}
.sr-badge-help-body{padding:16px 20px 20px}
.sr-badge-help-desc{font-size:12.5px;color:var(--muted);line-height:1.6;margin:0 0 14px}
.sr-badge-help-list{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px}
.sr-badge-help-item{display:flex;align-items:flex-start;gap:8px}
.sr-badge-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto;margin-top:5px}
.sr-badge-dot-1{background:#6a9a7a}
.sr-badge-dot-2{background:#3d7a52}
.sr-badge-dot-3{background:#b89040}
.sr-badge-dot-4{background:#c07830}
.sr-badge-dot-5{background:#a85038}
.sr-badge-dot-6{background:#7a5aa0}
.sr-badge-name{font-size:12.5px;font-weight:600;color:var(--text);line-height:1.3}
.sr-badge-cond{font-size:11px;color:var(--muted);margin-top:1px;line-height:1.4}
.sr-badge-help-tip{font-size:12px;color:var(--muted);margin:14px 0 0;padding-top:12px;border-top:1px solid var(--line);line-height:1.5}

/* ══════════════ 每日点赞 ══════════════ */
.sr-member-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.sr-like-btn{
  display:inline-flex;align-items:center;gap:4px;
  padding:5px 10px;border-radius:999px;border:1px solid var(--border);
  background:var(--elevated);color:var(--muted);cursor:pointer;
  font-size:12px;font-weight:500;transition:all .15s ease;line-height:1;
}
.sr-like-btn:hover{border-color:rgba(46,107,79,.35);color:var(--brand);background:rgba(46,107,79,.06)}
.sr-like-btn:active{transform:scale(.94)}
.sr-like-btn .ic{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8}
.sr-like-btn-liked{color:#d4762a;border-color:rgba(212,118,42,.35);background:rgba(212,118,42,.08)}
.sr-like-btn-liked .ic{fill:#d4762a;stroke:#d4762a}
.sr-like-btn-liked:hover{color:#c06020;border-color:rgba(192,96,32,.45);background:rgba(212,118,42,.12)}
.sr-like-count{font-variant-numeric:tabular-nums;min-width:10px;text-align:center}

/* 点赞列表弹窗 */
.sr-like-modal{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;padding:20px}
.sr-like-mask{position:absolute;inset:0;background:rgba(0,0,0,.4);backdrop-filter:blur(3px)}
.sr-like-panel{
  position:relative;width:100%;max-width:380px;max-height:70vh;
  background:var(--card);border-radius:16px;border:1px solid var(--border);
  box-shadow:0 12px 40px rgba(0,0,0,.18);display:flex;flex-direction:column;overflow:hidden;
  animation:srLikePop .2s ease;
}
@keyframes srLikePop{from{opacity:0;transform:scale(.95) translateY(8px)}to{opacity:1;transform:none}}
.sr-like-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:16px 18px;border-bottom:1px solid var(--line);font-size:15px;font-weight:600;color:var(--text);
}
.sr-like-close{
  width:28px;height:28px;border-radius:50%;border:none;background:transparent;
  color:var(--muted);font-size:20px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:background .15s;
}
.sr-like-close:hover{background:var(--elevated);color:var(--text)}
.sr-like-body{overflow-y:auto;padding:8px 14px 14px}
.sr-like-loading{text-align:center;color:var(--muted);padding:30px 0;font-size:13px}
.sr-like-empty{text-align:center;color:var(--muted);padding:30px 0;font-size:13px}
.sr-like-item{
  display:flex;align-items:center;gap:10px;padding:10px 8px;border-radius:10px;
  transition:background .15s;
}
.sr-like-item:hover{background:var(--elevated)}
.sr-like-avatar{width:36px;height:36px;border-radius:50%;background:var(--elevated);display:flex;align-items:center;justify-content:center;overflow:hidden;flex:0 0 auto;border:1px solid var(--border)}
.sr-like-avatar img{width:100%;height:100%;object-fit:cover}
.sr-like-avatar .ic{width:18px;height:18px;color:var(--muted)}
.sr-like-info{flex:1;min-width:0}
.sr-like-name{font-size:13.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sr-like-msg{font-size:12px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
html[data-theme="dark"] .sr-like-btn-liked{color:#e89050;border-color:rgba(232,144,80,.35);background:rgba(232,144,80,.10)}
html[data-theme="dark"] .sr-like-btn-liked .ic{fill:#e89050;stroke:#e89050}

/* 自习室入口红点 */
.sr-nav-btn{position:relative}
.sr-like-dot{
  position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;
  background:var(--bad);border:2px solid var(--card);
  animation:srLikeDotPop .2s ease-out;pointer-events:none;
}
@keyframes srLikeDotPop{from{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}
.sr-member-list{display:flex;flex-direction:column;gap:10px;margin-bottom:20px}
.sr-member-card{
  display:flex;align-items:center;gap:10px;padding:11px 14px;
  background:var(--card);border-radius:13px;border:1px solid var(--border);
  box-shadow:var(--shadow);transition:transform .15s ease,box-shadow .15s ease;
  overflow:hidden;
}
.sr-member-card:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}
.sr-member-avatar{width:40px;height:40px;border-radius:50%;background:var(--elevated);display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:pointer;flex:0 0 auto;font-size:20px;border:1px solid var(--border);transition:transform .15s ease}
.sr-member-avatar:hover{transform:scale(1.06)}
.sr-member-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.sr-avatar-fallback{line-height:1;color:var(--muted);display:flex;align-items:center;justify-content:center}
.sr-avatar-fallback>.ic{width:20px;height:20px}
.sr-member-info{flex:1;min-width:0}
.sr-member-name-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.sr-member-name{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.sr-owner-badge{font-size:10.5px;font-weight:600;color:var(--brand);background:rgba(46,107,79,.10);padding:2px 9px;border-radius:999px;flex:0 0 auto}
.sr-badge-tag{font-size:10px;font-weight:600;padding:1.5px 8px;border-radius:999px;flex:0 0 auto;letter-spacing:.2px;line-height:1.5;border:1px solid transparent}
.sr-badge-tag-beginner{color:#5a8a6a;background:rgba(106,154,122,.10);border-color:rgba(106,154,122,.20)}
.sr-badge-tag-pro{color:#3d7a52;background:rgba(61,122,82,.10);border-color:rgba(61,122,82,.20)}
.sr-badge-tag-half{color:#9a7020;background:rgba(184,144,64,.10);border-color:rgba(184,144,64,.22)}
.sr-badge-tag-master{color:#a05818;background:rgba(192,120,48,.10);border-color:rgba(192,120,48,.22)}
.sr-badge-tag-legend{color:#8a3820;background:rgba(168,80,56,.10);border-color:rgba(168,80,56,.22)}
.sr-badge-tag-year{color:#5a3a80;background:rgba(122,90,160,.10);border-color:rgba(122,90,160,.22)}
html[data-theme="dark"] .sr-badge-tag-beginner{color:#8abfa0;background:rgba(106,154,122,.15);border-color:rgba(106,154,122,.25)}
html[data-theme="dark"] .sr-badge-tag-pro{color:#6ab085;background:rgba(61,122,82,.15);border-color:rgba(61,122,82,.25)}
html[data-theme="dark"] .sr-badge-tag-half{color:#d4a850;background:rgba(184,144,64,.15);border-color:rgba(184,144,64,.28)}
html[data-theme="dark"] .sr-badge-tag-master{color:#e09850;background:rgba(192,120,48,.15);border-color:rgba(192,120,48,.28)}
html[data-theme="dark"] .sr-badge-tag-legend{color:#d07058;background:rgba(168,80,56,.15);border-color:rgba(168,80,56,.28)}
html[data-theme="dark"] .sr-badge-tag-year{color:#a888d0;background:rgba(122,90,160,.15);border-color:rgba(122,90,160,.28)}
.sr-star-badge{font-size:10px;font-weight:600;color:#9a6a00;background:linear-gradient(135deg,#fff8e0,#ffe8a0);padding:1.5px 8px;border-radius:999px;flex:0 0 auto;display:inline-flex;align-items:center;gap:3px;box-shadow:0 1px 4px rgba(180,130,0,.18);border:1px solid rgba(200,150,30,.25);line-height:1.5}
.sr-star-badge .ic{width:10px;height:10px;fill:#d4a020;stroke:none}
.sr-self-tag{font-size:11px;color:var(--muted);flex:0 0 auto}
.sr-member-meta{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:4px;font-size:12px;line-height:1.4;color:var(--muted)}
.sr-member-meta .ic{width:12px;height:12px;vertical-align:-1px}
.sr-meta-streak{color:var(--brand);font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;gap:3px}
.sr-meta-streak.sr-streak-zero{color:var(--muted);font-variant-numeric:normal}
.sr-meta-streak.sr-streak-beginner{color:#6a9a7a}
.sr-meta-streak.sr-streak-pro{color:#4a8a6a}
.sr-meta-streak.sr-streak-half{color:#b89040}
.sr-meta-streak.sr-streak-master{color:#c07830}
.sr-meta-streak.sr-streak-legend{color:#a85038}
.sr-meta-streak.sr-streak-year{color:#7a5aa0}
.sr-meta-streak .ic{width:12px;height:12px}
.sr-meta-divider{color:var(--border)}
.sr-meta-today{font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;gap:3px}
.sr-meta-today.sr-today-ok{color:var(--ok)}
.sr-meta-today.sr-today-zero{color:var(--muted)}
.sr-kick-btn{flex:0 0 auto;align-self:center;padding:4px 10px;font-size:12px;color:var(--bad)}

/* 在线状态指示点（叠加在头像右下角） */
.sr-member-avatar-wrap{position:relative;flex:0 0 auto;width:40px;height:40px;flex-shrink:0}
.sr-online-dot{position:absolute;bottom:0;right:0;width:11px;height:11px;border-radius:50%;border:2px solid var(--card);box-sizing:border-box}
.sr-online-dot.sr-online-on{background:#2eb87a;animation:srPulse 2s infinite}
@keyframes srPulse{0%{box-shadow:0 0 0 0 rgba(46,184,122,.35)}70%{box-shadow:0 0 0 5px rgba(46,184,122,0)}100%{box-shadow:0 0 0 0 rgba(46,184,122,0)}}
.sr-online-dot.sr-online-away{background:#c9a86a}
.sr-online-dot.sr-online-off{background:#c9c0b0}
.sr-meta-online{color:var(--muted);font-size:11px}

/* 房间标签徽章 */
.sr-room-category{font-size:11px;font-weight:600;color:var(--brand);background:rgba(46,107,79,.10);padding:2px 9px;border-radius:999px;flex:0 0 auto}
/* 房间简介 */
.sr-room-intro{font-size:12.5px;color:var(--muted);margin-top:8px;line-height:1.6;padding-top:8px;border-top:1px dashed var(--line)}

/* 广场分类筛选按钮 */
.sr-plaza-filters{display:flex;gap:7px;flex-wrap:wrap;margin:12px 0 6px}
.sr-plaza-filter{padding:6px 14px;border-radius:999px;border:1px solid var(--border);background:var(--card);font-size:12.5px;color:var(--muted);cursor:pointer;transition:all .15s}
.sr-plaza-filter.active{background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:0 2px 8px -3px rgba(46,107,79,.5)}
.sr-plaza-filter:hover{border-color:var(--brand);color:var(--brand)}
.sr-plaza-filter.active:hover{color:#fff}
/* 广场卡片标签徽章 */
.sr-plaza-cat{font-size:10.5px;font-weight:600;color:var(--brand);background:rgba(46,107,79,.10);padding:2px 8px;border-radius:999px;flex:0 0 auto}
/* 广场卡片近7天活跃 */
.sr-plaza-active{color:var(--brand);font-weight:600}
/* 广场卡片简介 */
.sr-plaza-intro{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.5;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;grid-column:1/-1}

/* 成员详情环形图 —— 卡片化容器 */
.sr-charts-section{
  margin-top:18px;background:var(--inputBg);border:1px solid var(--border);
  border-radius:14px;padding:14px 16px;box-shadow:var(--shadow);
}
.sr-charts-title{font-size:12px;font-weight:700;color:var(--muted);margin-bottom:12px;letter-spacing:.8px;text-transform:uppercase}
.sr-charts-grid{display:flex;flex-wrap:wrap;gap:12px;justify-content:flex-start}
.sr-chart-item{
  display:flex;flex-direction:column;align-items:center;gap:7px;min-width:84px;
  padding:10px 8px;border-radius:12px;transition:transform .15s ease,background .15s ease;
}
.sr-chart-item:hover{background:rgba(255,255,255,.45);transform:translateY(-2px)}
.sr-chart-ring-wrap{position:relative;width:76px;height:76px}
.sr-chart-ring-wrap svg{display:block}
.sr-chart-track{stroke:var(--border)}
.sr-chart-center{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  display:flex;align-items:baseline;gap:1px;white-space:nowrap;font-variant-numeric:tabular-nums;
}
.sr-chart-num{font-size:14px;font-weight:700;color:var(--text);line-height:1}
.sr-chart-unit{font-size:9px;font-weight:600;color:var(--muted)}
.sr-chart-name{font-size:11.5px;color:var(--muted);max-width:96px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sr-charts-empty{
  font-size:12.5px;color:var(--muted);text-align:center;
  padding:22px 10px;border:1.5px dashed var(--border);border-radius:10px;line-height:1.7;
  width:100%;box-sizing:border-box;
}
.sr-charts-empty .sr-empty-ico{display:block;font-size:26px;margin-bottom:6px;line-height:1}

/* 统一环形图（单环多段饼图） */
.sr-unified-chart{display:flex;align-items:center;gap:24px;flex-wrap:wrap;width:100%;box-sizing:border-box}
.sr-unified-ring{position:relative;width:140px;height:140px;flex:0 0 auto}
.sr-unified-ring svg{display:block;overflow:visible}
.sr-ring-seg{cursor:pointer;transition:stroke-width .2s ease,opacity .2s ease}
.sr-ring-seg:hover{filter:brightness(1.1)}
.sr-unified-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;width:100%}
.sr-unified-num{display:block;font-size:26px;font-weight:700;color:var(--text);line-height:1.1;font-family:var(--font-serif)}
.sr-unified-label{display:block;font-size:11px;color:var(--muted);margin-top:4px;letter-spacing:.3px}
.sr-unified-legend{flex:1;min-width:120px;min-height:140px;display:flex;flex-direction:column;justify-content:center;gap:9px;box-sizing:border-box}
.sr-legend-item{display:flex;align-items:center;gap:9px;font-size:13px;line-height:1.3;min-height:20px;cursor:pointer;transition:opacity .2s ease;padding:2px 4px;border-radius:6px}
.sr-legend-item:hover{background:var(--elevated)}
.sr-legend-dot{width:10px;height:10px;border-radius:50%;flex:0 0 auto;box-shadow:0 0 0 2px rgba(255,255,255,.5)}
.sr-legend-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:500}
.sr-legend-val{color:var(--muted);font-size:12px;font-weight:600;flex:0 0 auto}

/* 退出按钮 */
.sr-leave-btn{width:100%;margin-top:4px}

/* 表单错误提示 */
.sr-form-error{background:#fef2f2;color:#b91c1c;border:1px solid #fecaca;border-radius:8px;padding:8px 12px;font-size:12.5px;margin:0 0 10px;line-height:1.5}

/* 创建/房间设置弹窗里的「公开到广场」开关行（纸感卡片化） */
.sr-create-visibility,.sr-visibility-toggle{
  display:flex;flex-direction:row;align-items:center;gap:10px;cursor:pointer;
  background:var(--inputBg);border:1px solid var(--border);border-radius:12px;
  padding:11px 14px;margin:0 0 14px;transition:border-color .15s ease,background .15s ease;
}
.sr-create-visibility:hover,.sr-visibility-toggle:hover{border-color:var(--brand)}
.sr-create-visibility input[type=checkbox],.sr-visibility-toggle input[type=checkbox]{
  width:18px;height:18px;flex:0 0 auto;margin:0;cursor:pointer;accent-color:var(--brand);
}
.sr-create-visibility>span,.sr-visibility-toggle>span{font-size:13.5px;color:var(--text);line-height:1.5}
/* B 新增的「公开到广场」checkbox（#srCreateIsPublic / #srSettingsIsPublic）：卡片化行 + 品牌绿 accent */
#srCreateIsPublic,#srSettingsIsPublic{width:18px;height:18px;flex:0 0 auto;margin:0;cursor:pointer;accent-color:var(--brand)}
label:has(>#srCreateIsPublic),label:has(>#srSettingsIsPublic){
  flex-direction:row;align-items:center;gap:10px;cursor:pointer;
  background:var(--inputBg);border:1px solid var(--border);border-radius:12px;
  padding:11px 14px;font-size:13.5px;color:var(--text);
  transition:border-color .15s ease,background .15s ease;
}
label:has(>#srCreateIsPublic):hover,label:has(>#srSettingsIsPublic):hover{border-color:var(--brand)}
html[data-theme="dark"] label:has(>#srCreateIsPublic),html[data-theme="dark"] label:has(>#srSettingsIsPublic){background:var(--input);border-color:var(--input-border)}

/* 成员详情弹窗 */
.sr-detail-modal{max-width:520px}
.sr-detail-head{display:flex;align-items:center;gap:14px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--line)}
.sr-detail-avatar{width:56px;height:56px;border-radius:50%;background:var(--inputBg);display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:28px;border:1px solid var(--border);flex:0 0 auto;box-shadow:var(--shadow)}
.sr-detail-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.sr-detail-username{font-size:18px;font-weight:700;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-serif)}

/* 最近学习动态 */
.sr-detail-recent{margin-top:2px;margin-bottom:16px}
.sr-detail-recent-title{font-size:12px;font-weight:700;color:var(--muted);margin-bottom:8px;letter-spacing:.8px;text-transform:uppercase}
.sr-recent-list{display:flex;flex-direction:column;gap:6px}
.sr-recent-item{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 12px;background:var(--inputBg);border:1px solid var(--border);border-radius:9px;font-size:12.5px;transition:background .15s ease}
.sr-recent-item:hover{background:var(--elevated)}
.sr-recent-date{color:var(--muted);font-variant-numeric:tabular-nums;flex:0 0 auto}
.sr-recent-count{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums;flex:0 0 auto}
.sr-recent-empty{font-size:12.5px;color:var(--muted);text-align:center;padding:16px}

/* 4 统计卡片 */
.sr-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:4px}
.sr-stat-card{background:var(--inputBg);border:1px solid var(--border);border-radius:12px;padding:12px 6px;text-align:center;transition:transform .15s ease,box-shadow .15s ease}
.sr-stat-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.sr-stat-icon{font-size:15px;margin-bottom:4px;color:var(--brand);display:flex;align-items:center;justify-content:center}
.sr-stat-value{font-size:16px;font-weight:700;color:var(--text);line-height:1.2;font-variant-numeric:tabular-nums}
.sr-stat-label{font-size:11px;color:var(--muted);margin-top:3px}

/* 未公开提示弹窗 */
.sr-private-modal{max-width:320px;text-align:center}
.sr-private-icon{font-size:31px;margin:8px 0 12px;color:var(--brand2);line-height:1}
.sr-private-text{font-size:15px;color:var(--text);margin-bottom:18px;line-height:1.6}

/* 确认文案（退出/踢出/解散共用） */
.sr-leave-confirm-text{font-size:14px;color:var(--text);line-height:1.7}
.sr-disband-text{font-size:14px;color:var(--text);line-height:1.7}

/* ===== 公开自习室广场 ===== */
.sr-plaza-title{font-size:16px;font-weight:700;color:var(--text);margin:12px 0 4px;font-family:var(--font-serif);display:flex;align-items:center;gap:6px}
.sr-plaza-title>.ic{width:18px;height:18px}
.sr-plaza-list{display:flex;flex-direction:column;gap:10px;margin:10px 0 0}
.sr-plaza-card{
  display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name btn" "meta btn";
  align-items:center;column-gap:12px;row-gap:3px;padding:14px 16px;
  background:var(--inputBg);border:1px solid var(--border);border-radius:14px;
  box-shadow:var(--shadow);transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;
}
.sr-plaza-card:hover{border-color:var(--brand);box-shadow:var(--shadow-hover);transform:translateY(-1px)}
.sr-plaza-name{grid-area:name;display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;font-size:14px;font-weight:600;color:var(--text)}
.sr-plaza-name-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sr-plaza-meta{grid-area:meta;font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sr-plaza-full{font-size:10.5px;font-weight:600;color:var(--brand2);background:rgba(176,122,75,.10);border:1px solid rgba(176,122,75,.18);padding:2px 8px;border-radius:999px;flex:0 0 auto}
.sr-plaza-join-btn{grid-area:btn;flex:0 0 auto;padding:8px 20px;font-size:13px}
.sr-plaza-join-btn:disabled{opacity:.5;cursor:not-allowed}

/* 三视图统一最小高度 */
#srWelcomeView,#srRoomView,#srPlazaView{min-height:360px}

/* ===== 深色模式覆盖 ===== */
html[data-theme="dark"] .sr-entry-card{background:var(--input);border-color:var(--input-border);box-shadow:none}
html[data-theme="dark"] .sr-entry-card:hover{border-color:var(--brand);box-shadow:var(--shadow-hover)}
html[data-theme="dark"] .sr-entry-icon{color:var(--brand);background:rgba(131,188,169,.14);border-color:rgba(131,188,169,.22)}
html[data-theme="dark"] .sr-welcome-hero{color:var(--brand);background:rgba(131,188,169,.12);border-color:var(--input-border)}
html[data-theme="dark"] .sr-member-card,
html[data-theme="dark"] .sr-stat-card,
html[data-theme="dark"] .sr-plaza-card,
html[data-theme="dark"] .sr-recent-item{background:var(--input);border-color:var(--input-border)}
html[data-theme="dark"] .sr-recent-item:hover{background:var(--elevated)}
html[data-theme="dark"] .sr-room-info{background:var(--input);border:1px solid var(--input-border)}
html[data-theme="dark"] .sr-charts-section{background:var(--input);border-color:var(--input-border)}
html[data-theme="dark"] .sr-chart-item:hover{background:rgba(255,255,255,.05)}
html[data-theme="dark"] .sr-visibility-badge{background:rgba(131,188,169,.14);border-color:rgba(131,188,169,.25);color:var(--brand)}
html[data-theme="dark"] .sr-plaza-full{background:rgba(205,174,112,.14);border-color:rgba(205,174,112,.28);color:var(--brand2)}
html[data-theme="dark"] .sr-kick-btn{color:var(--bad)}
html[data-theme="dark"] .sr-detail-avatar{background:var(--input);border-color:var(--input-border)}
html[data-theme="dark"] .sr-owner-badge{background:rgba(131,188,169,.14);color:var(--brand)}
html[data-theme="dark"] .sr-star-badge{background:linear-gradient(135deg,rgba(255,220,120,.18),rgba(255,200,80,.10));color:#f0c040;box-shadow:0 1px 3px rgba(0,0,0,.3)}
html[data-theme="dark"] .sr-meta-streak.sr-streak-beginner{color:#7aaa8a}
html[data-theme="dark"] .sr-meta-streak.sr-streak-pro{color:#5a9a7a}
html[data-theme="dark"] .sr-meta-streak.sr-streak-half{color:#d0a850}
html[data-theme="dark"] .sr-meta-streak.sr-streak-master{color:#d89040}
html[data-theme="dark"] .sr-meta-streak.sr-streak-legend{color:#c86050}
html[data-theme="dark"] .sr-meta-streak.sr-streak-year{color:#9a7ac0}
html[data-theme="dark"] .sr-room-category{background:rgba(131,188,169,.14);color:var(--brand)}
html[data-theme="dark"] .sr-plaza-cat{background:rgba(131,188,169,.14);color:var(--brand)}
html[data-theme="dark"] .sr-plaza-active{color:var(--brand)}
html[data-theme="dark"] .sr-meta-today.sr-today-ok{color:var(--ok)}
html[data-theme="dark"] .sr-form-error{background:#3a3040;border-color:#5a4048;color:#e3a0a4}
html[data-theme="dark"] .sr-fullmask{background:rgba(10,15,28,.65)}
html[data-theme="dark"] .sr-online-dot{border-color:var(--input)}
html[data-theme="dark"] .sr-online-dot.sr-online-on{background:#4fd193}
html[data-theme="dark"] .sr-online-dot.sr-online-away{background:#cdae70}
html[data-theme="dark"] .sr-online-dot.sr-online-off{background:#5d7499}
html[data-theme="dark"] .sr-plaza-filter{background:var(--input);border-color:var(--input-border);color:var(--muted)}
html[data-theme="dark"] .sr-plaza-filter.active{background:var(--brand);color:#fff;border-color:var(--brand)}
html[data-theme="dark"] .sr-chart-track{stroke:var(--input-border)}
html[data-theme="dark"] .sr-room-code{background:var(--elevated)}
html[data-theme="dark"] .sr-create-visibility,
html[data-theme="dark"] .sr-visibility-toggle{background:var(--input);border-color:var(--input-border)}
html[data-theme="dark"] .sr-create-visibility:hover,
html[data-theme="dark"] .sr-visibility-toggle:hover{border-color:var(--brand)}
html[data-theme="dark"] .sr-create-visibility>span,
html[data-theme="dark"] .sr-visibility-toggle>span{color:var(--text)}

/* ===== 响应式：PC/平板优先，窄屏 <560px ===== */
@media (max-width:560px){
  #srWelcomeView,#srRoomView,#srPlazaView{min-height:280px}
  .sr-stats-grid{grid-template-columns:repeat(2,1fr)}
  .sr-plaza-card{grid-template-columns:1fr;grid-template-areas:"name" "meta" "btn";row-gap:6px}
  .sr-plaza-join-btn{width:100%}
  .sr-member-card{gap:8px;padding:10px 12px}
  .sr-member-avatar{width:38px;height:38px;font-size:19px}
  .sr-member-avatar-wrap{width:38px;height:38px}
  .sr-charts-grid{gap:8px}
  .sr-chart-item{min-width:74px;padding:8px 4px}
  .sr-chart-ring-wrap{width:68px;height:68px}
  .sr-detail-avatar{width:48px;height:48px;font-size:24px}
  .sr-room-info{padding:14px}
  .sr-welcome-hero{width:60px;height:60px;border-radius:18px;font-size:21px}
  .sr-entry-card{padding:13px 14px;gap:12px}
  .sr-entry-icon{width:40px;height:40px;font-size:15px}
}

/* ===== [v2 exercise] 刷题本专属提示样式 ===== */
/* 中性提示条（avg 被封顶 / 智能建议 / 领先播报）：琥珀色 */
.neutral-banner{display:flex;align-items:center;gap:10px;padding:10px 14px;margin-bottom:8px;
  background:#fdf6e3;border:1px solid #ecd9a8;border-radius:10px;font-size:13px;line-height:1.6;color:#6b5410}
.neutral-banner .nb-text{flex:1}
.neutral-banner .nb-text b{color:#96600c;font-variant-numeric:tabular-nums} /* S1 */
.neutral-banner .ob-actions{margin-top:6px}
.neutral-banner .nb-close{background:none;border:none;color:#b89a4a;cursor:pointer;font-size:15px;line-height:1;padding:2px 6px;border-radius:6px;flex:0 0 auto;transition:.15s}
.neutral-banner .nb-close:active{transform:scale(.96)} /* M3：只保留:active，删:hover */
/* excess-banner 里的关闭按钮（与 neutral-banner 同风格） */
.excess-banner .nb-close{background:none;border:none;color:inherit;opacity:.6;cursor:pointer;font-size:15px;line-height:1;padding:2px 6px;border-radius:6px;flex:0 0 auto;transition:.15s;margin-left:auto}
.excess-banner .nb-close:hover{opacity:1}
.excess-banner .nb-close:active{transform:scale(.96)}
html[data-theme="dark"] .neutral-banner{background:#2c2818;border-color:#6b5d30;color:#d4b870}
html[data-theme="dark"] .neutral-banner .nb-text b{color:#e8c878}

/* M1：整本刷完庆祝条——品牌实底配白字/深色字，避免对比度崩坏 */
.excess-banner.celebrate{background:var(--brand);border-color:var(--brand)}
.excess-banner.celebrate .ob-main{color:#fff}
.excess-banner.celebrate .ob-icon{color:#fff;font-size:20px}
html[data-theme="dark"] .excess-banner.celebrate .ob-main{color:#10302a}
html[data-theme="dark"] .excess-banner.celebrate .ob-icon{color:#10302a}

/* 进度透明化一行（已做X/共Y + 落后/领先天数） */
.neutral-hint{padding:9px 14px;margin-bottom:8px;background:var(--bg);border:1px solid var(--border);
  border-radius:10px;font-size:12.5px;line-height:1.6;color:var(--text)}
.neutral-hint b{font-variant-numeric:tabular-nums}
/* M2：停新页提示——语义类 .paused，随主题走暖米绿，不再硬编码 #f0fdf4 */
.neutral-hint.paused{background:#f3f6ec;border-color:#cdd9b8}
html[data-theme="dark"] .neutral-hint.paused{background:#1f3a2d;border-color:#2e5a44;color:#cfe8d8}

/* 关联错题逾期灰字软提醒 */
.soft-remind{padding:7px 14px;margin-bottom:8px;font-size:12px;line-height:1.5;color:var(--muted)}
.soft-remind b{color:var(--muted)}

/* 打卡记录上的「补记错题」小按钮 */
.r-wrong{background:none;border:none;color:#8aa0c0;cursor:pointer;font-size:13px;line-height:1;
  padding:2px 7px;border-radius:7px;font-family:inherit;flex:0 0 auto;transition:.15s}
.r-wrong:active{transform:scale(.96)} /* M3：只保留:active，删:hover */

/* S5：砍题保分行（动态 cursor/opacity 仍由内联控制） */
.ab-row{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid var(--border);
  border-radius:9px;margin-bottom:8px;cursor:pointer}

/* 砍题保分面板标签 */
.ab-tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:11px;vertical-align:middle}
.ab-tag.keep{background:#e6f4ec;color:#2e6b4f}
.ab-tag.drop{background:#fdf6e3;color:#a57010} /* S4：与琥珀体系同源浅底 */
html[data-theme="dark"] .ab-tag.keep{background:#1f3a2d;color:#78baa0}
html[data-theme="dark"] .ab-tag.drop{background:#3a3018;color:#d4b870}

/* ===== AI 助手 ===== */
:root{
  --ai-bubble-ai: var(--inputBg, #f5eedd);
  --ai-bubble-user: #e9ebdb;
  --ai-tint: #e9ebdb;
  --ai-ring: rgba(46,107,79,.16);
  --ai-code-bg: #efe7d6;
}
html[data-theme="dark"]{
  --ai-bubble-ai: #2c3f63;
  --ai-bubble-user: #4a628e;
  --ai-tint: #4a628e;
  --ai-ring: rgba(134,169,218,.25);
  --ai-code-bg: #1f2c46;
}

/* 入口 FAB */
#aiFab{
  position:fixed;right:16px;bottom:24px;
  width:52px;height:52px;border-radius:50%;border:none;cursor:pointer;z-index:120;
  background:var(--brand);color:#fff;font-size:26px;line-height:1;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 16px rgba(0,0,0,.25),0 0 0 3px rgba(255,255,255,.15);
  transition:transform .15s ease, box-shadow .15s ease;
}
#aiFab .ai-fab-icon{filter:drop-shadow(0 1px 1px rgba(0,0,0,.2))}
html[data-theme="dark"] #aiFab{color:#10302a;box-shadow:0 4px 16px rgba(0,0,0,.4),0 0 0 3px rgba(255,255,255,.1)}
#aiFab:hover{transform:scale(1.08)}
#aiFab:active{transform:scale(.94)}
.ai-fab-dot{
  position:absolute;top:-2px;right:-2px;width:8px;height:8px;border-radius:50%;
  background:var(--bad);border:2px solid var(--card);
  animation:aiFade .15s ease-out;
}
@keyframes aiFade{from{opacity:0}to{opacity:1}}

/* 抽屉：复用 .drawer-mask，容器改三段式 flex */
.ai-mask{z-index:130}
.ai-drawer{
  display:flex;flex-direction:column;padding:0;
  max-width:400px;width:100%;
  height:100vh;height:100dvh;   /* 手机上用动态视口高度，避免底部输入区被地址栏/底栏顶出可视区 */
  overflow:hidden;               /* 只让 .ai-body 滚动，抽屉本体不滚 */
}
.ai-head{
  display:flex;align-items:center;gap:8px;
  padding:14px 16px;border-bottom:1px solid var(--line);
}
.ai-head-title{font-size:16px;font-weight:600;flex:1;min-width:0}
.ai-anchor-chip{flex:0 0 auto;font-size:11.5px}
.ai-head .x-btn{padding:2px 6px;margin-left:auto}

/* Tab */
.ai-tabs{
  display:flex;gap:4px;margin:12px 16px 0;
  background:var(--ai-bubble-ai);border-radius:10px;padding:3px;
}
.ai-tab{
  flex:1;border:none;background:none;padding:7px;font-family:inherit;font-size:13px;
  color:var(--muted);border-radius:8px;cursor:pointer;transition:background .15s ease,color .15s ease;
}
.ai-tab.active{background:var(--ai-tint);color:var(--brand);font-weight:600}

/* 内容区滚动 */
.ai-body-wrap{position:relative;flex:1;display:flex;min-height:0;overflow:hidden}
.ai-body{flex:1;overflow-y:auto;padding:12px 16px;min-height:0}
.ai-pane{display:none}
.ai-pane:not([hidden]){display:block}

/* 对话区 */
.ai-chat-layout{display:block;min-height:0}
.ai-msgs-wrap{min-width:0}

/* 右侧对话索引（固定在可视区域右侧，DeepSeek ScrollNav风格） */
.ai-outline{
  position:absolute;top:0;right:0;bottom:0;
  width:14px;
  cursor:pointer;
  z-index:5;
}
.ai-outline[hidden]{display:none}
.ai-outline-track{
  position:absolute;top:0;bottom:0;left:50%;
  transform:translateX(-50%);
  width:10px;
}
.ai-outline-marker{
  position:absolute;left:1px;
  width:8px;height:2px;border-radius:1px;
  background:var(--muted);opacity:.25;
  transition:opacity .1s,background .1s,height .1s;
}
.ai-outline-marker.active{
  background:var(--brand);opacity:1;height:3px;
}

/* hover浮层：紧贴刻度向左展开，不透明实色背景 */
.ai-outline-popup{
  position:absolute;top:0;right:14px;
  width:160px;max-height:60vh;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  box-shadow:0 2px 12px rgba(0,0,0,.1);
  padding:6px 4px;
  z-index:100;
  overflow-y:auto;
  display:none;
}
.ai-outline:hover .ai-outline-popup{display:block}
.ai-outline-popup::-webkit-scrollbar{width:3px}
.ai-outline-popup::-webkit-scrollbar-thumb{background:var(--line);border-radius:2px}

.ai-outline-popup-item{
  display:flex;align-items:center;gap:6px;
  padding:6px 8px;border-radius:6px;
  cursor:pointer;
  transition:background .1s;
}
.ai-outline-popup-item:hover{background:var(--ai-tint)}
.ai-outline-popup-item.active{background:var(--ai-tint)}
.ai-outline-popup-item.active .ai-outline-popup-text{color:var(--brand);font-weight:500}
.ai-outline-popup-item.active .ai-outline-popup-dot{background:var(--brand)}
.ai-outline-popup-dot{
  width:5px;height:2px;border-radius:1px;
  background:var(--muted);opacity:.4;
  flex-shrink:0;
  transition:background .1s;
}
.ai-outline-popup-text{
  font-size:11.5px;color:var(--muted);
  line-height:1.35;word-break:break-all;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;flex:1;
}

/* 手机/窄屏隐藏索引栏 */
@media (max-width:640px){
  .ai-outline{display:none !important}
}
/* touch设备（iPad/手机）禁用hover浮层，避免点击异常，只保留点击跳转 */
@media (hover: none) and (pointer: coarse){
  .ai-outline:hover .ai-outline-popup{display:none !important}
}

/* 消息气泡 */
.ai-msgs{padding:4px 0}
.ai-msg{margin-bottom:10px;font-size:12.5px;line-height:1.55;color:var(--text)}
.ai-msg.ai{
  background:var(--ai-bubble-ai);border-radius:12px 4px 12px 12px;
  padding:9px 11px;max-width:100%;
}
.ai-msg.user{
  margin-left:auto;background:var(--ai-bubble-user);
  border-radius:4px 12px 12px 12px;padding:8px 11px;max-width:82%;
}
.ai-msg.ai.proactive{border-left:3px solid var(--brand2)}
.ai-msg .md strong, .ai-msg .md b{font-weight:700}
.ai-msg .md ul, .ai-msg .md ol{margin:6px 0;padding-left:20px}
.ai-msg .md li{margin:2px 0}
.ai-msg .md code{
  background:rgba(0,0,0,.06);padding:1px 5px;border-radius:4px;
  font-size:12.5px;font-family:ui-monospace,Menlo,Consolas,monospace;
}
html[data-theme="dark"] .ai-msg .md code{background:rgba(255,255,255,.12)}
.ai-msg .md pre{
  background:rgba(0,0,0,.06);padding:8px 10px;border-radius:8px;
  overflow-x:auto;font-size:12.5px;
}
html[data-theme="dark"] .ai-msg .md pre{background:rgba(255,255,255,.12)}
.ai-msg .md pre code{background:none;padding:0}
.ai-msg .md a{color:var(--brand)}
/* 数学公式 */
.ai-math-block{margin:10px 0;text-align:center;overflow-x:auto;padding:4px 0}
.ai-math-inline{display:inline-flex;align-items:center;vertical-align:middle;margin:0 1px;line-height:1.4}
.ai-math-block .katex, .ai-math-inline .katex{color:inherit}
.ai-math-inline .katex{font-size:1.12em}
.ai-msg-error{
  background:var(--ai-bubble-ai);border:1px solid var(--line);
  border-left:3px solid var(--bad);border-radius:12px;padding:10px 12px;
  margin-bottom:12px;font-size:13px;color:var(--text);
}
.ai-msg-error .ai-err-actions{margin-top:8px;display:flex;gap:8px;flex-wrap:wrap}

/* AI消息操作栏 */
.ai-msg-actions{
  display:flex;gap:4px;margin-top:6px;opacity:1;
}
.ai-msg.user .ai-msg-actions{justify-content:flex-end}
.ai-msg-btn{
  background:none;border:none;color:var(--muted);font-size:11.5px;
  font-family:inherit;cursor:pointer;padding:2px 6px;border-radius:6px;
  transition:background .15s ease,color .15s ease;
}
.ai-msg-btn:hover{background:var(--ai-tint);color:var(--brand)}

/* 消息时间戳 */
.ai-msg-ts{
  font-size:10.5px;color:var(--muted);opacity:.6;
  margin-top:3px;line-height:1;
}
.ai-msg.user .ai-msg-ts{text-align:right}
.ai-msg.ai .ai-msg-ts{text-align:left}

/* 参考文献 */
.ai-references{
  margin-top:10px;padding:10px 12px;
  background:var(--card-bg);border:1px solid var(--border);
  border-radius:8px;font-size:12px;line-height:1.6;
}
.ai-ref-title{
  font-weight:600;color:var(--text);margin-bottom:4px;font-size:12px;
}
.ai-ref-list{
  margin:0;padding-left:18px;color:var(--muted);
}
.ai-ref-list li{margin:2px 0}
.ai-ref-list a{
  color:var(--brand);text-decoration:none;word-break:break-all;
}
.ai-ref-list a:hover{text-decoration:underline}
.ai-ref-disclaimer{
  margin-top:6px;font-size:11px;color:var(--muted);opacity:.7;
  border-top:1px dashed var(--border);padding-top:6px;
}

/* 用户协议入口 */
.ai-legal-row{
  margin:12px 0 4px;text-align:center;
}
.ai-legal-link{
  background:var(--card-bg);border:1px solid var(--border);
  color:var(--brand);font-size:12.5px;cursor:pointer;
  padding:6px 16px;border-radius:8px;
  transition:all .15s ease;font-weight:500;
}
.ai-legal-link:hover{color:#fff;border-color:var(--brand);background:var(--brand)}

/* 用户协议弹窗 */
.ai-legal-mask{
  position:fixed;inset:0;background:rgba(0,0,0,.45);
  z-index:9999;display:flex;align-items:center;justify-content:center;
  padding:20px;
}
.ai-legal-content{
  background:var(--bg);border:1px solid var(--border);
  border-radius:12px;max-width:520px;width:100%;
  max-height:80vh;display:flex;flex-direction:column;
  box-shadow:0 8px 32px rgba(0,0,0,.15);
}
.ai-legal-head{
  display:flex;justify-content:space-between;align-items:center;
  padding:14px 18px;border-bottom:1px solid var(--border);
  font-weight:600;font-size:15px;color:var(--text);
}
.ai-legal-close{
  background:none;border:none;font-size:22px;color:var(--muted);
  cursor:pointer;line-height:1;padding:0 4px;
}
.ai-legal-close:hover{color:var(--text)}
.ai-legal-body{
  padding:14px 18px;overflow-y:auto;font-size:13px;
  line-height:1.7;color:var(--text);
}
.ai-legal-body h4{
  margin:12px 0 4px;font-size:13.5px;color:var(--text);
}
.ai-legal-body p{margin:0 0 8px;color:var(--muted)}

/* 停止生成提示 */
.ai-msg-stop{
  text-align:center;font-size:12px;color:var(--muted);
  opacity:.6;margin-bottom:12px;
}

/* 建议卡片 */
.ai-suggest{
  background:var(--card);border:1px solid var(--line);border-radius:12px;
  margin:4px 0 16px;overflow:hidden;
}
.ai-suggest-title{
  padding:10px 12px;font-weight:700;font-size:13px;
  border-bottom:1px solid var(--line);
}
.ai-act-row{
  display:flex;align-items:center;gap:10px;padding:10px 12px;
  border-bottom:1px solid var(--line);font-size:13.5px;
}
.ai-act-row:last-of-type{border-bottom:none}
.ai-act-row input[type="checkbox"]{width:16px;height:16px;accent-color:var(--brand);flex:0 0 auto}
.ai-act-row .ai-act-label{flex:1;min-width:0}
.ai-act-row .ai-act-time{
  font-size:12px;color:var(--muted);flex:0 0 auto;font-variant-numeric:tabular-nums;
}
.ai-act-row.opt .ai-act-label{color:var(--brand2)}
.ai-act-row.applied-row{opacity:.6}
.ai-act-row.applied-row .ai-act-time{color:var(--ok)}
.ai-act-row.unsupported{opacity:.6}
.ai-act-row.unsupported .ai-act-label{color:var(--muted)}
.ai-unsupported-tag{
  flex:0 0 auto;font-size:11px;color:var(--muted);
  background:var(--line);padding:2px 8px;border-radius:999px;white-space:nowrap;
}
.ai-suggest-bar{
  display:flex;align-items:center;gap:8px;padding:10px 12px;
  background:var(--ai-bubble-ai);
}
.ai-suggest-bar .ai-sel-all{
  background:none;border:none;color:var(--muted);font-size:12.5px;
  cursor:pointer;font-family:inherit;padding:2px 4px;
}
.ai-suggest-bar .spacer{flex:1}
.ai-suggest-bar .primary{padding:7px 14px;font-size:12.5px}
.ai-suggest.applied{opacity:1}
.ai-suggest.undone{opacity:.55}
.ai-suggest.undone .ai-suggest-bar{justify-content:center;color:var(--muted);font-size:12.5px}

/* 打字指示器 */
.ai-msg#aiTyping{display:flex;align-items:center;gap:8px}
.ai-typing{display:inline-flex;gap:4px;padding:12px 0}
.ai-typing i{
  width:6px;height:6px;border-radius:50%;background:var(--muted);
  animation:aiBlink 1.2s infinite;
}
.ai-typing i:nth-child(2){animation-delay:.2s}
.ai-typing i:nth-child(3){animation-delay:.4s}
.ai-typing-status{color:var(--muted);font-size:13px;opacity:.8}
@keyframes aiBlink{
  0%,100%{opacity:.3;transform:translateY(0)}
  50%{opacity:1;transform:translateY(-3px)}
}

/* 历史列表 */
.ai-newconv{width:100%;margin-bottom:8px}
.ai-hist-item{
  display:flex;align-items:center;gap:8px;padding:12px 4px;
  border-bottom:1px solid var(--line);cursor:pointer;
}
.ai-hist-item.pinned{background:var(--bg-soft)}
.ai-hist-item .hi-main{flex:1;min-width:0}
.ai-hist-item .hi-title{
  font-size:13.5px;font-weight:600;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:4px;
}
.ai-hist-item .hi-pin-icon{font-size:11px}
.ai-hist-item .hi-preview{
  font-size:12px;color:var(--muted);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;
}
.ai-hist-item .hi-actions{display:flex;gap:2px;flex:0 0 auto}
.ai-hist-item .hi-btn{
  background:none;border:none;color:var(--muted);font-size:13px;
  cursor:pointer;padding:4px 6px;border-radius:6px;flex:0 0 auto;
  opacity:.6;transition:opacity .15s;
}
.ai-hist-item:hover .hi-btn{opacity:1}
.ai-hist-item .hi-btn:hover{background:var(--bg-soft);color:var(--text)}
.ai-hist-item .hi-del:hover{color:var(--bad)}

/* 历史记录批量管理 */
.ai-hist-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.ai-hist-header .ai-newconv{flex:1;margin-bottom:0}
.ai-hist-manage{flex:0 0 auto;font-size:12px;padding:4px 10px}
.ai-hist-batch-bar{
  display:flex;align-items:center;gap:10px;padding:8px 4px;
  margin-bottom:8px;border-bottom:1px solid var(--line);font-size:12px;
}
.ai-hist-select-all{display:flex;align-items:center;gap:4px;cursor:pointer;color:var(--text)}
.ai-hist-select-all input{width:14px;height:14px;accent-color:var(--brand)}
.ai-hist-selected-count{color:var(--muted);flex:1}
.ai-hist-batch-del{color:var(--bad);border-color:var(--bad)}
.ai-hist-batch-del:disabled{opacity:.4;cursor:not-allowed}
.ai-hist-item.manage-mode .hi-actions{display:none}
.ai-hist-item .hi-checkbox{display:none;flex:0 0 auto;width:16px;height:16px;accent-color:var(--brand)}
.ai-hist-item.manage-mode .hi-checkbox{display:block}
.ai-hist-item.selected{background:var(--ai-tint)}

/* 空态 */
.ai-empty{text-align:center;padding:40px 16px;color:var(--muted)}
.ai-empty-icon{font-size:32px;opacity:.5;margin-bottom:10px}
.ai-empty-title{font-size:14px;font-weight:600;color:var(--text);margin-bottom:6px}
.ai-empty .primary{margin-top:10px}

/* 设置页 */
.ai-sec{
  font-size:12px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);margin:18px 0 10px;padding-top:12px;
  border-top:1px solid var(--line);
}
.ai-sec:first-child{margin-top:0;border-top:none;padding-top:0}
.ai-field{display:block;font-size:13px;margin-bottom:10px;color:var(--text)}
.ai-field select, .ai-field input[type="number"]{
  display:block;width:100%;margin-top:5px;
  background:var(--ai-bubble-ai);border:1px solid var(--line);
  border-radius:8px;padding:9px 12px;font-family:inherit;font-size:14px;
  color:var(--text);box-sizing:border-box;
}
.ai-field select:focus, .ai-field input:focus{
  outline:none;box-shadow:0 0 0 3px var(--ai-ring);border-color:var(--brand);
}
.ai-key-wrap{position:relative;display:block;margin-top:5px}
.ai-key-wrap input{
  width:100%;box-sizing:border-box;
  background:var(--ai-bubble-ai);border:1px solid var(--line);
  border-radius:8px;padding:9px 38px 9px 12px;font-family:inherit;font-size:14px;
  color:var(--text);
}
.ai-key-wrap input:focus{
  outline:none;box-shadow:0 0 0 3px var(--ai-ring);border-color:var(--brand);
}
.ai-eye{
  position:absolute;right:8px;top:50%;transform:translateY(-50%);
  background:none;border:none;cursor:pointer;padding:4px;
  display:flex;align-items:center;justify-content:center;color:var(--muted);
}
.ai-eye:hover{color:var(--text)}
.ai-field-note{font-size:12px;color:var(--muted);margin:-4px 0 10px}
.ai-set-row{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.ai-test-result{font-size:12.5px}
.ai-test-result.ok{color:var(--ok)}
.ai-test-result.bad{color:var(--bad)}
.ai-tutorial{margin-bottom:12px}
.ai-tutorial-toggle{
  background:none;border:none;color:var(--brand);font-size:13px;
  cursor:pointer;font-family:inherit;padding:2px 0;
}
.ai-tutorial-body{
  margin-top:8px;padding:10px 12px;border:1px solid var(--line);
  border-radius:8px;font-size:12.5px;line-height:1.7;color:var(--text);
  background:var(--ai-bubble-ai);
}
.ai-tutorial-body p{margin:0 0 8px}
.ai-tutorial-body p:last-child{margin-bottom:0}
.ai-tutorial-body a{color:var(--brand);word-break:break-all}
.ai-tut-note{
  font-size:12px;color:var(--muted);padding:8px 10px;
  background:var(--ai-code-bg);border-radius:6px;margin-bottom:10px !important;
  border-left:3px solid var(--brand);
}
.ai-tut-list{
  margin:0 0 10px;padding-left:18px;font-size:12.5px;line-height:1.8;
}
.ai-tut-list li{margin:2px 0}
.ai-tut-list code{
  background:rgba(0,0,0,.06);padding:1px 5px;border-radius:4px;
  font-size:11.5px;font-family:ui-monospace,Menlo,Consolas,monospace;
}
html[data-theme="dark"] .ai-tut-list code{background:rgba(255,255,255,.12)}

.ai-usage-row{
  display:flex;justify-content:space-between;align-items:baseline;
  font-size:12.5px;color:var(--muted);margin-bottom:6px;
}
.ai-usage-row b{font-variant-numeric:tabular-nums;color:var(--text)}
.ai-usage-bar{height:8px;border-radius:99px;background:var(--line);overflow:hidden;margin-bottom:6px}
.ai-usage-fill{height:100%;background:var(--brand);transition:width .2s ease}
.ai-usage-fill.over{background:var(--bad)}
.ai-data-notice{margin:14px 0}
.ai-set-actions{display:flex;gap:10px;margin-top:8px;align-items:center}
.ai-set-actions .spacer{flex:1}
.ai-clear-all{font-size:12.5px}

/* 记忆管理开关 */
.ai-mem-toggle{
  display:flex;align-items:center;gap:10px;cursor:pointer;
  padding:8px 0;margin-bottom:6px;
}
.ai-mem-toggle input{display:none}
.ai-mem-slider{
  position:relative;width:40px;height:22px;border-radius:999px;
  background:var(--line);transition:background .2s ease;flex:0 0 auto;
}
.ai-mem-slider::after{
  content:'';position:absolute;top:2px;left:2px;width:18px;height:18px;
  border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);
  transition:transform .2s ease;
}
.ai-mem-toggle input:checked + .ai-mem-slider{background:var(--brand)}
.ai-mem-toggle input:checked + .ai-mem-slider::after{transform:translateX(18px)}
.ai-mem-label{font-size:13.5px;color:var(--text);flex:1;min-width:0}
.ai-tag-recommend{
  display:inline-block;font-size:11px;color:var(--brand);
  background:var(--ai-tint);padding:1px 7px;border-radius:999px;margin-left:4px;
  vertical-align:middle;
}
.ai-clear-mem{font-size:12.5px;margin-bottom:10px}

/* 输入区 */
.ai-input-area{
  border-top:1px solid var(--line);
  padding:10px 16px calc(10px + env(safe-area-inset-bottom));
}
.ai-anchor-hint{font-size:12px;color:var(--muted);margin-bottom:6px}
.ai-timechips{display:flex;align-items:center;gap:5px;margin-bottom:8px;flex-wrap:wrap}
.ai-tc-label{font-size:12px;color:var(--muted)}
.ai-input-row{display:flex;gap:8px;align-items:flex-end}
.ai-input-row textarea{
  flex:1;resize:none;max-height:96px;min-height:38px;
  background:var(--ai-bubble-ai);border:1px solid var(--line);
  border-radius:10px;padding:9px 12px;font-family:inherit;font-size:13.5px;
  color:var(--text);box-sizing:border-box;line-height:1.5;
}
.ai-input-row textarea:focus{
  outline:none;box-shadow:0 0 0 3px var(--ai-ring);border-color:var(--brand);
}
.ai-send{
  width:36px;height:36px;flex:0 0 auto;border:none;border-radius:50%;
  background:var(--brand);color:#fff;font-size:15px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
}
.ai-send svg{width:22px;height:22px;transform:translateX(2px)}
html[data-theme="dark"] .ai-send{color:#10302a}
.ai-send:disabled{background:var(--line);cursor:not-allowed}
.ai-send.stop{background:var(--bad);font-size:12px}
.ai-send.stop:hover{opacity:.85}
.ai-input-row textarea.editing{
  border-color:var(--brand);
  box-shadow:0 0 0 3px var(--ai-ring);
}
.ai-edit-hint{
  font-size:11.5px;color:var(--brand);margin:4px 0 0;display:none;
}
.ai-edit-hint.show{display:block}

/* ===== 触控目标 ≥44px（移动端可点性） ===== */
#aiFab{width:52px;height:52px;flex:0 0 auto}
#aiFab .ai-fab-icon{font-size:26px}
.ai-send{width:44px;height:44px}
.ai-tab{min-height:44px;display:flex;align-items:center;justify-content:center}
.ai-eye{min-width:36px;min-height:36px;display:flex;align-items:center;justify-content:center}
.ai-hist-item .hi-del{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}
.ai-hist-item .hi-btn{min-width:36px;min-height:36px;display:flex;align-items:center;justify-content:center}
@media (hover:none){
  .ai-hist-item .hi-btn{opacity:.85}
}
.ai-act-row input[type="checkbox"]{width:20px;height:20px;flex:0 0 auto;margin:4px}

/* 视角切换条 */
.ai-persp-bar{display:flex;align-items:center;gap:5px;margin-bottom:8px;flex-wrap:wrap}
.ai-persp{
  border:none;background:var(--ai-bubble-ai);color:var(--muted);
  font-family:inherit;font-size:12.5px;padding:6px 10px;border-radius:999px;cursor:pointer;
  transition:background .15s ease,color .15s ease;
}
.ai-persp.active{background:var(--ai-tint);color:var(--brand);font-weight:600}
.ai-persp-hint{font-size:11.5px;color:var(--muted);margin-left:2px;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-multi-list{
  max-height:160px;overflow-y:auto;margin-bottom:8px;padding:6px 8px;
  border:1px solid var(--line);border-radius:10px;background:var(--ai-bubble-ai);
}
.ai-multi-list label{
  display:flex;align-items:center;gap:8px;padding:6px 4px;font-size:13px;color:var(--text);cursor:pointer;
}
.ai-multi-list input{width:16px;height:16px;accent-color:var(--brand)}

/* 学习时长：自由输入 + 快捷按钮 */
.ai-budget-row{display:flex;align-items:center;gap:6px;margin-bottom:8px;flex-wrap:wrap}
.ai-budget-num{
  width:48px !important;min-width:48px !important;max-width:48px !important;
  height:24px;line-height:1;
  background:var(--ai-bubble-ai);border:1px solid var(--line);
  border-radius:999px;padding:0 4px;font-family:inherit;font-size:12px;color:var(--text);
  box-sizing:border-box;text-align:center;font-variant-numeric:tabular-nums;
  -moz-appearance:textfield;flex:0 0 auto;
}
.ai-budget-num::-webkit-outer-spin-button,.ai-budget-num::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.ai-budget-num:focus{outline:none;box-shadow:0 0 0 3px var(--ai-ring);border-color:var(--brand)}
.ai-budget-unit{font-size:12px;color:var(--muted);flex:0 0 auto}
.ai-budget-chip{
  border:1px solid var(--line);background:transparent;color:var(--muted);
  font-family:inherit;font-size:12px;padding:4px 10px;border-radius:999px;cursor:pointer;
  transition:background .15s ease,color .15s ease;flex:0 0 auto;
}
.ai-budget-chip.active{background:var(--ai-tint);color:var(--brand);border-color:transparent;font-weight:600}

/* 今日已学 / 剩余时长 */
.ai-time-row{display:flex;align-items:center;gap:5px;margin-bottom:8px;font-size:12px;color:var(--muted)}
.ai-time-label{color:var(--muted)}
.ai-time-sep{opacity:.5;margin:0 2px}
.ai-time-studied{
  color:var(--brand);font-weight:600;cursor:pointer;padding:1px 6px;border-radius:6px;
  background:var(--ai-bubble-ai);border:1px dashed transparent;
  font-variant-numeric:tabular-nums;transition:border-color .15s ease,background .15s ease;
}
.ai-time-studied:hover{border-color:var(--brand);background:var(--ai-tint)}
.ai-time-studied.editing{border-style:solid;border-color:var(--brand);cursor:text;outline:none}
.ai-time-remaining{color:var(--muted);font-variant-numeric:tabular-nums}
.ai-reestimate-btn{
  margin-left:4px;background:transparent;border:1px solid var(--line);
  color:var(--muted);cursor:pointer;padding:3px;border-radius:6px;
  display:flex;align-items:center;justify-content:center;
  transition:background .15s ease,color .15s ease,border-color .15s ease;
}
.ai-reestimate-btn:hover{background:var(--ai-tint);color:var(--brand);border-color:var(--brand)}
.ai-reestimate-btn.spinning svg{animation:spin 1s linear infinite}
@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}

/* 示例问题胶囊 */
.ai-samples{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.ai-samples:empty{display:none}
.ai-sample{
  border:1px solid var(--line);background:var(--ai-bubble-ai);color:var(--text);
  font-family:inherit;font-size:12px;padding:5px 10px;border-radius:999px;cursor:pointer;
  transition:background .15s ease,transform .15s ease;
}
.ai-sample:hover{background:var(--ai-tint);color:var(--brand)}

/* ===== AI 回复 markdown 排版 ===== */
.md{font-size:14px;line-height:1.7;color:var(--text);word-break:break-word}
.md p{margin:.5em 0}
.md h1,.md h2,.md h3{margin:.7em 0 .4em;line-height:1.4}
.md h1{font-size:17px;font-weight:700}
.md h2{font-size:15.5px;font-weight:700}
.md h3{font-size:14.5px;font-weight:600}
.md ul,.md ol{margin:.4em 0;padding-left:1.4em}
.md li{margin:.2em 0}
.md hr{border:none;border-top:1px solid var(--line);margin:.8em 0}
.md a{color:var(--brand);text-decoration:underline}
.md blockquote{
  margin:.5em 0;padding:8px 12px;border-left:3px solid var(--brand);
  background:var(--ai-tint);border-radius:0 8px 8px 0;color:var(--text);
}
.md table{border-collapse:collapse;margin:.5em 0;width:100%;font-size:13px}
.md th,.md td{border:1px solid var(--line);padding:6px 10px;text-align:left}
.md th{background:var(--ai-tint);font-weight:700}
/* 代码块 */
.ai-codeblock{position:relative;margin:.5em 0}
.ai-codeblock pre{
  margin:0;background:var(--ai-code-bg);border:1px solid var(--line);
  border-radius:10px;padding:12px;overflow-x:auto;
}
.ai-codeblock code{font-family:monospace;font-size:12.5px;white-space:pre}
.ai-copy-btn{
  position:absolute;top:6px;right:6px;border:1px solid var(--line);
  background:var(--card);color:var(--muted);font-family:inherit;font-size:11px;
  padding:2px 8px;border-radius:6px;cursor:pointer;
}
.md code{
  font-family:monospace;font-size:12.5px;background:var(--ai-code-bg);
  border-radius:5px;padding:2px 6px;
}
.ai-codeblock .md code,.ai-codeblock pre code{background:none;padding:0}
/* 长回复折叠 */
.ai-clamp .md{max-height:300px;overflow:hidden;position:relative}
.ai-clamp .md::after{
  content:'';position:absolute;left:0;right:0;bottom:0;height:60px;
  background:linear-gradient(transparent,var(--ai-bubble-ai));
}
.ai-fold-toggle{
  border:none;background:none;color:var(--brand);font-family:inherit;
  font-size:12.5px;cursor:pointer;padding:4px 0;
}

/* 工具调用过程折叠区 */
.ai-tool-trace{
  margin-bottom:8px;
  border-radius:4px;
  background:#faf8f5;
  padding:6px 10px;
  border-left:2px solid var(--line);
}
html[data-theme="dark"] .ai-tool-trace{
  background:rgba(255,255,255,.05);
  border-left-color:var(--line);
}
.ai-tool-trace-header{
  display:flex;align-items:center;gap:6px;
  font-size:12px;color:#999;cursor:pointer;
  user-select:none;padding:2px 0;
}
html[data-theme="dark"] .ai-tool-trace-header{color:var(--muted)}
.ai-tool-trace-header:hover{color:var(--text)}
.ai-tool-trace-label{flex:1}
.ai-tool-trace-arrow{font-size:10px;opacity:.6}
.ai-tool-trace-list{
  display:none;
  margin-top:6px;padding-top:4px;
  border-top:1px solid var(--line);
}
.ai-tool-trace-list.expanded{display:block}
.ai-tool-trace-item{
  font-size:12px;padding:4px 0;
  display:flex;align-items:baseline;gap:6px;
  line-height:1.5;color:var(--text);
}
.ai-tool-trace-item + .ai-tool-trace-item{
  border-top:1px solid var(--line);
}
.ai-tool-trace-item.error{color:var(--muted)}
.ai-tool-trace-item.error .ai-tool-trace-text{
  text-decoration:line-through;opacity:.7;
}
.ai-tool-trace-seq{flex:0 0 auto;opacity:.5;font-variant-numeric:tabular-nums}
.ai-tool-trace-text{flex:1;min-width:0}
.ai-tool-trace-dot{
  flex:0 0 auto;width:6px;height:6px;border-radius:50%;
  background:var(--ok);opacity:.45;align-self:center;
}
.ai-tool-trace-err{font-size:11px;opacity:.7}

/* ===== 统一线性 SVG 图标（currentColor 自动适配深浅主题） ===== */
/* 尺寸优先尊重 SVG 上的 width/height 属性（svgIcon() 每个调用可自定义 11/14/16/18px）；
   只有没写尺寸属性的内联 SVG（如说明文案里的图标）才兜底 18px。 */
.ic{display:inline-block;vertical-align:-0.12em;flex:0 0 auto;width:auto;height:auto}
.ic:not([width]){width:18px;height:18px}
/* 独立大图标容器：跟随容器 font-size 缩放 */
.wt-ico>.ic,.ob-icon>.ic,.ob-advice-icon>.ic,.status-icon>.ic,.lazy-warning-icon>.ic,
.type-icon>.ic,.empty-icon>.ic,.cm-icon>.ic,.warn-icon>.ic,.sr-welcome-hero>.ic,
.sr-entry-icon>.ic,.sr-stat-icon>.ic,.sr-private-icon>.ic,.ai-empty-icon>.ic,
.ai-fab-icon>.ic,.user-avatar-btn>.ic,.profile-avatar>.ic{width:1.35em;height:1.35em}
/* toast 图标尺寸（原 .toast-icon 的 font-size:32px 对 SVG 无效，改由 svg 尺寸控制） */
.toast-icon{display:flex;align-items:center;justify-content:center;color:var(--brand)}
.toast-icon svg{width:30px;height:30px}
@media (max-width:640px){.toast-icon svg{width:26px;height:26px}}
/* 按钮/标题内联图标与文字间距 */
button>.ic,.ghost-btn>.ic,.soft-btn>.ic,.primary>.ic,.danger-btn>.ic{margin-right:5px;width:15px;height:15px}
.wb-section-title>.ic,.modal-head h2>.ic,h2>.ic,.sec-title>.ic,.welcome-feat>.ic{margin-right:6px;width:17px;height:17px}
/* 小按钮内图标缩小 */
.ghost-btn.small>.ic,.soft-btn.small>.ic{width:14px;height:14px}
/* 任务列表图标与文字匹配 */
.pi-icon>.ic{width:18px;height:18px}
.pi-meta>.ic{width:13px;height:13px;vertical-align:-2px}
.pi-meta .ic{width:13px;height:13px;vertical-align:-2px}

/* ===== 标题衬线字体（Noto Serif SC，正文保持无衬线） ===== */
h1,h2,h3{font-family:var(--font-serif);font-weight:600;letter-spacing:0.01em}
.modal-head h2,.sec-title,.wb-section-title,.welcome h2,.welcome-badge,.card h2{font-family:var(--font-serif);font-weight:600}

/* ===== iPad / 平板适配（768px ~ 1024px） ===== */
@media (min-width:768px) and (max-width:1024px){
  .wrap{padding:0 16px}
  .head{padding:14px 0 0}
  /* 每周小结统计格子：允许换行，避免拥挤重叠 */
  .weekly-review .wr-stats{flex-wrap:wrap}
  .weekly-review .wr-stat{flex:1 1 calc(33.333% - 7px);min-width:0}
  /* 今日总览项目行：确保不重叠 */
  .dash-proj{gap:8px}
  .dash-proj .dp-name{flex:0 0 110px;font-size:12.5px}
  .dash-proj .dp-pct{flex:0 0 44px;font-size:11.5px}
  .dash-proj .ts-chip{flex:0 0 84px;width:84px;font-size:10.5px;padding:3px 6px}
  /* 弹窗适配：稍微宽一点，给3列选择器更多空间 */
  .modal{max-width:580px;padding:22px}
  /* 新建项目表单：任务类型保持3列，缩小尺寸确保不重叠 */
  .type-picker{grid-template-columns:repeat(3,1fr);gap:8px}
  .type-opt-inner{padding:12px 6px;gap:4px}
  .type-opt .type-icon{font-size:20px}
  .type-opt .type-name{font-size:12.5px}
  .type-opt .type-desc{font-size:10px;line-height:1.3}
  /* 所有seg保持原列数，缩小内边距确保不溢出 */
  .seg{gap:8px}
  .seg-opt span{padding:9px 6px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* 表单输入框统一高度和内边距 */
  .modal input[type="text"],
  .modal input[type="number"],
  .modal input[type="date"],
  .modal select{padding:9px 10px;font-size:13.5px}
  /* 两列布局保持 */
  .modal .two-col{grid-template-columns:1fr 1fr;gap:12px}
  /* 背书/错题打卡面板：3列改2列，避免订正效果按钮溢出重叠 */
  .recite-grid-2{grid-template-columns:1fr 1fr}
  .recite-grid-2 .page-range{grid-column:span 2}
  .recite-grid-2 .field{min-width:0}
  .recite-grid-2 input{width:100%;min-width:0}
  /* 订正效果按钮缩小，确保不溢出 */
  .rec-qbtn{padding:6px 10px;font-size:12px}
  /* 背书网格：4列改3列 */
  .recite-grid{grid-template-columns:1fr 1fr 1fr}
  /* AI抽屉：稍微宽一点 */
  .ai-drawer{max-width:420px}
  /* 单元编辑器和范围编辑器的行高优化 */
  .unit-edit-row,
  .ps-row{gap:8px}
  /* hint文字行高优化 */
  .hint, .lock-hint, .unit-help-bar{line-height:1.6}
}

/* ===== iPad 竖屏（768px）专项 ===== */
@media (width:768px){
  .dash-grid{grid-template-columns:repeat(2,1fr)}
  .recite-grid{grid-template-columns:1fr 1fr}
  .recite-grid-2{grid-template-columns:1fr 1fr}
}

