/* 学创空间 StudyHub 样式 —— macOS Liquid Glass (v42) */
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
  --primary: #0071e3;          /* Apple 系统蓝（按钮/主色） */
  --primary-dark: #0077ed;
  --primary-light: rgba(0, 113, 227, .10);
  --accent: #ff9f0a;
  --danger: #d70015;
  --ok: #248a3d;
  --text: #1d1d1f;             /* Apple 标题黑 */
  --text-2: #565661;           /* Apple 正文灰 */
  --line: rgba(60, 70, 110, .13);
  --bg: rgba(255, 255, 255, .45);   /* 玻璃浅底 */
  --card: rgba(255, 255, 255, .62); /* 液态玻璃卡片 */
  --radius: 22px;
  --shadow-card: 0 4px 24px rgba(31, 41, 90, .08), inset 0 1px 0 rgba(255, 255, 255, .85);
  --shadow-hover: 0 16px 44px rgba(31, 41, 90, .16), inset 0 1px 0 rgba(255, 255, 255, .9);
  --ease: cubic-bezier(.25, .1, .25, 1);
}
html { -webkit-text-size-adjust: 100%; }
body { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Helvetica Neue", "Microsoft YaHei", sans-serif; color: var(--text); line-height: 1.6; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
  background:
    radial-gradient(1200px 800px at 88% -12%, rgba(86, 140, 255, .30), transparent 62%),
    radial-gradient(1000px 720px at -12% 18%, rgba(168, 136, 255, .24), transparent 62%),
    radial-gradient(960px 640px at 52% 112%, rgba(255, 150, 120, .20), transparent 62%),
    radial-gradient(720px 520px at 18% 88%, rgba(64, 196, 255, .16), transparent 60%),
    linear-gradient(180deg, #eef3fc 0%, #eaeefb 52%, #f1eefb 100%);
  background-attachment: fixed;
  min-height: 100vh;
}
.hidden { display: none !important; }
a { color: var(--primary); text-decoration: none; transition: color .2s var(--ease); }
button { font-family: inherit; cursor: pointer; }
input, select, textarea { font-family: inherit; font-size: 14px; }
::selection { background: rgba(0, 113, 227, .22); }

/* 顶栏（macOS 浮动玻璃导航舱） */
.topbar { position: sticky; top: 10px; z-index: 50; display: flex; align-items: center; gap: 18px; padding: 0 22px; height: 56px; width: calc(100% - 32px); max-width: 1148px; margin: 14px auto 0; border-radius: 24px;
  background: rgba(255, 255, 255, .58);
  -webkit-backdrop-filter: blur(28px) saturate(200%); backdrop-filter: blur(28px) saturate(200%);
  border: 1px solid rgba(255, 255, 255, .72);
  box-shadow: 0 8px 32px rgba(31, 41, 90, .13), inset 0 1px 0 rgba(255, 255, 255, .92);
}
.brand { display: flex; align-items: center; gap: 8px; font-size: 18px; font-weight: 600; letter-spacing: -.02em; color: var(--text); white-space: nowrap; }
.brand em { font-size: 12px; font-weight: 400; color: var(--text-2); font-style: normal; }
.brand-mark { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 9px; background: linear-gradient(135deg, #0a84ff, #6e5bf0); color: #fff; font-size: 14px; font-weight: 700; box-shadow: 0 3px 10px rgba(10, 96, 232, .38), inset 0 1px 0 rgba(255, 255, 255, .45); }
#nav { display: flex; gap: 4px; flex: 1; overflow-x: auto; }
#nav a { padding: 7px 15px; border-radius: 980px; color: var(--text-2); font-size: 14px; white-space: nowrap; transition: all .2s var(--ease); }
#nav a.active, #nav a:hover { color: var(--primary); background: rgba(255, 255, 255, .75); box-shadow: 0 1px 6px rgba(31, 41, 90, .10), inset 0 1px 0 rgba(255, 255, 255, .9); }
.user-box { display: flex; align-items: center; gap: 10px; white-space: nowrap; }
.user-name { font-size: 14px; color: var(--text); font-weight: 600; }
.user-name .admin-badge { font-size: 11px; background: linear-gradient(135deg, #ff9f0a, #ff6b22); color: #fff; border-radius: 980px; padding: 1px 8px; margin-left: 4px; }
.avatar { width: 32px; height: 32px; border-radius: 50%; background: rgba(255, 255, 255, .7); color: var(--primary); display: inline-flex; align-items: center; justify-content: center; font-weight: 700; box-shadow: 0 1px 6px rgba(31, 41, 90, .12); }

/* 布局 */
main { max-width: 1080px; margin: 0 auto; padding: 26px 20px 60px; }
.page-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; gap: 12px; flex-wrap: wrap; }
.page-head h2 { font-size: 22px; }
.sub-title { font-size: 15px; color: var(--text-2); margin: 22px 0 10px; font-weight: 600; }
.footer { text-align: center; color: var(--text-2); font-size: 12px; padding: 26px 0 34px; border-top: 1px solid var(--line); margin-top: 30px; }

/* 首页 */
.hero { text-align: center; padding: 64px 10px 44px; }
.hero h1 { font-size: 52px; font-weight: 800; letter-spacing: -.03em; line-height: 1.1; background: linear-gradient(120deg, #0a84ff 10%, #6e5bf0 55%, #e64980 100%); -webkit-background-clip: text; background-clip: text; color: transparent; filter: drop-shadow(0 6px 18px rgba(31, 41, 90, .18)); }
.hero p { color: var(--text-2); margin-top: 14px; max-width: 620px; margin-left: auto; margin-right: auto; font-size: 17px; }
.feature-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.feature-card { display: block; background: var(--card); border: 1px solid rgba(255, 255, 255, .68); border-radius: var(--radius); padding: 26px 24px; color: var(--text); box-shadow: var(--shadow-card); -webkit-backdrop-filter: blur(22px) saturate(180%); backdrop-filter: blur(22px) saturate(180%); transition: transform .3s var(--ease), box-shadow .3s var(--ease); }
.feature-card:hover { transform: translateY(-4px) scale(1.012); box-shadow: var(--shadow-hover); }
.fc-icon { font-size: 30px; }
.feature-card h3 { margin: 12px 0 6px; font-size: 18px; font-weight: 700; letter-spacing: -.01em; }
.feature-card p { font-size: 13px; color: var(--text-2); line-height: 1.65; }

/* 按钮 / 表单（液态玻璃按钮） */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: 1px solid transparent; border-radius: 980px; padding: 8px 18px; font-size: 14px; font-weight: 500; transition: all .2s var(--ease); -webkit-backdrop-filter: blur(12px) saturate(160%); backdrop-filter: blur(12px) saturate(160%); }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.btn:active { transform: scale(.97); }
.btn-primary { background: linear-gradient(180deg, #1e90ff, #0066d6); color: #fff; box-shadow: 0 4px 14px rgba(0, 113, 227, .35), inset 0 1px 0 rgba(255, 255, 255, .4); }
.btn-primary:hover { background: linear-gradient(180deg, #339cff, #0077ed); }
.btn-light { background: rgba(255, 255, 255, .6); color: var(--text); border-color: rgba(255, 255, 255, .8); box-shadow: 0 1px 6px rgba(31, 41, 90, .08), inset 0 1px 0 rgba(255, 255, 255, .85); }
.btn-light:hover { background: rgba(255, 255, 255, .85); color: var(--text); }
.btn-danger { background: rgba(255, 255, 255, .55); color: var(--danger); border-color: rgba(255, 218, 218, .9); }
.btn-danger:hover { background: rgba(255, 229, 229, .8); }
.btn-sm { padding: 4px 13px; font-size: 13px; }
.field { margin-bottom: 14px; }
.field label { display: block; font-size: 13px; color: var(--text-2); margin-bottom: 6px; font-weight: 500; }
.field input, .field select { width: 100%; padding: 10px 14px; border: 1px solid rgba(60, 70, 110, .16); border-radius: 13px; outline: none; background: rgba(255, 255, 255, .62); transition: border-color .2s, box-shadow .2s, background .2s; }
.field input:focus, .field select:focus { border-color: var(--primary); background: rgba(255, 255, 255, .9); box-shadow: 0 0 0 4px rgba(0, 113, 227, .14); }
.field-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.chk { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-2); cursor: pointer; }

/* 卡片 */
.card { background: var(--card); border: 1px solid rgba(255, 255, 255, .66); border-radius: var(--radius); padding: 20px; margin-bottom: 14px; -webkit-backdrop-filter: blur(22px) saturate(180%); backdrop-filter: blur(22px) saturate(180%); box-shadow: 0 4px 24px rgba(31, 41, 90, .08), inset 0 1px 0 rgba(255, 255, 255, .85); }
.muted { color: var(--text-2); font-size: 13px; }
.tag { display: inline-block; font-size: 12px; padding: 2px 9px; border-radius: 20px; background: var(--primary-light); color: var(--primary); margin-right: 6px; }
.tag-ok { background: #e6f6ea; color: var(--ok); }
.tag-warn { background: #fdf3e0; color: #b08000; }
.tag-err { background: #fdeaea; color: var(--danger); }

/* 脑图（仿百度脑图） */
.mm-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
.mm-item { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px 16px; }
.mm-item h4 { font-size: 15px; margin-bottom: 6px; }
.mm-item .mm-meta { font-size: 12px; color: var(--text-2); margin-bottom: 10px; }
.mm-item .mm-ops { display: flex; gap: 8px; flex-wrap: wrap; }
.mm-toolbar { background: #fff; border: 1px solid var(--line); border-radius: var(--radius) var(--radius) 0 0; }
.mm-tb-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 8px 12px; }
.mm-tb-row + .mm-tb-row { border-top: 1px solid #f0f2f7; }
.mm-sep { width: 1px; height: 22px; background: var(--line); margin: 0 4px; }
.mm-title-input { border: 1px solid transparent; border-radius: 8px; padding: 6px 10px; font-size: 15px; font-weight: 600; width: 180px; background: var(--bg); }
.mm-title-input:focus { outline: none; border-color: var(--primary); background: #fff; }
.mm-sel-label { font-size: 12px; color: var(--text-2); display: inline-flex; align-items: center; gap: 6px; }
.mm-sel-label select { border: 1px solid var(--line); border-radius: 7px; padding: 4px 8px; font-size: 13px; background: #fff; outline: none; }
.mm-sel-label select:focus { border-color: var(--primary); }
.mm-tb-right { margin-left: auto; display: inline-flex; align-items: center; gap: 10px; }
.mm-colors { display: inline-flex; gap: 5px; align-items: center; }
.mm-color-dot { width: 16px; height: 16px; border-radius: 50%; border: 2px solid #fff; box-shadow: 0 0 0 1px var(--line); cursor: pointer; }
.mm-color-dot.selected { box-shadow: 0 0 0 2px var(--primary); }
.mm-tip { font-size: 11px; color: var(--text-2); }
.mm-body { display: flex; height: calc(100vh - 250px); min-height: 440px; border: 1px solid var(--line); border-top: none; border-radius: 0 0 var(--radius) var(--radius); overflow: hidden; }
.mm-outline-panel { width: 300px; flex-shrink: 0; background: #fff; border-right: 1px solid var(--line); overflow-y: auto; padding: 10px 8px; }
.mm-canvas-wrap { position: relative; flex: 1; background: #fff; overflow: hidden; cursor: grab; }
.mm-canvas-wrap.panning { cursor: grabbing; }
#mm-svg { width: 100%; height: 100%; display: block; user-select: none; outline: none; }
.mm-hit rect, .mm-hit circle { cursor: pointer; }
.mm-hit text { pointer-events: none; }
.mm-sel-ring { pointer-events: none; }
.mm-edit-input { position: absolute; z-index: 10; border: 2px solid var(--primary); border-radius: 7px; padding: 4px 8px; font-size: 13px; outline: none; min-width: 60px; background: #fff; }
.mm-zoombar { position: absolute; right: 14px; bottom: 14px; display: flex; align-items: center; gap: 2px; background: #fff; border: 1px solid var(--line); border-radius: 10px; padding: 4px 6px; box-shadow: 0 4px 14px rgba(30,40,80,.12); z-index: 5; }
.mm-zoombar button { border: none; background: none; width: 28px; height: 26px; border-radius: 7px; font-size: 15px; color: var(--text); cursor: pointer; }
.mm-zoombar button:hover { background: var(--primary-light); color: var(--primary); }
.mm-zoombar span { font-size: 12px; color: var(--text-2); min-width: 42px; text-align: center; font-variant-numeric: tabular-nums; }
/* 大纲视图 */
.ol-row { display: flex; align-items: center; gap: 4px; padding: 3px 6px; border-radius: 7px; }
.ol-row:hover { background: var(--bg); }
.ol-row.active { background: var(--primary-light); }
.ol-toggle { border: none; background: none; cursor: pointer; color: var(--text-2); width: 20px; font-size: 12px; padding: 0; }
.ol-pri, .ol-prog { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 50%; color: #fff; font-size: 10px; font-style: normal; font-weight: 700; flex-shrink: 0; }
.ol-pri.p1 { background: #e03131; } .ol-pri.p2 { background: #e8590c; } .ol-pri.p3 { background: #f59f00; }
.ol-pri.p4 { background: #2f9e44; } .ol-pri.p5 { background: #0071e3; }
.ol-prog.g1 { background: #f59f00; } .ol-prog.g2 { background: #2f9e44; }
.ol-input { flex: 1; min-width: 0; border: 1px solid transparent; border-radius: 6px; padding: 4px 8px; font-size: 13px; background: transparent; outline: none; }
.ol-input:hover { border-color: var(--line); }
.ol-input:focus { border-color: var(--primary); background: #fff; }
.ol-input.ol-root { font-weight: 700; font-size: 14px; }
.ol-btn { border: none; background: none; cursor: pointer; color: var(--text-2); width: 22px; height: 22px; border-radius: 6px; font-size: 13px; padding: 0; flex-shrink: 0; }
.ol-btn:hover { background: var(--primary-light); color: var(--primary); }
.ol-btn.ol-del:hover { background: #fdeaea; color: var(--danger); }

/* 图表页 */
.charts-layout { display: grid; grid-template-columns: 360px 1fr; gap: 18px; align-items: start; }
.charts-panel, .charts-canvas-panel { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px; }
.chart-row { display: grid; grid-template-columns: 1.4fr 1fr .9fr 32px; gap: 8px; margin-bottom: 8px; }
.chart-row input { padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; outline: none; }
.chart-row input:focus { border-color: var(--primary); }
.chart-row .row-del { border: none; background: none; color: var(--danger); font-size: 16px; cursor: pointer; }
.charts-actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
#chart-canvas { width: 100%; border-radius: 8px; background: #fff; }

/* 校友卡 */
.alumni-grid { display: grid; grid-template-columns: 1fr 380px; gap: 18px; align-items: start; }
.acard { background: linear-gradient(135deg, #2b3a8f 0%, #4c46b8 60%, #6f42c8 100%); border-radius: 16px; color: #fff; padding: 26px; position: relative; overflow: hidden; }
.acard::after { content: ""; position: absolute; right: -60px; top: -60px; width: 200px; height: 200px; border-radius: 50%; background: rgba(255,255,255,.08); }
.acard-school { font-size: 13px; opacity: .85; letter-spacing: 2px; }
.acard-name { font-size: 26px; font-weight: 700; margin: 6px 0 2px; }
.acard-no { font-size: 14px; font-family: ui-monospace, Menlo, monospace; opacity: .9; }
.acard-meta { display: flex; gap: 18px; margin-top: 14px; font-size: 12px; opacity: .85; flex-wrap: wrap; }
.acard-qr { margin-top: 18px; background: rgba(255,255,255,.14); border-radius: 12px; padding: 14px; display: flex; gap: 14px; align-items: center; }
.acard-qr .qr-holder { background: #fff; padding: 8px; border-radius: 10px; line-height: 0; }
.acard-qr-info { font-size: 12px; line-height: 1.8; }
.acard-token { font-family: ui-monospace, Menlo, monospace; font-size: 18px; letter-spacing: 2px; }
.qr-countdown { font-variant-numeric: tabular-nums; }
.qr-progress { width: 120px; height: 5px; background: rgba(255,255,255,.25); border-radius: 3px; overflow: hidden; }
.qr-progress i { display: block; height: 100%; background: #ffd43b; border-radius: 3px; transition: width 1s linear; }
.verify-result { max-width: 460px; }

/* 论坛（仿贴吧） */
.board-list { display: grid; gap: 12px; }
.board-card { display: flex; align-items: center; gap: 16px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px 20px; color: var(--text); transition: box-shadow .15s; }
.board-card:hover { box-shadow: 0 8px 22px rgba(40,60,140,.08); }
.board-emblem { width: 52px; height: 52px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 22px; color: #fff; flex-shrink: 0; }
.be-pku { background: linear-gradient(135deg, #8c1515, #b3282d); }
.be-thu { background: linear-gradient(135deg, #6b3fa0, #8e5bc8); }
.be-scu { background: linear-gradient(135deg, #c89933, #e0b34d); }
.board-info { flex: 1; min-width: 0; }
.board-info h3 { font-size: 17px; }
.board-info .muted { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pager { display: flex; gap: 8px; margin-top: 16px; align-items: center; justify-content: center; flex-wrap: wrap; }
.pager-ellipsis { color: var(--text-2); padding: 0 2px; }

/* 贴吧式吧头 */
.tb-hero { margin-bottom: 14px; }
.tb-hero-inner { display: flex; align-items: center; gap: 18px; border-radius: var(--radius); padding: 22px 26px; color: #fff; }
.tb-hero-inner.bh-pku { background: linear-gradient(120deg, #8c1515, #b3282d 70%, #d05055); }
.tb-hero-inner.bh-thu { background: linear-gradient(120deg, #5c3596, #6b3fa0 70%, #8e5bc8); }
.tb-hero-inner.bh-scu { background: linear-gradient(120deg, #a87f22, #c89933 70%, #e0b34d); }
.tb-emblem { width: 64px; height: 64px; border-radius: 18px; background: rgba(255,255,255,.18); border: 2px solid rgba(255,255,255,.5); display: flex; align-items: center; justify-content: center; font-size: 30px; font-weight: 700; flex-shrink: 0; }
.tb-hero-info { flex: 1; min-width: 0; }
.tb-hero-info h2 { font-size: 24px; }
.tb-hero-sub { font-size: 13px; opacity: .92; margin-top: 4px; }
.tb-hero-sub b { font-size: 15px; }
.tb-hero .btn { background: #fff; color: #c22; border: none; }
.tb-hero-inner.bh-thu .btn { color: #6b3fa0; }
.tb-hero-inner.bh-scu .btn { color: #a87f22; }
.tb-hero .btn:hover { background: #fff; opacity: .88; }

/* 贴吧式帖子列表 */
.tb-thread-list { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; }
.tb-list-head { display: flex; align-items: center; gap: 12px; padding: 10px 18px; background: #f7f8fc; border-bottom: 1px solid var(--line); font-size: 12px; color: var(--text-2); }
.tb-thread { display: flex; align-items: center; gap: 12px; padding: 14px 18px; border-bottom: 1px solid #eef0f5; transition: background .12s; }
.tb-thread:last-child { border-bottom: none; }
.tb-thread:hover { background: #f8f9fd; }
.tb-col-ico { width: 28px; text-align: center; font-size: 17px; flex-shrink: 0; }
.tb-col-title { flex: 1; min-width: 0; }
.tb-list-head .tb-col-title { flex: 1; }
.tb-col-title a { color: #0066cc; font-size: 15.5px; font-weight: 500; }
.tb-col-title a:hover { color: #0077ed; text-decoration: underline; }
.tb-summary { font-size: 12.5px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-top: 3px; }
.tb-col-author { display: flex; align-items: center; gap: 8px; width: 150px; flex-shrink: 0; }
.tb-av { width: 30px; height: 30px; font-size: 13px; flex-shrink: 0; }
.tb-un { font-size: 13px; color: #0066cc; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-time { font-size: 11.5px; color: #9aa0ad; white-space: nowrap; }
.tb-col-count { width: 86px; flex-shrink: 0; text-align: center; display: flex; flex-direction: column; line-height: 1.3; }
.tb-col-count b { font-size: 16px; color: #0071e3; }
.tb-col-count span { font-size: 11.5px; color: #9aa0ad; }
.tb-col-last { width: 150px; flex-shrink: 0; overflow: hidden; }
.tb-empty { text-align: center; padding: 60px 20px; background: var(--card); border: 1px dashed var(--line); border-radius: var(--radius); }
.tb-empty p { color: var(--text-2); margin-bottom: 16px; }

/* 帖子详情：贴吧楼层式 */
.tb-crumb { font-size: 13px; color: var(--text-2); margin-bottom: 10px; }
.tb-crumb a { color: var(--text-2); }
.tb-crumb a:hover { color: var(--primary); }
.tb-title-bar { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius) var(--radius) 0 0; padding: 16px 22px 14px; }
.tb-title-bar h1 { font-size: 20px; line-height: 1.45; }
.tb-title-meta { display: flex; gap: 16px; margin-top: 8px; font-size: 12.5px; color: var(--text-2); }
.tb-title-meta b { color: #0071e3; }
.tb-floor { display: flex; background: var(--card); border: 1px solid var(--line); border-top: none; }
.tb-floor:last-of-type { border-radius: 0 0 var(--radius) var(--radius); }
.tb-floor-side { width: 150px; flex-shrink: 0; padding: 18px 14px; text-align: center; background: #fafbfd; border-right: 1px solid #f0f2f7; }
.tb-floor-av { width: 44px; height: 44px; font-size: 17px; margin: 0 auto; }
.tb-floor-un { font-size: 13.5px; color: #0066cc; margin-top: 8px; word-break: break-all; }
.tb-lz { display: inline-block; margin-left: 4px; font-size: 10.5px; color: #fff; background: #ffa940; border-radius: 4px; padding: 1px 5px; vertical-align: 1px; }
.tb-floor-side .tb-time { margin-top: 4px; }
.tb-floor-main { flex: 1; min-width: 0; padding: 18px 24px 14px; position: relative; }
.tb-floor-no { position: absolute; top: 14px; right: 20px; font-size: 12px; color: #b3b9c6; }
.tb-floor-ops { display: flex; gap: 14px; align-items: center; margin-top: 14px; padding-top: 10px; border-top: 1px dashed #eef0f5; font-size: 12.5px; }
.tb-floor-ops a { color: var(--text-2); font-size: 12.5px; }
.tb-floor-ops a:hover { color: var(--primary); }

/* 帖子详情 / 富文本展示 */
.rich-content { font-size: 15px; overflow-wrap: break-word; }
.rich-content img, .rich-content video { max-width: 100%; border-radius: 10px; margin: 8px 0; }
.rich-content a { text-decoration: underline; }
.rich-content blockquote { border-left: 3px solid var(--primary); background: var(--primary-light); padding: 8px 14px; border-radius: 0 8px 8px 0; margin: 10px 0; color: var(--text-2); }
.rich-content pre { background: #1e2233; color: #e6e9f2; padding: 12px 14px; border-radius: 9px; overflow-x: auto; font-size: 13px; }
.rich-content table { border-collapse: collapse; margin: 10px 0; }
.rich-content td, .rich-content th { border: 1px solid var(--line); padding: 6px 12px; }
.rich-content ul, .rich-content ol { padding-left: 24px; margin: 8px 0; }

/* 富文本编辑器 */
.editor-box { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px; margin-top: 16px; }
.re-toolbar { display: flex; flex-wrap: wrap; gap: 4px; border: 1px solid var(--line); border-bottom: none; border-radius: 9px 9px 0 0; padding: 8px; background: #fafbfe; }
.re-btn { min-width: 32px; height: 30px; border: 1px solid transparent; background: none; border-radius: 7px; font-size: 13px; padding: 0 8px; color: var(--text); }
.re-btn:hover { background: var(--primary-light); color: var(--primary); }
.re-btn.re-active { background: var(--primary-light); color: var(--primary); }
.re-color { width: 32px; height: 30px; padding: 2px; cursor: pointer; }
.re-area { min-height: 180px; max-height: 480px; overflow-y: auto; border: 1px solid var(--line); border-radius: 0 0 9px 9px; padding: 14px; outline: none; background: #fff; font-size: 15px; }
.re-area:focus { border-color: var(--primary); }
.re-area img, .re-area video { max-width: 100%; border-radius: 8px; }
.re-area .att-chip { display: inline-flex; align-items: center; gap: 6px; background: var(--primary-light); color: var(--primary); border-radius: 8px; padding: 4px 10px; font-size: 13px; margin: 2px; }
.editor-actions { display: flex; gap: 10px; margin-top: 12px; }
.re-uploading { font-size: 12px; color: var(--text-2); margin-top: 6px; }

/* 活动 */
.hdx-filter-bar { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 16px; }
.hdx-chip { padding: 7px 17px; border-radius: 980px; border: 1px solid transparent; background: rgba(0, 0, 0, .045); font-size: 13px; color: var(--text-2); cursor: pointer; transition: all .2s var(--ease); }
.hdx-chip:hover { background: rgba(0, 0, 0, .08); color: var(--text); }
.hdx-chip.active { background: var(--primary); color: #fff; border-color: var(--primary); }
.hdx-chip b { margin-left: 4px; opacity: .75; font-weight: 500; }

.hdx-list { display: grid; gap: 14px; }
.hdx-card { display: flex; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; text-decoration: none; transition: box-shadow .2s, transform .2s; }
.hdx-card:hover { box-shadow: 0 6px 22px rgba(30,40,80,.10); transform: translateY(-2px); }
.hdx-cover { position: relative; width: 172px; min-height: 132px; flex: none; display: flex; flex-direction: column; justify-content: center; align-items: center; color: #fff; }
.hdx-cover-emoji { font-size: 34px; }
.hdx-cover-cat { font-size: 12px; margin-top: 6px; background: rgba(255,255,255,.22); padding: 2px 10px; border-radius: 10px; }
.hdx-alumni-badge { position: absolute; top: 10px; left: 10px; font-size: 11px; background: rgba(255,255,255,.92); color: #5f3dc4; padding: 2px 8px; border-radius: 10px; font-weight: 600; }
.hdx-date-badge { position: absolute; bottom: 0; right: 0; background: rgba(255,255,255,.94); color: var(--text); padding: 4px 10px; border-radius: 10px 0 0 0; font-size: 12px; }
.hdx-date-badge b { font-size: 16px; color: #e8590c; }
.hdx-c-lecture { background: linear-gradient(135deg,#0071e3,#6e5bf0); }
.hdx-c-salon { background: linear-gradient(135deg,#0ca678,#22b8cf); }
.hdx-c-contest { background: linear-gradient(135deg,#e8590c,#f59f00); }
.hdx-c-meetup { background: linear-gradient(135deg,#e64980,#9c36b5); }
.hdx-c-online { background: linear-gradient(135deg,#1098ad,#4c6ef5); }
.hdx-c-other { background: linear-gradient(135deg,#5c7cfa,#845ef7); }
.hdx-info { flex: 1; padding: 14px 18px; display: flex; flex-direction: column; min-width: 0; }
.hdx-title { font-size: 16.5px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hdx-meta { display: flex; gap: 14px; flex-wrap: wrap; font-size: 13px; color: var(--text-2); margin-top: 6px; }
.hdx-join { display: flex; align-items: center; gap: 10px; margin-top: auto; padding-top: 10px; flex-wrap: wrap; }
.hdx-progress { flex: 1; min-width: 90px; height: 6px; background: #eef0f5; border-radius: 4px; overflow: hidden; }
.hdx-progress i { display: block; height: 100%; background: linear-gradient(90deg,#0071e3,#22b8cf); border-radius: 4px; transition: width .3s; }
.hdx-progress.big { height: 10px; margin: 12px 0 8px; }
.signup-pill { font-size: 13px; color: var(--text-2); }
.signup-pill b { color: var(--primary); }

/* 活动详情 hero */
.hdx-hero { border-radius: var(--radius); color: #fff; margin-bottom: 16px; }
.hdx-hero-inner { display: flex; gap: 20px; padding: 26px 28px; align-items: center; }
.hdx-hero-date { display: flex; align-items: baseline; gap: 3px; font-size: 14px; opacity: .95; }
.hdx-hero-date b { font-size: 40px; line-height: 1; }
.hdx-hero-tags { display: flex; gap: 8px; margin-bottom: 8px; }
.hdx-tag { background: rgba(255,255,255,.24); padding: 3px 12px; border-radius: 12px; font-size: 12px; }
.hdx-tag-alumni { background: rgba(255,255,255,.94); color: #5f3dc4; font-weight: 600; }
.hdx-hero h1 { color: #fff; font-size: 24px; margin: 0 0 10px; }
.hdx-hero-meta { display: flex; gap: 16px; flex-wrap: wrap; font-size: 13.5px; opacity: .95; }
.hdx-detail-grid { display: grid; grid-template-columns: 1fr 300px; gap: 16px; align-items: start; }
.hdx-signup-card { position: sticky; top: 70px; }
.hdx-signup-num { font-size: 14px; color: var(--text-2); margin-bottom: 12px; }
.alumni-verify-note { border-radius: 10px; padding: 10px 12px; font-size: 13px; margin-bottom: 12px; line-height: 1.5; }
.alumni-verify-note.ok { background: #ebfbee; color: #2b8a3e; border: 1px solid #b2f2bb; }
.alumni-verify-note.warn { background: #fff9db; color: #997c0a; border: 1px solid #ffec99; }

/* 发布向导（参考活动行 createv3） */
.wizard { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); margin-top: 16px; }
.wizard-head { display: flex; align-items: center; justify-content: space-between; padding: 14px 20px; border-bottom: 1px solid var(--line); }
.wizard-head h3 { margin: 0; }
.wizard-steps { display: flex; align-items: center; justify-content: center; gap: 6px; padding: 16px 20px; background: #fafbfd; border-bottom: 1px solid var(--line); }
.wz-step { display: flex; align-items: center; gap: 6px; font-size: 13px; color: #98a0b3; }
.wz-step i { width: 22px; height: 22px; border-radius: 50%; background: #e9ecf3; color: #98a0b3; font-style: normal; font-size: 12px; display: inline-flex; align-items: center; justify-content: center; }
.wz-step.active { color: var(--primary); font-weight: 600; }
.wz-step.active i { background: var(--primary); color: #fff; }
.wz-step.done i { background: #d3f9d8; color: #2b8a3e; }
.wz-step.done { color: #2b8a3e; }
.wz-arrow { width: 34px; height: 1px; background: #dfe3ec; margin: 0 6px; }
.wizard-body { padding: 20px; }
.wizard-foot { display: flex; gap: 10px; padding: 14px 20px; border-top: 1px solid var(--line); }
.wizard-foot .grow { flex: 1; }
.switch-row { display: flex; flex-direction: column; gap: 4px; cursor: pointer; }
.switch-row input { width: 18px; height: 18px; }
.alumni-verify-card { margin-bottom: 6px; }

/* 图表工作台（金山智能表格风格） */
.airsheet-templates { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }
.as-tpl-label { font-size: 13px; color: var(--text-2); }
.as-tpl { padding: 6px 14px; border-radius: 8px; border: 1px dashed #c8cfdd; background: #f8faff; font-size: 13px; color: #0071e3; cursor: pointer; }
.as-tpl:hover { background: #eef2ff; border-color: #91a7ff; }
.as-panel { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; }
.as-panel-title { display: flex; align-items: center; gap: 8px; padding: 12px 16px; font-size: 14px; font-weight: 600; border-bottom: 1px solid var(--line); background: #fafbfd; }
.as-dot { width: 10px; height: 10px; border-radius: 3px; background: linear-gradient(135deg,#0071e3,#22b8cf); }
.as-layout { gap: 16px; }
.as-layout .charts-panel, .as-layout .charts-canvas-panel { padding: 0; border: none; background: var(--card); }
.as-layout .charts-panel > *:not(.as-panel-title), .as-layout .charts-canvas-panel > *:not(.as-panel-title) { margin: 14px 16px; }
.as-table { display: flex; flex-direction: column; gap: 6px; }
.as-table .chart-row { margin-bottom: 0; }

/* 个人中心 */
.pc-profile { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.pc-avatar { width: 64px; height: 64px; border-radius: 50%; background: linear-gradient(135deg,#0071e3,#6e5bf0); color: #fff; font-size: 28px; display: flex; align-items: center; justify-content: center; }
.pc-name { font-size: 20px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.pc-stats { display: flex; gap: 8px; margin-left: auto; flex-wrap: wrap; }
.pc-stat { background: #f7f8fc; border-radius: 10px; padding: 8px 16px; text-align: center; }
.pc-stat b { display: block; font-size: 18px; color: var(--primary); }
.pc-stat span { font-size: 12px; color: var(--text-2); }
.pc-alumni-row { margin: 16px 0; }
.pc-acard { max-width: 480px; }
.acard-token-line { margin-top: 10px; font-size: 12.5px; color: #cdd3e0; }
.acard-token-line b { font-family: ui-monospace, Menlo, monospace; font-size: 15px; color: #fff; letter-spacing: 2px; }
.pc-alumni-tip { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pc-tabs { margin-bottom: 14px; }
.pc-records { display: flex; flex-direction: column; gap: 4px; margin-top: 10px; }
.pc-record { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 10px; text-decoration: none; }
.pc-record:hover { background: #f6f7fb; }
.pc-rec-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.pc-rec-main b { color: var(--text); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pc-rec-main .muted { font-size: 12.5px; }
.pc-rec-quote { font-size: 13px; color: var(--primary); }
.pc-rec-side { font-size: 12.5px; color: var(--text-2); white-space: nowrap; }
.invite-link-row { display: flex; gap: 10px; }
.invite-link-row input { flex: 1; padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; font-size: 13px; color: var(--text-2); background: #f7f8fc; outline: none; }

.signed-users { margin-top: 12px; }
.signed-users .u-chip { display: inline-block; background: var(--bg); border: 1px solid var(--line); border-radius: 20px; padding: 3px 12px; font-size: 13px; margin: 0 6px 6px 0; }

/* 我的 */
.mine-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: start; }
.invite-code { font-family: ui-monospace, Menlo, monospace; font-size: 17px; letter-spacing: 1px; background: var(--primary-light); color: var(--primary); padding: 5px 12px; border-radius: 8px; display: inline-block; }
.invite-code.used { background: #f1f2f5; color: #a0a5b1; text-decoration: line-through; }
.invite-code.fresh { animation: invite-flash 1.2s ease; }
@keyframes invite-flash { 0% { box-shadow: 0 0 0 0 rgba(59,91,219,.5); } 100% { box-shadow: 0 0 0 12px rgba(59,91,219,0); } }
.invite-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; flex-wrap: wrap; }

/* 管理后台 */
.admin-stats { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; margin-bottom: 8px; }
.stat-card { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 14px; text-align: center; }
.stat-card b { display: block; font-size: 22px; color: var(--primary); }
.stat-card span { font-size: 12px; color: var(--text-2); }
.tab-row { display: flex; gap: 8px; margin-bottom: 14px; }
.tab { padding: 6px 16px; border-radius: 20px; border: 1px solid var(--line); background: #fff; font-size: 13px; color: var(--text-2); }
.tab.active { background: var(--primary); color: #fff; border-color: var(--primary); }
.review-row { display: flex; gap: 14px; align-items: flex-start; }
.review-row .grow { flex: 1; min-width: 0; }
.review-input { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.review-input input { flex: 1; min-width: 180px; padding: 7px 11px; border: 1px solid var(--line); border-radius: 8px; outline: none; }

/* 模态框 / toast */
.modal-root { position: fixed; inset: 0; z-index: 100; background: rgba(20, 24, 40, .45); display: flex; align-items: center; justify-content: center; padding: 20px; }
.modal { background: #fff; border-radius: 16px; padding: 26px; width: 100%; max-width: 400px; max-height: 90vh; overflow-y: auto; }
.modal h3 { margin-bottom: 16px; font-size: 18px; }
.modal .modal-close { float: right; border: none; background: none; font-size: 20px; color: var(--text-2); cursor: pointer; }
.toast { position: fixed; left: 50%; bottom: 40px; transform: translateX(-50%); z-index: 120; background: #1d1d1f; color: #fff; padding: 10px 22px; border-radius: 10px; font-size: 14px; max-width: 80vw; }
.toast.toast-err { background: var(--danger); }

/* 响应式 */
@media (max-width: 860px) {
  .feature-grid { grid-template-columns: 1fr 1fr; }
  .charts-layout { grid-template-columns: 1fr; }
  .alumni-grid { grid-template-columns: 1fr; }
  .mine-grid { grid-template-columns: 1fr; }
  .field-grid { grid-template-columns: 1fr; }
  .hdx-detail-grid { grid-template-columns: 1fr; }
  .hdx-signup-card { position: static; }
  .pc-stats { margin-left: 0; }
}
@media (max-width: 600px) {
  .feature-grid { grid-template-columns: 1fr; }
  .topbar { padding: 0 12px; gap: 10px; }
  .brand em { display: none; }
  main { padding: 18px 12px 50px; }
  .hero h1 { font-size: 26px; }
  .mm-body { height: calc(100vh - 330px); min-height: 340px; }
  .mm-outline-panel { width: 220px; }
  .mm-tip { display: none; }
  /* 贴吧列表小屏简化 */
  .tb-col-last { display: none; }
  .tb-list-head .tb-col-last { display: none; }
  .tb-col-author { width: auto; }
  .tb-col-author .tb-time { display: none; }
  .tb-floor-side { width: 96px; padding: 14px 8px; }
  .tb-floor-main { padding: 14px 16px 12px; }
  /* 活动卡片小屏：封面变窄 */
  .hdx-cover { width: 108px; min-height: 112px; }
  .hdx-cover-emoji { font-size: 26px; }
  .hdx-title { white-space: normal; }
  .hdx-hero-inner { padding: 18px; }
  .hdx-hero h1 { font-size: 19px; }
  .invite-link-row { flex-direction: column; }
}

/* ========== v4：版主权限体系 ========== */
/* 子板块标签条 */
.sub-tabs { display: flex; gap: 8px; flex-wrap: wrap; margin: 12px 0 4px; align-items: center; }
.sub-tab { border: 1px solid var(--line); background: var(--card); color: var(--text-2); border-radius: 18px; padding: 5px 14px; font-size: 13px; transition: all .15s; }
.sub-tab i { font-style: normal; font-size: 12px; color: var(--text-2); opacity: .7; }
.sub-tab:hover { border-color: var(--primary); color: var(--primary); }
.sub-tab.active { background: var(--primary); border-color: var(--primary); color: #fff; }
.sub-tab.active i { color: rgba(255,255,255,.75); }
.sub-tab-add { border-style: dashed; color: var(--text-2); }

/* 置顶 / 子板块徽标 */
.pin-badge { display: inline-block; background: var(--danger); color: #fff; font-size: 11px; border-radius: 4px; padding: 1px 6px; margin-left: 6px; vertical-align: 2px; }
.sub-badge { display: inline-block; background: var(--primary-light); color: var(--primary); font-size: 11px; border-radius: 4px; padding: 1px 6px; margin-left: 6px; vertical-align: 2px; }
.tb-pinned { background: #fffdf5; }
.tb-pinned .tb-col-title a { font-weight: 600; }

/* 版主徽章（顶栏用户名旁） */
.mod-badge { display: inline-block; background: var(--primary-light); color: var(--primary); font-size: 11px; border-radius: 4px; padding: 0 6px; margin-left: 6px; vertical-align: 1px; }

/* 活动待审核标签 */
.hdx-tag-pending { background: #fff4e6; color: #e8590c; }

/* 版务管理页 */
.mg-grid { display: grid; grid-template-columns: 1fr 1.2fr; gap: 16px; align-items: start; }
#manage-tabs { margin-bottom: 14px; }
#manage-body .pc-record { padding: 9px 0; border-bottom: 1px dashed var(--line); }
#manage-body .pc-record:last-child { border-bottom: none; }
#manage-body .pc-rec-side { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
#manage-body input { border: 1px solid var(--line); border-radius: 8px; padding: 7px 12px; }
#manage-body select { border: 1px solid var(--line); border-radius: 8px; padding: 7px 12px; }
@media (max-width: 860px) {
  .mg-grid { grid-template-columns: 1fr; }
}

/* ========== v5：手写笔记（GoodNotes 风格） ========== */
/* 笔记库 */
.note-lib { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 16px; }
.note-card { display: flex; gap: 12px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 12px; cursor: pointer; transition: transform .15s, box-shadow .15s; }
.note-card:hover { transform: translateY(-2px); box-shadow: 0 8px 22px rgba(40, 60, 140, .10); }
.nc-cover { width: 64px; height: 86px; border-radius: 8px 10px 10px 8px; flex-shrink: 0; position: relative; box-shadow: inset -8px 0 12px -8px rgba(0,0,0,.35), 0 2px 8px rgba(30,40,80,.18); }
.nc-cover::before { content: ""; position: absolute; left: 7px; top: 0; bottom: 0; width: 2px; background: rgba(255,255,255,.55); }
.nc-cover-ico { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 22px; }
.nc-info { min-width: 0; flex: 1; }
.nc-info h4 { font-size: 15px; margin-bottom: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nc-meta { font-size: 12px; color: var(--text-2); line-height: 1.5; }
.nc-ops { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; }

/* 笔记工具栏 */
.note-toolbar { background: #fff; border: 1px solid var(--line); border-radius: var(--radius) var(--radius) 0 0; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; }
.note-toolbar::-webkit-scrollbar { height: 8px; }
.note-toolbar::-webkit-scrollbar-thumb { background: #cdd5e7; border-radius: 4px; }
.nt-tb-row { display: flex; align-items: center; gap: 8px; padding: 8px 12px; min-width: max-content; }
.nt-title-input { border: 1px solid transparent; border-radius: 8px; padding: 6px 10px; font-size: 15px; font-weight: 600; width: 130px; max-width: 220px; background: var(--bg); }
.nt-title-input:focus { outline: none; border-color: var(--primary); background: #fff; }
.nt-tool { width: 36px; height: 36px; border-radius: 10px; border: 1px solid var(--line); background: #fff; font-size: 16px; display: inline-flex; align-items: center; justify-content: center; transition: all .12s; }
.nt-tool:hover { border-color: var(--primary); }
.nt-tool.active { background: var(--primary); border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-light); }
.nt-colors { display: inline-flex; gap: 6px; align-items: center; }
.nt-color-dot { width: 20px; height: 20px; border-radius: 50%; border: 2px solid #fff; box-shadow: 0 0 0 1px var(--line); cursor: pointer; }
.nt-color-dot.selected { box-shadow: 0 0 0 2px var(--primary); transform: scale(1.12); }
.nt-sizes { display: inline-flex; gap: 6px; align-items: center; padding: 0 2px; }
.nt-size-dot { border-radius: 50%; background: var(--text); cursor: pointer; box-shadow: 0 0 0 1px var(--line); display: inline-block; }
.nt-size-dot.selected { box-shadow: 0 0 0 2px var(--primary); }
.nt-grow { flex: 1; min-width: 8px; }

/* 笔记主体 */
.nt-body { border: 1px solid var(--line); border-top: none; border-radius: 0 0 var(--radius) var(--radius); background: #e9ecf3; padding: 14px 4px; }
.nt-page-area { overflow-y: auto; max-height: calc(100vh - 300px); min-height: 420px; padding: 4px; display: flex; justify-content: center; }
.nt-page { position: relative; background: #fff; box-shadow: 0 4px 18px rgba(30, 40, 80, .14); border-radius: 3px; flex-shrink: 0; }
.nt-page canvas { position: absolute; left: 0; top: 0; }
#nt-ink { z-index: 3; }
.nt-objects { position: absolute; inset: 0; z-index: 2; pointer-events: none; }
.nt-objects > * { pointer-events: auto; }
.nt-page.nt-drawing #nt-ink { cursor: crosshair; }
.nt-page.nt-selecting #nt-ink { pointer-events: none; }
.nt-page.nt-selecting { cursor: default; }

/* 对象元素 */
.nt-obj { position: absolute; }
.nt-img img { width: 100%; height: 100%; display: block; border-radius: 4px; user-select: none; -webkit-user-drag: none; }
.nt-obj-sel { outline: 2px solid var(--primary); outline-offset: 2px; border-radius: 4px; }
.nt-doc { display: flex; align-items: center; gap: 10px; background: #f5f7fc; border: 1.5px solid #d2d2d7; border-radius: 10px; padding: 10px 12px; text-decoration: none; color: var(--text); box-sizing: border-box; }
.nt-doc:hover { border-color: var(--primary); }
.nt-doc-ico { font-size: 24px; }
.nt-doc-name { font-size: 13px; font-weight: 600; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nt-doc-open { font-size: 12px; color: var(--primary); white-space: nowrap; }
.nt-text { font-weight: 600; line-height: 1.45; word-break: break-all; white-space: pre-wrap; min-height: 1.4em; }
.nt-text.nt-editing { outline: 2px solid var(--primary); outline-offset: 2px; border-radius: 3px; background: rgba(255,255,255,.92); cursor: text; }
.nt-selbar { position: absolute; z-index: 6; display: flex; gap: 4px; background: #fff; border: 1px solid var(--line); border-radius: 8px; padding: 2px; box-shadow: 0 3px 10px rgba(30,40,80,.16); }
.nt-selbar-del { border: none; background: none; font-size: 15px; width: 28px; height: 26px; border-radius: 6px; cursor: pointer; }
.nt-selbar-del:hover { background: #fdeeee; }
.nt-resize { position: absolute; right: -9px; bottom: -9px; width: 18px; height: 18px; border-radius: 50%; background: var(--primary); border: 2.5px solid #fff; box-shadow: 0 1px 5px rgba(30,40,80,.3); cursor: nwse-resize; z-index: 7; }

/* 翻页条 */
.nt-pagebar { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 10px 0 0; flex-wrap: wrap; }
.nt-page-ind { font-size: 13px; color: var(--text-2); min-width: 56px; text-align: center; font-variant-numeric: tabular-nums; }

/* ========== v5：移动端适配 ========== */
.mm-canvas-wrap { touch-action: none; }   /* 触摸画布时不滚动页面 */
.nt-page canvas { touch-action: none; }

@media (max-width: 860px) {
  .note-lib { grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); }
  .nt-page-area { max-height: none; }    /* 手机上页面完整展示，交给整页滚动 */
}

@media (max-width: 600px) {
  /* 顶栏：两行布局，导航独占一行横向滑动 */
  .topbar { flex-wrap: wrap; height: auto; padding: 8px 12px; gap: 8px; row-gap: 4px; }
  .brand { font-size: 16px; }
  #nav { order: 3; width: 100%; flex: 1 1 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; margin: 0 -4px; }
  #nav::-webkit-scrollbar { display: none; }
  #nav a { padding: 7px 12px; font-size: 14px; }
  .user-box { margin-left: auto; }
  .user-box .btn { padding: 6px 12px; }

  /* 触控目标加大 */
  .btn { min-height: 38px; }
  .btn-sm { min-height: 34px; }

  /* 脑图工具栏：允许横向滑动，按钮加大 */
  .mm-toolbar { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .mm-tb-row { flex-wrap: nowrap; min-width: max-content; padding: 8px 10px; }
  .mm-tb-row .btn { min-height: 38px; white-space: nowrap; }
  .mm-title-input { width: 130px; }
  .mm-body { height: calc(100vh - 218px); min-height: 320px; }
  .mm-zoombar { right: 8px; bottom: 8px; }
  .mm-zoombar button { width: 34px; height: 32px; }

  /* 笔记工具栏与翻页 */
  .nt-tb-row { padding: 8px 10px; }
  .nt-tool { width: 40px; height: 40px; font-size: 18px; }
  .nt-title-input { width: 110px; }
  .nt-body { padding: 10px 2px; }
  .nt-page-area { padding: 2px; }
  .nt-pagebar { gap: 8px; }

  /* 发帖 / 回复编辑器 */
  .editor-actions .btn { flex: 1; }
  .wizard-foot { position: sticky; bottom: 0; background: #fff; }

  /* 版务管理 / 表格类 */
  .tb-col-count { display: none; }
  .tb-list-head .tb-col-count { display: none; }
  .review-input input { min-width: 120px; }
}

/* ========== v6：消息 / 搜索 / 管理后台 / 活动地图 ========== */
.nav-badge { display: inline-block; min-width: 17px; height: 17px; line-height: 17px; padding: 0 4px; margin-left: 3px; background: var(--danger); color: #fff; font-size: 11px; border-radius: 9px; text-align: center; font-weight: 600; vertical-align: 1px; }

/* 消息（微信式两栏） */
.chat-grid { display: grid; grid-template-columns: 300px 1fr; gap: 14px; align-items: stretch; }
.chat-side { padding: 0; overflow: hidden; display: flex; flex-direction: column; max-height: 70vh; }
.chat-sec-title { font-size: 12px; color: var(--text-2); padding: 10px 14px 4px; font-weight: 600; }
.chat-request { display: flex; align-items: center; gap: 8px; padding: 8px 14px; border-bottom: 1px dashed var(--line); }
.chat-search-row { padding: 10px 14px; border-bottom: 1px solid var(--line); }
.chat-search-row input { width: 100%; box-sizing: border-box; border: 1px solid var(--line); border-radius: 8px; padding: 8px 12px; }
.chat-friend-list { overflow-y: auto; flex: 1; }
.chat-friend { display: flex; align-items: center; gap: 10px; padding: 11px 14px; cursor: pointer; border-bottom: 1px solid var(--line); transition: background .12s; }
.chat-friend:hover { background: #f5f7fc; }
.chat-friend.active { background: var(--primary-light); }
.chat-friend-info { flex: 1; min-width: 0; }
.chat-friend-name { font-weight: 600; font-size: 14px; }
.chat-friend-last { font-size: 12px; color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
.chat-unread { background: var(--danger); color: #fff; font-size: 11px; min-width: 18px; height: 18px; line-height: 18px; text-align: center; border-radius: 9px; padding: 0 5px; font-weight: 600; }
.chat-main { display: flex; flex-direction: column; min-height: 70vh; max-height: 70vh; padding: 0; overflow: hidden; }
.chat-empty { margin: auto; text-align: center; color: var(--text-2); }
.chat-empty-ico { font-size: 46px; margin-bottom: 8px; }
.chat-head { display: flex; align-items: center; gap: 8px; padding: 10px 14px; border-bottom: 1px solid var(--line); }
.chat-msgs { flex: 1; overflow-y: auto; padding: 14px; background: #f7f8fb; display: flex; flex-direction: column; gap: 10px; }
.chat-msg { max-width: 78%; align-self: flex-start; }
.chat-msg.mine { align-self: flex-end; }
.chat-bubble { background: #fff; border: 1px solid var(--line); border-radius: 4px 14px 14px 14px; padding: 9px 13px; font-size: 14px; line-height: 1.55; word-break: break-word; box-shadow: 0 1px 3px rgba(30,40,80,.06); }
.chat-msg.mine .chat-bubble { background: var(--primary); border-color: var(--primary); color: #fff; border-radius: 14px 4px 14px 14px; }
.chat-msg-time { font-size: 11px; color: var(--text-2); margin-top: 3px; text-align: center; }
.chat-input-row { display: flex; gap: 8px; padding: 10px 12px; border-top: 1px solid var(--line); align-items: flex-end; background: #fff; }
.chat-input-row textarea { flex: 1; resize: none; border: 1px solid var(--line); border-radius: 10px; padding: 9px 12px; font: inherit; max-height: 110px; }
.chat-attach { font-size: 22px; cursor: pointer; padding: 6px; user-select: none; }

/* 搜索频道 */
.search-hero { text-align: center; padding: 40px 0 6px; }
.search-hero h2 { font-size: 32px; font-weight: 700; letter-spacing: -.02em; margin-bottom: 8px; }
.search-bar { display: flex; max-width: 640px; margin: 18px auto 14px; gap: 10px; }
.search-bar input { flex: 1; border: 1px solid var(--line); border-radius: 14px; padding: 13px 18px; font-size: 16px; background: #fff; transition: border-color .2s, box-shadow .2s; }
.search-bar input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 4px rgba(0, 113, 227, .12); }
.search-chips { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; }
.search-jumps { display: flex; gap: 8px; flex-wrap: wrap; }

/* 活动地图卡片 */
.act-map-card { margin-top: 14px; }
.act-map-place { font-size: 16px; font-weight: 600; padding: 8px 0 12px; }
.act-map-btns { display: flex; gap: 8px; flex-wrap: wrap; }

/* 管理后台 */
.stat-card.stat-warn b { color: var(--danger); }

@media (max-width: 860px) {
  .chat-grid { grid-template-columns: 1fr; }
  .chat-main { min-height: 60vh; }
}
@media (max-width: 600px) {
  .search-bar { flex-direction: row; margin: 14px 0 10px; }
  .search-hero h2 { font-size: 22px; }
  .chat-side { max-height: 46vh; }
}

/* ---------- v6.2 投票 ---------- */
.poll-editor { border: 1px dashed var(--border, #ccc); border-radius: 8px; padding: 10px 12px; margin-top: 10px; }
.poll-editor-head { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; flex-wrap: wrap; }
.poll-opt-row { display: flex; gap: 6px; margin-bottom: 6px; align-items: center; }
.poll-opt-row .poll-opt-input { flex: 1; }
.poll-card { margin: 14px 0; }
.poll-opt-row-v { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid var(--border, #e0e0e0); border-radius: 6px; margin-bottom: 6px; cursor: pointer; }
.poll-opt-row-v:hover { border-color: var(--primary); }
.poll-res { position: relative; border: 1px solid var(--border, #e0e0e0); border-radius: 6px; padding: 8px 10px; margin-bottom: 6px; overflow: hidden; }
.poll-res-bar { position: absolute; left: 0; top: 0; bottom: 0; background: rgba(59,91,219,.15); z-index: 0; }
.poll-res-line { position: relative; z-index: 1; display: flex; gap: 10px; align-items: baseline; }
.poll-res-line b { margin-left: auto; color: var(--primary); }
.poll-res-line i { font-style: normal; color: var(--muted, #888); font-size: 12px; min-width: 40px; text-align: right; }
.poll-res-mine { border-color: var(--primary); }

/* ---------- v6.3 分享 ---------- */
.share-title { font-weight: 600; margin: 4px 0 12px; word-break: break-all; }
.share-grid { display: flex; gap: 16px; align-items: flex-start; }
.share-qr-wrap { text-align: center; flex: 0 0 auto; }
.share-qr-wrap #share-qr { display: inline-block; padding: 6px; border: 1px solid var(--border, #e0e0e0); border-radius: 8px; background: #fff; }
.share-btns { flex: 1; min-width: 0; }
@media (max-width: 480px) { .share-grid { flex-direction: column; } }

/* ---------- 互动式英语学习 ---------- */
.en-topic-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; margin-top: 18px; }
.en-topic-card { background: var(--card, #fff); border: 1px solid #e8e8ed; border-radius: 16px; padding: 22px 20px; cursor: pointer; transition: all .18s; }
.en-topic-card:hover { transform: translateY(-3px); box-shadow: 0 10px 26px rgba(59,91,219,.14); border-color: #0071e3; }
.en-topic-emoji { font-size: 32px; }
.en-topic-card h3 { font-size: 18px; margin: 10px 0 6px; }
.en-topic-card p { font-size: 13px; color: #86868b; }
.en-root { color: #0071e3; font-weight: 800; letter-spacing: .5px; }
.en-chat-head { display: flex; align-items: center; gap: 14px; margin: 14px 0; flex-wrap: wrap; }
.en-chat { display: flex; flex-direction: column; gap: 12px; max-width: 860px; margin: 0 auto; padding-bottom: 8px; }
.en-msg { max-width: 78%; padding: 13px 16px; border-radius: 16px; font-size: 15px; line-height: 1.65; }
.en-bot { align-self: flex-start; background: #f5f5f7; border: 1px solid #e8e8ed; color: #1d1d1f; }
.en-bot code { background: #e8edfb; color: #0071e3; padding: 1px 7px; border-radius: 6px; font-size: 13px; }
.en-user { align-self: flex-end; background: linear-gradient(135deg, #0071e3, #4c6ef5); color: #fff; }
.en-phrases { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 13px; color: #6e6e73; }
.en-next { align-self: center; margin: 4px 0 10px; }
.en-input-row { display: flex; gap: 10px; max-width: 860px; margin: 16px auto 4px; }
.en-input-row input { flex: 1; padding: 12px 16px; border: 1px solid #d2d2d7; border-radius: 12px; font-size: 15px; outline: none; }
.en-input-row input:focus { border-color: #0071e3; }
.en-roots-head { display: flex; align-items: center; gap: 14px; margin-top: 16px; flex-wrap: wrap; }
.en-word-card { background: var(--card, #fff); border: 1px solid #e8e8ed; border-radius: 14px; padding: 16px 20px; max-width: 860px; margin: 10px auto; }
.en-word-line { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.en-word { font-size: 19px; color: #1d1d1f; }
.en-split { margin-top: 8px; font-size: 14px; color: #6e6e73; background: #f5f5f7; border-radius: 8px; padding: 8px 12px; }
.en-quiz-head { max-width: 860px; margin: 16px auto 6px; font-size: 13px; color: #86868b; }
.en-quiz-q { max-width: 860px; margin: 0 auto; font-size: 17px; line-height: 1.7; padding: 14px 0; }
.en-quiz-opts { max-width: 860px; margin: 0 auto; display: flex; flex-direction: column; gap: 10px; }
.en-opt { text-align: left; padding: 13px 18px; border: 1px solid #d2d2d7; border-radius: 12px; background: var(--card, #fff); font-size: 15px; cursor: pointer; transition: all .15s; }
.en-opt:hover:not(:disabled) { border-color: #0071e3; background: #f5f5f7; }
.en-opt:disabled { cursor: default; opacity: .75; }
.en-opt-right { border-color: #2f9e44 !important; background: #ebfbee !important; opacity: 1 !important; }
.en-opt-wrong { border-color: #e03131 !important; background: #fff5f5 !important; opacity: 1 !important; }
.en-quiz-fb { max-width: 860px; margin: 12px auto; padding: 13px 16px; border-radius: 12px; font-size: 14px; line-height: 1.7; }
.en-quiz-fb.ok { background: #ebfbee; border: 1px solid #b2f2bb; }
.en-quiz-fb.bad { background: #fff5f5; border: 1px solid #ffc9c9; }
.en-quiz-result { text-align: center; padding: 50px 0 30px; }
.en-quiz-result .en-score { font-size: 56px; font-weight: 900; color: #0071e3; margin-bottom: 10px; }
.en-long-card { max-width: 860px; margin: 14px auto; }
.en-long-en { font-size: 19px; line-height: 1.8; background: var(--card, #fff); border: 1px solid #e8e8ed; border-left: 4px solid #0071e3; border-radius: 12px; padding: 20px 24px; color: #1d1d1f; }
.en-long-words { display: flex; flex-wrap: wrap; gap: 8px 20px; font-size: 13px; color: #6e6e73; margin: 12px 2px; }
.en-long-ref, .en-struct-step { background: var(--card, #fff); border: 1px solid #e8e8ed; border-radius: 12px; padding: 15px 18px; margin-top: 12px; }
.en-ref-title { font-size: 13px; font-weight: 700; color: #86868b; margin-bottom: 6px; }
.en-long-ref p { font-size: 16px; line-height: 1.75; color: #1d1d1f; }
.en-ref-mine { color: #0071e3 !important; }
.en-struct-title { font-size: 15px; font-weight: 800; margin-top: 18px; color: #1d1d1f; }
.en-struct-label { font-size: 13px; font-weight: 700; color: #0071e3; }
.en-struct-part { font-size: 15px; color: #1d1d1f; margin: 6px 0 4px; font-style: italic; }
.en-struct-cn { font-size: 14px; color: #6e6e73; }

/* ---------- 闯关背单词 ---------- */
.vocab-hero { background: linear-gradient(135deg, #0071e3, #6e5bf0); color: #fff; border-radius: 18px; padding: 22px 28px; display: flex; align-items: baseline; gap: 18px; }
.vocab-hero-num { font-size: 44px; font-weight: 900; }
.vocab-hero-num span { font-size: 20px; font-weight: 600; opacity: .8; }
.vocab-hero-txt { font-size: 15px; opacity: .92; }
.vocab-toolbar { display: flex; gap: 12px; margin: 18px 0 6px; }
.vocab-toolbar input { flex: 1; max-width: 420px; padding: 11px 16px; border: 1px solid #d2d2d7; border-radius: 12px; font-size: 14px; outline: none; }
.vocab-toolbar input:focus { border-color: #0071e3; }
.vocab-grid-title { font-size: 14px; font-weight: 700; color: #6e6e73; margin: 14px 0 4px; }
.vocab-grid-title a { font-size: 13px; font-weight: 400; color: #0071e3; margin-left: 10px; }
.vocab-levels { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; margin-top: 12px; }
.vocab-lv { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; padding: 12px 14px; border: 1px solid #e8e8ed; border-radius: 12px; background: var(--card, #fff); cursor: pointer; transition: all .15s; }
.vocab-lv:hover { transform: translateY(-2px); border-color: #0071e3; box-shadow: 0 6px 16px rgba(59,91,219,.12); }
.vocab-lv .lv-n { font-weight: 800; font-size: 16px; color: #1d1d1f; }
.vocab-lv .lv-words { font-size: 12px; color: #86868b; }
.vocab-lv.done { background: #ebfbee; border-color: #b2f2bb; }
.vocab-lv.done .lv-n { color: #2f9e44; }
.vocab-lv.done .lv-score { font-size: 12px; color: #2f9e44; font-weight: 700; }
.vocab-card { background: var(--card, #fff); border: 1px solid #e8e8ed; border-radius: 16px; padding: 18px 22px; max-width: 860px; margin: 12px auto; }
.vc-head { display: flex; align-items: center; gap: 12px; }
.vc-word { font-size: 22px; font-weight: 800; color: #1d1d1f; }
.vc-ipa { color: #86868b; font-size: 14px; }
.vc-icon { border: none; background: none; cursor: pointer; font-size: 16px; padding: 2px 4px; opacity: .8; }
.vc-icon:hover { opacity: 1; transform: scale(1.15); }
.vc-star.on { filter: drop-shadow(0 0 4px #fcc419); opacity: 1; }
.vc-cn { margin-top: 6px; font-size: 15px; color: #0071e3; font-weight: 600; }
.vc-row { margin-top: 10px; font-size: 14px; line-height: 1.7; color: #1d1d1f; display: flex; flex-direction: column; }
.vc-label { font-size: 12px; font-weight: 700; color: #86868b; margin-bottom: 2px; }
.vc-ex-en { font-style: italic; }
.vc-ex-cn { color: #6e6e73; font-size: 13px; }
.vc-long { background: #f5f5f7; border-radius: 10px; padding: 10px 14px; }
.vocab-lv-head { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.vocab-lv-head h3 { margin: 0; }
.vc-long-line { display: flex; align-items: flex-start; gap: 8px; }
.vc-long-line .vc-ex-en { flex: 1; }

/* ===== 音乐播放器（v13） ===== */
body.has-player main { padding-bottom: 120px; }
.mu-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-bottom: 12px; flex-wrap: wrap; }
.mu-count { font-size: 15px; color: var(--text-2); }
.mu-count strong { color: var(--text); font-size: 20px; }
.mu-tip { font-size: 12.5px; color: var(--text-2); background: var(--primary-light); border-radius: 8px; padding: 8px 12px; margin-bottom: 14px; }
.mu-list { display: flex; flex-direction: column; gap: 10px; }
.mu-empty { text-align: center; padding: 60px 0 80px; }
.mu-empty-icon { font-size: 44px; margin-bottom: 8px; }
.mu-card { display: flex; align-items: center; gap: 14px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 16px; cursor: pointer; transition: box-shadow .15s, border-color .15s; }
.mu-card:hover { border-color: var(--primary); box-shadow: 0 4px 14px rgba(59,91,219,.12); }
.mu-card.playing { border-color: var(--primary); background: var(--primary-light); }
.mu-idx { width: 34px; height: 34px; border-radius: 50%; background: var(--primary-light); color: var(--primary); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 13px; flex-shrink: 0; }
.mu-card.playing .mu-idx { background: var(--primary); color: #fff; }
.mu-info { flex: 1; min-width: 0; }
.mu-title { font-weight: 600; font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mu-meta { font-size: 12.5px; color: var(--text-2); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mu-badge { display: inline-block; font-size: 11px; padding: 0 6px; border-radius: 4px; background: #e9edf6; color: var(--text-2); }
.mu-badge.lossless { background: #fff4e0; color: #b8860b; font-weight: 600; }
.mu-badge.hq { background: #e8f4fd; color: #0a8fd6; font-weight: 600; }
.mu-ops { display: flex; gap: 8px; flex-shrink: 0; }

.mu-player { position: fixed; left: 0; right: 0; bottom: 0; z-index: 70; display: flex; align-items: center; gap: 18px; padding: 10px 22px; background: linear-gradient(135deg, #1d2440, #0071e3 160%); color: #fff; box-shadow: 0 -6px 24px rgba(20,30,70,.35); }
.mu-player.hidden { display: none; }
.mu-now { display: flex; align-items: center; gap: 12px; width: 260px; flex-shrink: 0; min-width: 0; }
.mu-disc { width: 44px; height: 44px; border-radius: 50%; background: linear-gradient(135deg, #6e5bf0, #0071e3); display: flex; align-items: center; justify-content: center; font-size: 20px; flex-shrink: 0; box-shadow: 0 0 0 3px rgba(255,255,255,.18); }
.mu-disc.spin { animation: mu-spin 3s linear infinite; }
@keyframes mu-spin { to { transform: rotate(360deg); } }
.mu-nowinfo { min-width: 0; }
.mu-nowtitle { font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mu-nowmeta { font-size: 12px; opacity: .75; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mu-center { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.mu-ctrls { display: flex; align-items: center; justify-content: center; gap: 14px; }
.mu-ctrls button { background: transparent; border: none; color: #fff; font-size: 18px; padding: 2px 6px; opacity: .85; border-radius: 6px; }
.mu-ctrls button:hover { opacity: 1; background: rgba(255,255,255,.12); }
.mu-ctrls #mu-play { font-size: 24px; }
.mu-ctrls #mu-ktv { font-size: 13px; border: 1px solid rgba(255,255,255,.4); border-radius: 999px; padding: 3px 12px; }
.mu-ctrls #mu-ktv.ktv-on { background: var(--accent); border-color: var(--accent); color: #1d2440; font-weight: 700; }
.mu-progressline { display: flex; align-items: center; gap: 10px; font-size: 11.5px; opacity: .85; }
.mu-progressline input, .mu-right input[type="range"] { -webkit-appearance: none; appearance: none; height: 4px; border-radius: 2px; background: rgba(255,255,255,.3); outline: none; }
.mu-progressline input { flex: 1; }
.mu-progressline input::-webkit-slider-thumb, .mu-right input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 12px; height: 12px; border-radius: 50%; background: #fff; cursor: pointer; }
.mu-right { display: flex; align-items: center; gap: 8px; width: 180px; flex-shrink: 0; justify-content: flex-end; font-size: 14px; }
.mu-right input[type="range"] { width: 90px; }
.mu-right button { background: transparent; border: none; color: #fff; opacity: .7; font-size: 14px; }
.mu-right button:hover { opacity: 1; }
@media (max-width: 760px) {
  .mu-player { flex-wrap: wrap; padding: 10px 14px; gap: 10px; }
  .mu-now { width: 100%; }
  .mu-center { order: 3; width: 100%; flex-basis: 100%; }
  .mu-right { width: auto; }
  .mu-ctrls { gap: 10px; }
}

/* ===== 音乐 v14：在线搜索 + 歌词 ===== */
.mu-searchbar { display: flex; gap: 10px; margin-bottom: 14px; }
.mu-searchbar input { flex: 1; height: 42px; border: 1px solid var(--line); border-radius: 10px; padding: 0 14px; font-size: 15px; outline: none; }
.mu-searchbar input:focus { border-color: var(--primary); }
.mu-badge.src-163 { background: #e6f4ea; color: #c0392b; font-weight: 600; }
.mu-badge.src-qq { background: #e8f1fb; color: #1c6fd6; font-weight: 600; }
.mu-lyrics { background: linear-gradient(180deg, #f7f9ff, #eaf3ff); border: 1px solid var(--line); border-radius: var(--radius); max-height: 300px; overflow-y: auto; padding: 18px 22px; margin-bottom: 16px; scroll-behavior: smooth; }
.mu-lyric-line { font-size: 14.5px; color: var(--text-2); padding: 4px 0; transition: color .2s, transform .2s; }
.mu-lyric-line.active { color: var(--primary); font-weight: 700; font-size: 16px; transform: scale(1.02); transform-origin: left center; }
.mu-lyric-loading { text-align: center; color: var(--text-2); padding: 24px 0; }
.en-topic-card.active { border-color: var(--primary); background: var(--primary-light); }
.mu-badge.src-kugou { background: #e8f4fd; color: #0a8fd6; font-weight: 600; }
.mu-badge.src-apple { background: #fdeeee; color: #fa233b; font-weight: 600; }
.mu-more-btn { display: block; margin: 14px auto 4px; padding: 8px 26px; border-radius: 20px; }

/* ===== 关注与通知（v19） ===== */
.pc-social { display: flex; gap: 14px; align-items: center; font-size: 13px; color: var(--text-2); margin-top: 8px; }
.pc-social a { color: var(--primary); text-decoration: none; }
.pc-social b { color: var(--text); }
.flw-btn { margin-left: 6px; white-space: nowrap; }
.flw-btn.flw-on { background: var(--primary-light); border-color: var(--primary); color: var(--primary); }
.flw-btn.flw-mutual { background: #fff4e0; border-color: #e0a800; color: #b8860b; }
.ntf-list { display: flex; flex-direction: column; gap: 10px; max-width: 720px; }
.ntf-item { display: flex; align-items: center; gap: 12px; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 16px; }
.ntf-item.unread { border-left: 3px solid var(--primary); background: var(--primary-light); }
.ntf-main { flex: 1; min-width: 0; }
.ntf-text { font-size: 14.5px; }
.ntf-item.unread .ntf-text { font-weight: 600; }
.ntf-time { font-size: 12px; color: var(--text-2); margin-top: 2px; }
.ntf-empty { text-align: center; padding: 60px 0 80px; }

/* ================= v20：登录门槛 / 校园知己 ================= */
.login-gate { text-align: center; padding: 56px 24px 64px; max-width: 460px; margin: 30px auto; }
.login-gate .lg-ico { font-size: 46px; margin-bottom: 10px; }
.login-gate h3 { margin: 6px 0 8px; }
.login-gate .btn { margin-top: 14px; padding: 10px 34px; }

.nb-notify { background: #e64980; margin-left: 2px; }
#chat-tabs { margin-bottom: 14px; }
#ctab-notify-dot { min-width: 8px; height: 8px; line-height: 1; padding: 0; vertical-align: 2px; }

/* 校园知己 */
.dt-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.dt-ver { font-weight: 700; font-size: 15px; padding: 6px 14px; border-radius: 20px; background: #e8f1fb; color: #1c6fd6; }
.dt-head.dt-les .dt-ver { background: #fdeef4; color: #e64980; }
.dt-tabs { margin-bottom: 16px; }
.dt-onboard { max-width: 560px; margin: 20px auto; text-align: center; padding: 30px 24px 34px; }
.dt-ver-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 18px; }
.dt-ver-card { border: 2px solid var(--line); border-radius: 14px; padding: 22px 12px; cursor: pointer; transition: all .15s; display: flex; flex-direction: column; gap: 4px; background: #fff; }
.dt-ver-card:hover { transform: translateY(-2px); box-shadow: 0 8px 22px rgba(28,111,214,.14); }
.dt-ver-card.dt-gay { border-color: #bcd3f5; } .dt-ver-card.dt-gay:hover { border-color: #1c6fd6; }
.dt-ver-card.dt-les { border-color: #f6c6da; } .dt-ver-card.dt-les:hover { border-color: #e64980; }
.dvc-ico { font-size: 34px; }
.dt-ver-card b { font-size: 16px; }
.dt-ver-card span { font-size: 12.5px; color: var(--text-2); }

.dt-map-card { margin-bottom: 16px; }
.dt-map-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
#dt-map { min-height: 300px; border-radius: 10px; overflow: hidden; background: #f4f6fb; }
.dt-radar { width: 100%; max-width: 420px; display: block; margin: 0 auto; background: #fbfcff; border-radius: 10px; }
.dt-dot { cursor: pointer; }
.dt-map-hint { text-align: center; margin-top: 8px; font-size: 12px; }

/* v23：真实地图头像气泡（腾讯 GL JS DOMMarker） */
.dt-pin { display: flex; flex-direction: column; align-items: center; cursor: pointer; user-select: none; }
.dt-pin-av { width: 38px; height: 38px; border-radius: 50%; border: 2px solid #fff; box-shadow: 0 2px 8px rgba(20,40,80,.28); object-fit: cover; background: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; color: #fff; }
.dt-pin-av-txt { background: linear-gradient(135deg,#e64980,#c2255c); font-size: 17px; }
.dt-pin-me .dt-pin-av { background: linear-gradient(135deg,#1c6fd6,#4dabf7); font-size: 13px; }
.dt-pin-name { margin-top: 4px; padding: 1px 7px; border-radius: 9px; background: rgba(255,255,255,.94); font-size: 11px; color: #333; white-space: nowrap; box-shadow: 0 1px 4px rgba(20,40,80,.2); max-width: 120px; overflow: hidden; text-overflow: ellipsis; }
.dt-pin-me .dt-pin-name { color: #1c6fd6; font-weight: 700; }
.dt-pin:hover .dt-pin-av { transform: scale(1.08); transition: transform .15s; }
.dt-flash { animation: dtFlash 1.5s ease; }
/* v32 位置校准 */
#dt-loc-calib.dt-calib-on { background: #fff3cd; border-color: #f0b429; color: #8a6d1a; font-weight: 600; }
#dt-map.dt-calibrating { cursor: crosshair; }
@keyframes dtFlash { 0%,100% { box-shadow: 0 1px 4px rgba(0,0,0,.06); } 30% { box-shadow: 0 0 0 5px rgba(230,73,128,.35); } }

.dt-near-list { display: flex; flex-direction: column; gap: 10px; }
.dt-user { display: flex; align-items: center; gap: 14px; padding: 14px 16px; }
.dt-av { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; flex: none; }
.dt-av-txt { display: inline-flex; align-items: center; justify-content: center; background: linear-gradient(135deg,#1c6fd6,#7a5bd6); color: #fff; font-weight: 700; font-size: 20px; }
.dt-av-lg { width: 64px; height: 64px; }
.dt-u-main { flex: 1; min-width: 0; }
.dt-u-name { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.dt-tag { font-size: 11.5px; padding: 1px 8px; border-radius: 10px; background: #eef1f8; color: var(--text-2); }
.dt-tag.dt-dist { background: #e8f4ee; color: #2f9e44; font-weight: 600; }
.dt-u-bio { font-size: 13.5px; color: var(--text-2); margin-top: 5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.dt-composer { margin-bottom: 16px; }
.dt-composer textarea { width: 100%; border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; font-size: 14px; resize: vertical; }
.dt-mc-imgs { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0; }
.dt-mc-thumb { position: relative; width: 72px; height: 72px; }
.dt-mc-thumb img { width: 100%; height: 100%; object-fit: cover; border-radius: 8px; }
.dt-mc-thumb i { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; background: var(--danger); color: #fff; border-radius: 50%; font-size: 11px; display: flex; align-items: center; justify-content: center; cursor: pointer; font-style: normal; }
.dt-mc-add { width: 72px; height: 72px; border: 1.5px dashed var(--line); border-radius: 8px; background: #fafbfe; font-size: 24px; color: var(--text-2); cursor: pointer; }
.dt-mc-add:hover { border-color: var(--primary); color: var(--primary); }
.dt-mc-actions { display: flex; align-items: center; justify-content: space-between; }

.dt-feed { display: flex; flex-direction: column; gap: 12px; max-width: 640px; }
.dt-moment { padding: 14px 16px; }
.dt-m-head { display: flex; align-items: center; gap: 10px; }
.dt-m-head .dt-av { width: 42px; height: 42px; font-size: 16px; }
.dt-m-hinfo { flex: 1; display: flex; flex-direction: column; }
.dt-m-hinfo span { font-size: 12px; }
.dt-like { flex: none; }
.dt-like.on { color: #e64980; border-color: #f6c6da; background: #fdeef4; }
.dt-m-content { margin-top: 10px; font-size: 14.5px; white-space: pre-wrap; word-break: break-word; }
.dt-m-imgs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin-top: 10px; }
.dt-m-imgs img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 8px; cursor: zoom-in; }

.dt-mine { max-width: 640px; }
.dt-mine-top { display: flex; align-items: center; gap: 14px; margin-bottom: 18px; }
.dt-ver-preview { font-size: 12.5px; }
@media (max-width: 640px) {
  .dt-ver-grid { grid-template-columns: 1fr; }
  .dt-m-imgs { grid-template-columns: repeat(3, 1fr); }
}

/* 笔记全览模式（v20） */
.nt-overview { display: flex; flex-direction: column; align-items: center; gap: 18px; padding: 6px 0 30px; }
.nt-ov-loading { color: var(--text-2); padding: 20px 0; }
.nt-ov-page { position: relative; box-shadow: 0 2px 10px rgba(20,30,60,.10); border-radius: 6px; overflow: hidden; cursor: pointer; transition: box-shadow .15s; background: #fff; }
.nt-ov-page:hover { box-shadow: 0 6px 18px rgba(28,111,214,.22); }
.nt-ov-page.current { outline: 3px solid #1c6fd6; }
.nt-ov-page canvas { display: block; width: 300px; height: auto; }
.nt-ov-label { position: absolute; left: 0; right: 0; bottom: 0; padding: 4px 0; text-align: center; font-size: 12px; color: #fff; background: rgba(20,30,60,.55); }
.mu-badge.src-kuwo { background: #fff0f0; color: #e0642f; font-weight: 600; }

/* v22：在线状态 / 校友认证 */
.dt-tag.dt-online { background: #e6f7ed; color: #2f9e44; font-weight: 600; }
.dt-tag.dt-offline { background: #f0f1f5; color: #9aa3b5; }
.dt-tag.dt-verified { background: #fff8e1; color: #b8860b; font-weight: 600; border: 1px solid #f0e0a0; }

/* ===== v36 双休企业频道 ===== */
#co-tabs .grow { flex: 1; }
.co-top10 { border: 1.5px solid #f1d38a; background: linear-gradient(180deg, #fffaf0, #fff); margin-bottom: 16px; }
.co-top10-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 10px; }
.co-top10-head h3 { font-size: 17px; }
.co-top10-head span { font-size: 12px; color: var(--text-2); }
.co-top-empty { padding: 4px 0 2px; }
.co-top10-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.co-top-item { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border: 1px solid #f1d38a; border-radius: 999px; background: #fffdf6; font-size: 13px; }
.co-medal { font-size: 13px; }
.co-top-name { font-weight: 600; max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.co-top-likes { color: var(--text-2); font-size: 12px; }
.co-list { display: flex; flex-direction: column; gap: 12px; }
.co-card { display: flex; gap: 14px; align-items: stretch; padding: 16px 18px; }
.co-card.co-in-top { border-color: #f1d38a; }
.co-main { flex: 1; min-width: 0; }
.co-name-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.co-name { font-size: 16px; font-weight: 700; }
.co-rank-badge { font-size: 11px; color: #b8860b; background: #fff4e0; border: 1px solid #f1d38a; border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.co-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 6px; }
.co-tag { font-size: 12px; color: var(--text-2); background: var(--bg); border: 1px solid var(--line); border-radius: 999px; padding: 2px 10px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.co-tag.wk-ok { color: var(--ok); border-color: #b2f2bb; background: #ebfbee; font-weight: 600; }
.co-tag.wk-mid { color: #b8860b; border-color: #ffe066; background: #fff9db; font-weight: 600; }
.co-tag.wk-bad { color: var(--danger); border-color: #ffc9c9; background: #fff5f5; font-weight: 600; }
.co-tag.co-biz { color: var(--primary); border-color: #bac8ff; background: var(--primary-light); }
.co-detail { font-size: 13px; color: var(--text); margin: 4px 0; white-space: pre-wrap; word-break: break-word; }
.co-meta { font-size: 12px; color: var(--text-2); margin-top: 4px; }
.co-votes { display: flex; flex-direction: column; gap: 8px; justify-content: center; }
.co-vote { display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 62px; padding: 7px 10px; border: 1px solid var(--line); border-radius: 10px; background: #fff; font-size: 16px; line-height: 1.3; transition: all .15s; }
.co-vote i { font-style: normal; font-size: 13px; font-weight: 700; color: var(--text-2); }
.co-vote.up.on { border-color: var(--ok); background: #ebfbee; }
.co-vote.up.on i { color: var(--ok); }
.co-vote.down.on { border-color: var(--danger); background: #fff5f5; }
.co-vote.down.on i { color: var(--danger); }
.co-vote:disabled { opacity: .6; }
@media (max-width: 560px) {
  .co-card { flex-direction: column; }
  .co-votes { flex-direction: row; }
  .co-vote { flex: 1; flex-direction: row; gap: 6px; }
}

/* ===== v37 Apple 风格细节 ===== */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, .18); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, .3); }

/* ===== v37.1 双休企业：推荐理由 + 图片/视频凭证 ===== */
.co-reason { margin: 8px 0 2px; padding: 10px 14px; border-left: 3px solid var(--primary); background: var(--primary-light); border-radius: 0 12px 12px 0; font-size: 13px; line-height: 1.7; color: var(--text); }
.co-reason b { display: block; font-size: 12px; color: var(--primary); margin-bottom: 3px; letter-spacing: .02em; }
.co-media { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 8px; margin-top: 10px; }
.co-media-item { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 12px; border: 1px solid rgba(0, 0, 0, .06); background: #000; cursor: pointer; }
video.co-media-item { cursor: default; }
.co-media-pick { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.co-media-tip { font-size: 12px; color: var(--text-2); }
.co-media-pre { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.co-pre-item { position: relative; width: 72px; height: 72px; border-radius: 10px; overflow: hidden; border: 1px solid var(--line); background: #000; }
.co-pre-item img, .co-pre-item video { width: 100%; height: 100%; object-fit: cover; display: block; }
.co-pre-badge { position: absolute; left: 4px; bottom: 4px; font-style: normal; font-size: 10px; color: #fff; background: rgba(0, 0, 0, .55); border-radius: 4px; padding: 1px 5px; }
.co-pre-del { position: absolute; top: 2px; right: 2px; width: 18px; height: 18px; border: none; border-radius: 50%; background: rgba(0, 0, 0, .6); color: #fff; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }
.co-pre-del:hover { background: rgba(215, 0, 21, .85); }
@media (max-width: 560px) {
  .co-media { grid-template-columns: repeat(2, 1fr); }
  .co-media-item { aspect-ratio: 16 / 10; }
}

/* ===== v38 树洞频道（学校认证解锁，匿名） ===== */
.th-composer { padding: 18px 20px; }
.th-rule { font-size: 12px; color: var(--primary); background: var(--primary-light); border-radius: 8px; padding: 6px 12px; margin-bottom: 10px; }
.th-composer textarea { width: 100%; border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px; font-size: 14px; resize: vertical; outline: none; background: #fff; font-family: inherit; line-height: 1.6; }
.th-composer textarea:focus { border-color: var(--primary); box-shadow: 0 0 0 4px rgba(0, 113, 227, .12); }
.th-send-row { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; }
.th-tip { font-size: 12px; color: var(--text-2); }
.th-list { display: flex; flex-direction: column; gap: 12px; }
.th-card { padding: 16px 18px; }
.th-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.th-anon { font-size: 13px; font-weight: 600; color: var(--text); }
.th-anon.sm { font-size: 12px; font-weight: 600; margin-right: 8px; }
.th-time { font-size: 12px; color: var(--text-2); }
.th-content { font-size: 15px; line-height: 1.7; white-space: pre-wrap; word-break: break-word; }
.th-ops { display: flex; gap: 14px; margin-top: 12px; }
.th-btn { display: inline-flex; align-items: center; gap: 5px; border: none; background: none; font-size: 13px; color: var(--text-2); padding: 4px 8px; border-radius: 999px; transition: background .15s; }
.th-btn:hover { background: var(--bg); }
.th-btn.on { color: var(--danger); }
.th-btn i { font-style: normal; font-weight: 600; }
.th-cmts { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 8px; }
.th-cmt { font-size: 13px; line-height: 1.6; }
.th-cmt-txt { color: var(--text); }
.th-cmt .th-time { margin-left: 8px; }
.th-cmt-input { display: flex; gap: 8px; margin-top: 6px; }
.th-cmt-input input { flex: 1; border: 1px solid var(--line); border-radius: 999px; padding: 8px 14px; font-size: 13px; outline: none; background: #fff; }
.th-cmt-input input:focus { border-color: var(--primary); }

/* ===== v42 macOS Liquid Glass：全局组件玻璃化 ===== */
/* 玻璃容器统一：模糊背景 + 高光描边 + 柔和投影 */
.mm-item, .charts-panel, .charts-canvas-panel, .board-card, .tb-thread-list,
.tb-title-bar, .tb-floor, .editor-box, .wizard, .as-panel, .stat-card, .pc-stat,
.mu-card, .ntf-item, .en-topic-card, .vocab-lv, .vocab-card, .note-card,
.dt-ver-card, .chat-side, .chat-main, .co-card, .th-card, .note-toolbar,
.mm-toolbar, .hdx-card, .tb-empty, .mu-lyrics, .mm-outline-panel, .chat-input-row,
.tb-floor-side, .re-toolbar, .re-area, .wizard-steps, .as-panel-title, .tb-list-head {
  -webkit-backdrop-filter: blur(22px) saturate(180%);
  backdrop-filter: blur(22px) saturate(180%);
}
.mm-item, .charts-panel, .charts-canvas-panel, .board-card, .tb-thread-list,
.tb-title-bar, .tb-floor, .editor-box, .wizard, .as-panel, .stat-card, .pc-stat,
.mu-card, .ntf-item, .en-topic-card, .vocab-lv, .vocab-card, .note-card,
.dt-ver-card, .chat-side, .chat-main, .co-card, .th-card, .note-toolbar,
.mm-toolbar, .hdx-card, .tb-empty {
  border-color: rgba(255, 255, 255, .66);
  box-shadow: 0 4px 24px rgba(31, 41, 90, .08), inset 0 1px 0 rgba(255, 255, 255, .85);
}
.tb-floor-side, .re-toolbar, .re-area, .wizard-steps, .as-panel-title,
.tb-list-head, .mu-lyrics { background: rgba(255, 255, 255, .55) !important; }
.tb-thread:hover { background: rgba(255, 255, 255, .5); }
.tb-pinned { background: rgba(255, 250, 235, .55); }
.tb-list-head { border-bottom-color: rgba(60, 70, 110, .10); }
.chat-msgs { background: rgba(255, 255, 255, .30); }
.mm-outline-panel { background: rgba(255, 255, 255, .5); }
.nt-body { background: rgba(226, 232, 246, .7); }

/* 胶囊筛选 / 标签页玻璃化 */
.hdx-chip, .tab, .sub-tab { background: rgba(255, 255, 255, .58); -webkit-backdrop-filter: blur(14px) saturate(160%); backdrop-filter: blur(14px) saturate(160%); box-shadow: 0 1px 8px rgba(31, 41, 90, .08), inset 0 1px 0 rgba(255, 255, 255, .8); }
.hdx-chip:hover, .tab:hover, .sub-tab:hover { background: rgba(255, 255, 255, .85); color: var(--text); }
.hdx-chip.active, .tab.active, .sub-tab.active { background: linear-gradient(180deg, #1e90ff, #0066d6); border-color: transparent; color: #fff; box-shadow: 0 4px 14px rgba(0, 113, 227, .35), inset 0 1px 0 rgba(255, 255, 255, .4); }
.sub-tab.active { border-color: transparent; }
.hdx-chip.active { border-color: transparent; }
.mm-sel-label select { background: rgba(255, 255, 255, .7); }

/* 输入类玻璃化（含各频道独立输入框） */
.field textarea, .th-composer textarea, .dt-composer textarea, .chat-input-row textarea,
.mu-searchbar input, .search-bar input, .en-input-row input, .vocab-toolbar input,
.chart-row input, .th-cmt-input input, .review-input input, .invite-link-row input,
#manage-body input, #manage-body select, .mm-title-input, .nt-title-input,
.mm-edit-input, .ol-input, .re-area, .nt-text.nt-editing {
  background: rgba(255, 255, 255, .62);
  border-color: rgba(60, 70, 110, .16);
}
.th-composer textarea:focus, .th-cmt-input input:focus, .mu-searchbar input:focus,
.search-bar input:focus { background: rgba(255, 255, 255, .92); box-shadow: 0 0 0 4px rgba(0, 113, 227, .14); }

/* 模态框 / toast：深浅玻璃 */
.modal-root { background: rgba(24, 30, 58, .38); -webkit-backdrop-filter: blur(14px) saturate(140%); backdrop-filter: blur(14px) saturate(140%); }
.modal { background: rgba(255, 255, 255, .88); -webkit-backdrop-filter: blur(30px) saturate(190%); backdrop-filter: blur(30px) saturate(190%); border: 1px solid rgba(255, 255, 255, .75); box-shadow: 0 24px 64px rgba(20, 28, 70, .30), inset 0 1px 0 rgba(255, 255, 255, .9); border-radius: 22px; }
.toast { background: rgba(26, 28, 44, .82); -webkit-backdrop-filter: blur(18px) saturate(170%); backdrop-filter: blur(18px) saturate(170%); border: 1px solid rgba(255, 255, 255, .16); box-shadow: 0 10px 32px rgba(20, 28, 70, .35); }
.toast.toast-err { background: rgba(198, 12, 32, .88); border-color: rgba(255, 255, 255, .25); }

/* 音乐播放器：玻璃舱 */
.mu-player { background: rgba(20, 26, 52, .68); -webkit-backdrop-filter: blur(26px) saturate(180%); backdrop-filter: blur(26px) saturate(180%); border-top: 1px solid rgba(255, 255, 255, .14); box-shadow: 0 -8px 32px rgba(16, 24, 60, .40); }
.mu-disc { box-shadow: 0 0 0 3px rgba(255, 255, 255, .22), 0 4px 14px rgba(0, 0, 0, .3); }

/* 滚动条玻璃化 */
::-webkit-scrollbar-thumb { background: rgba(50, 60, 110, .28); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: rgba(50, 60, 110, .42); }

/* 杂项浅灰底统一提亮 */
.u-chip, .dt-tag, .signed-users .u-chip { background: rgba(255, 255, 255, .6); }
.pc-stat, .pc-record:hover, .chat-friend:hover { background: rgba(255, 255, 255, .55); }
.co-vote { background: rgba(255, 255, 255, .7); }
.wizard-foot { background: rgba(255, 255, 255, .6); }
.acard { box-shadow: 0 14px 40px rgba(58, 52, 160, .35); }
.vc-long, .en-split, .en-bot { background: rgba(255, 255, 255, .55); }
.invite-code { background: var(--primary-light); }

/* v42 细节微调 */
.re-area { background: rgba(255, 255, 255, .80); }
.wizard-foot { background: rgba(255, 255, 255, .75); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); }
.hdx-signup-card { top: 88px; }
.tb-floor { border-top: 1px solid rgba(60, 70, 110, .08); }
.tb-floor + .tb-floor { border-top: none; }

/* ===== v43 单词大冒险：游戏化样式 ===== */
/* 玩家档案条 */
.game-profile { display: flex; align-items: center; gap: 16px; background: linear-gradient(135deg, #5b5fc7, #7b5be6 55%, #b05be6); color: #fff; border-radius: 18px; padding: 18px 24px; box-shadow: 0 8px 24px rgba(91, 95, 199, .35); }
.gp-avatar { width: 56px; height: 56px; border-radius: 50%; background: rgba(255, 255, 255, .22); display: flex; align-items: center; justify-content: center; font-size: 30px; flex: none; border: 2px solid rgba(255, 255, 255, .45); }
.gp-main { flex: 1; min-width: 0; }
.gp-line1 { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.gp-lv { font-size: 20px; font-weight: 900; }
.gp-title { font-size: 13px; background: rgba(255, 255, 255, .22); border-radius: 980px; padding: 2px 12px; }
.gp-res { margin-left: auto; font-size: 15px; font-weight: 700; }
.gp-res + .gp-res { margin-left: 0; }
.gp-xpbar { height: 10px; background: rgba(255, 255, 255, .25); border-radius: 980px; margin-top: 10px; overflow: hidden; }
.gp-xpbar > div { height: 100%; background: linear-gradient(90deg, #ffd43b, #ff9f0a); border-radius: 980px; transition: width .5s var(--ease); }
.gp-xptxt { font-size: 12px; opacity: .9; margin-top: 5px; }
.gp-ach { display: flex; gap: 8px; margin: 10px 2px 0; flex-wrap: wrap; }
.gp-badge { font-size: 20px; width: 38px; height: 38px; display: inline-flex; align-items: center; justify-content: center; border-radius: 12px; background: rgba(120, 120, 140, .12); filter: grayscale(1); opacity: .45; cursor: help; transition: all .2s; }
.gp-badge.got { filter: none; opacity: 1; background: rgba(255, 255, 255, .75); box-shadow: 0 2px 8px rgba(91, 95, 199, .25); }
.gp-badge.got:hover { transform: translateY(-2px) scale(1.08); }

/* 关卡地图：锁定 / 星星 */
.vocab-lv.lock { opacity: .55; cursor: not-allowed; background: rgba(150, 150, 165, .15); }
.vocab-lv.lock .lv-n { color: #8a8a92; }
.vocab-lv .lv-stars { font-size: 13px; color: #f5a623; letter-spacing: 1px; }
.vocab-lv.done { background: linear-gradient(160deg, rgba(255, 244, 214, .9), rgba(255, 230, 160, .55)); border-color: #ffd43b; }
.vocab-lv.done .lv-n { color: #b8860b; }

/* 游戏 HUD */
.game-hud { display: flex; align-items: center; gap: 12px; padding: 10px 16px; border-radius: 14px; background: rgba(255, 255, 255, .72); border: 1px solid rgba(255, 255, 255, .8); box-shadow: 0 2px 12px rgba(31, 41, 90, .08); margin-bottom: 10px; font-size: 14px; }
.hud-hearts { font-size: 17px; letter-spacing: 2px; }
.g-heart { display: inline-block; transition: all .25s; }
.g-heart.lost { filter: grayscale(1); opacity: .3; transform: scale(.8); }
.hud-combo { font-size: 13px; font-weight: 800; color: #adb5bd; min-width: 90px; }
.hud-combo.hot { color: #ff6b22; animation: comboPop .3s var(--ease); }
@keyframes comboPop { 0% { transform: scale(1); } 50% { transform: scale(1.3); } 100% { transform: scale(1); } }
.hud-score { font-weight: 600; color: #495057; position: relative; }
.hud-score b { font-size: 17px; color: #1d1d1f; }
.hud-qn { font-size: 13px; color: #86868b; font-weight: 600; }

/* 倒计时条 */
.hud-timer { height: 8px; border-radius: 980px; background: rgba(120, 120, 140, .18); overflow: hidden; margin-bottom: 16px; }
.hud-timer-bar { height: 100%; width: 100%; border-radius: 980px; background: linear-gradient(90deg, #51cf66, #94d82d); transition: width .1s linear, background .3s; }
.hud-timer-bar.low { background: linear-gradient(90deg, #ff6b6b, #f03e3e); }

/* 得分飘字 */
.g-float { position: absolute; left: 50%; top: -4px; transform: translateX(-50%); font-size: 18px; font-weight: 900; color: #f5a623; pointer-events: none; animation: floatUp .9s ease-out forwards; text-shadow: 0 1px 4px rgba(255, 255, 255, .8); }
@keyframes floatUp { 0% { opacity: 0; transform: translate(-50%, 6px) scale(.8); } 25% { opacity: 1; transform: translate(-50%, -4px) scale(1.15); } 100% { opacity: 0; transform: translate(-50%, -26px) scale(1); } }

/* 结算：星星 / 奖励 / 升级 */
.g-stars { font-size: 46px; letter-spacing: 10px; margin-bottom: 6px; }
.g-star { color: rgba(150, 150, 165, .3); display: inline-block; }
.g-star.on { color: #f5a623; text-shadow: 0 0 14px rgba(245, 166, 35, .55); animation: starPop .5s var(--ease) backwards; }
@keyframes starPop { 0% { transform: scale(0) rotate(-40deg); opacity: 0; } 60% { transform: scale(1.35) rotate(8deg); opacity: 1; } 100% { transform: scale(1) rotate(0); } }
.g-reward { font-size: 15px; font-weight: 700; color: #5b5fc7; margin: 6px 0; }
.g-levelup { display: inline-block; margin: 10px 0 4px; padding: 8px 22px; border-radius: 980px; background: linear-gradient(135deg, #ffd43b, #ff9f0a); color: #fff; font-weight: 900; font-size: 16px; box-shadow: 0 6px 18px rgba(255, 159, 10, .4); animation: comboPop .45s var(--ease); }

/* 失败结算页 */
.g-over { text-align: center; padding: 44px 16px; max-width: 560px; margin: 0 auto; }
.g-over-icon { font-size: 64px; animation: comboPop .5s var(--ease); }
.g-over h2 { font-size: 26px; margin: 10px 0 6px; }
.g-over .g-reward { font-size: 16px; }

/* 选项微动效 */
.en-opt { transition: transform .12s var(--ease), background .2s, box-shadow .2s; }
.en-opt:not(:disabled):hover { transform: translateX(4px); }
.en-opt-right { animation: optRight .3s var(--ease); }
@keyframes optRight { 0% { transform: scale(1); } 50% { transform: scale(1.02); } 100% { transform: scale(1); } }

/* ===== v45 本硕考试系统：整卷作答 / 社区试卷 ===== */
.exam-paper-head { display: flex; align-items: flex-start; gap: 14px; flex-wrap: wrap; margin-bottom: 6px; }
.exam-btn-ghost { background: rgba(255, 255, 255, .25); color: #fff; border: 1px solid rgba(255, 255, 255, .5); margin-left: 8px; }
.exam-btn-ghost:hover { background: rgba(255, 255, 255, .4); }
.ex-q { background: var(--card, rgba(255, 255, 255, .62)); border: 1px solid var(--line, #e8e8ed); border-radius: 16px; padding: 16px 20px; margin: 12px 0; max-width: 860px; margin-left: auto; margin-right: auto; }
.ex-q-title { font-size: 15px; line-height: 1.7; color: #1d1d1f; margin-bottom: 10px; }
.ex-q-title b { color: #0071e3; margin-right: 4px; }
.ex-q-opts { display: flex; flex-direction: column; gap: 8px; }
.ex-opt { text-align: left; padding: 10px 16px; border-radius: 12px; border: 1px solid rgba(60, 70, 110, .16); background: rgba(255, 255, 255, .6); cursor: pointer; font-size: 14px; line-height: 1.6; transition: all .15s var(--ease); }
.ex-opt:hover { border-color: #0071e3; background: rgba(0, 113, 227, .06); }
.ex-opt.sel { background: rgba(0, 113, 227, .12); border-color: #0071e3; color: #1d1d1f; font-weight: 600; box-shadow: 0 0 0 3px rgba(0, 113, 227, .12); }
.ex-vote-row { margin-top: 10px; font-size: 13px; color: #86868b; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ex-vote { padding: 3px 12px; border-radius: 980px; border: 1px solid rgba(60, 70, 110, .2); background: rgba(255, 255, 255, .6); font-size: 12px; cursor: pointer; transition: all .15s; }
.ex-vote:hover { border-color: #ff9f0a; color: #ff9f0a; }
.ex-vote:disabled { opacity: .5; cursor: wait; }
.exam-imgs { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin: 8px 0 16px; }
.exam-imgs a { display: block; border-radius: 12px; overflow: hidden; border: 1px solid var(--line, #e8e8ed); transition: transform .2s var(--ease); }
.exam-imgs a:hover { transform: scale(1.02); }
.exam-imgs img { width: 100%; height: 150px; object-fit: cover; display: block; background: #f5f5f7; }

/* ===== v46 马里奥挑战赛（跑酷背单词） ===== */
.mario-hero { display: flex; align-items: center; gap: 16px; margin: 16px 0 6px; padding: 16px 20px; border-radius: 18px;
  background: linear-gradient(135deg, #5c94fc, #7db9ff); color: #fff;
  box-shadow: 0 8px 24px rgba(92, 148, 252, .30); }
.mario-hero .mario-face { font-size: 46px; line-height: 1; filter: drop-shadow(0 3px 6px rgba(0, 0, 0, .2)); }
.mario-hero-txt { flex: 1; min-width: 0; }
.mario-hero h3 { margin: 0 0 4px; color: #fff; font-size: 17px; letter-spacing: .5px; }
.mario-hero p { margin: 2px 0; font-size: 13px; line-height: 1.55; color: rgba(255, 255, 255, .95); }
.mario-hero p.muted { color: rgba(255, 255, 255, .78) !important; }
.mario-hero .btn-primary { flex-shrink: 0; }
.mario-stage { border-radius: 16px; overflow: hidden; border: 1px solid rgba(0, 0, 0, .08);
  box-shadow: 0 10px 30px rgba(0, 0, 0, .10); background: #5c94fc; }
.mario-stage canvas { display: block; width: 100%; height: auto; }
.mario-stage.shake { animation: mario-shake .42s var(--ease, ease); }
@keyframes mario-shake {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-7px); }
  40% { transform: translateX(7px); }
  60% { transform: translateX(-4px); }
  80% { transform: translateX(4px); }
}
.mario-q { margin-top: 14px; }
.mario-qword { display: flex; align-items: center; gap: 8px; font-size: 20px; margin-bottom: 10px; flex-wrap: wrap; }
.mario-qtip { font-size: 12px; color: #8a93a8; font-weight: 400; }
.mario-opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
@media (max-width: 640px) {
  .mario-opts { grid-template-columns: 1fr; }
  .mario-hero { flex-wrap: wrap; }
  .mario-hero .btn-primary { width: 100%; }
}

/* ===== v47 剧情推送机器人 ===== */
.drama-badge { display: inline-block; margin-left: 8px; padding: 2px 10px; border-radius: 980px; vertical-align: middle;
  font-size: 11px; font-weight: 600; color: #8a5a00; background: linear-gradient(135deg, #ffe9b8, #ffd479);
  border: 1px solid rgba(200, 140, 0, .25); }


/* ===== v48 MATLAB 在线版 ===== */
.ml-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 900px) { .ml-wrap { grid-template-columns: 1fr; } }
.ml-left, .ml-right { display: flex; flex-direction: column; min-height: 420px; }
.ml-toolbar, .gu-toolbar { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid rgba(0,0,0,.06); flex-wrap: wrap; }
.ml-toolbar select, .gu-toolbar select { border: 1px solid rgba(0,0,0,.12); border-radius: 8px; padding: 5px 8px; background: #fff; font-size: 13px; }
#ml-editor, #gu-editor { flex: 1; min-height: 300px; resize: vertical; border: none; outline: none; padding: 14px 16px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13.5px; line-height: 1.65;
  background: transparent; color: var(--text, #1d2433); tab-size: 2; }
.ml-out-head, .gu-out-head { padding: 8px 14px; font-size: 12px; font-weight: 600; color: #8a93a8; letter-spacing: .5px;
  border-bottom: 1px solid rgba(0,0,0,.06); background: rgba(0,0,0,.02); }
.ml-out, .gu-out { flex: 1; overflow: auto; padding: 12px 14px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12.8px; line-height: 1.6; white-space: pre-wrap; word-break: break-all; max-height: 420px; min-height: 220px; }
.ml-line.ml-err { color: #d92d20; font-weight: 600; }
.ml-cmd-echo { color: #6b7a99; }
.ml-welcome, .gu-welcome { color: #8a93a8; }
.ml-cmd-row { display: flex; align-items: center; gap: 8px; padding: 8px 14px; border-top: 1px solid rgba(0,0,0,.06); }
.ml-prompt { font-family: ui-monospace, Menlo, monospace; font-weight: 700; color: #3b82f6; }
#ml-cmd { flex: 1; border: none; outline: none; background: transparent; font-family: ui-monospace, Menlo, monospace; font-size: 13px; color: var(--text, #1d2433); }
.ml-fig-wrap { border-top: 1px solid rgba(0,0,0,.06); padding: 10px; display: flex; justify-content: center; }
.ml-fig-wrap canvas { width: 100%; max-width: 620px; height: auto; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,.08); background: #fff; }

/* ===== v48 Gurobi 在线版 ===== */
.gu-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 900px) { .gu-wrap { grid-template-columns: 1fr; } }
.gu-left, .gu-right { display: flex; flex-direction: column; min-height: 460px; }
.gu-line { padding: 1px 0; }
.gu-err { color: #d92d20; font-weight: 600; }
.gu-sep { color: #6b7a99; font-weight: 600; margin-top: 6px; }
