:root{
  --red:#C8102E;
  --red-soft:#FBE9EC;
  --ink:#1F2430;
  --gray:#6B7280;
  --line:#ECECF0;
  --bg:#F7F8FA;
  --card:#FFFFFF;
  --shadow:0 1px 3px rgba(20,24,40,.06),0 8px 24px rgba(20,24,40,.04);
  --radius:14px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);line-height:1.6;
}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}

/* ---------- 顶栏 ---------- */
.topbar{
  position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:32px;
  padding:14px 32px;background:rgba(255,255,255,.92);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);
}
.brand{display:flex;align-items:center;gap:10px;cursor:pointer}
.logo{
  width:32px;height:32px;border-radius:8px;background:var(--red);color:#fff;
  display:grid;place-items:center;font-weight:700;font-size:16px;
}
.brand-name{font-weight:700;font-size:17px;letter-spacing:.5px}
.topnav{display:flex;gap:26px;margin-left:8px}
.topnav a{color:var(--gray);font-size:15px;padding:4px 2px;position:relative}
.topnav a.active{color:var(--red);font-weight:600}
.topnav a.active::after{
  content:"";position:absolute;left:0;right:0;bottom:-15px;height:2px;background:var(--red);
}
.me{margin-left:auto;background:var(--red-soft);color:var(--red);font-weight:600;
  padding:6px 14px;border-radius:999px;font-size:14px}

/* ---------- 容器 ---------- */
.app{max-width:1120px;margin:0 auto;padding:32px 24px 64px}
.foot{text-align:center;color:var(--gray);font-size:12px;padding:24px;border-top:1px solid var(--line)}

/* ---------- 区块标题 ---------- */
.h-row{display:flex;align-items:baseline;justify-content:space-between;margin:8px 0 18px}
.h-row h2{font-size:22px;font-weight:700}
.h-row .sub{color:var(--gray);font-size:14px}
.sec{margin-bottom:40px}

/* ---------- 首页 KPI ---------- */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:36px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:20px;box-shadow:var(--shadow)}
.kpi .n{font-size:28px;font-weight:800;color:var(--red)}
.kpi .l{color:var(--gray);font-size:13px;margin-top:4px}

/* ---------- 课程卡 ---------- */
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;box-shadow:var(--shadow);transition:transform .15s ease,box-shadow .15s ease;cursor:pointer}
.card:hover{transform:translateY(-3px);box-shadow:0 12px 30px rgba(20,24,40,.10)}
.card .cover{aspect-ratio:16/9;object-fit:cover;background:var(--red-soft)}
.card .body{padding:16px 18px 18px}
.card .tag{display:inline-block;font-size:12px;color:var(--red);background:var(--red-soft);
  padding:2px 10px;border-radius:999px;margin-bottom:8px}
.card h3{font-size:16px;font-weight:700;margin-bottom:6px}
.card .meta{color:var(--gray);font-size:13px;display:flex;gap:14px;flex-wrap:wrap}
.card .progress{margin-top:12px;height:6px;background:var(--line);border-radius:6px;overflow:hidden}
.card .progress > i{display:block;height:100%;background:var(--red)}
.card .prow{display:flex;justify-content:space-between;font-size:12px;color:var(--gray);margin-top:6px}

/* ---------- 课程详情 ---------- */
.detail-head{display:grid;grid-template-columns:1.4fr 1fr;gap:28px;align-items:start}
.detail-head img{width:100%;border-radius:var(--radius);object-fit:cover;aspect-ratio:16/9}
.badge{display:inline-block;font-size:12px;color:var(--red);background:var(--red-soft);
  padding:3px 12px;border-radius:999px;margin-right:8px}
.detail-head h1{font-size:26px;margin:10px 0}
.detail-head .summary{color:var(--gray);margin:12px 0}
.detail-head .infos{display:flex;gap:18px;color:var(--gray);font-size:14px;flex-wrap:wrap;margin-top:8px}
.detail-head .infos b{color:var(--ink)}
.btn{display:inline-block;border:none;cursor:pointer;font-size:15px;font-weight:600;
  padding:11px 22px;border-radius:10px;background:var(--red);color:#fff;transition:opacity .15s}
.btn:hover{opacity:.9}
.btn.ghost{background:var(--card);color:var(--red);border:1px solid var(--red)}

/* 章节列表 */
.lessons{margin-top:28px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:8px 4px;box-shadow:var(--shadow)}
.lesson{border-bottom:1px solid var(--line)}
.lesson:last-child{border-bottom:none}
.lesson summary{padding:16px 20px;cursor:pointer;font-weight:600;display:flex;align-items:center;gap:12px;list-style:none}
.lesson summary::-webkit-details-marker{display:none}
.lesson .dot{width:22px;height:22px;border-radius:50%;border:2px solid var(--line);display:grid;place-items:center;font-size:12px;color:var(--gray);flex:none}
.lesson.done .dot{background:var(--red);border-color:var(--red);color:#fff}
.lesson .dur{margin-left:auto;color:var(--gray);font-size:13px}
.lesson .panel{padding:4px 20px 20px;color:var(--ink)}
.lesson .panel .done-btn{margin-top:10px}
.lesson .panel img{border-radius:10px;margin:12px 0}
.lesson .panel .cap{color:var(--gray);font-size:13px;margin:-4px 0 12px;text-align:center}

/* 混排视频 */
.vid-wrap{position:relative;margin:12px 0;border-radius:10px;overflow:hidden;background:#000}
.vid-wrap video{width:100%;display:block}

/* ---------- 学习页 ---------- */
.learn-wrap{display:grid;grid-template-columns:300px 1fr;gap:28px}
.learn-side{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);align-self:start;position:sticky;top:88px}
.learn-side h4{font-size:15px;margin-bottom:10px}
.learn-side .li{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;cursor:pointer;color:var(--gray);font-size:14px}
.learn-side .li:hover{background:var(--bg)}
.learn-side .li.active{color:var(--red);font-weight:600;background:var(--red-soft)}
.learn-side .li .d{width:16px;height:16px;border-radius:50%;border:2px solid var(--line);flex:none}
.learn-side .li.done .d{background:var(--red);border-color:var(--red)}
.learn-main{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:26px;box-shadow:var(--shadow)}
.learn-main img{border-radius:10px;margin:14px 0}
.learn-main .cap{color:var(--gray);font-size:13px;margin:-6px 0 14px;text-align:center}
.learn-main h2{font-size:21px;margin-bottom:14px}
.learn-nav{display:flex;justify-content:space-between;margin-top:24px;gap:12px}

/* ---------- 测验 ---------- */
.exam{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:28px;box-shadow:var(--shadow);max-width:760px;margin:0 auto}
.exam h2{font-size:22px;margin-bottom:6px}
.exam .desc{color:var(--gray);margin-bottom:20px}
.q{margin-bottom:24px;padding-bottom:20px;border-bottom:1px solid var(--line)}
.q .qt{font-weight:600;margin-bottom:12px}
.opt{display:flex;align-items:center;gap:10px;padding:11px 14px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px;cursor:pointer;transition:border-color .15s}
.opt:hover{border-color:var(--red)}
.opt.sel{border-color:var(--red);background:var(--red-soft)}
.opt.correct{border-color:#1A9E5F;background:#E8F7EF}
.opt.wrong{border-color:var(--red);background:var(--red-soft)}
.opt .mk{margin-left:auto;font-weight:700}
.result{text-align:center;padding:24px}
.result .score{font-size:48px;font-weight:800;color:var(--red)}
.result .pass{color:#1A9E5F;font-weight:700;margin-top:6px}
.result .fail{color:var(--red);font-weight:700;margin-top:6px}

/* ---------- 我的学习 ---------- */
.cert{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);margin-bottom:16px;display:flex;align-items:center;gap:16px}
.cert .seal{width:56px;height:56px;border-radius:50%;background:var(--red-soft);color:var(--red);display:grid;place-items:center;font-size:24px;flex:none}
.cert.done .seal{background:var(--red);color:#fff}
.empty{background:var(--card);border:1px dashed var(--line);border-radius:var(--radius);padding:40px;text-align:center;color:var(--gray)}

/* ---------- 响应式 ---------- */
@media(max-width:880px){
  .topbar{padding:12px 16px;gap:14px}
  .topnav{gap:16px;font-size:14px}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .grid{grid-template-columns:repeat(2,1fr)}
  .detail-head{grid-template-columns:1fr}
  .learn-wrap{grid-template-columns:1fr}
  .learn-side{position:static}
}
@media(max-width:560px){
  .app{padding:24px 16px 56px}
  .grid{grid-template-columns:1fr}
  .topnav{overflow-x:auto;white-space:nowrap}
  .topnav a{font-size:13px}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .h-row{flex-wrap:wrap;gap:6px;align-items:baseline}
  .h-row h2{font-size:20px}
  .composer{padding:14px}
  .cm-submit-row{flex-wrap:wrap}
  .cm-submit-row #pTags{width:100%;flex:1 1 100%}
  .cm-checkin{flex-direction:column;align-items:flex-start;gap:10px}
  .cm-checkin .btn{width:100%}
  .circle-bar button{padding:7px 12px;font-size:13px}
  .detail-head h1,.learn-main h1,.article h1{font-size:22px}
}

/* ---------- 提示条 / 看板进度 ---------- */
.note{background:var(--red-soft);border:1px solid #F6D3DA;border-radius:10px;padding:14px 16px;color:#9b1530;font-size:14px;margin-bottom:24px}
.note b{color:var(--red)}
.rows{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:8px 20px;box-shadow:var(--shadow)}
.row{display:grid;grid-template-columns:1fr 2fr 60px;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--line)}
.row:last-child{border-bottom:none}
.row .rl{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .rbar{height:8px;background:var(--line);border-radius:6px;overflow:hidden}
.row .rbar > i{display:block;height:100%;background:var(--red)}
.row .rp{color:var(--gray);font-size:13px;text-align:right}

/* ---------- 社区 ---------- */
.composer{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);margin-bottom:8px}
.cm-checkin{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.cm-submit-row{display:flex;gap:10px;align-items:center;margin-top:10px}
.circle-bar{display:flex;gap:10px;flex-wrap:wrap;margin:6px 0 18px}
.circle-bar button{padding:8px 16px;font-size:14px}

/* ---------- 右上角 / 登录态 ---------- */
.me{display:flex;align-items:center;gap:8px;margin-left:auto}
.me-user{font-weight:600;color:var(--red)}
.me-pts{font-size:12px;color:var(--gray);background:#fff;border:1px solid var(--line);border-radius:999px;padding:2px 10px}
.me-btn{border:none;cursor:pointer;font-size:13px;font-weight:600;padding:6px 14px;border-radius:999px;background:var(--red);color:#fff}
.me-btn:hover{opacity:.9}

/* ---------- 登录浮层 ---------- */
.auth-overlay{display:none;position:fixed;inset:0;background:rgba(20,24,40,.45);z-index:60;align-items:center;justify-content:center}
.auth-box{width:380px;max-width:92vw;background:#fff;border-radius:16px;padding:24px 26px 26px;box-shadow:0 20px 60px rgba(0,0,0,.25);position:relative}
.auth-close{position:absolute;top:12px;right:14px;border:none;background:none;font-size:22px;color:var(--gray);cursor:pointer;line-height:1}
.auth-tabs{display:flex;gap:8px;margin-bottom:18px}
.auth-tab{flex:1;border:1px solid var(--line);background:#fff;color:var(--gray);font-size:14px;font-weight:600;padding:9px 0;border-radius:10px;cursor:pointer}
.auth-tab.active{background:var(--red);color:#fff;border-color:var(--red)}
.auth-input{width:100%;padding:11px 14px;margin-bottom:12px;border:1px solid var(--line);border-radius:10px;font-size:15px;font-family:inherit}
.auth-input:focus{outline:none;border-color:var(--red)}
.auth-hint{color:var(--red);font-size:13px;margin-top:10px;min-height:18px}

/* ---------- 学习地图锁定 ---------- */
.lesson.locked > summary{color:var(--gray);opacity:.7}
.lesson.locked .dot{border-style:dashed}
