/* =========================================================
   Zenith Academy 经营管理系统 · 设计系统 v6
   语言：上灰下青绿渐变 + 纯白卡片柔影 + 深炭灰胶囊按钮
   左侧贯穿式侧边栏 + 左上角黑色山峰 logo + hero 大留白
   ========================================================= */
/* ===== Outfit：英文/数字字体（可变字体 100-900，仅 latin，中文自动回退苹方） ===== */
@font-face{
  font-family:'Outfit';
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url('/fonts/outfit-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

:root{
  /* —— 玻璃拟态设计令牌（承接参考图 Glassmorphism） —— */
  --glass:rgba(255,255,255,.5);
  --glass-2:rgba(255,255,255,.4);
  --glass-dark:rgba(31,32,38,.62);
  --border:rgba(255,255,255,.6);
  --border-dark:rgba(255,255,255,.16);
  --bg-top:#E8EBEB;
  --bg-bottom:#BFE5D8;
  --surface:#FFFFFF;            /* 保留纯白：侧边栏/logo/品牌依赖，不改动其外观 */
  --surface-2:rgba(255,255,255,.5); /* 子表面统一玻璃化（th/行高亮/日表头/分区等） */
  --input-fill:rgba(244,248,247,.78); /* 输入框浅灰透明底 */
  --line:rgba(30,42,45,.08);
  --line-soft:rgba(30,42,45,.05);
  --text:#1f2026;
  --ink:#1f2026;
  --text-2:#4a4d57;
  --text-3:#7a7e89;
  --accent:#65c6c4;            /* 参考图清透青绿 */
  --accent-deep:#3FA9A0;
  --accent-soft:rgba(101,198,196,.16);
  --accent-glow:rgba(101,198,196,.4);
  --dark:#1F2A2D;              /* 保留：侧边栏胶囊/主按钮依赖 */
  --money:#2E8C7A;
  --ok:#3CB589;
  --warn:#D9A441;
  --bad:#D96B5A;
  --info:#5B9BDD;
  --exam:#C4A35A;              /* 考试日标记：香槟金（品牌强调色），独立于青绿主色与珊瑚红「冲突/危险」、琥珀「告警」 */
  --exam-deep:#9A7233;         /* 金底上的深金文字，保证对比度 */
  --exam-soft:rgba(196,163,90,.16);
  --exam-line:rgba(196,163,90,.5);
  --shadow:0 20px 60px rgba(30,30,60,.14), 0 8px 24px rgba(30,30,60,.07);
  --shadow-card:0 18px 50px rgba(30,30,60,.13), 0 6px 18px rgba(30,30,60,.06);
  --shadow-lg:0 22px 60px rgba(30,30,60,.18);
  --shadow-sm:0 8px 28px rgba(30,30,60,.10);
  --r-card:28px;
  --r-lg:24px;
  --r-md:18px;
  --r-input:16px;
  --r-pill:999px;
  --font:"Outfit","PingFang SC",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,"Microsoft YaHei",sans-serif;
  --serif:"Outfit","PingFang SC",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,"Microsoft YaHei",sans-serif;
  --chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%234a4d57' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
}
*{margin:0;padding:0;box-sizing:border-box}
/* 表单元素默认不继承 font-family（浏览器会给 Arial），显式继承才能实现全站字体统一 */
button,input,select,textarea,optgroup{font-family:inherit}
html,body{min-height:100%}
body{
  font-family:var(--font);font-size:14px;font-weight:300;color:var(--text);line-height:1.5;
  /* 参考图底部背景：多层径向光晕（青绿/暖黄/草绿）+ 清透冷灰渐变，叠加毛玻璃卡片 */
  background:
    radial-gradient(circle at 10% 20%, rgba(101,198,196,.35) 0%, transparent 38%),
    radial-gradient(circle at 90% 12%, rgba(255,183,77,.26) 0%, transparent 32%),
    radial-gradient(circle at 72% 88%, rgba(129,199,132,.26) 0%, transparent 38%),
    linear-gradient(135deg, #eef2f6 0%, #e2e8f0 50%, #f0f4f8 100%);
  background-attachment:fixed;-webkit-font-smoothing:antialiased;
}
.hidden{display:none!important}
h1,h2,h3,h4,.serif{font-family:var(--serif);font-weight:300}
b,strong{font-weight:400}
.ic{width:22px;height:22px;stroke:currentColor;stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.gold{color:var(--money)}
.muted{color:var(--text-2);font-size:12px}
.spacer{flex:1}
.empty{padding:40px;text-align:center;color:var(--text-3)}

/* ============ 通用按钮 ============ */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--border);
  background:var(--glass);color:var(--text);border-radius:var(--r-pill);padding:9px 18px;font-size:14px;
  font-weight:400;cursor:pointer;font-family:var(--font);transition:all .18s;box-shadow:var(--shadow-sm);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.btn:hover{transform:translateY(-1px)}
.btn-primary{background:var(--dark);color:#fff}
.btn-primary:hover{box-shadow:0 10px 22px rgba(31,42,45,.22)}
.btn-gold{background:var(--accent);color:#fff}
.btn-gold:hover{background:var(--accent-deep)}
.btn-danger{background:var(--glass);color:var(--bad);border-color:rgba(217,107,90,.35)}
.btn-danger:hover{background:#fdecea;border-color:var(--bad)}
.btn-ghost{background:rgba(255,255,255,.7);color:var(--text-2);box-shadow:none}
.btn-ghost:hover{background:#fff;color:var(--text)}
.btn-sm{height:36px;padding:0 14px;font-size:12.5px;border-radius:10px}
.btn-block{width:100%}
.inp{width:100%;height:38px;padding:0 12px;border:1px solid var(--line);border-radius:var(--r-input);background:var(--input-fill);color:var(--text);font-family:var(--font);font-size:13px;font-weight:300;outline:none;transition:.15s}
.inp:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
textarea.inp{height:auto;padding:10px 12px;resize:vertical;line-height:1.5}
.inp::placeholder{color:var(--text-3)}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;background:var(--surface-2);padding:2px 6px;border-radius:6px;color:var(--text-2)}
.link-btn{background:none;border:none;color:var(--text-2);cursor:pointer;font-size:13px;font-weight:300;
  font-family:var(--font);padding:5px 8px;border-radius:10px;transition:all .15s}
.link-btn:hover{color:var(--text);background:rgba(255,255,255,.6)}

/* ============ 主框架（v6） ============ */
.app{position:relative;min-height:100vh}
.main{margin-left:80px;min-height:100vh;display:flex;flex-direction:column}

/* 左上角黑色山峰 logo */
.hero-logo{position:fixed;top:20px;left:8px;z-index:50}
.hero-logo img{display:block;width:64px;height:64px;object-fit:contain;filter:brightness(0) contrast(1.3)}

/* 左侧贯穿式侧边栏（首钮与首屏卡片顶对齐） */
.nav-float{position:fixed;left:0;top:0;bottom:0;width:80px;display:flex;flex-direction:column;align-items:flex-start;
  padding-top:30vh;padding-left:16px;gap:14px;z-index:30}
.nav-item,.nav-exit{position:relative;width:48px;height:48px;border-radius:var(--r-pill);border:none;background:var(--surface);
  color:var(--text-2);cursor:pointer;box-shadow:var(--shadow);
  transition:background .2s ease,color .2s ease,box-shadow .2s ease,width .26s cubic-bezier(.4,0,.2,1),max-width .26s cubic-bezier(.4,0,.2,1),transform .2s ease}
.nav-exit{display:grid;place-items:center;margin-top:8px}
.nav-exit .ic{width:22px;height:22px}
.nav-exit:hover{color:var(--bad)}
.nav-item{display:flex;align-items:center;justify-content:center}
.nav-item .ic{position:absolute;left:13px;top:50%;transform:translateY(-50%);width:22px;height:22px}
.nav-item:hover{transform:scale(1.06);color:var(--text)}
/* 选中态：圆形向右连成暗色胶囊，图标固定不动，标签随展开浮现（不改变折叠态尺寸/位置/图标） */
.nav-item.active{background:var(--dark);color:#fff;justify-content:flex-start;width:auto;min-width:48px;max-width:208px;
  padding-right:18px;border-radius:var(--r-pill)}
.nav-label{position:relative;margin-left:35px;font-size:13px;font-weight:300;letter-spacing:.3px;color:#fff;white-space:nowrap;
  max-width:0;overflow:hidden;opacity:0;pointer-events:none;
  transition:max-width .26s cubic-bezier(.4,0,.2,1),opacity .16s ease .05s}
.nav-item.active .nav-label{max-width:172px;opacity:1}

/* ============ Hero 大留白区（约 30% 视口高） ============ */
.hero-band{min-height:30vh;display:flex;align-items:center;padding:0 0 8px;position:relative}
.hero-inner{width:100%;padding:0 40px;display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:wrap}
.hero-brand{flex:1 1 auto;min-width:240px}
.hero-brand h1{font-size:42px;font-weight:300;letter-spacing:.6px;color:var(--text);line-height:1.08}
.hero-brand .sub{font-size:13px;letter-spacing:2.8px;text-transform:uppercase;color:var(--text-2);font-weight:300;margin-top:10px}
.hero-time,.hero-date{display:flex;flex-direction:column;align-items:flex-start;min-width:110px}
.hero-time .label,.hero-date .label{font-size:12px;color:var(--text-3);font-weight:300;margin-bottom:4px}
.hero-time .value{font-size:38px;font-weight:300;letter-spacing:1px;line-height:1;color:var(--text)}
.hero-date .value{font-size:38px;font-weight:300;line-height:1;color:var(--text);letter-spacing:2px;white-space:nowrap}
.hero-cta{display:flex;align-items:center;gap:8px;padding:12px 22px;border-radius:var(--r-pill);
  background:var(--dark);color:#fff;font-size:14px;font-weight:300;border:none;cursor:pointer;
  box-shadow:0 8px 24px rgba(31,42,45,.22);transition:all .2s;font-family:var(--font)}
.hero-cta:hover{transform:translateY(-1px);box-shadow:0 12px 28px rgba(31,42,45,.28)}
.hero-cta .ic{width:18px;height:18px;stroke-width:2}
.role-pill{font-size:11px;color:var(--accent-deep);background:var(--accent-soft);padding:2px 9px;border-radius:var(--r-pill);font-weight:300}

/* ============ 主内容区 ============ */
.app-body{display:flex;gap:0;align-items:flex-start}
.view-container{padding:0 40px 70px;flex:1;min-width:0}
/* 非仪表盘页面：内容区顶部与导航栏之间留出 64px 间距（统一留白） */
.view-container.cv-notdash{padding-top:64px}

/* ============ 页面侧边栏（客户管理/渠道管理 子导航） ============ */
.page-sidebar{width:180px;flex-shrink:0;padding:40px 0 70px 28px;border-right:1px solid var(--border);min-height:60vh}
.page-sidebar.hidden{display:none}
.sb-title{font-size:11px;font-weight:300;text-transform:uppercase;letter-spacing:.3px;color:var(--text-3);margin-bottom:12px;padding-left:12px}
.sb-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:none;border-radius:10px;background:transparent;color:var(--text-2);cursor:pointer;font-family:var(--font);font-size:13px;font-weight:300;text-align:left;transition:background .18s ease,color .18s ease;margin-bottom:2px}
.sb-item:hover{background:var(--surface-2);color:var(--text)}
.sb-item.active{background:var(--dark);color:#fff}
.sb-item .ic{width:18px;height:18px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sb-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ============ 卡片：纯白柔影（v6） ============ */
.panel{position:relative;background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);
  padding:22px;margin-bottom:18px;box-shadow:var(--shadow-card);
  backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}

/* 深色面板：与左上角 logo 同一深炭灰（filter:brightness(0) 后呈现色），整体白字 */
.panel-dark{background:var(--text-2);border-color:rgba(255,255,255,.18);color:#fff;backdrop-filter:none;-webkit-backdrop-filter:none}
.panel-dark .panel-head h3{color:#fff}
.panel-dark .panel-head .muted{color:rgba(255,255,255,.65)}
.panel-dark .summary-row-wide .sum-card{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.2);box-shadow:none;color:#fff}
.panel-dark .summary-row-wide .sum-card .lbl{color:rgba(255,255,255,.9)}
.panel-dark .summary-row-wide .sum-card .val{color:#fff}
.panel-dark .summary-row-wide .sum-card .val small{color:rgba(255,255,255,.85)}
.panel-dark .summary-row-wide .sum-card .sub{color:rgba(255,255,255,.7)}
.panel-dark .summary-row-wide .sum-card .edit-pen{background:rgba(255,255,255,.92);color:var(--text-2);box-shadow:0 2px 6px rgba(0,0,0,.18)}
.panel-dark .summary-row-wide .sum-card .edit-pen:hover{background:#fff;color:var(--accent-deep)}
.panel-dark .summary-row-wide .sum-card.hero{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.35)}
.panel-dark .summary-row-wide .sum-card.hero .val{color:#fff}
.panel-dark .summary-row-wide .muted{color:rgba(255,255,255,.6)}
.panel-dark .focus-txt{color:#fff}
.panel-dark .focus-line{color:#fff}
.panel-dark .plan-item{color:#fff}
.panel-head{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.panel-head h3{font-size:16px;font-weight:300}
.panel-head .spacer{flex:1}
.panel-head a{font-size:13px;color:var(--accent-deep);font-weight:300;text-decoration:none}
.panel-head .more{font-size:12px;color:var(--text-3)}

.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px;margin-bottom:18px}
.profit-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:18px}
.stat-card{position:relative;background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:18px 20px;
  box-shadow:var(--shadow-card);margin-bottom:18px;
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.stat-card .lbl{font-size:12.5px;color:var(--text-2);font-weight:300;letter-spacing:.3px}
.stat-card .num{font-size:27px;font-weight:300;margin-top:8px;letter-spacing:.3px}
.stat-card .num em{font-style:normal;font-size:13px;color:var(--text-3);font-weight:300}
.stat-card .muted{margin-top:6px}

/* ============ 仪表盘 Bento（v6） ============ */
.bento{display:grid;grid-template-columns:repeat(12,1fr);gap:20px}
.bento>*{display:flex;flex-direction:column}
.bento .col-left{grid-column:span 7}
.bento .col-right{grid-column:span 5}
.bento .card{background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:22px;box-shadow:var(--shadow-card);
  backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}
.bento .card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.bento .card-title{font-size:16px;font-weight:300;color:var(--text)}
.bento .card-sub{font-size:12px;color:var(--text-3);margin-top:2px;font-weight:300}
.bento .stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:20px}
.bento .stats-grid .stat-card{margin-bottom:0;min-height:110px;display:flex;flex-direction:column;justify-content:space-between}

/* ============ 工具栏 ============ */
.toolbar,.sched-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.toolbar select,.toolbar input{width:auto;min-width:140px;margin-top:0}
.toolbar .spacer{flex:1}

/* ============ 表格 ============ */
.table-wrap{overflow-x:auto;border-radius:14px}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;padding:11px 12px;color:var(--text-2);font-weight:300;font-size:12px;
  background:var(--surface-2);white-space:nowrap;letter-spacing:.3px;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
th:first-child{border-top-left-radius:14px}
th:last-child{border-top-right-radius:14px}
td{padding:11px 12px;border-bottom:1px solid var(--line-soft);vertical-align:top}
tbody tr:last-child td{border-bottom:none}
tbody tr:hover td{background:var(--surface-2)}
.money{font-weight:300;color:var(--text)}
.money.gold{color:var(--money)}
.money.neg{color:var(--bad)}
/* 客户利润分析：净利相对条形 + 洞察行 + 合计行 */
.net-cell{position:relative;display:inline-flex;align-items:center;justify-content:flex-end;gap:6px;min-width:96px}
.net-bar{position:absolute;right:0;top:50%;transform:translateY(-50%);height:62%;border-radius:4px;background:rgba(46,140,122,.15);z-index:0;pointer-events:none}
.net-bar.neg{background:rgba(217,107,90,.16)}
.net-cell strong{position:relative;z-index:1}
.insight{font-size:13px;color:var(--text-2);font-weight:300;margin-bottom:14px;padding:10px 14px;background:var(--accent-soft);border-left:3px solid var(--money);border-radius:8px;letter-spacing:.2px}
.insight strong{color:var(--text);font-weight:300}
.tot-row td{background:var(--surface-2);font-weight:300}
.tot-row td:first-child{border-bottom-left-radius:14px}
.tot-row td:last-child{border-bottom-right-radius:14px}

/* ============ 状态标签 ============ */
.tag{display:inline-block;padding:3px 11px;border-radius:var(--r-pill);font-size:12px;font-weight:300;white-space:nowrap}
.tag-new{background:#E9F1FB;color:#3a6ea5}
.tag-following{background:var(--accent-soft);color:var(--accent-deep)}
.tag-trial{background:#FBF3DE;color:#a07a2a}
.tag-signed{background:#E7F6EF;color:#2c7a5f}
.tag-lost{background:#EFEFEF;color:#8a8578}
.tag-active{background:#E7F6EF;color:#2c7a5f}
.tag-paused{background:#FBF3DE;color:#a07a2a}
.tag-finished{background:#EFEFEF;color:#8a8578}
.tag-scheduled{background:var(--accent-soft);color:var(--accent-deep)}
.tag-completed{background:#E2E0D8;color:#5a6268}
.tag-cancelled{background:#EFEFEF;color:#8a8578}
.tag-warn{background:#FDEBE8;color:var(--bad)}

/* ============ 列表 / 提醒 ============ */
.remind-item{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line-soft);font-size:13px}
.remind-item:last-child{border-bottom:none}
.remind-dot{width:9px;height:9px;border-radius:50%;background:var(--accent);flex-shrink:0}
.remind-dot.red{background:var(--bad)}
.lesson-row{display:flex;align-items:center;gap:12px;padding:13px 14px;border-radius:14px;background:var(--surface-2);
  transition:all .15s;margin-bottom:8px;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.lesson-row:hover{background:var(--accent-soft)}
.lesson-row:last-child{margin-bottom:0}
.lesson-row .time{width:88px;flex-shrink:0}
.lesson-row .time b{font-size:14.5px;display:block;font-weight:300}
.lesson-row .time span{font-size:11px;color:var(--text-3)}
.lesson-row .who{flex:1;min-width:0}
.lesson-row .who b{font-size:14px;font-weight:300;display:block}
.lesson-row .who span{font-size:12.5px;color:var(--text-2)}
.ava-sm{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--accent),var(--accent-deep));
  color:#fff;display:grid;place-items:center;font-size:13px;font-weight:300;flex-shrink:0}
.alert-row{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--line-soft)}
.alert-row:last-child{border-bottom:none}
.alert-row:first-child{padding-top:0}
.alert-row .who{flex:1;min-width:0}
.alert-dot{width:32px;height:32px;border-radius:var(--r-pill);display:grid;place-items:center;flex-shrink:0}
.alert-dot .ic{width:16px;height:16px}
.alert-row.warn .alert-dot{background:#FBF3DE;color:var(--warn)}
.alert-row.bad .alert-dot{background:#FDEBE8;color:var(--bad)}
.alert-row .t{font-size:13.5px;font-weight:300}
.alert-row .d{font-size:12px;color:var(--text-2);margin-top:2px}
.alert-row .meta{font-size:11px;color:var(--text-3);margin-top:5px}
.pill{font-size:11px;font-weight:300;padding:5px 12px;border-radius:var(--r-pill);white-space:nowrap}
.pill.ok{background:#E7F6EF;color:var(--ok)}
.pill.warn{background:#FBF3DE;color:var(--warn)}
.pill.info{background:var(--accent-soft);color:var(--accent-deep)}

/* ============ 表单（参考登录卡 9 点规范 · 输入卡片风格） ============ */
/* 1. 外层卡片更大圆角 + 柔影（modal / 跟进表单卡片） */
/* 2. 输入框：药丸形、无边框、浅内阴影、白底 */
/* 3. 标签弱化做小字说明 */
/* 4. 密码框右侧眼睛图标 */
/* 5. 主按钮：全宽黑色药丸 */
/* 6. 分段控制：白底激活胶囊 */

/* —— 标签基础：做小字、浅灰、字段说明 —— */
label{display:block;margin-bottom:16px;color:var(--text-3);font-size:12px;font-weight:300}
label .lbl{display:block;font-size:12px;font-weight:300;color:var(--text-3);margin-bottom:0}
label.req .lbl::after{content:" *";color:var(--accent)}

/* —— 通用输入控件（含登录页兜底，下面再覆盖卡片表单） —— */
label input,label select,label textarea{display:block;width:100%;margin-top:6px;padding:11px 14px;
  border:1px solid var(--line);border-radius:var(--r-input);background:#fff;font-size:14px;
  font-family:var(--font);color:var(--text);transition:border-color .15s,box-shadow .15s}
label input,label select{height:44px}
label textarea{resize:vertical;min-height:74px}
label input::placeholder,label textarea::placeholder{color:var(--text-3)}
label input:hover,label select:hover,label textarea:hover{border-color:rgba(30,42,45,.16)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);
  box-shadow:0 0 0 4px rgba(101,198,196,.16)}
label input:disabled,label select:disabled,label textarea:disabled{background:var(--surface-2);color:var(--text-3);cursor:not-allowed;border-color:var(--line)}

/* —— 错误 / 辅助文案 —— */
label.err input,label.err select,label.err textarea{border-color:var(--bad);box-shadow:0 0 0 3px rgba(217,107,90,.14)}
label .help{font-size:12px;color:var(--text-3);margin-top:8px;line-height:1.5}
label.err .help{color:var(--bad)}

/* —— 输入卡片内：modal / 跟进表单 / 笔记编辑 ——
   统一尺度：高 38px、字号 13px、圆角 14px（与页面工具栏 36px/13px 同一量级，不再自成一套） */
.modal-body label,.fu-form label,.form-row label{margin-bottom:13px;font-size:12px;color:var(--text-3);letter-spacing:.2px}
.modal-body label input,.modal-body label select,.modal-body label textarea,
.fu-form label input,.fu-form label select,.fu-form label textarea,
.form-row .input,.form-row select{
  height:38px;padding:7px 14px;border:none;border-radius:14px;background:var(--input-fill);
  font-size:13px;color:var(--text);
  box-shadow:inset 0 2px 5px rgba(30,30,60,.06), inset 0 0 0 1px rgba(255,255,255,.35);
  transition:box-shadow .15s, transform .1s;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.modal-body label input::placeholder,.modal-body label textarea::placeholder,
.fu-form label input::placeholder,.fu-form label textarea::placeholder,
.form-row .input::placeholder{color:var(--text-3)}
.modal-body label input:hover,.modal-body label select:hover,.modal-body label textarea:hover,
.fu-form label input:hover,.fu-form label select:hover,.fu-form label textarea:hover,.form-row .input:hover{
  box-shadow:inset 0 2px 6px rgba(30,42,45,.09), inset 0 0 0 1px rgba(30,42,45,.05)}
.modal-body label input:focus,.modal-body label select:focus,.modal-body label textarea:focus,
.fu-form label input:focus,.fu-form label select:focus,.fu-form label textarea:focus,.form-row .input:focus{
  outline:none;border:none;
  box-shadow:inset 0 2px 6px rgba(30,30,60,.10), inset 0 0 0 1px rgba(255,255,255,.4),
             0 0 0 3px rgba(101,198,196,.12)}
/* select 去原生外观，统一箭头、高度与 input 对齐 */
.modal-body label select,.fu-form label select,.form-row select{
  appearance:none;-webkit-appearance:none;
  background-image:var(--chevron);background-repeat:no-repeat;background-position:right 13px center;
  padding-right:34px;cursor:pointer}
.modal-body label textarea,.fu-form label textarea,.form-row .input{height:auto;min-height:84px;padding:10px 14px;line-height:1.6}

/* —— 控件容器 + 密码眼睛 —— */
.control{position:relative;display:flex;align-items:center}
.control.has-trail input{padding-right:38px}
.trail-eye{position:absolute;right:10px;top:50%;transform:translateY(-50%);
  width:28px;height:28px;border:none;background:transparent;color:var(--text-3);
  border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:color .15s, background .15s}
.trail-eye:hover{color:var(--text);background:var(--surface-2)}
.trail-eye svg{width:16px;height:16px}

/* —— 表单网格 —— */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 18px}
.form-grid .full,.full{grid-column:1/-1}
label .full{grid-column:1/-1}
.col-subject select{width:100%}

/* —— modal 底部动作：主按钮全宽黑色药丸 —— */
.modal-actions,.modal-foot{display:flex;flex-direction:column;gap:10px;margin-top:18px}
.modal-actions .btn,.modal-foot .btn{width:100%;height:44px;border-radius:var(--r-pill);font-size:14px;font-weight:300;box-shadow:none}
.modal-actions .btn-primary,.modal-foot .btn-primary{background:var(--dark);color:#fff}
.modal-actions .btn-primary:hover,.modal-foot .btn-primary:hover{box-shadow:0 10px 22px rgba(31,42,45,.22)}
.modal-actions .btn:not(.btn-primary),.modal-foot .btn:not(.btn-primary){background:var(--surface-2);color:var(--text-2);border:1px solid var(--line)}
.modal-actions .btn:not(.btn-primary):hover,.modal-foot .btn:not(.btn-primary):hover{background:var(--line-soft)}
/* 并排的小按钮（如月度笔记的取消/保存）保持本色，不被全宽主按钮规则撑大 */
.modal-foot .btn-sm{width:auto;height:36px;padding:0 14px;font-size:12.5px;border-radius:10px}
.rate-box{margin-top:16px;padding-top:14px;border-top:1px solid var(--line-soft)}
.rate-box-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.rate-box-head>span{font-weight:300;font-size:14px;color:var(--ink-deep)}
.rate-rows{display:flex;flex-direction:column;gap:8px}
.rate-row{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:center}
.rate-row input{height:38px;padding:0 12px;border:none;border-radius:14px;background:var(--input-fill);font-family:var(--font);font-size:13px;color:var(--text);
  box-shadow:inset 0 2px 4px rgba(30,42,45,.06), inset 0 0 0 1px rgba(30,42,45,.03);transition:box-shadow .15s}
.rate-row select{height:38px;padding:0 34px 0 12px;border:none;border-radius:14px;background:var(--input-fill);font-family:var(--font);font-size:13px;color:var(--text);
  appearance:none;-webkit-appearance:none;background-image:var(--chevron);background-repeat:no-repeat;background-position:right 13px center;cursor:pointer;
  box-shadow:inset 0 2px 5px rgba(30,30,60,.06), inset 0 0 0 1px rgba(255,255,255,.35)}

/* ===== 考试管理弹窗（tab + 列表 + 表单）===== */
.exam-tabs{display:flex;gap:0;border-bottom:1px solid var(--line-soft);margin-bottom:16px}
.exam-tabs .tab-btn{flex:1;height:40px;border:none;background:none;font-size:13px;font-weight:300;color:var(--text-2);cursor:pointer;position:relative;transition:.15s}
.exam-tabs .tab-btn.active{color:var(--dark);font-weight:400}
.exam-tabs .tab-btn.active::after{content:'';position:absolute;bottom:-1px;left:20%;right:20%;height:2px;background:var(--dark);border-radius:1px}
.exam-tabs .tab-btn:hover:not(.active){color:var(--text)}
.tab-content{min-height:100px}
.exam-list{margin-bottom:18px}
.exam-list .mini-table{width:100%;border-collapse:collapse;font-size:12.5px}
.exam-list .mini-table th{text-align:left;padding:7px 10px;background:var(--surface-2);color:var(--text-2);font-weight:300;border-bottom:1px solid var(--line-soft);white-space:nowrap}
.exam-list .mini-table td{padding:6px 10px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
.exam-add h4{font-size:13px;font-weight:400;color:var(--text);margin:14px 0 10px;padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
.btn-xs{height:28px;padding:0 10px;font-size:11.5px;border-radius:8px;border:1px solid var(--line);background:var(--surface);color:var(--text-2);cursor:pointer;font-family:var(--font);font-weight:300;transition:.15s}
.btn-xs:hover{background:var(--line-soft)}
.btn-xs.btn-danger{background:#FDEBE8;color:var(--bad);border-color:#F0D4CE}
.btn-xs.btn-danger:hover{background:#F0D4CE}
.tag-ok{background:#E8F5E9;color:#2E7D32;display:inline-block;padding:2px 10px;border-radius:999px;font-size:11.5px;font-weight:300}
.rate-row select:focus{outline:none;box-shadow:inset 0 2px 6px rgba(30,30,60,.10), inset 0 0 0 1px rgba(255,255,255,.4), 0 0 0 3px rgba(101,198,196,.12)}
.rate-row input:hover,.rate-row select:hover{box-shadow:inset 0 2px 5px rgba(30,42,45,.08), inset 0 0 0 1px rgba(30,42,45,.04)}
.rate-row input:focus{outline:none;box-shadow:inset 0 2px 5px rgba(30,30,60,.09), inset 0 0 0 1px rgba(255,255,255,.4), 0 0 0 3px rgba(101,198,196,.12)}

/* ============ 删除两步确认 ============ */
.del-impact-tip{font-size:13.5px;line-height:1.75;color:var(--text-2);margin:0 0 14px}
.del-impact-tip b{color:var(--text)}
.del-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.del-list li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 14px;background:var(--surface-2);border:1px solid var(--line-soft);border-radius:12px}
.del-k{font-weight:300;color:var(--text)}
.del-v{color:var(--text-3);font-size:13px;text-align:right}
.del-impact-warn{font-size:13.5px;line-height:1.75;margin:0;padding:14px 16px;background:rgba(217,107,90,.08);border:1px solid rgba(217,107,90,.3);border-radius:12px;color:#a8442f}
.del-impact-warn b{color:var(--bad)}

/* ============ 时间线 ============ */
.timeline{border-left:2px solid var(--accent-soft);margin:8px 0 0 4px;padding-left:16px}
.timeline-item{position:relative;padding-bottom:14px}
.timeline-item::before{content:"";position:absolute;left:-21px;top:5px;width:8px;height:8px;border-radius:50%;
  background:var(--accent);border:2px solid var(--surface)}
.timeline-item .t-meta{font-size:11px;color:var(--text-2);margin-bottom:3px}
.timeline-item .t-content{background:var(--surface-2);border-radius:12px;padding:9px 12px;font-size:13px}

/* ============ 线索详情重设计（v6） ============ */
.ld-head{display:flex;align-items:center;gap:14px;padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--line-soft)}
.ld-ava{width:50px;height:50px;border-radius:50%;background:linear-gradient(135deg,var(--accent),var(--accent-deep));
  color:#fff;display:grid;place-items:center;font-size:18px;font-weight:300;flex-shrink:0}
.ld-id{flex:1;min-width:0}
.ld-name{font-size:21px;font-weight:300;line-height:1.2}
.ld-sub{font-size:12.5px;color:var(--text-2);margin-top:3px}
.ld-tags{display:flex;flex-direction:column;gap:6px;align-items:flex-end;flex-shrink:0}
.ctag{background:var(--surface-2);color:var(--text-2);border:1px solid var(--line)}
.ld-section{background:var(--surface-2);border-radius:14px;padding:14px 16px;margin-bottom:14px}
.ld-section-t{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:300;color:var(--text-2);
  letter-spacing:.4px;margin-bottom:11px}
.ld-section-t::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--accent)}
.kv-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}
.kv-k{font-size:12px;color:var(--text-2);margin-bottom:3px}
.kv-v{font-size:14px;font-weight:300;color:var(--text);word-break:break-all}
.kv-v.empty{color:var(--text-3);font-weight:300}
.kv.full{grid-column:1/-1}
.note{background:var(--glass);border:1px solid var(--border);border-radius:14px;padding:14px 16px;font-size:13.5px;
  color:var(--text);line-height:1.55;word-break:break-all;
  box-shadow:0 6px 20px rgba(30,30,60,.06);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.note-empty{color:var(--text-3);border:1px dashed var(--border);background:rgba(255,255,255,.3);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.score-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.score-chip{padding:8px 14px;border-radius:12px;text-align:center;min-width:64px}
.score-chip .sc-k{font-size:11px;color:var(--text-2);margin-bottom:2px}
.score-chip .sc-v{font-size:18px;font-weight:300;line-height:1}
.score-chip.in{background:var(--glass);border:1px solid var(--border);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.score-chip.out{background:var(--accent-soft);color:var(--accent-deep);border:1px solid rgba(101,198,196,.35);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.score-arrow{color:var(--text-3);font-size:18px;font-weight:300}
.score-gap{margin-left:auto;background:rgba(46,140,122,.1);color:var(--money);font-size:12.5px;font-weight:300;
  padding:6px 12px;border-radius:var(--r-pill)}
.score-gap-ok{background:rgba(60,181,137,.12);color:var(--ok)}
.score-gap-down{background:rgba(217,164,65,.14);color:var(--warn)}
.ld-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:14px;margin-top:4px;border-top:1px solid var(--line-soft)}
.fu-head{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:300;color:var(--text-2);
  letter-spacing:.4px;margin:18px 0 11px}
.fu-head::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--accent)}
.fu-form{background:var(--glass);border:1px solid var(--border);border-radius:20px;padding:18px 20px;margin-bottom:14px;box-shadow:var(--shadow-card);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
.fu-form textarea,.fu-form input{width:100%;margin-top:6px;background:var(--input-fill);color:var(--text)}
.fu-form textarea{resize:vertical;min-height:90px}
.fu-form .fu-row{display:flex;gap:14px;align-items:flex-end;margin-top:10px}
.fu-form .fu-row > *{flex:1;min-width:0}

/* ============ 弹窗 / Toast ============ */
.modal-mask{position:fixed;inset:0;background:rgba(30,42,45,.42);z-index:50;display:flex;align-items:flex-start;
  justify-content:center;padding:5vh 16px;overflow-y:auto;backdrop-filter:blur(4px)}
/* 双层卡：外层浅灰半透明毛玻璃，标题在外层；内层 .modal-card 为白色表单卡 */
.modal{position:relative;background:rgba(255,255,255,.46);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);
  border:1px solid rgba(255,255,255,.55);border-radius:28px;width:520px;max-width:96vw;padding:30px 22px 22px;
  box-shadow:0 24px 60px rgba(30,30,60,.18), 0 8px 20px rgba(30,30,60,.10);overflow:hidden}
.modal-head{position:relative;display:flex;align-items:center;justify-content:center;padding:0 0 18px;border-bottom:none;z-index:4;pointer-events:none}
.modal-head .modal-close{pointer-events:auto}
.modal-head h3{font-size:19px;font-weight:300;color:var(--text);text-align:center}
.modal-close{position:absolute;top:16px;right:16px;border:none;background:none;cursor:pointer;color:var(--text-3);padding:6px;border-radius:10px;z-index:3}
.modal-close .ic{width:22px;height:22px}
.modal-close:hover{background:rgba(30,42,45,.06);color:var(--text)}
.modal-card{background:#fff;border-radius:22px;padding:24px 22px;
  box-shadow:0 10px 30px rgba(30,42,45,.10), 0 2px 8px rgba(30,42,45,.04)}
.modal-body{padding:0}
.toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);background:var(--dark);color:#fff;
  padding:11px 24px;border-radius:var(--r-pill);z-index:99;box-shadow:var(--shadow-lg);font-size:13px;font-weight:300}
.toast.error{background:var(--bad)}
.toast{display:flex;align-items:center;gap:14px}
.toast-undo{border:1px solid rgba(255,255,255,.55);background:transparent;color:#fff;font:inherit;font-weight:300;padding:3px 14px;border-radius:var(--r-pill);cursor:pointer;transition:.15s}
.toast-undo:hover{background:#fff;color:var(--dark)}

/* ============ 排课日历 ============ */
.week-grid{display:grid;grid-template-columns:54px repeat(7,1fr);border-radius:var(--r-card);overflow:hidden;
  background:rgba(255,255,255,.5);min-width:780px;box-shadow:var(--shadow-card);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.week-scroll{overflow-x:auto;border-radius:var(--r-card);margin-bottom:18px}
.wg-corner{background:var(--surface-2);border-bottom:1px solid var(--line);border-right:1px solid var(--line)}
.wg-dayhead{position:relative;background:var(--surface-2);border-bottom:1px solid var(--line);border-right:1px solid var(--line);
  text-align:center;padding:10px 4px;font-size:12px;color:var(--text-2);font-weight:300}
.wg-dayhead .dnum{font-size:16px;display:block;font-weight:300;color:var(--text);margin-top:2px}
.wg-dayhead.today{background:var(--accent-soft)}
.wg-dayhead.today .dnum{color:var(--accent-deep)}
.wg-timecol{border-right:1px solid var(--line);background:var(--surface-2)}
.wg-time{height:60px;font-size:11px;color:var(--text-3);text-align:right;padding:6px 8px 0 0;border-bottom:1px solid var(--line-soft)}
.wg-col{position:relative;border-right:1px solid var(--line-soft);height:780px;background:rgba(255,255,255,.26)}
.wg-col.dragover{background:rgba(101,198,196,.22);box-shadow:inset 0 0 0 2px var(--accent)}
.wg-col.today{background:rgba(101,198,196,.08)}
.wg-hourline{position:absolute;left:0;right:0;border-top:1px dashed var(--line-soft)}
.lesson{position:absolute;left:4px;right:4px;border-radius:12px;padding:6px 9px;font-size:11px;cursor:grab;
  overflow:hidden;background:rgba(101,198,196,.38);color:#0d4d47;line-height:1.4;box-shadow:0 2px 8px rgba(30,30,60,.10);transition:box-shadow .15s}
.lesson:hover{box-shadow:0 4px 12px rgba(30,42,45,.16);z-index:5}
.lesson .l-name{font-weight:400;font-size:12px}
.lesson .l-sub{opacity:.9}
.lesson.completed{background:#E2E0D8;color:#5a6268;cursor:default;text-decoration:line-through;text-decoration-color:#9aa0a6}
.lesson.cancelled{background:#E8E6DE;color:#7a8288;cursor:not-allowed;text-decoration:line-through}
.lesson.dragging{opacity:.4}
.lesson .l-class{font-size:10px;font-weight:300;color:var(--accent-deep);background:var(--accent-soft);
  display:inline-block;padding:1px 6px;border-radius:6px;margin-bottom:2px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* —— 排课课表「考试日」标记（香槟金，明显但不跳脱） —— */
/* 考试日印章（方案5：双圈钢印感 · 浮出阴影 · 置顶不被遮挡） */
.exam-stamp{position:absolute;top:4px;right:4px;z-index:40;width:46px;height:46px;border-radius:50%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:radial-gradient(circle at 50% 34%,#F8F0DE 0%,#E8D0A1 100%);
  border:2px solid var(--exam-deep);
  box-shadow:0 3px 10px rgba(154,114,51,.5), inset 0 0 0 3px rgba(255,255,255,.45), inset 0 0 0 5px rgba(196,163,90,.55);
  transform:rotate(-9deg);pointer-events:none;font-family:var(--font)}
.exam-stamp .es-exam{font-size:10px;font-weight:600;font-style:italic;letter-spacing:.5px;color:var(--exam-deep);line-height:1;transform:scaleY(1.08)}
.exam-stamp .es-line{width:22px;height:1.5px;background:var(--exam-deep);opacity:.55;border-radius:1px}
.exam-stamp .es-type{font-size:9.5px;font-weight:600;color:var(--exam-deep);line-height:1;max-width:42px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.exam-stamp.done{background:radial-gradient(circle at 50% 34%,#EDEDEA 0%,#D3D3CF 100%);border-color:#9aa0a6;
  box-shadow:0 3px 10px rgba(40,50,55,.22), inset 0 0 0 3px rgba(255,255,255,.5), inset 0 0 0 5px rgba(154,160,166,.5)}
.exam-stamp.done .es-exam,.exam-stamp.done .es-type{color:#7a8288}
.exam-stamp.done .es-line{background:#9aa0a6}
/* 周视图日头：印章缩小，避免压住日期数字 */
.wg-dayhead .exam-stamp{width:32px;height:32px;top:3px;right:3px;transform:rotate(-8deg);
  box-shadow:0 2px 7px rgba(154,114,51,.5), inset 0 0 0 2px rgba(255,255,255,.45), inset 0 0 0 3.5px rgba(196,163,90,.55)}
.wg-dayhead .exam-stamp .es-exam{font-size:7px}
.wg-dayhead .exam-stamp .es-line{width:15px;height:1px}
.wg-dayhead .exam-stamp .es-type{font-size:7px}
.wg-dayhead .exam-stamp.done{box-shadow:0 2px 7px rgba(40,50,55,.22), inset 0 0 0 2px rgba(255,255,255,.5), inset 0 0 0 3.5px rgba(154,160,166,.5)}
/* 模考角标：与正式考试「圆形双圈钢印」同造型，仅以青绿色系区分（MOCK + 科目，与 EXAM 金印对照） */
.mock-stamp{position:absolute;top:4px;right:4px;z-index:40;width:46px;height:46px;border-radius:50%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:radial-gradient(circle at 50% 34%,#DCEFE9 0%,#9FC9C0 100%);
  border:2px solid #4E7E76;
  box-shadow:0 3px 10px rgba(78,126,118,.45), inset 0 0 0 3px rgba(255,255,255,.5), inset 0 0 0 5px rgba(107,164,156,.55);
  transform:rotate(8deg);pointer-events:none;font-family:var(--font)}
.mock-stamp .ms-mock{font-size:10px;font-weight:600;font-style:italic;letter-spacing:.5px;color:#3C635C;line-height:1;transform:scaleY(1.08)}
.mock-stamp .ms-line{width:22px;height:1.5px;background:#4E7E76;opacity:.55;border-radius:1px}
.mock-stamp .ms-subj{font-size:9.5px;font-weight:600;color:#3C635C;line-height:1;max-width:42px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wg-dayhead .mock-stamp{width:32px;height:32px;top:3px;right:3px;transform:rotate(7deg);
  box-shadow:0 2px 7px rgba(78,126,118,.45), inset 0 0 0 2px rgba(255,255,255,.5), inset 0 0 0 3.5px rgba(107,164,156,.55)}
.wg-dayhead .mock-stamp .ms-mock{font-size:7px}
.wg-dayhead .mock-stamp .ms-line{width:15px;height:1px}
.wg-dayhead .mock-stamp .ms-subj{font-size:7.5px;max-width:30px}
/* 周视图：日头 + 日列 */
.wg-dayhead.exam-day{background:linear-gradient(var(--exam-soft),var(--exam-soft))}
.wg-dayhead.exam-day .dnum{color:var(--exam-deep)}
.wg-col.exam-day{background:rgba(196,163,90,.08)}
.wg-col.exam-day .exam-bar{position:absolute;top:0;left:0;right:0;height:3px;background:var(--exam);border-radius:0 0 3px 3px;z-index:2}
/* 周视图课程卡：考试日角标（把课与考试关联） */
/* 周视图课程卡：考试日小金章（与大印章同款双圈钢印，关联单节课与考试日） */
.lesson-exam-badge{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
  width:18px;height:18px;border-radius:50%;margin-right:5px;vertical-align:middle;position:relative;
  background:radial-gradient(circle at 35% 30%,#F3E2BC 0%,var(--exam) 58%,var(--exam-deep) 100%);
  border:1.5px solid var(--exam-deep);
  box-shadow:0 1px 3px rgba(154,114,51,.45), inset 0 0 0 2px rgba(255,255,255,.42);
  color:#fff;font-size:10px;font-weight:600;line-height:1}
.lesson-exam-badge::before{content:'';position:absolute;inset:2px;border-radius:50%;border:1px solid rgba(255,255,255,.55)}
.lesson-exam-badge.done{background:radial-gradient(circle at 35% 30%,#EDEDEA 0%,#D3D3CF 70%,#b9bcc0 100%);
  border-color:#9aa0a6;box-shadow:0 1px 3px rgba(40,50,55,.22), inset 0 0 0 2px rgba(255,255,255,.5)}
/* 工具栏图例 */
.sched-legend{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--text-2);font-weight:300}
.legend-dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.legend-dot.exam{background:var(--exam)}

/* 排课：周/月切换分段 + 筛选（参考登录卡 tab 胶囊：浅轨 + 白胶囊激活） */
.seg{display:inline-flex;background:var(--surface-2);border-radius:var(--r-pill);padding:3px;gap:3px;
  box-shadow:inset 0 1px 3px rgba(30,42,45,.06)}
.seg-btn{height:30px;border:none;background:transparent;color:var(--text-3);padding:0 16px;border-radius:var(--r-pill);cursor:pointer;font-size:13px;font-weight:300;transition:.15s;display:inline-flex;align-items:center;justify-content:center}
.seg-btn.active{background:#fff;color:var(--text);box-shadow:0 2px 8px rgba(30,42,45,.12)}
/* 排新课：iOS 风格滑动胶囊分段器（浅灰轨道 + 白色胶囊激活；三格：单节/批量铺排/1对2） */
.ls-mode-seg{position:relative;display:flex;width:100%;background:rgba(30,42,45,.06);border-radius:14px;padding:4px;gap:4px;margin-bottom:18px;box-shadow:inset 0 1px 3px rgba(30,42,45,.06)}
.ls-mode-thumb{position:absolute;top:4px;left:4px;width:calc((100% - 16px)/3);height:calc(100% - 8px);background:#fff;border-radius:12px;box-shadow:0 2px 8px rgba(30,42,45,.10);transition:transform .32s cubic-bezier(.2,.8,.2,1);z-index:0}
.ls-mode-seg[data-active="batch"] .ls-mode-thumb{transform:translateX(calc(100% + 4px))}
.ls-mode-seg[data-active="group"] .ls-mode-thumb{transform:translateX(calc(200% + 8px))}
.ls-mode-seg .seg-btn{flex:1;position:relative;z-index:1;height:40px;border:none;background:transparent;color:var(--text-3);font-size:15px;font-weight:300;border-radius:12px;cursor:pointer;transition:color .2s}
.ls-mode-seg .seg-btn.active{color:var(--text);background:transparent;box-shadow:none}
/* 两格变体（续费/签约弹窗用）：滑块宽度=半格，位移一格，避免沿用三格几何导致变形 */
.ls-mode-seg.seg2 .ls-mode-thumb{width:calc((100% - 12px)/2)}
.ls-mode-seg.seg2[data-active="group"] .ls-mode-thumb{transform:translateX(calc(100% + 4px))}
.mini-select{height:36px;border:none;border-radius:10px;background:var(--input-fill);color:var(--text);padding:0 12px 0 14px;font-size:13px;cursor:pointer;max-width:180px;
  box-shadow:inset 0 2px 4px rgba(30,42,45,.06), inset 0 0 0 1px rgba(30,42,45,.03);transition:box-shadow .15s;
  appearance:none;-webkit-appearance:none;background-image:var(--chevron);background-repeat:no-repeat;background-position:right 10px center;padding-right:30px}
.mini-select:hover{box-shadow:inset 0 2px 5px rgba(30,42,45,.08), inset 0 0 0 1px rgba(30,42,45,.04)}
.mini-select:focus{outline:none;box-shadow:inset 0 2px 5px rgba(30,30,60,.09), inset 0 0 0 1px rgba(255,255,255,.4), 0 0 0 3px rgba(101,198,196,.12)}

/* ============ 课消台账：月度总览 ============ */
.cs-toolbar .seg button{height:30px;border:none;background:transparent;color:var(--text-3);padding:0 16px;border-radius:var(--r-pill);cursor:pointer;font-size:13px;font-weight:300;font-family:var(--font);transition:.15s;display:inline-flex;align-items:center;justify-content:center}
.cs-toolbar .seg button.active{background:#fff;color:var(--text);box-shadow:0 2px 8px rgba(30,42,45,.12)}
.cs-month-label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-2);font-weight:300;margin:0}
.cs-month-label input{height:36px;border:none;border-radius:10px;background:var(--input-fill);color:var(--text);padding:0 12px 0 14px;font-size:13px;
  box-shadow:inset 0 2px 4px rgba(30,42,45,.06), inset 0 0 0 1px rgba(30,42,45,.03);transition:box-shadow .15s}
.cs-month-label input:hover{box-shadow:inset 0 2px 5px rgba(30,42,45,.08), inset 0 0 0 1px rgba(30,42,45,.04)}
.cs-month-label input:focus{outline:none;box-shadow:inset 0 2px 5px rgba(30,30,60,.09), inset 0 0 0 1px rgba(255,255,255,.4), 0 0 0 3px rgba(101,198,196,.12)}

/* 月历（无白底，透在渐变背景上） */
.month-section{margin-bottom:24px}
.month-title{font-size:18px;font-weight:300;color:var(--ink);margin-bottom:12px}
.month-title span{font-size:12px;color:var(--text-2);font-weight:300;margin-left:10px}
.month-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.cs-grid-head{margin-bottom:6px}
.mc-head{font-size:12px;font-weight:300;color:var(--text-2);text-align:center;padding:2px 0}
.mc{position:relative;background:rgba(255,255,255,.5);border:1px solid var(--border);border-radius:12px;min-height:96px;padding:6px 7px;display:flex;flex-direction:column;gap:4px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.mc:hover{box-shadow:var(--shadow)}
.mc.blank{background:transparent;border:none;pointer-events:none;min-height:0}
.mc.today{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft) inset}
.mc-num{font-size:13px;font-weight:300;color:var(--text)}
.mc.today .mc-num{color:var(--accent-deep)}
/* 月视图：考试日单元格 */
.mc-top{display:flex;align-items:flex-start;justify-content:space-between;gap:4px}
.mc.exam-day{background:var(--exam-soft);border-color:rgba(196,163,90,.5)}
.mc.exam-day .mc-num{color:var(--exam-deep)}
.mc-body{display:flex;flex-direction:column;gap:3px}
.mchip{font-size:11px;line-height:1.25;padding:2px 7px;border-radius:5px;background:rgba(101,198,196,.36);color:#0d4d47;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:default;font-weight:400}
.mchip-other{color:var(--text-3);font-weight:300}

/* 核心数据带 */
.summary-rows{display:flex;flex-direction:column;gap:14px}
.summary-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.summary-row-wide{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.sum-card{position:relative;background:var(--surface-2);border-radius:16px;padding:15px 17px;min-height:88px;box-shadow:var(--shadow-sm)}
.sum-card .lbl{font-size:12px;color:var(--text-2);font-weight:300;margin-bottom:6px}
.sum-card .val{font-size:24px;font-weight:300;color:var(--ink);line-height:1.1}
.sum-card .val small{font-size:12px;color:var(--text-2);font-weight:300;margin-left:3px}
.sum-card .sub{font-size:11.5px;color:var(--text-3);margin-top:5px}
.sum-card.hero{background:var(--accent-soft)}
.sum-card.hero .val{color:var(--accent-deep)}

/* 卡片右上角装饰图标（与系统统一 stroke 线型风格） */
.cs-card-icon{position:absolute;top:14px;right:14px;width:20px;height:20px;color:var(--text-3);opacity:.45;pointer-events:none}
.cs-card-icon svg{display:block;width:100%;height:100%}

/* 大图标：前 6 张卡片使用，垂直居中、颜色加深 */
.cs-card-icon-lg{position:absolute;top:50%;right:18px;transform:translateY(-50%);width:28px;height:28px;color:var(--text-2);opacity:.7;pointer-events:none}
.lbl-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.breakdown{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.tag{background:var(--glass-2);border:1px solid var(--border);color:var(--text);border-radius:var(--r-pill);padding:3px 10px;font-size:11px;font-weight:300}
.tag-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);display:inline-block;margin-right:5px}
.focus-txt{font-size:13px;color:var(--text);line-height:1.6;display:flex;flex-direction:column;gap:6px}
.focus-line{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:var(--text);line-height:1.55}
.focus-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;margin-top:7px;background:var(--accent);box-shadow:0 0 0 2px rgba(255,255,255,.85)}
.focus-text{flex:1;word-break:break-word}
.plan-list{display:flex;flex-direction:column;gap:6px}
.plan-item{font-size:13px;color:var(--text);line-height:1.45;padding-left:14px;position:relative}
.plan-item::before{content:'';position:absolute;left:2px;top:8px;width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px rgba(255,255,255,.85)}
.edit-pen{width:28px;height:28px;border:none;background:rgba(101,198,196,.2);color:var(--accent-deep);border-radius:50%;cursor:pointer;font-size:14px;line-height:1;transition:.15s;flex-shrink:0}
.edit-pen:hover{background:var(--accent);color:#fff}

/* 融合排版：Bento 数据报告 + 全月日历白卡 */
.cs-report{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px}
.cs-profile{grid-column:span 1;position:relative;display:flex;align-items:center;background:var(--surface-2);border-radius:16px;padding:15px 17px;min-height:88px;box-shadow:var(--shadow-sm)}
.cs-profile-info{min-width:0;text-align:left}
.cs-profile-name{font-size:16px;font-weight:300;color:var(--ink);line-height:1.2}
.cs-profile-sub{font-size:12px;color:var(--text-2);font-weight:300;margin-top:2px}
.cs-profile-remain{font-size:11.5px;color:var(--text-3);margin-top:4px}
.cs-profile-remain b{color:var(--text);font-size:13px}

/* 本月进度条（已完成 / 计划） */
.cs-progress-card{grid-column:span 2}
.cs-progress{height:10px;border-radius:99px;background:var(--surface-2);overflow:hidden;margin:9px 0 6px;box-shadow:inset 0 1px 2px rgba(30,42,45,.08)}
.cs-progress-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--accent),var(--accent-deep));transition:width .4s ease}

/* 日历白卡 + 月份导航 */
.cs-cal-card{position:relative;background:var(--glass);border:1px solid var(--border);border-radius:22px;padding:18px 18px 20px;box-shadow:var(--shadow-card);margin-bottom:22px;backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.cs-cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cs-cal-head .month-title{margin-bottom:0}
.cs-nav{display:flex;gap:8px}
.cs-nav button{width:34px;height:34px;border:none;border-radius:50%;background:var(--surface-2);color:var(--text-2);font-size:18px;line-height:1;cursor:pointer;transition:.15s}
.cs-nav button:hover{background:var(--accent-soft);color:var(--accent-deep)}
.mchip.upcoming{background:transparent;border:1px dashed var(--accent);color:var(--accent-deep)}

/* 日历 + 明细 并排：月历压缩为点状，占比下降，空日子不再显空 */
.cs-cal-body{display:grid;grid-template-columns:1.05fr .95fr;gap:22px;align-items:start;margin-top:6px}
.cs-cal-col{min-width:0}
.cs-les-col{min-width:0}
.cs-cal-card .mc{min-height:52px;padding:5px 6px;gap:4px;background:rgba(255,255,255,.34);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.cs-cal-card .mc.has{background:rgba(255,255,255,.62)}
.cs-cal-card .mc.blank{background:transparent;border:none;min-height:0}
.mc-dots{display:flex;flex-wrap:wrap;gap:3px;margin-top:auto;align-content:flex-end}
.mc-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0}
.mc-dot.up{background:transparent;border:1.5px solid currentColor}

/* 本月课时分布：纵向胶囊柱状图（参考图一比一风格：玻璃拟态胶囊、下段着色、上段半透明灰互补成100%、0%在底部） */
.cs-les-title{font-size:13px;font-weight:300;color:var(--text-2);margin-bottom:10px;padding-left:2px}
.cs-les-list{display:flex;flex-direction:column;gap:10px}
.cs-empty-hint{font-size:12px;color:var(--text-3);padding:4px 2px 8px;font-weight:300}

.cs-bar-chart{display:flex;align-items:stretch;gap:10px;height:248px;padding:2px 0 0}
.cs-bar-yaxis{display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end;font-size:10px;color:var(--text-3);padding:0 0 22px;position:relative;min-height:0}
.cs-bar-yaxis span{line-height:1}
.cs-bar-unit{position:absolute;bottom:0;right:0;font-size:10px;font-weight:300;color:var(--text-2)}

.cs-bar-plot{flex:1;position:relative;display:flex;align-items:stretch;min-height:0}
.cs-bar-grid{position:absolute;inset:0 0 22px 0;pointer-events:none}
.cs-grid-line{position:absolute;left:0;right:0;height:1px;background:rgba(30,42,45,.07)}

.cs-bar-cols{position:relative;z-index:1;display:flex;align-items:flex-end;justify-content:space-around;width:100%;height:100%;padding:0 0 22px;gap:8px;min-height:0}
.cs-bar-col{display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0;flex:1;max-width:78px;height:100%}
.cs-bar-col.placeholder{opacity:.45}
.cs-bar-value{font-size:9px;font-weight:300;color:var(--text-2);white-space:nowrap;flex-shrink:0;opacity:.9}
.cs-bar-capsule{position:relative;width:26px;flex:1;border-radius:99px;overflow:hidden;min-height:0;background:rgba(255,255,255,.22);box-shadow:inset 0 0 0 1px rgba(255,255,255,.55), inset 0 2px 6px rgba(255,255,255,.5), 0 2px 6px rgba(30,42,45,.06);display:flex;flex-direction:column}
.cs-bar-empty{flex-shrink:0;border-radius:99px 99px 0 0;background:rgba(30,42,45,.12);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:inset 0 1px 1px rgba(30,42,45,.06)}
.cs-bar-fill{flex-shrink:0;border-radius:0 0 99px 99px;background:linear-gradient(180deg, rgba(255,255,255,.22) 0%, rgba(0,0,0,.12) 100%) var(--bar-color);box-shadow:inset 0 -2px 6px rgba(0,0,0,.08);transition:height .5s cubic-bezier(.22,.61,.36,1)}
.cs-bar-fill.cs-seg{border-radius:0;box-shadow:inset 0 1px 0 rgba(255,255,255,.55)}
.cs-bar-fill.cs-seg:last-child{border-radius:0 0 99px 99px;box-shadow:inset 0 -2px 6px rgba(0,0,0,.08)}
.cs-bar-label{font-size:10px;font-weight:300;color:var(--text);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;line-height:1.25;flex-shrink:0}
.cs-bar-sub{font-size:10px;font-weight:300;color:var(--text-3);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;line-height:1.2;flex-shrink:0;margin-top:-2px}

/* 时间线样式已随明细列表移除 */

@media (max-width:860px){
  .cs-report{grid-template-columns:1fr 1fr}
  .cs-profile{grid-column:span 2}
  .cs-progress-card{grid-column:span 2}
  .cs-cal-body{grid-template-columns:1fr}
}

/* 笔记编辑弹窗 */
.form-row{margin-bottom:14px}
.form-row label{display:block;font-size:12.5px;font-weight:300;color:var(--text-2);margin-bottom:6px}
.input{width:100%;padding:11px 14px;border:1px solid var(--border);border-radius:var(--r-input);background:var(--glass);color:var(--text);font-size:13px;font-family:var(--font);resize:vertical;min-height:64px;box-sizing:border-box;transition:border-color .15s,box-shadow .15s;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.input:hover{border-color:rgba(30,42,45,.16)}
.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px rgba(101,198,196,.16)}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}

@media (max-width:860px){
  .summary-row{grid-template-columns:1fr 1fr}
  .summary-row-wide{grid-template-columns:1fr}
}

/* 排课：月度视图 */
.month-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-top:4px}
.mc-head{font-size:12px;font-weight:300;color:var(--text-2);text-align:center;padding:4px 0}
.mc{background:rgba(255,255,255,.5);border:1px solid var(--border);border-radius:12px;min-height:98px;padding:6px 7px;cursor:pointer;transition:.15s;display:flex;flex-direction:column;gap:4px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.mc:hover{box-shadow:var(--shadow);border-color:var(--accent)}
.mc.blank{background:transparent;border:none;cursor:default}
.mc.today{border-color:var(--accent);background:var(--accent-soft)}
.mc-num{font-size:13px;font-weight:300;color:var(--text)}
.mc.today .mc-num{color:var(--accent-deep)}
.mc-body{display:flex;flex-direction:column;gap:3px}
.mchip{font-size:10.5px;line-height:1.35;padding:2px 6px;border-radius:6px;background:rgba(101,198,196,.36);color:#0d4d47;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;font-weight:400}
.mchip:hover{filter:brightness(.94)}
.mchip.completed{background:#E2E0D8;color:#5a6268;text-decoration:line-through;text-decoration-color:#9aa0a6}
.mchip.cancelled{background:#E8E6DE;color:#7a8288;text-decoration:line-through}
.mchip.more{background:transparent;color:var(--text-2);font-weight:300}

/* 复制拖拽：卡片复制按钮 / 跟随幽灵 / 实时冲突红边（复用既有 token，不改其他样式） */
.lesson{touch-action:none}
.lesson-copy-btn{position:absolute;top:3px;right:4px;z-index:6;font-size:10px;font-weight:300;line-height:1;padding:3px 7px;border:none;border-radius:8px;
  background:rgba(255,255,255,.85);color:var(--accent-deep);cursor:grab;opacity:0;transition:opacity .15s;touch-action:none}
.lesson:hover .lesson-copy-btn{opacity:1}
.lesson-copy-btn:active{cursor:grabbing}
.lesson-ghost{position:fixed;z-index:200;pointer-events:none;width:auto;min-width:120px;box-shadow:var(--shadow-lg);opacity:.92}
.lesson-ghost.conflict{outline:2px solid var(--bad);box-shadow:0 0 0 3px rgba(217,107,90,.25)}
.wg-col.conflict{background:rgba(217,107,90,.16);box-shadow:inset 0 0 0 2px var(--bad)}
.wg-col.conflict .wg-hourline{border-color:rgba(217,107,90,.3)}
.lesson-landing{position:absolute;z-index:3;pointer-events:none;border-radius:12px;background:rgba(101,198,196,.16);box-shadow:inset 0 0 0 2px var(--accent);transition:top .06s linear,height .06s linear}
.lesson-landing-pill{position:fixed;z-index:210;pointer-events:none;background:var(--accent);color:#fff;font-size:12px;font-weight:300;line-height:1;padding:6px 11px;border-radius:var(--r-pill);box-shadow:var(--shadow-lg);white-space:nowrap}
.lesson-landing-pill.conflict{background:var(--bad)}
@media (max-width:720px){ .lesson-copy-btn{opacity:1} .lesson-del-btn{opacity:1} }


/* ============ 登录页（全屏沉浸 · 左右分屏 · 保持 v2 定稿） ============ */
.login-view{position:fixed;inset:0;display:flex;align-items:center;padding:64px 8vw;overflow:hidden;
  /* 与系统内页(body)完全一致的多层光晕浅底背景 */
  background:
    radial-gradient(circle at 10% 20%, rgba(101,198,196,.35) 0%, transparent 38%),
    radial-gradient(circle at 90% 12%, rgba(255,183,77,.26) 0%, transparent 32%),
    radial-gradient(circle at 72% 88%, rgba(129,199,132,.26) 0%, transparent 38%),
    linear-gradient(135deg, #eef2f6 0%, #e2e8f0 50%, #f0f4f8 100%);
  background-attachment:fixed}
.login-wrap{position:relative;z-index:2;width:100%;max-width:none;display:flex;align-items:center;justify-content:center;gap:88px}
.login-brand-side{flex:0 1 520px;min-width:320px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;color:var(--text-2);padding:20px 0;transform:translateY(-46px)}
.login-logo-img{width:118px;height:auto;margin-bottom:28px;filter:brightness(0) contrast(1.3) drop-shadow(0 4px 14px rgba(30,42,45,.12))}
.login-title{font-size:42px;font-weight:300;letter-spacing:.6px;line-height:1.08;color:var(--text);text-shadow:none}
.login-slogan{font-size:12.5px;letter-spacing:3px;font-weight:300;color:var(--text-2);margin-top:13px;text-transform:uppercase}
.login-desc{font-size:15px;color:var(--text-2);margin-top:10px;letter-spacing:.4px}
.login-form-side{flex:0 1 360px;min-width:300px;display:flex;flex-direction:column;justify-content:center;color:var(--text)}
.login-form-head{display:flex;align-items:center;gap:14px;margin-bottom:28px}
.form-label-line{width:32px;height:2px;background:var(--accent);border-radius:1px}
.form-label-text{font-size:18px;font-weight:300;letter-spacing:.4px;color:var(--text)}
#login-form label{color:var(--text-2);font-size:12px;letter-spacing:.4px;font-weight:300;margin-bottom:20px}
#login-form input{display:block;width:100%;background:transparent;border:none;
  border-bottom:1px solid rgba(30,42,45,.18);border-radius:0;color:var(--text);font-size:15px;
  padding:10px 2px;margin-top:8px;font-family:var(--font);transition:border-color .2s,box-shadow .2s}
#login-form input::placeholder{color:var(--text-3)}
#login-form input:focus{outline:none;border-bottom-color:var(--accent);
  box-shadow:0 1px 0 0 rgba(91,186,168,.85)}
.form-error{color:var(--bad);font-size:12px;min-height:18px;margin:2px 0 14px;text-align:center;font-weight:300}
.btn-login{width:100%;margin-top:8px;padding:13px;border:none;border-radius:var(--r-pill);
  background:var(--dark);color:#fff;font-size:15px;font-weight:300;letter-spacing:4px;
  cursor:pointer;font-family:var(--font);transition:all .2s;box-shadow:0 8px 24px rgba(14,38,34,.14)}
.btn-login:hover{background:#2b3a3e;transform:translateY(-1px);box-shadow:0 12px 28px rgba(14,38,34,.20)}
/* ICP 备案号（法规要求挂在主页底部中央，并链接工信部备案系统）2026-10-16 */
.icp-footer{margin-top:26px;text-align:center;font-size:11.5px;line-height:1.6}
.icp-footer a{color:var(--text-3);text-decoration:none;letter-spacing:.4px;
  transition:color .2s ease}
.icp-footer a:hover{color:var(--accent-deep);text-decoration:underline}
.icp-sep{margin:0 7px;color:var(--text-3);opacity:.6}

@media (max-width:900px){
  .login-view{padding:40px;align-items:center;justify-content:center}
  .login-wrap{flex-direction:column;justify-content:center;gap:30px;align-items:stretch;max-width:460px}
  .login-brand-side{align-items:center;text-align:center;max-width:100%;min-width:auto;transform:none}
  .login-logo-img{width:90px;margin-bottom:20px}
  .login-title{font-size:34px}
  .login-slogan{font-size:12px;letter-spacing:2.4px}
  .login-desc{font-size:14px}
  .login-form-side{width:100%;max-width:360px;margin:0 auto;min-width:auto}
}
@media (max-width:520px){
  .login-view{padding:28px}
  .login-title{font-size:28px}
  .login-form-head{margin-bottom:22px}
}

/* ============ 响应式（v6 主框架） ============ */
@media (max-width:1020px){
  .bento .col-left,.bento .col-right{grid-column:span 12}
  .hero-band{min-height:24vh;padding-top:10px}
  .hero-brand h1{font-size:32px}
  .hero-time .value,.hero-date .value{font-size:28px}
}
@media (max-width:720px){
  .main{margin-left:0}
  .nav-float{display:none}
  .hero-logo{width:48px;left:16px;top:16px}
  .hero-logo img{width:48px;height:48px}
  .hero-inner{flex-direction:column;align-items:flex-start;gap:20px;padding:0 20px}
  .hero-band{min-height:auto;padding:28px 0}
  .view-container{padding:0 20px 50px}
  .bento{gap:16px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
/* ===== 设置页 · 课程类型与标签 ===== */
.subj-type{border:1px solid var(--border);border-radius:14px;padding:12px 14px;margin-bottom:12px;background:var(--surface-2)}
.subj-type.off{opacity:.5}
.subj-type-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.subj-type-head b{font-weight:300;font-size:15px;color:var(--text)}
.sj-sp{flex:1}
.sj-dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex:none}
.subj-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.sj-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--border);font-size:13px;color:var(--text)}
.sj-chip.off{opacity:.45;text-decoration:line-through}
.sj-chip.add{border-style:dashed;color:var(--text-2);cursor:pointer}
.sj-chip.add:hover{border-color:var(--accent);color:var(--accent)}
.sj-x{border:none;background:none;color:var(--text-3);cursor:pointer;padding:0 0 0 2px;font-size:15px;line-height:1}
.sj-x:hover{color:var(--bad)}
/* ===== 设置页 · 4x2 入口卡片 ===== */
.set-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
@media(max-width:900px){.set-grid{grid-template-columns:repeat(2,1fr)}}
.set-card{display:flex;flex-direction:column;align-items:flex-start;text-align:left;padding:18px 16px;border-radius:16px;border:1px solid var(--border);background:var(--surface);cursor:pointer;font:inherit;color:inherit;transition:border-color .18s,transform .12s,box-shadow .18s}
.set-card:hover{border-color:var(--accent);box-shadow:var(--shadow-sm)}
.set-card:active{transform:translateY(1px)}
.set-ic{display:grid;place-items:center;color:var(--text-2);opacity:.7;flex:none}
.set-ic svg{width:28px;height:28px}
.set-t{font-size:15px;font-weight:300;color:var(--text);margin-top:10px}
.set-d{font-size:12px;color:var(--text-3);line-height:1.55;margin-top:4px}
.set-card.is-empty{cursor:default;border-style:dashed;background:transparent;box-shadow:none}
.set-card.is-empty:hover{border-color:var(--border);box-shadow:none}
.set-card.is-empty .set-t{color:var(--text-3)}
.set-ic.ph{width:28px;height:28px;border-radius:50%;border:1px dashed var(--line);opacity:.55}
.modal.wide{width:780px}
/* ===== 老师档案 · 任教科目标签勾选器 ===== */
.ts-box{margin-top:16px;padding-top:14px;border-top:1px solid var(--line-soft)}
.ts-picker{max-height:236px;overflow:auto;padding-right:4px}
.ts-type{border:1px solid var(--border);border-radius:14px;padding:11px 13px;margin-bottom:10px;background:var(--surface-2)}
.ts-type-head{display:flex;align-items:center;gap:9px}
.ts-type-head b{font-weight:400;font-size:14px;color:var(--text)}
.ts-count{font-size:11.5px;color:var(--text-3);font-variant-numeric:tabular-nums}
.ts-all{margin-left:auto;border:none;background:none;color:var(--accent-deep);font-size:12px;cursor:pointer;padding:2px 4px;border-radius:6px}
.ts-all:hover{background:var(--accent-soft)}
.ts-tags{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}
.ts-chip{font:inherit;font-size:12.5px;line-height:1;padding:6px 11px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--surface);color:var(--text-2);cursor:pointer;transition:background .15s,border-color .15s,color .15s}
.ts-chip:hover{border-color:var(--chip,var(--accent));color:var(--text)}
.ts-chip.on{background:var(--chip,var(--accent));border-color:var(--chip,var(--accent));color:#fff}
.ts-mini{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;margin:2px 4px 2px 0;border-radius:var(--r-pill);background:var(--surface-2);border:1px solid var(--line-soft);font-size:12px;color:var(--text-2);white-space:nowrap}
.ts-cell{max-width:260px}

/* ============ 排课 · 家长课表（竖向长图导出）============
   仅新增本弹窗所需的容器样式，全部复用既有令牌，不改动任何现有组件 */
.ps-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:2px 2px 8px;
  font-size:12px;font-weight:300;color:var(--text-3)}
.ps-meta #ps-size{font-variant-numeric:tabular-nums;white-space:nowrap}
.ps-preview{height:min(54vh,520px);overflow:auto;border-radius:18px;background:var(--surface-2);
  border:1px solid var(--border);padding:14px;display:flex;justify-content:center;align-items:flex-start;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.ps-preview canvas{width:100%;max-width:300px;height:auto;display:block;border-radius:14px;box-shadow:var(--shadow-card)}
.ps-preview .empty{padding:30px 0;width:100%}
.modal-body label .seg{margin-top:6px}
.modal-foot .btn[disabled]{opacity:.55;cursor:not-allowed;transform:none}


/* ================= 仪表盘 v2（v10 编排版式 · 用户 2026-09-11 定稿布局）=================
   来源：demo/dashboard-editor-v10.html（用户唯一认可的布局与卡片形式）
   全部选择器带 .d2-grid 前缀隔离，不污染系统既有样式；系统全局样式对卡片的影响由本段末尾覆盖
====================================================================================*/
.d2-grid{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:96px;gap:16px;position:relative;
  font-weight:300;--shadow-card:0 14px 36px rgba(30,30,60,.11),0 4px 14px rgba(30,30,60,.05);
  --line:rgba(30,42,45,.08);--line-soft:rgba(30,42,45,.05);--surface:#FFF;--surface-2:rgba(255,255,255,.5);
  --text:#1f2026;--text-2:#4a4d57;--text-3:#7a7e89;--accent:#65c6c4;--accent-deep:#3FA9A0;
  --accent-soft:rgba(101,198,196,.16);--dark:#1F2A2D;--gold:#C4A35A;--r-card:28px;--r-pill:999px;
  font-family:'Outfit','PingFang SC',-apple-system,'Microsoft YaHei',sans-serif;}
.d2-grid,.d2-grid *{box-sizing:border-box}
/* 仪表盘 v2 样式（来源 demo/dashboard-editor-v10.html，用户 2026-09-11 定稿） */.d2-grid .mod{min-width:0;min-height:0}
/* overflow 必须 visible：auto/hidden 会**裁掉子元素（.sch/.alcard/.wn-card）的 box-shadow**，
   导致只有把阴影画在 .inner 上的卡（progress/otask）有影子、其余卡全是平的，
   并在四卡交汇的缝里露出深色卡单边的硬边暗带。 */
.d2-grid .mod .inner{height:100%;overflow:visible}
.d2-grid .mod.lk-card>.inner{background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:20px 22px;box-shadow:var(--shadow-card);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}
.d2-grid .mod.lk-dark>.inner{background:var(--dark);border:1px solid rgba(255,255,255,.14);color:#fff;border-radius:var(--r-card);padding:20px 22px;box-shadow:0 14px 38px rgba(31,42,45,.19)}
.d2-grid .mod.lk-mint>.inner{background:var(--accent-soft);border-radius:var(--r-card);padding:20px 22px;box-shadow:var(--shadow-card);color:#1F4F49}
.d2-grid .mod.lk-gold>.inner{background:rgba(196,163,90,.14);border-radius:var(--r-card);padding:20px 22px;box-shadow:var(--shadow-card);color:#6B5526}
.d2-grid .mod.lk-grp>.inner{padding:0}
.d2-grid .mod.lk-dark .card-title,.mod.lk-dark .lbl,.mod.lk-dark b{color:#fff}
.d2-grid .mod.lk-dark .card-sub{color:rgba(255,255,255,.55)}
/* 欢迎语（greet 卡内唯一直接子 h2；字号只在这里改，app.js 不再内联）
   42px 是放大后的定稿值（原 34px）；nowrap 保证换更长的登录名也不会折成两行。 */
.d2-grid .inner > h2{margin:0;font-size:42px;font-weight:300;letter-spacing:.4px;white-space:nowrap}
/* ===== 顶部统计条（透明底 · 无卡片） =====
   用户 2026-09-11 定稿：字体与图标整体放大一倍
   （数字 34→68、图标 15→30、标签 10.5→21，图标/标签间距同步 ×2），
   底部对齐左侧分布条内容底边：分布条内容高 59px（标签 17 + 间距 8 + 胶囊 34），
   卡片高 96px → 空出 37px，故统计条 padding-bottom:37px 使两者内容底边同一条水平线。 */
.d2-grid .mod[data-k="stat3"] > .inner{overflow:visible}
.d2-grid .statstrip{display:flex;align-items:flex-end;justify-content:space-between;height:100%;gap:24px;
  padding-bottom:37px;background:transparent;box-shadow:none}
.d2-grid .st{display:flex;flex-direction:column}
.d2-grid .st-top{display:flex;align-items:flex-end;gap:12px}
.d2-grid .st-top svg{width:30px;height:30px;margin-bottom:12px;flex:none;stroke-width:.8}
.d2-grid .st-n{font-size:68px;font-weight:300;line-height:1;color:#1F2A2D;letter-spacing:-1.5px}
.d2-grid .st-l{font-size:21px;font-weight:300;color:#6B767C;margin-top:8px;letter-spacing:.5px}
/* 响应式兜底：放大一倍后「Consumption」等长标签在 901–1220px 的 4 列卡里会顶出边界
   （1024px 溢出 20px、960px 溢出 41px 并触发页面横向滚动），因此按视口等比收一档。
   ≥1221px：完整一倍（数字 68 / 图标 30 / 标签 21）；≤900px 切两列整宽，不需要收。 */
@media (min-width:901px) and (max-width:1220px){
  .d2-grid .statstrip{gap:14px}
  .d2-grid .st-top{gap:10px}
  .d2-grid .st-top svg{width:26px;height:26px;margin-bottom:10px;stroke-width:.7}
  .d2-grid .st-n{font-size:56px;letter-spacing:-1.2px}
  .d2-grid .st-l{font-size:17px;font-weight:300;letter-spacing:.4px}
}
@media (min-width:901px) and (max-width:1000px){
  .d2-grid .statstrip{gap:12px}
  .d2-grid .st-top svg{width:24px;height:24px;margin-bottom:9px;stroke-width:.7}
  .d2-grid .st-n{font-size:50px;letter-spacing:-1px}
  .d2-grid .st-l{font-size:16px;font-weight:300;letter-spacing:.4px}
}
/* ===== 四段进度胶囊行（Ielts/Tofel · Subjects · Original · Others） ===== */
.d2-grid .pillsrow{display:flex;align-items:flex-end;gap:14px;width:100%}
.d2-grid .pillcol{display:flex;flex-direction:column;min-width:0}
.d2-grid .pillcol .plb{font-size:11px;font-weight:400;color:#55524A;margin-bottom:8px;letter-spacing:.2px;white-space:nowrap}
.d2-grid .ppill{height:34px;border-radius:999px;display:flex;align-items:center;font-size:11px;font-weight:400;letter-spacing:.2px;white-space:nowrap;width:100%;justify-content:center;box-sizing:border-box}
.d2-grid .ppill.dk{background:#2E2B26;color:#fff;justify-content:center}
.d2-grid .ppill.am{background:#F6C64B;color:#2E2B26;justify-content:center}
.d2-grid .ppill.ht{background:repeating-linear-gradient(45deg,rgba(0,0,0,.04) 0 2px,transparent 2px 8px),#FDFCF8;color:#2E2B26}
.d2-grid .ppill.eg{background:#FDFCF8;border:1px solid #D9D6CC;color:#2E2B26;justify-content:center}
/* ===== Progress 周工时卡（1:1 复刻 · 自适应高） ===== */
.d2-grid .pgc{display:flex;flex-direction:column;height:100%}
.d2-grid .pgc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.d2-grid .pgc-head .t{font-size:18px;font-weight:300;color:#1E2A2D;letter-spacing:.2px}
.d2-grid .pgc-jump{width:30px;height:30px;border-radius:50%;background:#fff;border:1px solid #f0ede2;
  box-shadow:0 5px 14px rgba(88,72,24,.10);display:grid;place-items:center;cursor:pointer;flex:none;padding:0;
  transition:transform .2s,box-shadow .2s}
.d2-grid .pgc-jump:hover{transform:translate(1px,-1px);box-shadow:0 8px 18px rgba(88,72,24,.16)}
.d2-grid .pgc-jump svg{width:14px;height:14px;stroke:#2E2B26;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .pgc-main{display:flex;align-items:flex-start;gap:8px;margin-bottom:4px}
.d2-grid .pgc-num{font-size:34px;font-weight:300;line-height:1;color:#1E2A2D;letter-spacing:-1px}
.d2-grid .pgc-unit{font-size:13px;font-weight:300;color:#9AA5AA;margin-top:3px}
.d2-grid .pgc-sub{margin-left:auto;text-align:right;font-size:10.5px;font-weight:300;color:#9AA5AA;line-height:1.35}
.d2-grid .pgc-chart{flex:1;min-height:96px;display:flex;align-items:stretch;gap:0}
.d2-grid .pgc-col{flex:1;display:flex;flex-direction:column;align-items:center;min-width:0;gap:8px}
.d2-grid .pgc-bw{flex:1;min-height:0;position:relative;display:flex;align-items:flex-end;justify-content:center;width:100%}
.d2-grid .pgc-bar{width:7px;border-radius:999px;background:#2E2B26;position:relative;z-index:1}
.d2-grid .pgc-bar.hi{background:#F6C64B}
.d2-grid .pgc-tip{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(100% + 5px);background:#F6C64B;color:#2E2B26;
  font-size:9.5px;font-weight:400;padding:3px 7px;border-radius:999px;white-space:nowrap;opacity:0;transition:opacity .14s;pointer-events:none;z-index:3}
.d2-grid .pgc-col:hover .pgc-tip{opacity:1}
.d2-grid .pgc-col.show .pgc-tip{opacity:1}
.d2-grid .pgc-col:hover .pgc-bar{background:#4A5457}
.d2-grid .pgc-col:hover .pgc-bar.hi{background:#F6C64B}
/* Progress 柱状图底部日期标签行（S M T W T F S）已隐藏 */
/* Progress 底部日期标签行（S M T W T F S + 圆点 + 轨道）—— 已恢复显示 */
.d2-grid .pgc-track{display:none}
.d2-grid .pgc-dot{width:5px;height:5px;border-radius:50%;background:#2E2B26;flex:none}
.d2-grid .pgc-dot.off{background:#D6D3C9}
.d2-grid .pgc-day{font-size:9.5px;font-weight:300;color:#B3B9BB;line-height:1}
/* ===== Onboarding Task 深色任务卡（1:1 复刻） ===== */
.d2-grid .otc{display:flex;flex-direction:column;height:100%}
.d2-grid .otc-head{display:flex;align-items:baseline;justify-content:space-between;padding:0 2px 10px}
.d2-grid .otc-head .t{font-size:18px;font-weight:300;color:#fff;letter-spacing:.2px}
.d2-grid .otc-head .n{font-size:26px;font-weight:300;line-height:1;color:#fff;letter-spacing:-.4px}
.d2-grid .otc-list{flex:1;display:flex;flex-direction:column;gap:3px;overflow-y:auto;padding-right:3px}
.d2-grid .otc-list::-webkit-scrollbar{width:5px}
.d2-grid .otc-list::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);border-radius:3px}
.d2-grid .otc-row{display:flex;align-items:center;gap:11px;padding:5px 2px;border-radius:12px;cursor:pointer}
.d2-grid .otc-row:hover{background:rgba(255,255,255,.055)}
.d2-grid .otc-go{width:14px;height:14px;flex:none;margin-left:auto;stroke:rgba(255,255,255,.4);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .otc-ico{width:34px;height:34px;flex:none;border-radius:50%;background:rgba(255,255,255,.09);
  display:flex;align-items:center;justify-content:center;transition:background .16s}
.d2-grid .otc-ico svg{width:15px;height:15px;stroke:#EDEDED;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .otc-meta{flex:1;min-width:0}
.d2-grid .otc-meta .tt{font-size:11.5px;font-weight:400;color:#F4F4F4;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.d2-grid .otc-meta .ts{font-size:9.5px;font-weight:300;color:rgba(255,255,255,.45);line-height:1.4;white-space:nowrap}
.d2-grid .otc-meta .ts.warn{color:#F6C64B}
.d2-grid .otc-mark{width:16px;height:16px;flex:none;display:flex;align-items:center;justify-content:center}
.d2-grid .otc-mark .ok{width:16px;height:16px;border-radius:50%;background:#F6C64B;display:flex;align-items:center;justify-content:center}
.d2-grid .otc-mark .ok svg{width:9px;height:9px;stroke:#1F2A2D;fill:none;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .otc-mark .wait{width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.3)}
.d2-grid .otc-row.done .otc-ico{background:rgba(255,255,255,.045)}
.d2-grid .otc-row.done .otc-ico svg{stroke:#7E8B8D}
.d2-grid .otc-row.done .otc-meta .tt{color:#8E9A9C}
.d2-grid .otc-row.done .otc-meta .ts{color:rgba(255,255,255,.28)}
.d2-grid .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.d2-grid .kpi{background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:20px 22px;box-shadow:var(--shadow-card);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  display:flex;flex-direction:column;justify-content:space-between;min-height:120px}
.d2-grid .kpi .lbl{font-size:12px;color:var(--text-3);letter-spacing:.6px}
.d2-grid .kpi .num{font-size:40px;font-weight:300;line-height:1.05;margin-top:8px;letter-spacing:-.5px}
.d2-grid .kpi .num em{font-size:14px;font-style:normal;color:var(--text-3);margin-left:4px}
.d2-grid .kpi .num.gold{color:var(--gold)}
.d2-grid .kpi .foot{margin-top:10px;font-size:11.5px;color:var(--text-3)}
.d2-grid .kpi .bar{height:6px;border-radius:3px;background:var(--surface-2);overflow:hidden;margin-top:10px}
.d2-grid .kpi .bar i{display:block;height:100%;border-radius:3px;background:var(--accent-deep)}
.d2-grid .kpi .bar i.gold{background:var(--gold)}
.d2-grid .card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.d2-grid .card-title{font-size:15px;font-weight:400}
.d2-grid .card-sub{font-size:11.5px;color:var(--text-3);margin-top:4px}
.d2-grid .jump{width:30px;height:30px;border-radius:var(--r-pill);border:1px solid var(--line);background:var(--surface-2);
  color:var(--text-2);display:grid;place-items:center;flex:0 0 auto}
.d2-grid .jump .ic{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .mod.lk-dark .jump{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.16);color:rgba(255,255,255,.8)}
.d2-grid .lesson-row{display:flex;align-items:center;gap:12px;padding:11px 0;border-top:1px solid var(--line-soft)}
.d2-grid .lesson-row:first-of-type{border-top:none}
.d2-grid .lesson-row .time{width:52px;flex:0 0 auto;font-size:13px;color:var(--text-2);line-height:1.25}
.d2-grid .lesson-row .time b{display:block;font-size:14px;color:var(--text);font-weight:400}
.d2-grid .lesson-row .time span{font-size:11px;color:var(--text-3)}
.d2-grid .ava-sm{width:34px;height:34px;border-radius:var(--r-pill);background:var(--accent-soft);color:var(--accent-deep);
  display:grid;place-items:center;font-size:13px;font-weight:400;flex:0 0 auto}
.d2-grid .lesson-row .who{flex:1 1 auto;min-width:0}
.d2-grid .lesson-row .who b{display:block;font-size:13.5px;font-weight:400}
.d2-grid .lesson-row .who span{font-size:11.5px;color:var(--text-3)}
.d2-grid .pill{height:26px;padding:0 12px;border-radius:var(--r-pill);display:inline-flex;align-items:center;font-size:11.5px;flex:0 0 auto}
.d2-grid .pill.ok{background:rgba(60,181,137,.14);color:#2E8C6B}
.d2-grid .pill.info{background:rgba(91,155,221,.14);color:#3E7AB8}
.d2-grid .bars{display:flex;align-items:flex-end;gap:9px;height:104px;margin-top:6px}
.d2-grid .bars .b{flex:1 1 0;display:flex;flex-direction:column;align-items:center;gap:7px}
.d2-grid .bars .b .stem{width:100%;max-width:16px;border-radius:8px 8px 4px 4px;background:var(--accent-soft)}
.d2-grid .bars .b.hi .stem{background:var(--accent-deep)}
.d2-grid .bars .b .d{font-size:10.5px;color:var(--text-3)}
.d2-grid .ringwrap{display:flex;align-items:center;gap:18px}
.d2-grid .ring{position:relative;width:108px;height:108px;flex:0 0 auto}
.d2-grid .ring svg{transform:rotate(-90deg)}
.d2-grid .ring .txt{position:absolute;inset:0;display:grid;place-content:center;text-align:center;line-height:1}
.d2-grid .ring .txt b{font-size:22px;font-weight:300}
.d2-grid .ring .txt span{font-size:10.5px;color:var(--text-3)}
.d2-grid .ring-legend{font-size:12px;color:var(--text-2);line-height:1.9}
.d2-grid .ring-legend b{font-weight:400;color:var(--text)}
.d2-grid .todo{display:flex;align-items:center;gap:11px;padding:9px 0;border-top:1px solid rgba(255,255,255,.09);cursor:pointer}
.d2-grid .todo:first-of-type{border-top:none}
.d2-grid .todo .cbx{width:20px;height:20px;border-radius:50%;border:1.6px solid rgba(255,255,255,.35);flex:0 0 auto;display:grid;place-items:center}
.d2-grid .todo .cbx svg{width:11px;height:11px;stroke:#1F2A2D;fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;opacity:0}
.d2-grid .todo.done .cbx{background:var(--gold);border-color:var(--gold)}
.d2-grid .todo.done .cbx svg{opacity:1}
.d2-grid .todo.done .tt{color:rgba(255,255,255,.42);text-decoration:line-through}
.d2-grid .todo .tt{flex:1 1 auto;font-size:13px;line-height:1.35}
.d2-grid .todo .tt small{display:block;font-size:11px;color:rgba(255,255,255,.45);margin-top:3px}
.d2-grid .todo .meta{font-size:11px;color:rgba(255,255,255,.45);flex:0 0 auto}
.d2-grid .todo.done .meta{color:var(--gold)}
.d2-grid .darkfoot{margin-top:12px;display:flex;align-items:center;justify-content:space-between;font-size:11.5px;color:rgba(255,255,255,.55)}
.d2-grid .darkfoot b{color:#fff;font-weight:400}
.d2-grid .segbar{display:flex;height:14px;border-radius:7px;overflow:hidden;margin:16px 0 12px;background:var(--surface-2)}
.d2-grid .segbar i{display:block;height:100%}
.d2-grid .seglegend{display:flex;flex-direction:column;gap:9px}
.d2-grid .seglegend .li{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--text-2)}
.d2-grid .seglegend .sw{width:9px;height:9px;border-radius:3px;flex:0 0 auto}
.d2-grid .seglegend .li b{margin-left:auto;font-weight:400;color:var(--text)}
.d2-grid .emptybox{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:22px 0;text-align:center;
  border:1px dashed var(--line);border-radius:18px;margin-top:14px}
.d2-grid .emptybox .t{font-size:13px;color:var(--text-3)}
.d2-grid .emptybox .btn{height:36px;padding:0 18px;border-radius:var(--r-pill);background:var(--dark);color:#fff;border:none;
  font-family:inherit;font-size:13px;font-weight:300}
.d2-grid .mini{margin:0;padding:0}
.d2-grid .mini li{display:flex;align-items:center;gap:10px;padding:9px 0;border-top:1px solid var(--line-soft);font-size:12.5px;list-style:none}
.d2-grid .mini li:first-child{border-top:none}
.d2-grid .mini .k{color:var(--text-2);flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.d2-grid .mini .v{font-weight:400}
/* ===== Schedule 日程时间轴卡（1:1 复刻参考图） ===== */
.d2-grid .sch{
  --sch-ink:#1d1c19; --sch-num:#8f8c84; --sch-mut:#a3a099;
  --sch-amber:#f2c94c; --sch-line:#e7e4da; --sch-dot:#c9c6bb; --sch-dark:#1e1d1a;
  width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:22px 18px 20px;
  box-shadow:var(--shadow-card);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  font-family:'Outfit','PingFang SC',sans-serif;
}
.d2-grid .sch-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.d2-grid .sch-head h2{font-size:18px;font-weight:300;letter-spacing:.2px;color:var(--sch-ink);margin:0}
.d2-grid .sch-arrow{width:30px;height:30px;border-radius:50%;background:#fff;border:1px solid #f0ede2;
  box-shadow:0 5px 14px rgba(88,72,24,.10);display:grid;place-items:center;cursor:pointer;transition:transform .2s,box-shadow .2s}
.d2-grid .sch-arrow:hover{transform:translate(1px,-1px);box-shadow:0 8px 18px rgba(88,72,24,.16)}
.d2-grid .sch-arrow svg{width:14px;height:14px;stroke:var(--sch-ink);stroke-width:1.8;fill:none;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .sch-days{display:grid;grid-template-columns:repeat(7,1fr);margin:0 -6px 18px;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 30px,#000 calc(100% - 30px),transparent 100%);
          mask-image:linear-gradient(90deg,transparent 0,#000 30px,#000 calc(100% - 30px),transparent 100%)}
.d2-grid .sch-day{text-align:center;cursor:pointer;user-select:none;padding:2px 0}
.d2-grid .sch-day .dn{font-size:9.5px;letter-spacing:.5px;color:var(--sch-mut);margin-bottom:4px}
.d2-grid .sch-day .dnum{font-size:13.5px;color:var(--sch-num);font-weight:400;transition:.15s}
.d2-grid .sch-day:hover .dnum{color:#42403b}
.d2-grid .sch-day.active .dn{color:var(--sch-ink);font-weight:500}
.d2-grid .sch-day.active .dnum{color:var(--sch-ink);font-weight:650;font-size:15px}
.d2-grid .sch-tl{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;padding:4px 0}
.d2-grid .sch-vline{position:absolute;left:25px;top:8px;bottom:28px;border-left:2px dotted var(--sch-dot)}
/* 事件行：时间标签 + 胶囊卡片 */
.d2-grid .sch-row{display:flex;align-items:flex-start;gap:8px;position:relative}
/* 时间刻度：只出现在每节课开始处，不再按小时铺满 */
.d2-grid .sch-row > .sch-tp{flex:none;width:46px;height:22px;border-radius:11px;display:grid;place-items:center;
  font-size:10.5px;font-weight:400;letter-spacing:.3px;background:#fff;color:var(--sch-num);border:1px solid var(--sch-line)}
/* 胶囊卡片：高度由内容决定，不再按时间比例拉伸 */
.d2-grid .sch-ev{flex:1;box-sizing:border-box;overflow:hidden;border-radius:14px;padding:10px 12px;
  cursor:pointer;transition:transform .18s,box-shadow .18s;display:flex;flex-direction:column;justify-content:center;min-height:0}
.d2-grid .sch-ev:hover{transform:translateY(-2px)}
.d2-grid .sch-ev .t{font-size:12.5px;font-weight:400;color:var(--sch-ink);padding-right:14px;margin-bottom:2px;letter-spacing:.1px;line-height:1.3}
.d2-grid .sch-ev .t .sub{font-size:12.5px;font-weight:400;color:var(--sch-ink)}
.d2-grid .sch-ev .tr{font-size:10px;font-weight:300;color:var(--sch-mut);letter-spacing:.2px;line-height:1.2}
.d2-grid .sch-ev .cdot{position:absolute;top:10px;right:11px;width:5px;height:5px;border-radius:50%}
.d2-grid .sch-ev.darkc{background:var(--sch-dark);color:#fff;box-shadow:0 10px 24px rgba(22,20,12,.20)}
.d2-grid .sch-ev.darkc:hover{box-shadow:0 14px 30px rgba(22,20,12,.28)}
.d2-grid .sch-ev.darkc .t{color:#fff}
.d2-grid .sch-ev.darkc .t .sub{color:#fff}
.d2-grid .sch-ev.darkc .tr{color:rgba(255,255,255,.45)}
.d2-grid .sch-ev.darkc .cdot{background:var(--sch-amber)}
.d2-grid .sch-ev.lite{background:#fff;border:1px solid #edeade;box-shadow:0 6px 16px rgba(88,72,24,.06)}
.d2-grid .sch-ev.lite:hover{box-shadow:0 10px 22px rgba(88,72,24,.10)}
.d2-grid .sch-ev.lite .cdot.dotb{background:var(--sch-dark)}
.d2-grid .sch-ev.lite .cdot.doty{background:var(--sch-amber)}
/* 已完成：浅灰底 + 删除线 */
.d2-grid .sch-ev.done{background:#F1F0EC;border:1px solid #E8E6DE;box-shadow:none}
.d2-grid .sch-ev.done:hover{transform:none;box-shadow:none}
.d2-grid .sch-ev.done .t{color:#9C998F;text-decoration:line-through;text-decoration-thickness:1px;text-decoration-color:#B6B2A8}
.d2-grid .sch-ev.done .t .sub{color:#9C998F;text-decoration:line-through;text-decoration-thickness:1px;text-decoration-color:#B6B2A8}
.d2-grid .sch-ev.done .tr{color:#B4B1A7}
.d2-grid .sch-ev.done .cdot{background:#C6C2B8}
.d2-grid .sch-ev .cdot.dotm{background:#C6C2B8}
/* 空状态：当天无排课 */
.d2-grid .sch-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px}
.d2-grid .sch-empty svg{width:30px;height:30px;fill:none;stroke:#D9D5CB;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .sch-empty p{margin:0;font-size:12px;color:var(--sch-mut);letter-spacing:.3px}
.d2-grid .sch-avatars{display:flex;margin-top:10px}
.d2-grid .sch-av{width:22px;height:22px;border-radius:50%;border:2px solid #fff;display:grid;place-items:center;
  font-size:8.5px;font-weight:650;color:#fff;letter-spacing:.3px}
.d2-grid .sch-av.a1{background:linear-gradient(135deg,#8a7b52,#6b5e3c)}
.d2-grid .sch-av.a2{background:linear-gradient(135deg,#4a4b40,#2c2d26)}
.d2-grid .sch-av+.sch-av{margin-left:-7px}
.d2-grid .sch-more{position:absolute;left:11px;bottom:0;width:31px;height:31px;border-radius:50%;background:#fff;
  border:1.6px solid #2b2a26;display:grid;place-items:center;cursor:pointer;transition:.2s}
.d2-grid .sch-more:hover{background:var(--sch-dark)}
.d2-grid .sch-more:hover svg{stroke:#fff}
.d2-grid .sch-more svg{width:12px;height:12px;stroke:var(--sch-ink);stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round;transition:.2s}
/* ================= 专注白噪音卡（图片轮播 + 三透明图标） ================= */
.d2-grid .wn-card{
  position:relative;width:100%;height:100%;background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);overflow:hidden;
  display:flex;flex-direction:column;
  box-shadow:var(--shadow-card);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
}
.d2-grid .wn-hero{position:relative;flex:1;min-height:0;background:#3a2d26;overflow:hidden}
.d2-grid .wn-scene{
  position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover;object-position:center 46%;
  opacity:0;transition:opacity 1.2s ease;
}
.d2-grid .wn-scene.on{opacity:1}
.d2-grid .wn-shade{
  position:absolute;inset:0;
  background:linear-gradient(to top, rgba(0,0,0,.60) 0%, rgba(0,0,0,.26) 24%, rgba(0,0,0,0) 50%);
}
.d2-grid .wn-bar{position:absolute;left:0;right:0;bottom:0;padding:16px 18px 18px;display:flex;align-items:center;gap:4px}
.d2-grid .wn-ib{
  height:40px;min-width:40px;padding:0 10px;border:none;background:transparent;border-radius:999px;
  display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:background .18s ease;
}
.d2-grid .wn-ib:hover{background:rgba(255,255,255,.16)}
.d2-grid .wn-ib:active{background:rgba(255,255,255,.24)}
.d2-grid .wn-ib svg{
  width:22px;height:22px;flex:none;stroke:#fff;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 1px 5px rgba(0,0,0,.5));
}
.d2-grid .wn-ib b{
  font-size:12.5px;font-weight:500;color:#fff;letter-spacing:.6px;line-height:1;
  font-variant-numeric:tabular-nums;text-shadow:0 1px 5px rgba(0,0,0,.5);
}
.d2-grid .wn-hint{
  position:absolute;left:22px;bottom:62px;padding:5px 12px;border-radius:999px;
  background:rgba(0,0,0,.34);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  color:#fff;font-size:12px;font-weight:400;letter-spacing:.4px;
  opacity:0;transform:translateY(4px);transition:opacity .25s ease,transform .25s ease;pointer-events:none;
}
.d2-grid .wn-hint.on{opacity:1;transform:translateY(0)}
.d2-grid .wn-strip{
  height:52px;flex:none;display:flex;align-items:center;justify-content:space-between;padding:0 26px;
}
.d2-grid .wn-strip .w{display:flex;align-items:center;gap:10px}
.d2-grid .wn-strip svg{
  width:18px;height:18px;flex:none;stroke:#1E2A2D;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round;
}
.d2-grid .wn-strip b{font-size:15px;font-weight:300;color:#1E2A2D;letter-spacing:.2px;line-height:1;white-space:nowrap}
/* ===== 预警卡：续费 / 本月考试（1:1 沿用 progress 卡母版，尺寸自适应格子）===== */
.d2-grid{
  --al-ink:#2E2B26;            /* 深炭：主文字 / 已完成 */
  --al-amber:#F6C64B;          /* 琥珀：预警 / 进行中 / 高亮 */
  --al-surface:#FFFFFF;
  --al-track:#EFEDE6;          /* 浅底：轨道 / 头像 / 未开始 */
  --al-btn:#F4F2EC;            /* 圆形按钮底 */
  --al-sub:#4A4740;            /* 次级文字 */
  --al-sub2:#9AA5AA;           /* 弱化文字 */
  --al-line:#F1EEE7;           /* 分隔线 */
  --al-r-card:22px;
  --al-shadow:0 18px 50px rgba(30,30,60,.13), 0 6px 18px rgba(30,30,60,.06);
}
.d2-grid .alcard,.d2-grid .alcard *{margin:0;padding:0;box-sizing:border-box}
.d2-grid .alcard{
  background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);
  padding:20px;box-shadow:var(--shadow-card);transition:.25s;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  display:flex;flex-direction:column;
}
/* ===== 卡头：标题 + 圆形按钮（与 Progress 卡 1:1 对齐）===== */
.d2-grid .alhead{display:flex;align-items:flex-start;justify-content:space-between;height:30px}
.d2-grid .alhead h3{font-size:18px;font-weight:300;color:var(--al-ink);letter-spacing:.2px}
.d2-grid .albtn{
  width:30px;height:30px;border-radius:50%;background:#fff;border:1px solid #f0ede2;
  box-shadow:0 5px 14px rgba(88,72,24,.10);cursor:pointer;
  display:grid;place-items:center;transition:transform .2s,box-shadow .2s;
}
.d2-grid .albtn:hover{transform:translate(1px,-1px);box-shadow:0 8px 18px rgba(88,72,24,.16)}
.d2-grid .albtn:focus-visible{outline:2px solid var(--al-amber);outline-offset:2px}
.d2-grid .albtn svg{width:14px;height:14px;fill:none;stroke:var(--al-ink);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
/* ===== 主数字区 ===== */
.d2-grid .alhero{display:flex;align-items:flex-end;gap:12px;height:40px}
.d2-grid .alnum{font-size:40px;font-weight:300;line-height:1;letter-spacing:-.5px;color:var(--al-ink)}
.d2-grid .alnum em{font-size:14px;font-style:normal;color:#6B767C;margin-left:1px}
.d2-grid .alside{display:flex;flex-direction:column;font-size:11px;line-height:1.4;padding-bottom:3px}
.d2-grid .alside b{font-weight:400;color:var(--al-sub)}
.d2-grid .alside i{font-style:normal;color:var(--al-sub2)}
/* ===== 通用：圆形头像 ===== */
.d2-grid .alava{
  width:26px;height:26px;border-radius:50%;background:var(--al-track);color:var(--al-sub);
  display:grid;place-items:center;flex:none;
}
.d2-grid .alava svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
/* ===== 通用：空状态（无数据时把 .xbody 换成 .alempty）===== */
.d2-grid .alempty{
  flex:1;display:none;flex-direction:column;align-items:center;justify-content:center;gap:6px;
}
.d2-grid .alempty.on{display:flex}
.d2-grid .alempty svg{width:26px;height:26px;fill:none;stroke:var(--al-track);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.d2-grid .alempty p{font-size:11.5px;color:var(--al-sub2);letter-spacing:.2px}
/* ===== 卡1 续费学员预警 ===== */
.d2-grid .rcard{width:100%;height:100%}
.d2-grid .rlist{flex:1;display:flex;flex-direction:column;justify-content:flex-start;gap:16px;margin-top:14px}
.d2-grid .rrow{display:flex;flex-direction:column;gap:5px;cursor:default;padding:0 6px;margin:0 -6px;border-radius:8px;transition:.18s}
.d2-grid .rrow:hover{background:#FBF9F3}
.d2-grid .rrow:focus-visible{outline:2px solid var(--al-amber);outline-offset:2px}
.d2-grid .rcard .alava{width:24px;height:24px}
.d2-grid .rcard .alava svg{width:17px;height:17px}
.d2-grid .rtop{display:flex;align-items:center;gap:9px}
.d2-grid .rname{font-size:12px;font-weight:500;color:var(--al-ink);letter-spacing:.2px;white-space:nowrap}
.d2-grid .rcourse{font-size:10px;color:var(--al-sub2);letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.d2-grid .rval{margin-left:auto;font-size:13px;font-weight:400;color:var(--al-ink);font-variant-numeric:tabular-nums}
.d2-grid .rval.warn{color:#B98A16}                      /* 低于阈值：琥珀加深，保证白底可读（对比度 3.4:1，仅用于 ≥13px 数字） */
.d2-grid .rval.over{color:var(--bad)}
.d2-grid .rtrack{height:4px;border-radius:3px;background:var(--al-track);overflow:hidden}
.d2-grid .rtrack i{display:block;height:100%;border-radius:3px;background:var(--al-ink);transition:.2s}
.d2-grid .rtrack i.warn{background:var(--al-amber)}
.d2-grid .rrow:hover .rtrack i:not(.warn){background:#4A4740}
/* ===== 卡2 本月考试学员预警 ===== */
.d2-grid .ecard{width:100%;height:100%}
.d2-grid .ecols{flex:1;display:flex;gap:30px;margin-top:14px}
.d2-grid .ecol{display:flex;flex-direction:column;flex:1}
.d2-grid .ecol.wide{flex:1.25}
.d2-grid .etitle{
  font-size:10px;color:var(--al-sub2);letter-spacing:.5px;text-transform:uppercase;
  padding-bottom:8px;margin-bottom:2px;border-bottom:1px solid var(--al-line);
}
.d2-grid .elist{flex:1;display:flex;flex-direction:column;justify-content:space-between;padding-top:8px}
/* 左栏：倒计时行 */
.d2-grid .crow{display:flex;align-items:center;gap:9px;border-radius:8px;padding:0 6px;margin:0 -6px;transition:.18s}
.d2-grid .crow:hover{background:#FBF9F3}
.d2-grid .crow:focus-visible{outline:2px solid var(--al-amber);outline-offset:2px}
.d2-grid .cmid{min-width:0;flex:1;display:flex;flex-direction:column}
.d2-grid .cname{font-size:12px;font-weight:500;color:var(--al-ink);letter-spacing:.2px;white-space:nowrap}
.d2-grid .cmeta{font-size:10px;color:var(--al-sub2);letter-spacing:.2px;white-space:nowrap;margin-top:1px}
.d2-grid .cday{
  flex:none;font-size:11px;font-weight:400;color:var(--al-sub);background:var(--al-track);
  border-radius:999px;padding:4px 9px;letter-spacing:.2px;transition:.2s;font-variant-numeric:tabular-nums;
}
.d2-grid .cday.warn{background:var(--al-amber);color:var(--al-ink)}
.d2-grid .crow:hover .cday{background:var(--al-amber);color:var(--al-ink)}
/* 右栏：模考分段条 */
.d2-grid .mrow{display:flex;flex-direction:column;gap:7px;border-radius:8px;padding:0 6px;margin:0 -6px;transition:.18s}
.d2-grid .mrow:hover{background:#FBF9F3}
.d2-grid .mrow:focus-visible{outline:2px solid var(--al-amber);outline-offset:2px}
.d2-grid .mtop{display:flex;align-items:center;gap:8px}
.d2-grid .mname{font-size:11.5px;font-weight:400;color:var(--al-sub);letter-spacing:.2px;white-space:nowrap}
.d2-grid .mcount{margin-left:auto;font-size:10px;color:var(--al-sub2);letter-spacing:.2px}
.d2-grid .mscore{font-size:13px;font-weight:400;color:var(--al-ink);font-variant-numeric:tabular-nums}
.d2-grid .mdelta{font-size:10px;font-weight:400;color:#B98A16;letter-spacing:.2px;font-variant-numeric:tabular-nums}
.d2-grid .mdelta.flat{color:var(--al-sub2)}
.d2-grid .mseg{display:flex;gap:3px}
.d2-grid .mseg i{flex:1;height:6px;border-radius:3px;background:var(--al-track);transition:.2s}
.d2-grid .mseg i.done{background:var(--al-ink)}
.d2-grid .mseg i.cur{background:var(--al-amber)}
.d2-grid .mrow:hover .mseg i.done{background:#4A4740}
/* 底部：整体进度条 */
.d2-grid .efoot{margin-top:12px;padding-top:10px;border-top:1px solid var(--al-line);display:flex;align-items:center;gap:12px}
.d2-grid .efoot .elabel{font-size:10px;color:var(--al-sub2);letter-spacing:.3px;white-space:nowrap}
.d2-grid .efoot .etrack{flex:1;height:6px;border-radius:3px;background:var(--al-track);overflow:hidden;display:flex;gap:2px}
.d2-grid .efoot .etrack i{height:100%;background:var(--al-ink);border-radius:3px}
.d2-grid .efoot .etrack i.am{background:var(--al-amber)}
.d2-grid .efoot b{font-size:11px;font-weight:400;color:var(--al-sub);font-variant-numeric:tabular-nums}
/* ===== 防系统全局样式渗透：卡片内高频类的关键属性兜底 ===== */
.d2-grid .pill{height:26px;padding:0 12px;border-radius:999px;display:inline-flex;align-items:center;font-size:11.5px;flex:0 0 auto}
.d2-grid .pill.ok{background:rgba(60,181,137,.14);color:#2E8C6B}
.d2-grid .pill.info{background:rgba(91,155,221,.14);color:#3E7AB8}
.d2-grid .card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.d2-grid .card-title{font-size:15px;font-weight:400;margin:0}
.d2-grid .card-sub{font-size:11.5px;color:#7a7e89;margin-top:4px;font-weight:300}
.d2-grid .lesson-row{display:flex;align-items:center;gap:12px;padding:11px 0;border-top:1px solid rgba(30,42,45,.05)}
.d2-grid .lesson-row:first-of-type{border-top:none}
.d2-grid .lesson-row .time{width:52px;flex:0 0 auto;font-size:13px;color:#4a4d57;line-height:1.25;font-weight:300}
.d2-grid .lesson-row .time b{display:block;font-size:14px;color:#1f2026;font-weight:400}
.d2-grid .lesson-row .time span{font-size:11px;color:#7a7e89}
.d2-grid .lesson-row .who{flex:1 1 auto;min-width:0}
.d2-grid .lesson-row .who b{display:block;font-size:13.5px;font-weight:400}
.d2-grid .lesson-row .who span{font-size:11.5px;color:#7a7e89}
.d2-grid .ava-sm{width:34px;height:34px;border-radius:999px;background:rgba(101,198,196,.16);color:#3FA9A0;
  display:grid;place-items:center;font-size:13px;font-weight:400;flex:0 0 auto}
.d2-grid .jump .ic{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.d2-grid b,.d2-grid strong{font-weight:400}
.d2-grid .mono{font-variant-numeric:tabular-nums}
/* （原此处重复声明 .st-n 34px，会覆盖上方主规则，已删除，字号只在统计条段落里维护） */
/* 响应式：窄屏单列 */
@media (max-width:900px){
  .d2-grid{grid-template-columns:repeat(2,1fr)}
  .d2-grid .mod{grid-column:1 / span 2 !important}
}

/* ===================================================================
   顶部单行页头（2026-09-11 用户红框定稿）
   ① 左侧竖栏撤除 + 内容贴左：.main 左缩进 0、页面内距 28px（对齐 v10）；
   ② logo 并入品牌块（.hero-mark），不再 position:fixed，随页头一起滚动；
   ③ 页头一行内所有控件同高 40px 且垂直居中（align-items:center）；
   ④ 导航胶囊更矮更长更纤细：胶囊总高 40、按钮 52×32、图标 16px/1.8 描边。
   =================================================================== */
.main{margin-left:0}
.hero-band{min-height:auto;align-items:center;padding:14px 0 6px}
.hero-inner{padding:0 28px;align-items:center;gap:24px}
.hero-brand{display:flex;align-items:center;gap:12px;flex:0 0 auto}
.hero-mark{display:block;width:44px;height:44px;object-fit:contain;filter:brightness(0) contrast(1.3)}
.hero-brand-txt{min-width:0}
.hero-brand h1{font-size:24px;font-weight:300;letter-spacing:.6px;line-height:1.05;margin:0;color:var(--text)}
.hero-brand .sub{font-size:10px;letter-spacing:2.2px;margin-top:3px;line-height:1.2}
.view-container{padding:0 28px 70px}
#d2-switch{height:40px;padding:4px;align-items:center}
#d2-switch button{height:32px}

/* ===================================================================
   右上角导航胶囊（2026-09-11 定稿 · 规格来源 demo/dashboard-editor-v10.html 顶部 .navpill）
   用户确认：左侧竖栏 .nav-float 撤除，导航全局移到右上角，与左上角 logo 同一行；
   「新版 / 经典」切换胶囊保留在导航胶囊左侧（仅仪表盘视图显示）。
   作用域：.topright / .navpill 前缀，不影响其它既有类。
   =================================================================== */
.topright{position:static;top:auto;right:auto;z-index:auto;margin-left:auto;display:flex;align-items:center;gap:16px}
.navpill{display:flex;align-items:center;gap:4px;background:var(--surface);border-radius:var(--r-pill);
  padding:4px;box-shadow:var(--shadow-card)}
.navpill .nav-item{position:relative;display:flex;align-items:center;justify-content:center;
  width:52px;height:32px;min-width:0;max-width:none;padding:0;margin:0;
  border:none;border-radius:var(--r-pill);background:transparent;box-shadow:none;
  color:var(--text-2);cursor:pointer;font-family:var(--font);
  transition:background .18s ease,color .18s ease}
.navpill .nav-item .ic{position:static;transform:none;width:16px;height:16px;
  stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.navpill .nav-item:hover{transform:none;color:var(--text)}
.navpill .nav-item.active{background:var(--dark);color:#fff;width:52px;min-width:0;max-width:none;
  padding:0;justify-content:center;border-radius:var(--r-pill)}
/* hover 浮出中文名（v10 规格：深炭灰气泡、距按钮 10px、下方居中） */
.navpill .nav-label{position:absolute;top:calc(100% + 10px);left:50%;transform:translateX(-50%) translateY(-4px);
  margin:0;max-width:none;overflow:visible;opacity:0;pointer-events:none;z-index:60;
  background:var(--dark);color:#fff;font-size:12px;font-weight:300;letter-spacing:.3px;
  padding:5px 11px;border-radius:8px;white-space:nowrap;transition:opacity .18s ease,transform .18s ease}
.navpill .nav-item.active .nav-label{max-width:none;opacity:0}
.navpill .nav-item:hover .nav-label,
.navpill .nav-item.active:hover .nav-label{opacity:1;transform:translateX(-50%) translateY(0)}
/* 退出登录：胶囊右侧独立圆钮（对应 v10 顶栏右侧图标钮位置） */
.topright .nav-exit{display:grid;place-items:center;width:40px;height:40px;margin:0;
  border:1px solid var(--border);border-radius:var(--r-pill);background:var(--surface);
  color:var(--text-2);cursor:pointer;box-shadow:var(--shadow-card);
  transition:color .18s ease,background .18s ease}
.topright .nav-exit .ic{position:static;width:17px;height:17px;
  stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.topright .nav-exit:hover{color:var(--bad)}
@media (max-width:1100px){.topright{display:none}.page-sidebar{display:none!important}.app-body{display:block}}

/* ===================================================================
   学员详情页（可编辑 · 统一保存）  vStudentDetail
   设计：玻璃拟态 + 青绿主色，font-weight 继承全局 300
   =================================================================== */
.sd-page{display:flex;flex-direction:column;gap:18px}
.sd-header{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:14px;
  padding:16px 20px;background:var(--glass);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--shadow-card);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.sd-header h2{margin:0;font-size:22px;font-weight:300;letter-spacing:.3px}
.sd-header .btn{margin:0}
.sd-header #sd-save-btn{margin-left:auto}
.sd-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.sd-col{display:flex;flex-direction:column;gap:18px;min-width:0}
.sd-card{background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);
  padding:22px;box-shadow:var(--shadow-card)}
.sd-card-h{margin:0 0 16px;font-size:16px;font-weight:300;display:flex;align-items:center;gap:10px}
.sd-card-h-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.sd-batch-comm-label{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:300;color:var(--text-2);white-space:nowrap}
.sd-hint{font-size:11.5px;color:var(--text-3);background:var(--accent-soft);
  padding:2px 9px;border-radius:var(--r-pill);font-weight:300}
.sd-empty{font-size:13px;color:var(--text-3);padding:14px 0}
.sd-ro{font-size:13px;color:var(--text-2)}

/* 可编辑表单网格 */
.sd-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}
.sd-f{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--text-3);font-weight:300}
.sd-f input,.sd-f select,.sd-f textarea{font-family:var(--font);font-size:13px;color:var(--text);
  background:var(--input-fill);border:1px solid var(--line);border-radius:var(--r-input);
  padding:9px 11px;font-weight:300;outline:none;transition:border-color .16s,box-shadow .16s}
.sd-f input:focus,.sd-f select:focus,.sd-f textarea:focus{border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-soft)}
.sd-f textarea{min-height:64px;resize:vertical}
.sd-f-full{grid-column:1/-1}

/* 课程进度（系统统计，只读 · 课程+标签双维度） */
.sd-prog-type{padding:12px 0;border-top:1px solid var(--line-soft)}
.sd-prog-type:first-child{border-top:none;padding-top:0}
.sd-prog-type-h{font-size:13px;color:var(--text);margin-bottom:10px;display:flex;align-items:baseline;gap:8px}
.sd-prog-sum{font-size:11.5px;color:var(--text-3);font-weight:300}
.sd-prog-subs{display:flex;flex-direction:column;gap:12px;padding-left:2px}
.sd-prog-top{display:flex;justify-content:space-between;align-items:center;font-size:13px;margin-bottom:5px}
.sd-prog-top .muted{font-size:11.5px}
.sd-bar{height:8px;background:rgba(30,42,45,.06);border-radius:4px;overflow:hidden}
.sd-bar-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-deep));border-radius:4px;transition:width .3s}
.sd-bar-over{background:linear-gradient(90deg,#e08a72,#c0392b)}
.sd-prog-meta{display:flex;justify-content:space-between;margin-top:5px;font-size:11px;color:var(--text-3);font-weight:300}
.sd-prog-meta .sd-warn{color:var(--bad)}
.sd-over{color:var(--bad);font-weight:400}
.sd-prog-sum .sd-over{font-weight:400}
.sd-c-hours{font-weight:300;color:var(--text-2);min-width:46px;display:inline-block;text-align:right}

/* 进度面板内：科目级消耗明细（来自课表） */
.sd-prog-subj-detail{margin-top:8px;padding:10px 12px;background:rgba(107,164,156,.05);border:1px solid rgba(107,164,156,.12);border-radius:10px}
.sd-prog-subj-label{font-size:11px;color:var(--text-3);margin-bottom:6px;font-weight:300}
.sd-prog-subj-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;padding:3px 0}
.sd-prog-subj-row .muted{font-size:11px;color:var(--text-3)}

/* 快捷操作 */
.sd-actions{display:flex;gap:10px;flex-wrap:wrap}

/* 考试记录（可编辑） */
.sd-exam-section{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}
.sd-exam-card .sd-card-h{margin:0}
.sd-exam-rows{display:flex;flex-direction:column;gap:10px}
.sd-exam-row{display:grid;grid-template-columns:1.2fr 1fr .9fr .7fr 28px;gap:8px;align-items:center}
.sd-exam-row .sd-ri{font-family:var(--font);font-size:12.5px;color:var(--text);
  background:var(--input-fill);border:1px solid var(--line);border-radius:12px;padding:8px 10px;
  font-weight:300;outline:none;min-width:0;width:100%}
.sd-exam-row .sd-ri:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.sd-row-x{width:28px;height:28px;display:grid;place-items:center;border:1px solid var(--line);
  border-radius:50%;background:transparent;color:var(--text-3);cursor:pointer;font-size:15px;line-height:1;
  transition:color .16s,border-color .16s,background .16s}
.sd-row-x:hover{color:var(--bad);border-color:var(--bad);background:#fdecea}

/* 课程明细（可编辑） */
.sd-course-section{margin-top:18px}
.sd-course-rows{display:flex;flex-direction:column;gap:10px}
.sd-course-row{display:grid;grid-template-columns:1fr 1fr 0.85fr 0.75fr 0.9fr auto;gap:8px;align-items:center;
  background:var(--input-fill);border:1px solid var(--line);border-radius:12px;padding:8px 10px}
.sd-course-row select,.sd-course-row .sd-c-field input{
  font-family:var(--font);font-size:12.5px;color:var(--text);font-weight:300;outline:none;min-width:0;width:100%;
  background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:7px 9px}
.sd-course-row select:focus,.sd-course-row .sd-c-field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.sd-c-field{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--text-3);margin:0}
.sd-c-badge{font-size:10.5px;color:var(--accent);font-weight:300;margin-left:4px;white-space:nowrap}
.sd-course-tip{margin:12px 2px 0;font-size:12px}

/* 批次分组 */
.sd-batch-group{border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:10px;background:var(--bg)}
.sd-batch-header{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--input-fill);border-bottom:1px solid var(--line);user-select:none;transition:background .15s}
.sd-batch-header:hover{background:var(--hover-bg)}
.sd-batch-arrow{font-size:11px;color:var(--text-3);width:14px;text-align:center;flex-shrink:0}
.sd-batch-title{font-size:14px;font-weight:400;color:var(--text)}
.sd-batch-summary{font-size:12px;color:var(--text-3);margin-left:auto}
.sd-batch-comm-wrap{margin-left:12px;display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-3)}
.sd-batch-comm-wrap select{font-size:12px;padding:3px 6px;border:1px solid var(--line);border-radius:6px;font-weight:400;background:#fff}
.sd-batch-body{display:flex;flex-direction:column;gap:10px;padding:10px;transition:all .25s ease;max-height:2000px;overflow:hidden}
.sd-batch-body.sd-collapsed{max-height:0;padding-top:0;padding-bottom:0;opacity:0;margin:0}
.sd-c-bm{min-width:0}
.sd-c-bm input[type="month"]{font-family:var(--font);font-size:12.5px;font-weight:300;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:7px 9px;outline:none;width:100%;cursor:pointer}
.sd-c-bm input[type="month"]:focus{border-color:var(--accent)}

/* 实际排课明细表格（只读） */
.sd-lesson-table{width:100%;border-collapse:collapse;font-size:12.5px;font-weight:300}
.sd-lesson-table th{text-align:left;padding:8px 10px;background:var(--input-fill);color:var(--text-2);font-weight:300;border-bottom:1px solid var(--line);white-space:nowrap}
.sd-lesson-table td{padding:7px 10px;border-bottom:1px solid var(--line-soft);color:var(--text)}
.sd-lesson-table tbody tr:hover{background:rgba(107,164,156,.04)}
.sd-lesson-table .sd-lt-total{background:rgba(107,164,156,.06);font-weight:400}
.sd-lesson-table .mono{font-family:SF Mono,Menlo,monospace;font-variant-numeric:tabular-nums}
@media (max-width:880px){
  .sd-grid,.sd-exam-section{grid-template-columns:1fr}
  .sd-course-row{grid-template-columns:1fr 1fr 1fr;row-gap:8px}
  .sd-c-del{grid-column:2;justify-self:end}
  .sd-exam-row{grid-template-columns:1fr 1fr;row-gap:8px}
  .sd-row-x{grid-column:2;justify-self:end}
}

/* —— 月视图编辑模式 · 拖拽移动课程（仅换日子） —— */
.mchip[draggable="true"]{cursor:grab}
.mchip[draggable="true"]:active{cursor:grabbing}
.mchip.dragging{opacity:.4}
.mc.drag-over{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 2px var(--accent-soft) inset}

/* ================= 雅思在线测评 · 公开做题页（匿名 /t/:token） ================= */
.t-view{position:fixed;inset:0;z-index:60;overflow:auto;background:#F7F4EC;color:var(--text);font-family:var(--font)}
.t-view.hidden{display:none}
.t-wrap{max-width:820px;margin:0 auto;padding:40px 22px 64px}
.t-head{text-align:center;margin-bottom:26px}
.t-brand{font-size:22px;font-weight:400;letter-spacing:1px;color:var(--dark)}
.t-sub{font-size:12px;letter-spacing:2px;color:var(--accent);text-transform:uppercase;margin-top:4px}
.t-card{background:#FAF8F3;border:1px solid var(--line-soft);border-radius:var(--r-card);padding:28px;box-shadow:0 18px 50px rgba(31,42,45,.07)}
.t-hi{font-size:14px;color:var(--text);margin:0 0 22px;font-weight:300}
.t-passage{margin-bottom:26px}
.t-ptitle{font-size:15px;font-weight:400;color:var(--dark);margin:0 0 10px;padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
.t-text{font-size:13.5px;line-height:1.9;color:var(--text);font-weight:300;margin:0 0 16px;background:var(--input-fill);padding:14px 16px;border-radius:12px}
.t-questions{display:flex;flex-direction:column;gap:14px}
.t-q{display:grid;grid-template-columns:30px 1fr;gap:12px;align-items:start}
.t-qnum{width:30px;height:30px;border-radius:50%;background:var(--accent-soft);color:var(--accent-deep);font-size:13px;font-weight:400;display:flex;align-items:center;justify-content:center}
.t-qlabel{font-size:10.5px;letter-spacing:1px;text-transform:uppercase;color:var(--text-3);margin-bottom:4px}
.t-stem{font-size:13.5px;line-height:1.7;color:var(--text);margin-bottom:10px}
.t-opts{display:flex;flex-direction:column;gap:8px}
.t-opt{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:300;color:var(--text);cursor:pointer;padding:8px 12px;border:1px solid var(--line-soft);border-radius:12px;background:var(--surface);transition:.15s}
.t-opt:hover{border-color:var(--accent);background:var(--accent-soft)}
.t-opt input{accent-color:var(--accent)}
.t-fill{margin-top:2px}
.t-area{width:100%;min-height:150px;margin-top:10px;line-height:1.7;font-weight:300}
.t-submitrow{display:flex;align-items:center;gap:14px;margin-top:30px;flex-wrap:wrap}
.t-result{margin-top:22px}
.t-ok{background:var(--accent-soft);border:1px solid var(--accent);border-radius:14px;padding:20px 22px}
.t-ok h3{font-size:16px;font-weight:400;color:var(--dark);margin:0 0 8px}
.t-ok p{font-size:13.5px;font-weight:300;margin:4px 0}
.t-ok b{color:var(--accent-deep);font-weight:400}
.t-err{background:rgba(214,118,96,.12);border:1px solid rgba(214,118,96,.5);border-radius:14px;padding:16px 18px;color:#a8553f;font-size:13px}
.t-foot{text-align:center;margin-top:30px;font-size:11px;letter-spacing:1px;color:var(--text-3)}
.t-center{max-width:460px;margin:18vh auto 0;text-align:center}
.t-loading{padding:80px;text-align:center;color:var(--text-2);font-weight:300}

/* ================= 雅思在线测评 · 后台（登录后） ================= */
.ielts-linkbox{margin:14px 0;padding:12px 14px;background:var(--input-fill);border:1px dashed var(--accent);border-radius:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;color:var(--dark);word-break:break-all}
.ielts-detail{font-weight:300}
.ielts-scorebar{display:grid;grid-template-columns:auto auto 1fr;gap:22px;align-items:center;padding:16px 18px;background:var(--input-fill);border-radius:14px;margin-bottom:18px}
.ielts-score{display:flex;flex-direction:column;line-height:1.2}
.ielts-score .ielts-num{font-size:30px;font-weight:300;color:var(--dark)}
.ielts-score .ielts-num.exam{color:var(--exam)}
.ielts-bytype{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.ielts-chip{font-size:11.5px;color:var(--text-2);background:var(--surface);border:1px solid var(--line-soft);border-radius:20px;padding:3px 11px}
.ielts-rev-sec{margin-bottom:20px}
.ielts-rev-sec h4{font-size:14px;font-weight:400;color:var(--dark);margin:0 0 8px}
.ielts-passage-text{font-size:12.5px;line-height:1.8;color:var(--text);background:var(--input-fill);padding:12px 14px;border-radius:10px;margin:0 0 12px}
.ielts-qrow{padding:9px 0;border-bottom:1px solid var(--line-soft)}
.ielts-qmeta{font-size:13px;color:var(--text);margin-bottom:3px}
.ielts-qans{font-size:12.5px;color:var(--text-2)}
.ielts-qans b{color:var(--exam);font-weight:400}
.ielts-wtext{font-size:13px;line-height:1.8;color:var(--text);background:var(--surface);border:1px solid var(--line-soft);border-radius:12px;padding:14px 16px;white-space:pre-wrap;min-height:60px;font-weight:300}
.ielts-report{margin-top:18px;padding:18px 20px;background:var(--input-fill);border:1px solid var(--exam);border-radius:14px}
.ielts-report h4{font-size:14px;font-weight:400;color:var(--dark);margin:0 0 12px}
.ielts-rep-row{display:flex;justify-content:space-between;align-items:baseline;padding:7px 0;border-bottom:1px solid var(--line-soft);font-size:13px;color:var(--text-2)}
.ielts-rep-row span{color:var(--text-3);font-size:12px}
.ielts-rep-row b{color:var(--dark);font-weight:400}
.ielts-rep-comment{margin-top:10px;font-size:13px;color:var(--text-2)}
.ielts-rep-comment span{display:block;color:var(--text-3);font-size:12px;margin-bottom:4px}
.ielts-rep-comment p{margin:0;white-space:pre-wrap;line-height:1.7}
.tag-warn{background:rgba(214,118,96,.14);color:#a8553f;border:1px solid rgba(214,118,96,.4)}
.tag-over{background:#FDEBE8;color:var(--bad);border:1px solid rgba(214,118,96,.4);font-weight:400}

/* ================= 雅思机考界面（/t/ 公开页 · 双栏全屏 · 配色对齐系统后台） ================= */
.tx-shell{position:fixed;inset:0;z-index:60;display:flex;flex-direction:column;background:
    radial-gradient(circle at 10% 20%, rgba(101,198,196,.35) 0%, transparent 38%),
    radial-gradient(circle at 90% 12%, rgba(255,183,77,.26) 0%, transparent 32%),
    radial-gradient(circle at 72% 88%, rgba(129,199,132,.26) 0%, transparent 38%),
    linear-gradient(135deg, #eef2f6 0%, #e2e8f0 50%, #f0f4f8 100%);
  color:var(--text);font-family:var(--font);font-weight:300;overflow:hidden}
.tx-top{flex:none;display:flex;align-items:center;justify-content:space-between;height:56px;background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border);padding:0 24px;color:var(--dark)}
.tx-logo{font-size:16px;font-weight:400;letter-spacing:1.5px;color:var(--dark)}
.tx-logo span{margin-left:14px;font-size:10.5px;font-weight:300;letter-spacing:2.5px;text-transform:uppercase;color:var(--text-3)}
.tx-timer{display:flex;align-items:baseline;gap:10px}
.tx-timer-label{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--text-3)}
.tx-timer b{font-size:20px;font-weight:400;letter-spacing:2px;color:var(--accent-deep);font-variant-numeric:tabular-nums}
.tx-timer.tx-low b{color:var(--bad)}
.tx-cand{font-size:12px;font-weight:300;color:var(--text-3)}
.tx-tabs{flex:none;display:flex;gap:6px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-pill);padding:6px;margin:16px auto;width:fit-content;max-width:calc(100% - 64px);justify-content:center}
.tx-tab{appearance:none;border:none;background:transparent;color:var(--text-3);font:inherit;font-size:17px;font-weight:300;letter-spacing:1px;padding:13px 44px;cursor:pointer;border-radius:var(--r-pill);display:flex;flex-direction:row;align-items:baseline;justify-content:center;gap:12px;transition:.15s}
.tx-tab span{font-size:11px;letter-spacing:1.8px;text-transform:uppercase;color:var(--text-3)}
.tx-tab:hover{color:var(--text-2)}
.tx-tab.active{background:#fff;color:var(--text);box-shadow:0 2px 8px rgba(30,42,45,.12)}
.tx-tab.active span{color:var(--accent-deep)}
.tx-main{flex:1;min-height:0;display:flex;background:
    radial-gradient(circle at 10% 20%, rgba(101,198,196,.35) 0%, transparent 38%),
    radial-gradient(circle at 90% 12%, rgba(255,183,77,.26) 0%, transparent 32%),
    radial-gradient(circle at 72% 88%, rgba(129,199,132,.26) 0%, transparent 38%),
    linear-gradient(135deg, #eef2f6 0%, #e2e8f0 50%, #f0f4f8 100%)}
.tx-pane{display:none;flex:1;min-width:0}
.tx-pane.active{display:flex}
.tx-passage{flex:1.15;min-width:0;overflow-y:auto;background:var(--glass);border-right:1px solid var(--border);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);padding:28px 32px 60px}
.tx-ptitle{font-size:16px;font-weight:400;letter-spacing:.5px;color:var(--dark);margin:0 0 6px}
.tx-pnote{font-size:12px;font-weight:300;color:var(--text-3);margin:0 0 16px}
.tx-ptext{font-size:14px;font-weight:300;line-height:2.05;color:var(--text);white-space:pre-wrap;margin:0}
.tx-qcol{flex:1;min-width:0;overflow-y:auto;padding:28px 32px 140px;background:transparent}
.tx-qlabel{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--text-3);margin-bottom:4px}
.tx-q{margin-bottom:24px;scroll-margin-top:10px;border-radius:12px}
.tx-flash{animation:txflash 1.2s ease}
@keyframes txflash{0%,60%{background:var(--accent-soft)}100%{background:transparent}}
.tx-qrow{display:flex;gap:12px;align-items:flex-start}
.tx-qnum{flex:none;width:26px;height:26px;border-radius:50%;background:var(--accent-soft);color:var(--accent-deep);font-size:12.5px;font-weight:400;display:flex;align-items:center;justify-content:center;margin-top:1px}
.tx-qmain{min-width:0;flex:1}
.tx-stem{font-size:13.5px;font-weight:300;line-height:1.75;color:var(--text);margin-bottom:8px}
.tx-fillin{display:block;width:min(260px,100%);border:1px solid var(--line);border-radius:var(--r-input);background:var(--input-fill);padding:8px 12px;font:inherit;font-size:13.5px;font-weight:300;color:var(--text);outline:none;transition:.15s}
.tx-fillin:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.tx-opts{display:flex;flex-direction:column;gap:5px;margin-top:2px}
.tx-opt{display:flex;align-items:center;gap:10px;width:fit-content;font-size:13px;font-weight:300;color:var(--text);cursor:pointer;padding:6px 12px;border-radius:9px;transition:.15s}
.tx-opt:hover{background:var(--accent-soft)}
.tx-opt input{position:absolute;opacity:0;pointer-events:none}
.tx-dot{flex:none;width:18px;height:18px;border-radius:50%;border:1.5px solid var(--text-3);background:var(--surface);transition:.15s}
.tx-opt.sel .tx-dot{border-color:var(--accent);background:var(--accent);box-shadow:inset 0 0 0 3.5px var(--surface)}
.tx-opt.sel{color:var(--dark)}
.tx-otxt b{font-weight:400;color:var(--dark)}
.tx-wcol{flex:1;min-width:0;overflow-y:auto;padding:28px 32px 80px;background:transparent}
.tx-wtask{background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:20px 24px;margin-bottom:14px;box-shadow:var(--shadow-card);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.tx-wtask p{font-size:14px;font-weight:300;line-height:1.9;color:var(--text);white-space:pre-wrap;margin:6px 0 0}
.tx-area{display:block;width:100%;min-height:300px;border:1px solid var(--line);border-radius:var(--r-input);background:var(--input-fill);padding:16px 18px;font:inherit;font-size:13.5px;font-weight:300;line-height:1.8;color:var(--text);outline:none;resize:vertical;transition:.15s}
.tx-area:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.tx-words{margin:6px 2px 0;font-size:11.5px;letter-spacing:.5px;color:var(--text-3);text-align:right}
.tx-bottom{flex:none;display:flex;align-items:center;gap:20px;background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--border);padding:10px 24px}
.tx-nav{display:flex;gap:6px;flex-wrap:wrap;flex:1}
.tx-nbtn{width:30px;height:30px;border-radius:var(--r-pill);border:1px solid var(--line);background:var(--surface);font:inherit;font-size:12px;font-weight:300;cursor:pointer;color:var(--text-3);transition:.15s;box-shadow:0 1px 4px rgba(30,42,45,.06)}
.tx-nbtn:hover{border-color:var(--accent);color:var(--accent-deep)}
.tx-nbtn.done{background:var(--accent);border-color:var(--accent);color:#fff}
.tx-submit{flex:none;border:none;border-radius:var(--r-pill);background:var(--dark);color:#fff;font:inherit;font-size:13.5px;font-weight:400;letter-spacing:.5px;padding:10px 26px;cursor:pointer;transition:.15s;box-shadow:0 8px 22px rgba(31,42,45,.22)}
.tx-submit:hover{background:var(--accent-deep)}
.tx-mask{position:fixed;inset:0;z-index:70;background:rgba(31,42,45,.32);display:flex;align-items:center;justify-content:center;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.tx-mask.hidden{display:none}
.tx-confirm{width:min(480px,90vw);background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:28px 30px;box-shadow:var(--shadow-card);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.tx-confirm h3{font-size:16px;font-weight:400;color:var(--dark);margin:0 0 10px}
.tx-confirm p{font-size:13.5px;font-weight:300;line-height:1.8;color:var(--text);margin:0 0 8px}
.tx-confirm-note{font-size:12px !important;color:var(--text-3) !important}
.tx-confirm-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
.tx-btn-ghost{border:1px solid var(--border);background:var(--glass);border-radius:var(--r-pill);padding:9px 20px;font:inherit;font-size:13px;font-weight:300;color:var(--text-2);cursor:pointer;transition:.15s;box-shadow:var(--shadow-sm)}
.tx-btn-ghost:hover{border-color:var(--accent);color:var(--accent-deep)}
.tx-btn-primary{border:none;border-radius:var(--r-pill);background:var(--dark);color:#fff;padding:9px 24px;font:inherit;font-size:13px;font-weight:400;cursor:pointer;transition:.15s}
.tx-btn-primary:hover{background:var(--accent-deep)}
.tx-done{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:
    radial-gradient(circle at 10% 20%, rgba(101,198,196,.35) 0%, transparent 38%),
    radial-gradient(circle at 90% 12%, rgba(255,183,77,.26) 0%, transparent 32%),
    radial-gradient(circle at 72% 88%, rgba(129,199,132,.26) 0%, transparent 38%),
    linear-gradient(135deg, #eef2f6 0%, #e2e8f0 50%, #f0f4f8 100%);
  font-family:var(--font)}
.tx-done-card{width:min(520px,90vw);background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:44px 40px;text-align:center;box-shadow:var(--shadow-card);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.tx-done-check{width:56px;height:56px;margin:0 auto 18px;border-radius:50%;background:var(--accent);color:#fff;font-size:26px;display:flex;align-items:center;justify-content:center}
.tx-done-card h2{font-size:20px;font-weight:400;letter-spacing:1px;color:var(--dark);margin:0 0 14px}
.tx-done-score{font-size:14px;font-weight:300;color:var(--text);margin:0 0 8px}
.tx-done-score b{color:var(--exam);font-weight:400;font-size:17px}
.tx-done-card .muted{font-size:12.5px}
.tx-done-brand{margin-top:22px;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--text-3)}
/* —— 机考 · 官方 notes 填空 / TFNG 题组头 —— */
.tx-qhead{font-size:15px;font-weight:400;color:var(--dark);margin:6px 0 4px}
.tx-qinst{font-size:13.5px;font-weight:300;line-height:1.8;color:var(--text-2);margin:0 0 26px}
.tx-notes{background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);padding:22px 26px;margin-bottom:28px;box-shadow:var(--shadow-card);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.tx-notes-title{text-align:center;font-size:15.5px;font-weight:400;letter-spacing:.3px;color:var(--dark);margin-bottom:14px}
.tx-ngroup{margin-bottom:14px}
.tx-ngroup:last-child{margin-bottom:0}
.tx-ngroup-h{font-size:13.5px;font-weight:400;color:var(--dark);margin-bottom:6px}
.tx-ngroup ul{list-style:none;padding-left:6px;margin:0;display:flex;flex-direction:column;gap:10px}
.tx-ngroup li{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:13.5px;font-weight:300;line-height:1.8;color:var(--text)}
.tx-ngroup li::before{content:'•';flex:none;color:var(--text-2);font-size:14px;line-height:1}
.tx-ngroup li.tx-eg::before{content:none}
.tx-qno{flex:none;font-size:13px;font-weight:400;color:var(--accent-deep);letter-spacing:.3px}
.tx-fill-inline{display:inline-block;width:150px;border:none;border-bottom:1.5px solid var(--accent);background:var(--surface);border-radius:6px 6px 0 0;padding:5px 10px;font:inherit;font-size:13px;font-weight:300;color:var(--dark);outline:none;text-align:center;transition:.15s}
.tx-fill-inline:focus{background:var(--accent-soft);border-color:var(--accent)}
/* —— 机考 · 写作左右分栏 —— */
.tx-pane-col{flex-direction:column;overflow-y:auto;padding:24px 28px 60px;background:transparent;gap:24px}
.tx-wsplit{display:flex;gap:0;min-height:520px;background:var(--glass);border:1px solid var(--border);border-radius:var(--r-card);overflow:hidden;box-shadow:var(--shadow-card);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.tx-wleft{flex:0 0 42%;max-width:42%;padding:28px 30px;border-right:1px solid var(--line-soft);overflow-y:auto}
.tx-wtitle{font-size:16px;font-weight:400;letter-spacing:1px;color:var(--dark);margin-bottom:14px}
.tx-winst{font-size:13px;font-weight:300;line-height:1.8;color:var(--text);margin:0 0 10px}
.tx-wbox{border:1.5px solid var(--exam-line);border-radius:8px;padding:16px 18px;font-size:13.5px;font-weight:400;font-style:italic;line-height:1.9;color:var(--exam-deep);background:var(--exam-soft);margin:4px 0 12px;white-space:pre-wrap}
.tx-wrest{color:var(--text-3);font-size:12.5px}
.tx-wright{flex:1;min-width:0;display:flex;flex-direction:column;padding:20px 24px}
.tx-wright .tx-area{flex:1;min-height:380px;resize:none}
.tx-wfoot{display:flex;justify-content:space-between;align-items:center;margin-top:8px}
.tx-wfoot .tx-words{text-align:left}
/* —— 机考 · 底部 Part 标签 —— */
.tx-part{flex:none;font-size:13px;font-weight:400;color:var(--text-3);padding-right:14px;border-right:1px solid var(--line-soft);margin-right:6px}
/* —— 机考 · 听力模块（音频播放条 + 分段面板 + 地图题） —— */
.tx-vol{display:flex;align-items:center;gap:8px;color:var(--text-2)}
.tx-vol input[type=range]{width:88px;accent-color:var(--accent);height:3px}
.tx-pane[data-pane="listening"]{flex-direction:column}
.tx-l-player{flex:none;display:flex;align-items:center;gap:14px;background:var(--glass);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);border-bottom:1px solid var(--border);padding:10px 24px}
.tx-play{flex:none;border:none;border-radius:999px;background:var(--dark);color:#fff;font:inherit;font-size:12.5px;font-weight:400;letter-spacing:.4px;padding:8px 20px;cursor:pointer;transition:.15s}
.tx-play:hover:not(:disabled){background:var(--accent-deep)}
.tx-play:disabled{opacity:.55;cursor:default}
.tx-track{flex:1;min-width:120px;height:5px;border-radius:3px;background:var(--input-fill);overflow:hidden}
.tx-track-fill{height:100%;width:0;border-radius:3px;background:var(--accent);transition:width .3s linear}
.tx-ptime{flex:none;font-size:12px;color:var(--text-2);font-variant-numeric:tabular-nums;min-width:40px}
.tx-l-hint{flex:none;font-size:11.5px;color:var(--text-3);letter-spacing:.3px}
.tx-l-scroll{flex:1;min-height:0;overflow-y:auto;padding:26px 32px 120px}
.tx-l-panel{display:none;max-width:880px;margin:0 auto}
.tx-l-panel.active{display:block}
.tx-l-secname{font-size:17px;font-weight:400;letter-spacing:1px;color:var(--dark);margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid var(--line-soft)}
.tx-l-txt{color:var(--text)}
.tx-l-eg{display:inline-block;min-width:120px;border-bottom:1px dotted var(--text-3);color:var(--text-3);font-style:italic;text-align:center;padding:0 10px}
.tx-mapwrap{display:flex;gap:24px;align-items:flex-start;background:var(--glass);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);border:1px solid var(--border);border-radius:var(--r-card);padding:20px 24px;margin-bottom:20px;box-shadow:var(--shadow-card)}
.tx-mapimg{flex:0 0 46%;max-width:46%}
.tx-mapimg img{display:block;width:100%;height:auto;border-radius:10px;border:1px solid var(--border)}
.tx-mapqs{flex:1;min-width:0}
.tx-maptitle{font-size:15.5px;font-weight:400;letter-spacing:.3px;color:var(--dark);text-align:center;margin-bottom:14px}
.tx-mapin{display:inline-block;width:64px;border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:6px 10px;font:inherit;font-size:13.5px;font-weight:300;letter-spacing:2px;color:var(--dark);outline:none;text-align:center;text-transform:uppercase;transition:.15s}
.tx-mapin:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.tx-nbtn.tx-nlock{opacity:.35;cursor:not-allowed}

/* mini 浓缩卷 · 首页（三部分总览 + 断点续做说明） */
.tx-intro{min-height:100vh;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:18px;padding:48px 24px;background:var(--bg-top)}
.tx-intro .tx-logo{margin-bottom:6px}
.tx-intro-h{font-size:34px;font-weight:300;letter-spacing:.5px;color:var(--dark);margin:0}
.tx-intro-sub{margin:0;color:var(--text-3);font-size:14px}
.tx-partlist{width:min(520px,92vw);display:flex;flex-direction:column;gap:10px;margin-top:8px}
.tx-partrow{display:flex;align-items:center;justify-content:space-between;gap:16px;background:var(--glass);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);border:1px solid var(--border);border-radius:var(--r-card);padding:16px 20px;box-shadow:var(--shadow-card)}
.tx-partrow.isdone{opacity:.62}
.tx-partname{font-size:16px;font-weight:300;color:var(--dark);display:flex;align-items:center;gap:10px}
.tx-partok{font-size:12px;color:var(--accent-deep);background:var(--accent-soft);border-radius:999px;padding:2px 10px}
.tx-partmeta{font-size:13px;color:var(--text-3);font-weight:300}
.tx-intro-note{max-width:520px;text-align:center;font-size:13px;line-height:1.8;color:var(--text-3);margin:4px 0 0}
.tx-intro-go{margin-top:10px}
/* —— 机考 · 高亮 / 笔记（与系统后台视觉一致） —— */
.tx-hl{background:rgba(101,198,196,.45);color:var(--dark);border-radius:2px;cursor:pointer;transition:.12s;box-shadow:0 0 0 .5px rgba(63,169,160,.35)}
.tx-hl:hover{background:rgba(101,198,196,.62)}
.tx-note{background:var(--exam-soft);color:var(--exam-deep);border-bottom:1.5px dotted var(--exam);border-radius:2px;cursor:pointer}
.tx-selbar{position:fixed;z-index:95;display:flex;gap:6px;background:var(--glass);border:1px solid var(--border);border-radius:12px;padding:8px 12px;box-shadow:0 10px 28px rgba(30,42,45,.18);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.tx-selbar button{appearance:none;border:none;background:transparent;color:var(--text-2);font:inherit;font-size:11px;font-weight:300;letter-spacing:.3px;padding:5px 14px;border-radius:8px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:4px;transition:.15s}
.tx-selbar button svg{width:17px;height:17px}
.tx-selbar button:hover{background:var(--accent-soft);color:var(--accent-deep)}
.tx-notepop{position:fixed;z-index:96;width:min(280px,80vw);background:var(--glass);border:1px solid var(--border);border-radius:var(--r-md);padding:14px;box-shadow:var(--shadow-card);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}
.tx-notepop textarea{width:100%;min-height:72px;border:1px solid var(--line-soft);border-radius:10px;background:var(--input-fill);padding:8px 10px;font:inherit;font-size:12.5px;font-weight:300;color:var(--dark);outline:none;resize:vertical;margin-bottom:8px}
.tx-notepop .tx-np-actions{display:flex;justify-content:flex-end;gap:8px}
.tx-notetip{position:fixed;z-index:96;max-width:280px;background:var(--dark);color:#fff;border-radius:10px;padding:10px 12px;font-size:12.5px;font-weight:300;line-height:1.6;box-shadow:0 10px 28px rgba(30,42,45,.25)}
.tx-notetip .tx-tip-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px}
.tx-notetip .tx-tip-label{font-size:10px;letter-spacing:1.2px;text-transform:uppercase;opacity:.65}
.tx-notetip .tx-tip-del{appearance:none;border:none;background:transparent;color:#fff;opacity:.75;font:inherit;font-size:11px;cursor:pointer;padding:2px 6px;border-radius:6px}
.tx-notetip .tx-tip-del:hover{opacity:1;background:rgba(255,255,255,.14)}
.tx-done-lines{line-height:2.1}
.tx-done-cheer{color:var(--accent-deep) !important}
@media (max-width:900px){
  .tx-pane.active{flex-direction:column}
  .tx-passage{flex:none;max-height:45%;border-right:none;border-bottom:1px solid var(--line-soft)}
  .tx-cand{display:none}
}

/* —— 排课 · 学员「不可排课日」提醒（独立警示色，非品牌系统） —— */
.wg-col-blocked{position:relative;background:rgba(224,120,110,.10);box-shadow:inset 0 0 0 2px rgba(224,120,110,.32)}
.wg-col-blocked::after{content:'不可排课';position:absolute;top:4px;right:6px;font-size:10px;font-weight:300;color:#C2533B;background:rgba(224,120,110,.16);padding:1px 6px;border-radius:8px;pointer-events:none}
.mc-blocked{background:rgba(224,120,110,.10);box-shadow:inset 0 0 0 2px rgba(224,120,110,.30)}
.mc-blocked .mc-num{color:#C2533B}
.mc-blocked-tag{margin-top:4px;font-size:10px;line-height:1.35;color:#C2533B;background:rgba(224,120,110,.18);padding:2px 5px;border-radius:5px;pointer-events:none}
.mk-remark{margin-top:4px;font-size:10px;line-height:1.35;color:#3C635C;background:rgba(107,164,156,.14);padding:2px 5px;border-radius:5px;pointer-events:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.unavail-pop{position:fixed;z-index:9999;width:244px;background:#fff;border:1px solid #E0786E;border-radius:10px;box-shadow:0 14px 34px rgba(70,45,35,.20);padding:13px 15px;font-family:inherit}
.unavail-pop .up-title{font-size:13px;color:#C2533B;font-weight:400;margin-bottom:9px}
.unavail-pop .up-chk{display:flex;align-items:flex-start;gap:8px;font-size:13px;line-height:1.5;color:#2C3531;font-weight:300;margin-bottom:9px;cursor:pointer}
.unavail-pop .up-chk input[type="checkbox"]{width:16px;height:16px;min-width:16px;flex:0 0 auto;appearance:auto;-webkit-appearance:auto;padding:0;margin:1px 0 0;border:1px solid #C9C2B4;border-radius:4px;background:#fff;box-shadow:none;backdrop-filter:none;accent-color:#C2533B;cursor:pointer}
.unavail-pop .up-note{width:100%;height:54px;border:1px solid #E0D9CC;border-radius:6px;padding:6px 8px;font-family:inherit;font-size:13px;font-weight:300;color:#2C3531;resize:none;outline:none}
.unavail-pop .up-note:focus{border-color:#E0786E}
/* 日常备注：弹窗时间段行 + 月/周视图胶囊（香槟金浅底，非课程色系；不进全部学员/家长课表） */
.unavail-pop .up-time{display:flex;align-items:center;gap:6px;margin:-3px 0 9px;padding-left:24px}
.unavail-pop .up-time.off{display:none}
.unavail-pop .up-time input[type="time"]{flex:1;min-width:0;border:1px solid #E0D9CC;border-radius:6px;padding:4px 6px;font-family:inherit;font-size:12px;font-weight:300;color:#2C3531;background:#fff;outline:none}
.unavail-pop .up-time input[type="time"]:focus{border-color:#C4A35A}
.unavail-pop .up-time-sep{font-size:12px;color:#8a8375}
.unavail-pop .up-time-hint{font-size:10px;color:#a29a89;white-space:nowrap}
.mchip.daynote{background:rgba(196,163,90,.16);color:#7A612C;cursor:pointer;position:relative}
.wg-note-card{position:absolute;left:4px;right:4px;z-index:3;font-size:11px;font-weight:400;line-height:1.3;padding:3px 8px;border-radius:6px;background:rgba(196,163,90,.18);color:#7A612C;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;box-shadow:0 1px 3px rgba(60,50,20,.08);cursor:grab}
/* 日常备注：完成态 = 与正课同款浅灰底 + 居中划线 */
.mchip.daynote.done,.wg-note-card.done{background:#E2E0D8;color:#5a6268;text-decoration:line-through;text-decoration-color:#9aa0a6}
.wg-note-card.done{display:flex;flex-direction:column;justify-content:center;text-align:center;cursor:default}
/* 备注卡角按钮：右上复制 / 左上删（悬停浮现，与正课同款） */
.note-del-btn{position:absolute;top:3px;left:4px;z-index:6;font-size:10px;font-weight:300;line-height:1;padding:3px 7px;border:none;border-radius:8px;background:rgba(255,255,255,.85);color:var(--bad);cursor:pointer;opacity:0;transition:opacity .15s;touch-action:none}
.wg-note-card:hover .lesson-copy-btn,.wg-note-card:hover .note-del-btn{opacity:1}
.mchip.daynote .note-copy-btn,.mchip.daynote .note-del-btn{font-size:9px;padding:1px 4px;top:2px;border-radius:5px}
.mchip.daynote .note-copy-btn{right:2px;background:rgba(255,255,255,.9);color:var(--accent-deep);cursor:grab}
.mchip.daynote .note-del-btn{left:2px}
.mchip.daynote:hover .note-copy-btn,.mchip.daynote:hover .note-del-btn{opacity:1}
.mchip.dragging{opacity:.4}
/* 补：正课卡「删」按钮基础样式（此前缺失，渲染为浏览器裸按钮） */
.lesson .lesson-del-btn{position:absolute;top:3px;left:4px;z-index:6;font-size:10px;font-weight:300;line-height:1;padding:3px 7px;border:none;border-radius:8px;background:rgba(255,255,255,.85);color:var(--bad);cursor:pointer;opacity:0;transition:opacity .15s;touch-action:none}
.lesson:hover .lesson-del-btn{opacity:1}
.unavail-pop .up-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:11px}

/* ===== 学情档案（课销台账下方，2026-10-01） ===== */
#lq-panel .lq-wrap{padding:18px 20px 20px}
.lq-empty{padding:26px 0;text-align:center;font-size:13px;font-weight:300;color:var(--text-3)}
.lq-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.lq-stat{background:var(--card);border:1px solid var(--border);border-radius:var(--r-card);padding:16px 18px}
.lq-stat .lbl{font-size:12px;font-weight:300;color:var(--text-3);margin-bottom:8px}
.lq-stat .val{font-size:30px;font-weight:300;color:var(--text);line-height:1.1}
.lq-stat .val small{font-size:13px;color:var(--text-2);margin-left:2px}
.lq-stat .sub{font-size:12px;font-weight:300;color:var(--text-2);margin-top:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lq-sec-title{margin:20px 0 10px;font-size:13px;font-weight:300;letter-spacing:.5px;color:var(--text-2)}
.lq-timeline{position:relative;padding-left:4px}
.lq-tl-item{position:relative;display:flex;gap:12px;padding:0 0 16px 18px}
.lq-tl-item:last-child{padding-bottom:2px}
.lq-tl-item::before{content:'';position:absolute;left:5px;top:14px;bottom:-2px;width:1px;background:var(--border)}
.lq-tl-item:last-child::before{display:none}
.lq-tl-dot{position:absolute;left:0;top:5px;width:11px;height:11px;border-radius:50%;background:var(--accent-soft);border:2px solid var(--accent-deep)}
.lq-tl-main{flex:1;min-width:0}
.lq-tl-top{display:flex;align-items:baseline;gap:10px}
.lq-tl-title{font-size:14px;font-weight:400;color:var(--text)}
.lq-tl-score{font-size:13px;font-weight:400;color:var(--accent-deep)}
.lq-tl-meta{font-size:12px;font-weight:300;color:var(--text-3);margin-top:2px}
.lq-tl-sum{font-size:13px;font-weight:300;color:var(--text-2);margin-top:5px;line-height:1.55}
.lq-latest{margin-top:20px;background:var(--card);border:1px solid var(--border);border-radius:var(--r-card);padding:16px 18px}
.lq-latest-head{font-size:14px;font-weight:400;color:var(--text);margin-bottom:10px}
.lq-latest-date{margin-left:10px;font-size:12px;font-weight:300;color:var(--text-3)}
.lq-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.lq-chip{font-size:12px;font-weight:300;color:var(--text-2);background:var(--accent-soft);color:var(--accent-deep);border-radius:var(--r-pill);padding:3px 11px}
.lq-chip b{font-weight:400;margin-left:3px}
.lq-chip.err{background:rgba(196,163,90,.14);color:#8A6E4B}
.lq-latest-sum{margin-top:10px;font-size:13px;font-weight:300;color:var(--text-2);line-height:1.6}
@media (max-width:900px){.lq-stats{grid-template-columns:repeat(2,1fr)}}

/* ========== 模考报告（2026-10-03）：入口弹窗表单 + 全屏报告弹层 ========== */
.mrf-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.sd-row-report{white-space:nowrap}

.mr-mask{position:fixed;inset:0;z-index:1300;background:rgba(31,42,45,.42);backdrop-filter:blur(6px);
  display:flex;align-items:center;justify-content:center;padding:26px}
.mr-mask.hidden{display:none}
.mr-page{width:min(880px,96vw);max-height:92vh;display:flex;flex-direction:column;border-radius:28px;overflow:hidden;
  background:linear-gradient(180deg,#eef2f6 0%,#e2e8f0 52%,#f0f4f8 100%);box-shadow:0 30px 80px rgba(31,42,45,.35)}
.mr-topbar{display:flex;justify-content:space-between;align-items:center;padding:15px 24px 11px}
.mr-topbar-t{font-size:16px;font-weight:300;letter-spacing:.5px;color:#1f2026}
.mr-close{border:none;background:rgba(255,255,255,.85);width:32px;height:32px;border-radius:50%;
  font-size:18px;line-height:1;cursor:pointer;color:#4a4d57}
.mr-close:hover{background:#fff}
.mr-scroll{overflow:auto;padding:0 24px 22px;flex:1}
.mr-report{width:760px;max-width:100%;margin:0 auto;border-radius:24px;padding:26px 22px;
  background:rgba(255,255,255,.55);box-shadow:0 14px 36px rgba(31,42,45,.10)}

.mr-brand{display:flex;align-items:center;gap:14px;margin-bottom:16px}
.mr-brand img{height:34px;filter:brightness(0) contrast(1.3)}
.mr-brand-t{display:flex;flex-direction:column;gap:2px}
.mr-brand-t b{font-size:15.5px;font-weight:300;letter-spacing:.3px;color:#1f2026}
.mr-brand-t span{font-size:8.5px;letter-spacing:1.8px;color:#7a7e89}
.mr-brand-r{margin-left:auto;font-size:9px;letter-spacing:1.8px;color:#7a7e89}

.mr-meta{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:10px}
.mr-mpill{background:rgba(255,255,255,.9);border-radius:999px;padding:6px 13px;font-size:12px;font-weight:300;color:#4a4d57}
.mr-topics{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:18px}
.mr-topics-label{font-size:12px;font-weight:300;color:#7a7e89}
.mr-topic{background:rgba(196,163,90,.14);color:#9a7b35;border-radius:999px;padding:6px 12px;font-size:12px;font-weight:300}

/* 2026-10-11 改版：提分放卡片右上角（绝对定位），左侧只留总分+OVERALL+入学总分 */
.mr-hero{position:relative;display:flex;gap:26px;background:rgba(255,255,255,.78);border:1px solid rgba(255,255,255,.9);
  border-radius:24px;padding:24px 22px;margin-bottom:18px;box-shadow:0 14px 36px rgba(31,42,45,.10)}
.mr-hero-l{width:170px;flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center}
.mr-hero-score{font-size:58px;font-weight:300;color:#3FA9A0;line-height:1.1}
.mr-hero-note{font-size:9.5px;letter-spacing:2px;color:#7a7e89;margin-top:8px;text-align:center}
.mr-hero-r{position:absolute;top:22px;right:24px;display:flex;align-items:baseline;min-width:0}
.mr-hero-pills{display:flex;gap:8px;flex-wrap:wrap}
.mr-hpill{border-radius:999px;padding:5px 13px;font-size:12px;font-weight:300}
.mr-hpill.up{background:rgba(101,198,196,.16);color:#3FA9A0}
.mr-hpill.gap{background:rgba(196,163,90,.14);color:#9a7b35;border:1px solid rgba(196,163,90,.35)}
.mr-hero-cmt{margin:0;font-size:12.5px;font-weight:300;line-height:1.7;color:#4a4d57}

.mr-sec{font-size:17px;font-weight:300;letter-spacing:.6px;color:#1f2026;margin:2px 0 12px}
.mr-sec span{font-size:9.5px;letter-spacing:2.2px;color:#7a7e89;margin-left:10px}

.mr-skill{background:rgba(255,255,255,.78);border:1px solid rgba(255,255,255,.9);border-radius:24px;
  padding:22px;margin-bottom:14px;box-shadow:0 14px 36px rgba(31,42,45,.10)}
.mr-sk-head{display:flex;justify-content:space-between;align-items:center}
.mr-sk-name{font-size:15px;font-weight:300;color:#1f2026}
.mr-sk-delta{font-size:12px;font-weight:300}
.mr-sk-delta.up{color:#3FA9A0}.mr-sk-delta.warn{color:#b07a2e}.mr-sk-delta.flat{color:#98a29c}
.mr-sk-score{font-size:34px;font-weight:300;color:#1f2026;margin-top:8px;line-height:1.2}
.mr-sk-score small{font-size:11.5px;font-weight:300;color:#7a7e89;margin-left:12px}
.mr-bar{margin-top:10px}
.mr-bar-track{position:relative;height:8px;border-radius:4px;background:rgba(101,198,196,.15)}
.mr-bar-fill{height:8px;border-radius:4px;background:linear-gradient(90deg,#8fd4d2,#65c6c4)}
.mr-bar-target{position:absolute;top:-4px;width:2px;height:16px;border-radius:1px;background:#C4A35A}
.mr-bar-lr{display:flex;justify-content:space-between;font-size:11px;font-weight:300;color:#7a7e89;margin-top:8px}
.mr-chips{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}
.mr-chip{border-radius:999px;padding:4px 12px;font-size:11px;font-weight:300;background:rgba(101,198,196,.10);color:#4a4d57}
.mr-chip.good{background:rgba(63,169,160,.16);color:#3FA9A0}
.mr-chip.warn{background:rgba(196,163,90,.14);color:#9a7b35}
.mr-cmt{margin-top:14px;padding-top:14px;border-top:1px dashed rgba(91,102,96,.25);
  font-size:12.5px;font-weight:300;line-height:1.7;color:#4a4d57}
.mr-cmt b{font-weight:400;color:#1f2026}

.mr-foot{display:flex;justify-content:space-between;margin-top:16px;padding-top:14px;
  border-top:1px dashed rgba(91,102,96,.25);font-size:11px;font-weight:300;color:#7a7e89}
.mr-actions{display:flex;gap:12px;justify-content:center;padding:14px 24px 20px}
.mr-btn-dark{background:#1f2026;color:#fff;border:none;border-radius:999px;padding:12px 30px;
  font-size:14px;font-weight:300;letter-spacing:.5px;cursor:pointer}
.mr-btn-dark:hover{background:#2c2f36}
.mr-btn-dark:disabled{opacity:.6;cursor:default}
@media (max-width:820px){.mr-hero{flex-direction:column}.mr-hero-l{width:auto}}

/* ===== 模考报告 2026-10-11：历史报告弹窗 / 报告层新增按钮 / 学情模考趋势 =====
   全部复用既有主题变量（--accent / --accent-deep / --accent-soft / --card / --text / --line），
   不新增色系、不用左侧竖色条，与现有设计系统一致。 */
.sd-card-h-act{display:flex;gap:8px;align-items:center}

/* 报告层：保存到学情按钮（成功后转绿勾） */
.mr-btn-save{background:var(--accent-deep);color:#fff}
.mr-btn-save:hover{filter:brightness(1.06)}
.mr-btn-save:disabled{background:var(--accent-soft);color:var(--accent-deep);opacity:1;cursor:default}

/* 历史报告弹窗 */
.mr-hist-loading,.mr-hist-empty{padding:20px 4px;text-align:center;color:rgba(31,32,38,.5);font-size:13px;font-weight:300}
.mr-hist{display:flex;flex-direction:column;gap:8px}
.mr-hist-item{display:flex;justify-content:space-between;align-items:center;gap:12px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-card);padding:11px 14px}
.mr-hist-l{display:flex;flex-direction:column;gap:2px;min-width:0}
.mr-hist-l b{font-size:13px;font-weight:400;color:var(--text)}
.mr-hist-l span{font-size:12px;font-weight:300;color:rgba(31,32,38,.6);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mr-hist-r{display:flex;align-items:center;gap:8px;flex-shrink:0}
.mr-hist-ov{font-size:14px;font-weight:400;color:var(--accent-deep)}
.mr-hist-tag{font-size:11px;font-weight:300;padding:2px 8px;border-radius:999px;
  background:rgba(31,32,38,.05);color:rgba(31,32,38,.6)}
.mr-hist-tag.saved{background:var(--accent-soft);color:var(--accent-deep)}
.mr-hist-pv{font-size:11px;font-weight:300;color:rgba(31,32,38,.45)}

/* 学情 · 模考成绩趋势（方案 C） */
.lq-mock-trend{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:10px;margin-top:8px}
.lq-mt-row{background:var(--card);border:1px solid var(--line);border-radius:var(--r-card);padding:11px 13px 9px}
.lq-mt-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.lq-mt-name{font-size:13px;font-weight:400;color:var(--text)}
.lq-mt-delta{font-size:12px;font-weight:300}
.lq-mt-up{color:#2e9e6b}
.lq-mt-down{color:#c2603f}
.lq-mt-flat{color:rgba(31,32,38,.5)}
.lq-mt-meta{font-size:11px;font-weight:300;color:rgba(31,32,38,.55);margin-top:2px}
.lq-mt-spark{display:block;width:100%;height:34px;margin-top:7px;overflow:visible}

/* ===== 模考报告 v2（2026-10-11）：提分显示 + 编辑模式 =====
   提分标签字号与被替代的分数对齐：总分 58px / 四科单项 34px。 */
/* 提分（Elvis 2026-10-11 定稿）：
   ① 提分放卡片右上角；② 带向上箭头；③ 数字与总分同字号、同一基线（对齐蓝线） */
.mr-hero{position:relative}
.mr-hero-r{position:absolute;top:22px;right:24px;display:flex;align-items:baseline;min-width:0}
.mr-hero-gain{display:inline-flex;align-items:baseline;gap:8px;white-space:nowrap}
.mr-hg-label{font-size:14px;font-weight:300;color:rgba(31,32,38,.55);letter-spacing:.4px}
/* 数字与总分同字号 58px；line-height 1 + items:baseline 保证基线齐平 */
.mr-hg-num{font-size:58px;font-weight:300;color:#3FA9A0;line-height:1;letter-spacing:-1px;
  display:inline-flex;align-items:baseline;gap:2px}
.mr-hg-arrow{font-size:44px;font-weight:300;line-height:1;margin-right:2px}
.mr-hg-unit{font-size:22px;font-weight:300;letter-spacing:0}
.mr-hg-flat{font-size:20px;font-weight:300;color:#7a7e89}
/* 入学总分（OVERALL 下方） */
.mr-hero-base{font-size:12px;font-weight:300;color:rgba(31,32,38,.55);margin-top:4px;letter-spacing:.3px}
/* 四科单项提分：箭头 + 数字，与单项分同字号 34px，同基线 */
.mr-gain{font-size:34px;font-weight:300;line-height:1;white-space:nowrap;letter-spacing:-.5px;
  display:inline-flex;align-items:baseline}
.mr-g-arrow{font-size:26px;font-weight:300;line-height:1;margin-right:2px}
.mr-g-unit{font-size:14px;font-weight:300;letter-spacing:0}
.mr-gain.up{color:#2e9e6b}
.mr-gain.down{color:#c2603f}
.mr-gain.flat{color:#7a7e89;font-size:18px}
@media (max-width:820px){
  .mr-hero-r{position:static;justify-content:flex-end;margin-top:8px}
  .mr-hg-num{font-size:40px}
  .mr-hg-arrow{font-size:30px}
  .mr-hg-unit{font-size:16px}
  .mr-gain{font-size:24px}
  .mr-g-arrow{font-size:19px}
  .mr-g-unit{font-size:12px}
}

/* 编辑模式：报告正文可编辑态 */
.mr-scroll.editing .mr-sk-score,
.mr-scroll.editing .mr-hero-score,
.mr-scroll.editing .mr-sk-name,
.mr-scroll.editing .mr-sk-delta,
.mr-scroll.editing .mr-chip,
.mr-scroll.editing .mr-cmt,
.mr-scroll.editing .mr-hero-gain{
  outline:1px dashed rgba(101,198,196,.55);outline-offset:2px;border-radius:4px;cursor:text;
  min-width:18px;display:inline-block}
.mr-scroll.editing .mr-cmt,
.mr-scroll.editing .mr-sk-name{display:block}
.mr-scroll.editing .mr-hero-score,
.mr-scroll.editing .mr-hero-gain{outline-offset:4px}
.mr-btn-done{background:var(--accent-deep);color:#fff}
.mr-btn-done:hover{filter:brightness(1.06)}
.mr-scroll.editing{background:rgba(101,198,196,.04);border-radius:14px}

/* 学情·模考四科明细行（2026-10-11） */
.lq-mrows{display:flex;flex-direction:column;gap:10px;margin:2px 0 4px}
.lq-mrow{padding-bottom:8px;border-bottom:1px solid var(--line)}
.lq-mrow:last-child{border-bottom:none;padding-bottom:0}
.lq-mrow-h{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:5px}
.lq-mrow-n{font-size:13px;font-weight:400;color:var(--text)}
.lq-mrow-s{font-size:15px;font-weight:400;color:var(--accent-deep)}

/* ===== 学情档案（2026-10-14 一比一复刻 demo「学情档案-终版」）=====
   四板块各自独立卡片（.lq-card，规格照 ERP .panel）。
   结构 / 间距 / 交互 / 配色逐条照 demo；类名加作用域避免污染全局同名类
   （.ic 限 .kr-name、.tag 限 .subj、知识主题推进用 .lqseg*避开排课的 .seg）。 */

/* ---- 卡片外壳：上下留白（30px → 60px 翻倍），内容不贴边 ---- */
.lq-stack{display:flex;flex-direction:column;gap:20px}
.lq-card{position:relative;background:var(--glass);border:1px solid var(--border);
  border-radius:var(--r-card);padding:60px 32px;margin:0;
  box-shadow:var(--shadow-card);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px)}

/* ---- 标题：极简、无英文小标 ---- */
.phead{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:22px}
.ptitle{font-size:17px;letter-spacing:-.2px}
.psub{font-size:11.5px;color:var(--text-3);margin-top:2px}

/* ---- ① 指标表：四行完全同字号；hover 整行放大 + 白底 + 双层投影（transform 不引起重排）---- */
.kr-head,.krow{display:grid;grid-template-columns:118px 1fr;align-items:baseline;gap:0 22px}
.kr-head{padding:0 10px 7px;border-bottom:1px solid var(--line)}
.kr-head .kr .k{font-size:10.5px;color:var(--text-3);white-space:nowrap}
.krows{display:flex;flex-direction:column;margin:-6px -10px -2px}
.krow{position:relative;padding:9px 10px;border-bottom:1px solid var(--line);
  border-radius:12px;cursor:default;
  transition:transform .32s cubic-bezier(.2,.9,.3,1),background-color .32s ease,box-shadow .32s ease}
.krow:last-child{border-bottom:none}
.krow:hover{transform:scale(1.032);z-index:2;background:rgba(255,255,255,.62);
  box-shadow:0 8px 22px rgba(31,42,45,.10),0 2px 6px rgba(31,42,45,.05)}
.kr-name{display:flex;align-items:baseline;gap:9px;min-width:0;transition:color .32s ease}
.kr-name .ic{width:20px;height:20px;align-self:center;stroke:currentColor;stroke-width:1.7;fill:none;
  stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;
  transition:stroke-width .32s ease,transform .32s cubic-bezier(.2,.9,.3,1)}
.kr-name span{font-size:14.5px;font-weight:400;color:var(--text);white-space:nowrap;transition:color .32s ease}
.kr-cells{display:grid;grid-template-columns:repeat(4,1fr);gap:0 16px;min-width:0}
.kr{display:flex;flex-direction:column;min-width:0}
.kr .v{font-size:21px;line-height:1.2;letter-spacing:-.3px;color:var(--text);white-space:nowrap;
  transition:color .32s ease}
.kr .v.up{color:var(--accent-deep)}
.kr .v small{font-size:10.5px;letter-spacing:0;margin-left:1px}
.krow:hover .kr-name .ic{stroke-width:2;transform:translateX(2px)}
.krow:hover .kr .v{color:var(--text)}
.krow:hover .kr .v.up{color:var(--accent-deep);filter:brightness(.92)}
@media (prefers-reduced-motion:reduce){
  .krow,.kr-name .ic{transition:none}
  .krow:hover{transform:none}
}

/* ---- ② 成绩趋势：5/10 次开关（标题行右侧）+ 两张折线 ---- */
.lq-card .switch{display:flex;background:rgba(255,255,255,.5);border:1px solid var(--border);
  border-radius:var(--r-pill);padding:3px}
.lq-card .sw{font-size:11.5px;padding:5px 15px;border-radius:var(--r-pill);cursor:pointer;
  color:var(--text-2);transition:.2s;user-select:none}
.lq-card .sw.on{background:#fff;color:var(--accent-deep);box-shadow:0 1px 6px rgba(30,30,60,.09)}
.grp{margin-bottom:22px}
.grp:last-child{margin-bottom:0}
.grp-h{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}
.grp-t{font-size:13px}
.grp-s{font-size:10.5px;color:var(--text-3)}
.chartbox{position:relative;background:rgba(255,255,255,.3);border:1px solid var(--border);
  border-radius:24px;padding:10px 8px 4px}
.chart{width:100%;height:auto;display:block}
.dotg{fill:rgba(30,42,45,.11)}
.axl{font-size:10px;fill:var(--text-3)}
.serie{fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.dt{stroke:#fff;stroke-width:1.8;cursor:pointer}
.bl{stroke:var(--text-3);stroke-width:1px;stroke-dasharray:4px 4px;opacity:.65}
.blab{font-size:10px;fill:var(--text-3)}
.band{fill:var(--accent);opacity:.05}
.guide{stroke-width:1px;stroke-dasharray:3px 3px;opacity:0;transition:opacity .15s}
.chartbox .tip{position:absolute;pointer-events:none;opacity:0;transition:opacity .15s;
  background:var(--glass);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  border:1px solid var(--border);border-radius:12px;padding:8px 11px;font-size:11px;
  box-shadow:var(--shadow-sm);white-space:nowrap;z-index:9;line-height:1.7}
.chartbox .tip .tt{font-weight:400;color:var(--text)}
.chartbox .tip .tr{display:flex;align-items:center;gap:6px;color:var(--text-2)}
.chartbox .tip .tr i{width:7px;height:7px;border-radius:50%;display:inline-block}
.legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:14px;font-size:11px;color:var(--text-2)}
.legend i{display:inline-block;width:14px;height:2.5px;border-radius:2px;vertical-align:middle;margin-right:6px}
.legend .note{margin-left:auto;color:var(--text-3)}

/* ---- ③ 学习旅程（左时间线 / 右能力提及）---- */
.split{display:grid;grid-template-columns:minmax(0,0.86fr) minmax(0,1.14fr);gap:28px;align-items:start}
.sp-r{padding-left:34px;border-left:1px solid var(--line);min-width:0;
  --fb-soft:rgba(101,198,196,.16); --fb-line:rgba(101,198,196,.34);
  --fb-chip:rgba(101,198,196,.20); --fb-ink:#2E8C8A;
  --fb-lite:#7FCFCB; --fb-faint:rgba(127,207,203,.30)}
.sp-sub{margin-top:26px}

/* 时间线。竖线由每个 .tl-i 自带一段（首条青→淡、末条淡→透明），
   这样容器独立滚动时竖线跟着内容走，不会在滚动区底部被截断。 */
.tl{position:relative;padding-left:26px}
.tl-i{position:relative;padding-bottom:20px}
.tl-i:last-child{padding-bottom:0}
.tl-i:before{content:"";position:absolute;left:-19px;top:0;bottom:0;width:1px;
  background:rgba(101,196,196,.14)}
.tl-i:first-child:before{top:10px;
  background:linear-gradient(180deg,var(--accent) 0%,rgba(101,196,196,.14) 100%)}
.tl-i:last-child:not(:first-child):before{bottom:auto;height:22px;
  background:linear-gradient(180deg,rgba(101,196,196,.14) 0%,rgba(101,196,196,0) 100%)}
.tl-i:only-child:before{top:10px;bottom:auto;height:22px;
  background:linear-gradient(180deg,var(--accent) 0%,rgba(101,196,196,0) 100%)}
/* 左栏内容超高时独立滚动（标题「学习旅程」不跟着走） */
.sp-l .tl{max-height:calc(100vh - 300px);overflow-y:auto;overflow-x:hidden;
  padding-right:14px;margin-right:-6px;scrollbar-width:thin;
  scrollbar-color:rgba(31,42,45,.2) transparent}
.sp-l .tl::-webkit-scrollbar{width:5px}
.sp-l .tl::-webkit-scrollbar-track{background:transparent}
.sp-l .tl::-webkit-scrollbar-thumb{background:rgba(31,42,45,.16);border-radius:3px}
.sp-l .tl:hover::-webkit-scrollbar-thumb{background:rgba(31,42,45,.3)}
.tl-d{position:absolute;left:-25px;top:4px;width:13px;height:13px;border-radius:50%;
  background:#fff;border:2px solid var(--accent-deep);box-shadow:0 0 0 3px rgba(255,255,255,.5)}
.tl-d.plan{background:#fff;border-style:dashed;border-color:var(--text-3);box-shadow:none}
.tl-t{font-size:13.5px}
.tl-date{font-size:11px;color:var(--text-3);margin-left:9px}
.bdg{font-size:10px;padding:2px 9px;border-radius:var(--r-pill);margin-left:8px;letter-spacing:.2px}
.bdg.done{background:rgba(60,181,137,.14);color:#2E8C7A}
.bdg.now{background:var(--accent-soft);color:var(--accent-deep)}
.bdg.plan{background:rgba(30,42,45,.05);color:var(--text-3)}
.tl-s{font-size:11.5px;color:var(--text-2);margin-top:5px;line-height:1.65}
.tl-s b{color:var(--accent-deep);font-weight:400}

/* 科目切换器：色相 = 科目身份，四等分铺满；选中只加科目淡底 + shadow-sm */
.subj-sw{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:14px}
.ss{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:12px;cursor:pointer;
  min-width:0;border:none;background:var(--fb-bg);
  transition:transform .26s cubic-bezier(.2,.9,.3,1),background-color .26s ease,box-shadow .26s ease}
.ss:hover{transform:translateY(-1px)}
.ss[data-on="1"]{box-shadow:var(--shadow-sm)}
.ss[data-on="1"]:hover{box-shadow:var(--shadow-card)}
.ss-ic{width:24px;height:24px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  background:var(--fb-chip2);color:var(--fb-ink2);flex:none}
.ss-ic svg{width:14px;height:14px;stroke:currentColor;stroke-width:1.8;fill:none;
  stroke-linecap:round;stroke-linejoin:round}
.ss-n{font-size:12.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;min-width:0;transition:color .26s ease}
.ss[data-on="1"] .ss-n{color:var(--text)}
.ss[data-on="1"] .ss-ic{stroke-width:2}
.ss[data-on="0"]{--fb-bg:transparent;--fb-chip2:rgba(31,32,38,.05);--fb-ink2:var(--text-3)}
.ss[data-on="1"]{--fb-bg:var(--fb-soft);--fb-chip2:var(--fb-chip);--fb-ink2:var(--fb-ink)}

/* 摘要卡：与科目胶囊同规格（无描边 + shadow-sm + 毛玻璃） */
.subj-sum{display:flex;flex-direction:column;gap:9px;padding:18px 20px;
  border-radius:var(--r-card);margin-bottom:18px;border:none;background:var(--fb-soft);
  box-shadow:var(--shadow-sm);-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px)}
.ss-sum-r{display:flex;align-items:flex-start;gap:9px}
.ss-sum-ic{width:19px;height:19px;border-radius:6px;flex:none;display:flex;align-items:center;
  justify-content:center;background:var(--fb-chip);color:var(--fb-ink);margin-top:1px}
.ss-sum-ic svg{width:11.5px;height:11.5px;stroke:currentColor;stroke-width:2.1;fill:none;
  stroke-linecap:round;stroke-linejoin:round}
.ss-sum-v{font-size:12px;line-height:1.6;color:var(--text-2);min-width:0}
.ss-sum-v b{font-weight:400;color:var(--text)}

/* 能力提及矩阵：同色系三档（深=待改进 / 浅=获表扬 / 极浅=无待改进） */
.mx{display:flex;flex-direction:column;gap:1px;margin:0 -8px;min-width:0}
.mx-hd{display:flex;align-items:flex-end;gap:4px;margin-bottom:7px;padding:0 8px}
.mx-corner{width:62px;flex:none}
.mx-ticks{display:flex;gap:2px;flex:1;position:relative;height:14px;min-width:0}
.mx-tick{flex:1 1 0;min-width:0;position:relative}
.mx-t{font-size:9.5px;color:var(--text-3);white-space:nowrap;transform:translateX(-50%);
  font-variant-numeric:tabular-nums}
.mx-row{display:flex;align-items:center;gap:4px;padding:4px 8px;border-radius:8px;
  transition:background-color .3s ease}
.mx-row:hover{background:var(--glass)}
.mx-name{width:62px;flex:none;font-size:11.5px;color:var(--text);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px;letter-spacing:.1px}
.mx-dot{width:4.5px;height:4.5px;border-radius:50%;flex:none;background:var(--fb-ink);opacity:.5}
.mx-cells{display:flex;gap:2px;flex:1;min-width:0}
.mx-c{flex:1 1 0;min-width:0;height:14px;border-radius:2px;background:var(--fb-faint);
  transition:transform .22s cubic-bezier(.2,.9,.3,1),box-shadow .22s ease;cursor:default}
.mx-c.iss{background:var(--fb-ink)}
.mx-c.str{background:var(--fb-lite)}
.mx-c:hover{transform:scale(1.55);box-shadow:0 2px 8px rgba(31,42,45,.20);
  position:relative;z-index:3;filter:brightness(1.04)}

/* 图例：裸内容，不做卡片 */
.mx-note{display:flex;align-items:center;gap:22px;margin-top:14px;padding:4px 2px;flex-wrap:wrap}
.mx-note span{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--text-3);white-space:nowrap}
.mx-note i{width:10px;height:10px;border-radius:2.5px;display:block;flex:none}

/* 知识主题推进（.lqseg* 避开排课页的 .seg 分段控件） */
.lqseg{display:flex;gap:14px;align-items:stretch;margin-top:4px}
.lqseg-g{display:flex;flex-direction:column;gap:8px;min-width:0}
.lqseg-b{display:flex;gap:2px}
.lqseg-u{height:17px;border-radius:3px;background:var(--fb-ink);opacity:.34;transition:opacity .2s ease}
.lqseg-g:hover .lqseg-u{opacity:.62}
.lqseg-l{display:flex;flex-direction:column;gap:3px;font-size:11px;min-width:0}
.lqseg-l b{font-weight:400;color:var(--text);white-space:nowrap}
.lqseg-l span{color:var(--text-3);display:flex;gap:6px;align-items:baseline;white-space:nowrap}
.lqseg-l em{font-style:normal;color:var(--fb-ink);flex:none}
.lqseg-note{font-size:11.5px;color:var(--text-3);margin:16px 0 0;line-height:1.65;
  padding:14px 18px;border-radius:24px;background:var(--glass);border:none;
  box-shadow:var(--shadow-sm);-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px)}

/* ---- ④ 最近一次模考：折叠条 + 四科明细 ---- */
.foldbtn{width:100%;display:flex;align-items:center;gap:14px;cursor:pointer;
  background:rgba(255,255,255,.44);border:1px solid var(--border);border-radius:18px;
  padding:15px 18px;text-align:left;transition:.2s;font-family:inherit}
.foldbtn:hover{background:rgba(255,255,255,.68)}
.foldbtn .total{display:flex;align-items:baseline;gap:8px;flex:none;padding-right:20px;
  border-right:1px solid var(--line)}
.foldbtn .total-l{font-size:11px;color:var(--text-3)}
.foldbtn .total-v{font-size:29px;letter-spacing:-1px;color:var(--accent-deep);line-height:1}
.lq-card .chips{display:flex;gap:8px;flex-wrap:wrap;flex:1;min-width:0}
.lq-card .chip{display:flex;align-items:baseline;gap:5px;font-size:12px;padding:4px 13px;
  border-radius:var(--r-pill);background:rgba(255,255,255,.7)}
.lq-card .chip b{font-size:15px;font-weight:400;color:var(--accent-deep)}
.lq-card .toggle{display:inline-flex;align-items:center;gap:5px;flex:none;padding:5px 13px;
  border-radius:var(--r-pill);background:rgba(255,255,255,.66);border:1px solid var(--border);
  font-size:11.5px;color:var(--text-2);transition:.2s}
.foldbtn:hover .toggle{background:#fff;color:var(--accent-deep);border-color:var(--accent-soft)}
.lq-card .toggle-a{transition:transform .25s;transform:rotate(0deg)}
.foldbtn.open .toggle-a{transform:rotate(180deg)}
.foldbody{max-height:0;overflow:hidden;transition:max-height .35s cubic-bezier(.4,0,.2,1)}
.foldbody.in{max-height:640px;margin-top:16px}
.subj{padding:15px 0;border-top:1px solid var(--line)}
.subj:first-child{border-top:none;padding-top:2px}
.subj-h{display:flex;justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:9px}
.subj-n{font-size:13px;flex:none}
.subj-s{font-size:19px;color:var(--accent-deep);text-align:right}
.subj-s small{font-size:11px;color:var(--text-3);margin-left:7px;font-weight:300}
.tags{display:flex;gap:6px;flex-wrap:wrap}
.subj .tag{font-size:10.5px;padding:3px 10px;border-radius:var(--r-pill);border:none;
  white-space:nowrap;display:inline-block}
.subj .tag.g{background:rgba(60,181,137,.13);color:#2E8C6B}
.subj .tag.w{background:rgba(217,107,90,.13);color:#B85A4A}
.subj-c{font-size:11.5px;color:var(--text-2);margin-top:9px;line-height:1.65}

/* 空态 */
.fb-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  padding:32px 20px;border-radius:24px;color:var(--text-3);background:var(--glass);
  border:1px dashed var(--line);font-size:12px;text-align:center;line-height:1.6}
.fb-empty svg{stroke:currentColor;opacity:.5}

@media (max-width:1000px){
  .split{grid-template-columns:1fr;gap:26px}
  .sp-r{padding-left:0;border-left:none;padding-top:26px;border-top:1px solid var(--line)}
}
@media (max-width:900px){
  .lq-card{padding:20px}
  .kr-head,.krow{grid-template-columns:1fr;gap:10px}
  .kr-cells{grid-template-columns:repeat(2,1fr);gap:10px 16px}
  .subj-sw{grid-template-columns:repeat(2,minmax(0,1fr))}
  .lqseg{flex-wrap:wrap}
  .legend .note{margin-left:0}
}
