/* SmashCut H5 SPA — 页面专属样式 */
:root {
  --bg: var(--bg-primary);
  --bg-card2: #222;
  --accent-light: #81C784;
  --accent-dark: #388E3C;
  --text: var(--text-primary);
  --text2: var(--text-secondary);
  --text3: var(--text-muted);
  --border: var(--border-light);
  --radius: var(--radius-md);
  --max-w: 480px;
  --human: #FFC107;

  --ai: #2196F3;
  --info: #2196F3;
  --reviewed: var(--accent);
}
/* iPad/平板/桌面：内容容器铺开（手机仍 480 居中） */
@media (min-width: 600px) {
  :root { --max-w: 1100px; }
}
* { margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
html,body { height:100%; overflow:hidden; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro", "Segoe UI", sans-serif;
  background: var(--bg); color: var(--text); font-size: 15px;
  display:flex; flex-direction:column; max-width:var(--max-w); margin:0 auto;
}
a { color:var(--accent); text-decoration:none; }
::-webkit-scrollbar { width:4px; }
::-webkit-scrollbar-thumb { background:var(--border); border-radius:4px; }

/* ── Header ── */
#app-header {
  display:flex; align-items:center;
  padding:8px 12px; background:var(--bg); border-bottom:1px solid var(--border);
  min-height:44px; flex-shrink:0; gap:4px;
}
#app-header .title { font-size:17px; font-weight:700; }
#app-header .header-logo { height:22px; width:auto; display:block; margin-right:6px; cursor:pointer; }
#app-header .back { font-size:13px; color:var(--text2); cursor:pointer; padding:4px 8px; }

/* ── 全局提示行（主标题下一行，P1-R4 替代底部状态条） ── */
#headerStatus {
  display:none; align-items:center; gap:8px;
  padding:8px 16px; background:rgba(76,175,80,0.1);
  border-bottom:1px solid var(--border); font-size:13px; color:var(--text2);
}
#headerStatus.show { display:flex; }
body.page-login #headerStatus { display:none !important; }

/* ── 底部状态条（R4：隐藏不删 DOM，逻辑迁到 #headerStatus） ── */
#status-bar, #status-bar.show { display:none !important; }
#app-header .user-badge {
  font-size:12px; color:var(--text2); display:flex; align-items:center; gap:6px; margin-left:auto;
  position:relative;
}
#app-header .user-badge .admin-tag {
  font-size:10px; background:var(--accent-dark); color:#fff; padding:1px 6px; border-radius:4px;
}
/* F1：用户名可点 → 下拉菜单（退出登录入口） */
#app-header .user-badge .user-name {
  font-size:12px; font-weight:600; color:var(--accent,#4CAF50);
  cursor:pointer; padding:3px 8px; border-radius:12px; border:1px solid var(--border,#333);
  background:var(--bg-card,#1a1a1a); white-space:nowrap; max-width:96px; overflow:hidden; text-overflow:ellipsis;
  -webkit-user-select:none; user-select:none;
}
#app-header .user-badge .user-name:active { opacity:0.7; }
.user-menu {
  position:absolute; top:calc(100% + 6px); right:0; z-index:60;
  min-width:150px; padding:6px; display:none;
  background:var(--bg-card,#1a1a1a); border:1px solid var(--border,#333); border-radius:10px;
  box-shadow:0 6px 20px rgba(0,0,0,0.45);
}
.user-menu.open { display:block; }
.user-menu-head {
  font-size:13px; font-weight:600; color:var(--text,#e0e0e0);
  padding:8px 10px; border-bottom:1px solid var(--border,#333); margin-bottom:4px;
  word-break:break-all;
}
.user-menu-item {
  display:block; width:100%; text-align:left; padding:10px 12px; margin-top:2px;
  background:none; border:none; border-radius:8px; cursor:pointer;
  font-size:13px; font-weight:600; color:var(--danger,#e53935); -webkit-user-select:none; user-select:none;
}
.user-menu-item:active { background:rgba(244,67,54,0.12); }
/* cl-546：游客页头登录入口（已登录时隐藏，样式对齐 user-name 胶囊按钮） */
#app-header .login-link {
  font-size:12px; font-weight:600; color:var(--accent,#4CAF50);
  cursor:pointer; padding:3px 10px; border-radius:12px; border:1px solid var(--border,#333);
  background:var(--bg-card,#1a1a1a); white-space:nowrap; margin-left:auto;
  -webkit-user-select:none; user-select:none;
}
#app-header .login-link:active { opacity:0.7; }
.env-tag {
  font-size:10px; padding:2px 7px; border-radius:4px; font-weight:600; line-height:1.4;
  white-space:nowrap;
}
.env-tag.ecs { background:rgba(76,175,80,0.15); color:var(--accent); }
.env-tag.workbench { background:rgba(33,150,243,0.15); color:var(--info); }

/* ── Content ── */
#app-content { flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; touch-action:pan-y; overscroll-behavior:none; padding-bottom:70px; }

/* ── 登录页：隐藏全局 header / 底部导航（独立全屏登录视图） ── */
body.page-login #app-header, body.page-login #app-nav { display:none; }

/* ── Bottom Nav ── */
#app-nav {
  display:none; flex-shrink:0;
  border-top:1px solid var(--border); background:var(--bg-card);
  padding:6px 0 env(safe-area-inset-bottom,6px) 0;
}
#app-nav.show { display:flex; }
#app-nav a {
  flex:1; text-align:center; padding:6px 4px;
  font-size:11px; color:var(--text3); text-decoration:none;
  display:flex; flex-direction:column; align-items:center; gap:2px;
  transition:color 0.2s;
}
#app-nav a.active { color:var(--accent); }
#app-nav a .nav-icon { font-size:20px; line-height:1; }
.nav-badge {
  position:absolute; font-size:9px; font-weight:700;
  min-width:15px; height:15px; line-height:15px;
  border-radius:8px; text-align:center; padding:0 4px;
  color:#fff; pointer-events:none; display:none;
  box-shadow:0 1px 3px rgba(0,0,0,0.4);
}
.nav-badge-auto { background:var(--accent); top:-3px; right:-10px; }
.nav-badge-refined { background:var(--human); color:#000; top:9px; right:-10px; }

/* ── Sections / Pages ── */
.page { display:none; padding:16px; }
.page.active { display:block; }

/* ── 2026-08-06 回归修复（F2）：上传/下载页恢复整页滚动。
     R6 单屏固定化曾致上传按钮被挤出可视区无法滚动到达，故移除。
     整页随 #app-content 滚动（默认 overflow-y:auto + padding-bottom:70px 防底导航遮挡）。
     选片页（page-annotate）2026-08-05 已取消单页 ── */

/* ── Cards ── */
.card { background:var(--bg-card); border-radius:var(--radius); padding:16px; margin-bottom:12px; }
.card-title { font-size:14px; font-weight:600; margin-bottom:8px; }
.card-row { display:flex; justify-content:space-between; align-items:center; padding:6px 0; font-size:14px; }
.card-row .label { color:var(--text3); font-size:13px; }
.card-row .value { color:var(--text2); font-weight:500; }

/* ── Buttons ── */
.btn {
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  padding:12px 24px; border:none; border-radius:var(--radius-sm);
  font-size:15px; font-weight:600; cursor:pointer;
  transition:opacity 0.2s; width:100%;
}
.btn:active { opacity:0.7; }
.btn-primary { background:var(--accent); color:#fff; }
.btn-primary:disabled { opacity:0.4; cursor:not-allowed; }
.btn-danger { background:var(--danger); color:#fff; }
.btn-outline { background:transparent; border:1px solid var(--border); color:var(--text2); }
.btn-sm { padding:8px 16px; font-size:13px; width:auto; }
.btn-icon { width:auto; padding:10px 14px; border-radius:var(--radius-sm); font-size:13px; }

/* ── Form ── */
.form-group { margin-bottom:14px; }
.form-group label { display:block; font-size:13px; color:var(--text2); margin-bottom:4px; }
.form-input {
  width:100%; padding:12px 14px; background:var(--bg-card2); border:1px solid var(--border);
  border-radius:var(--radius-sm); color:var(--text); font-size:15px; outline:none;
  transition:border-color 0.2s;
}
.form-input:focus { border-color:var(--accent); }
.form-input::placeholder { color:var(--text3); }

/* ── Tabs ── */
.tabs { display:flex; border-bottom:1px solid var(--border); margin-bottom:16px; }
.tab { flex:1; text-align:center; padding:10px; font-size:14px; color:var(--text3); cursor:pointer; border-bottom:2px solid transparent; transition:all 0.2s; }
.tab.active { color:var(--accent); border-bottom-color:var(--accent); }

/* ── Status Badges ── */
.badge {
  display:inline-block; font-size:11px; padding:2px 8px; border-radius:10px; font-weight:600;
}
.badge-uploaded { background:#2a2a2a; color:var(--text2); }
.badge-processing { background:#1a3a1a; color:var(--accent-light); }
.badge-done { background:#1a3a1a; color:var(--accent); }
.badge-serve { background:#3a2a1a; color:#ffa726; }
.badge-failed { background:#3a1a1a; color:var(--danger); }

/* ── Progress Bar ── */
.progress-bar {
  height:4px; background:var(--border); border-radius:2px; overflow:hidden; margin:8px 0;
}
.progress-bar .fill {
  height:100%; background:var(--accent); border-radius:2px; transition:width 0.5s ease;
}

/* ── Upload Area（R5：drop-zone 高饱和绿边框/发光） ── */
.upload-area {
  border:2px dashed var(--accent); border-radius:var(--radius);
  padding:40px 20px; text-align:center; cursor:pointer;
  background:rgba(76,175,80,0.06);
  box-shadow:0 0 16px rgba(76,175,80,0.28), inset 0 0 20px rgba(76,175,80,0.06);
  transition:border-color 0.2s, background 0.2s; margin-bottom:16px;
}
.upload-area:hover, .upload-area:active { border-color:var(--accent-light); background:rgba(76,175,80,0.12); box-shadow:0 0 24px rgba(76,175,80,0.42), inset 0 0 24px rgba(76,175,80,0.1); }
.upload-area.has-file { border-color:var(--accent); background:rgba(76,175,80,0.12); }
/* P1-1：拖拽悬停态 */
.upload-area.drag-over {
  border-color:var(--accent-light); background:rgba(76,175,80,0.16);
  box-shadow:0 0 28px rgba(76,175,80,0.55), inset 0 0 28px rgba(76,175,80,0.14);
  transform:scale(1.02);
}
/* P2-2：移动端上传按钮规格 */
#uploadArea, #uploadBtn { min-width:80%; }
#uploadBtn { min-height:56px; }
#uploadArea { min-height:56px; }
.upload-icon { font-size:40px; margin-bottom:8px; }
.upload-text { color:var(--text2); font-size:14px; }
.upload-text small { display:block; color:var(--text3); font-size:12px; margin-top:4px; }

/* ── File Info ── */
.file-info { background:var(--bg-card2); border-radius:var(--radius-sm); padding:12px; margin-bottom:12px; }
.file-info .name { font-size:14px; font-weight:500; word-break:break-all; }
.file-info .size { font-size:12px; color:var(--text3); margin-top:2px; }

/* ── Pre-check ── */
.precheck { font-size:12px; padding:8px 12px; border-radius:var(--radius-sm); margin-bottom:12px; }
.precheck.ok { background:rgba(76,175,80,0.1); color:var(--accent-light); }
.precheck.warn { background:rgba(255,152,0,0.1); color:var(--warn); }
.precheck.reject { background:rgba(244,67,54,0.1); color:var(--danger); }

/* ── Job List ── */
.job-card { background:var(--bg-card); border-radius:var(--radius); padding:14px; margin-bottom:10px; }
/* P0-1：上传后聚焦高亮（短暂） */
.job-card.processing-flash, .job-thumb.processing-flash {
  border:2px solid var(--accent); box-shadow:0 0 12px rgba(76,175,80,0.5);
  animation:queuePulse 1.2s ease infinite;
}
.job-card .top { display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:6px; }
.job-card .name { font-size:14px; font-weight:500; flex:1; margin-right:8px; word-break:break-all; }
.job-card .meta { font-size:12px; color:var(--text3); display:flex; gap:12px; }
.job-card .actions { margin-top:10px; display:flex; gap:8px; flex-wrap:wrap; }
.job-card .progress-msg { font-size:12px; color:var(--text2); margin-top:4px; }
/* U1：上传列表缩略图卡片墙（网格两列，类似小程序首页卡片墙）——封面占宽 + 下方信息 */
.upload-job-grid { display:flex; flex-wrap:wrap; gap:10px; }
.job-thumb { width:calc(50% - 5px); box-sizing:border-box; padding:8px; background:var(--bg-card); border-radius:var(--radius); }
.job-thumb-row { display:block; }
.job-thumb .job-cover { position:relative; width:100%; aspect-ratio:16/10; background:#0d1b2a; border-radius:6px; overflow:hidden; }
.job-thumb .job-cover img { width:100%; height:100%; object-fit:cover; display:block; }
.job-thumb .cover-fallback { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-size:28px; color:var(--text3); }
.job-thumb .badge { position:absolute; top:6px; right:6px; font-size:11px; padding:2px 6px; }
.job-thumb-info { min-width:0; display:block; margin-top:6px; }
.job-thumb-name { font-size:12px; font-weight:500; color:var(--text); word-break:break-all; line-height:1.3; }
.job-thumb-meta { font-size:11px; color:var(--text3); margin-top:2px; }
.job-thumb .job-thumb-actions { display:flex; gap:6px; margin-top:8px; }
.job-thumb .progress-bar { height:4px; margin-top:6px; }
.job-thumb .progress-bar .fill { transition:width .3s; }

/* ── 选片页 ── */
.sel-seg-item {
  display:flex; align-items:center; justify-content:space-between;
  padding:8px 10px; background:var(--bg-card2); border-radius:var(--radius-sm); margin-bottom:4px;
  font-size:13px; border-left:3px solid var(--info);
}
.sel-seg-info { flex:1; cursor:pointer; min-width:0; }
.sel-seg-time { color:var(--text); font-weight:500; }
.sel-seg-dur { font-size:11px; color:var(--text3); margin-left:8px; }
.sel-seg-actions { display:flex; gap:4px; flex-shrink:0; }

/* ── Segment List ── */
.seg-item {
  display:flex; align-items:center; justify-content:space-between;
  padding:8px 12px; background:var(--bg-card2); border-radius:var(--radius-sm); margin-bottom:6px;
  font-size:13px;
}
.seg-item .time { color:var(--text2); }
.seg-item .del { color:var(--danger); font-size:16px; cursor:pointer; padding:4px; }

/* ── Dual Track (Review) ── */
.track-label { font-size:11px; color:var(--text3); margin-bottom:2px; display:flex; justify-content:space-between; }
.track-row { height:14px; background:var(--bg-card2); border-radius:3px; margin-bottom:4px; position:relative; overflow:hidden; }
.track-row .seg { position:absolute; height:100%; border-radius:2px; opacity:0.8; }
.track-row .seg.human { background:var(--human); }
.track-row .seg.ai { background:var(--ai); }
.track-row .seg.reviewed { background:var(--reviewed); }
.track-row .serve { position:absolute; top:0; width:2px; height:100%; background:#ff7043; }

/* ── Admin Stats ── */
.stats-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:16px; }
.stat-card { background:var(--bg-card); border-radius:var(--radius); padding:14px; text-align:center; }
.stat-card .num { font-size:24px; font-weight:700; color:var(--accent); }
.stat-card .label { font-size:12px; color:var(--text3); margin-top:2px; }

/* ── Filter Tabs (Admin) ── */
.filter-tabs { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:12px; }
.filter-tab { padding:6px 14px; font-size:12px; border-radius:14px; background:var(--bg-card2); color:var(--text2); cursor:pointer; border:1px solid transparent; }
.filter-tab.active { background:rgba(76,175,80,0.15); color:var(--accent); border-color:var(--accent); }

/* ── Loading / Empty / Error ── */
.state-box { text-align:center; padding:40px 20px; color:var(--text3); }
.state-box .icon { font-size:40px; margin-bottom:12px; }
.state-box .msg { font-size:14px; }
.spinner { display:inline-block; width:20px; height:20px; border:2px solid var(--border); border-top-color:var(--accent); border-radius:50%; animation:spin 0.6s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }
@keyframes queuePulse { 0%,100% { opacity:1; } 50% { opacity:0.3; } }

/* ── Table ── */
.table-wrap { overflow-x:auto; }
table { width:100%; border-collapse:collapse; font-size:13px; }
th,td { text-align:left; padding:8px 6px; border-bottom:1px solid var(--border); white-space:nowrap; }
th { color:var(--text3); font-weight:600; font-size:11px; text-transform:uppercase; }

/* ── Responsive ── */
@media (max-width:480px) {
  #app-header { padding:8px 10px; }
  #app-header .header-logo { height:18px; margin-right:4px; }
  .env-tag { display:none; }  /* F5：小屏隐藏环境标签，省页头空间 */
  #app-header .help-btn { padding:4px 8px; }
  #app-header .skin-toggle .seg-item { padding:4px 10px; font-size:12px; }
  .page { padding:12px; }
  .stats-grid { grid-template-columns:1fr 1fr; gap:6px; }
}
/* F5：页头皮肤切换紧凑化（所有屏宽） */
#app-header .skin-toggle { flex-shrink:0; }
#app-header .skin-toggle .seg-item { padding:5px 10px; font-size:12px; white-space:nowrap; }
#app-header .help-btn { flex-shrink:0; }
@media (min-width:481px) {
  body { border-left:1px solid var(--border); border-right:1px solid var(--border); }
}

/* ═══════════════════════════════════════════════════════════════
   V2.0 — 状态栏（sticky，位于 Header 下方）
   ═══════════════════════════════════════════════════════════════ */
#status-bar {
  display:none; position:fixed; bottom:56px; left:0; right:0; z-index:98;
  background:var(--bg-card); border-top:1px solid var(--border);
  padding:6px 12px; font-size:13px;
  align-items:center; gap:8px;
}
#status-bar.show { display:flex; }
#status-bar .status-icon { flex-shrink:0; font-size:16px; }
#status-bar .status-msg { flex:1; color:var(--text2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#status-bar .status-actions { display:flex; gap:6px; flex-shrink:0; align-items:center; }
#status-bar .status-link { font-size:12px; color:var(--accent); cursor:pointer; }
#status-bar .status-close { font-size:16px; color:var(--text3); cursor:pointer; padding:0 4px; background:none; border:none; }

/* ═══════════════════════════════════════════════════════════════
   V2.0 — 下载中心
   ═══════════════════════════════════════════════════════════════ */
.dlc-item {
  background:var(--bg-card); border-radius:var(--radius); padding:12px; margin-bottom:8px;
}
.dlc-item .top { display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:6px; }
.dlc-item .name { font-size:14px; font-weight:500; }
.dlc-item .meta { font-size:12px; color:var(--text3); display:flex; gap:12px; flex-wrap:wrap; }
.dlc-item .products { margin-top:8px; }
.dlc-item .product {
  display:flex; align-items:center; justify-content:space-between;
  padding:6px 8px; background:var(--bg-card2); border-radius:var(--radius-sm); margin-bottom:4px;
  font-size:12px;
}
.dlc-item .product .dlc-dl-btn { font-size:11px; padding:3px 10px; }

/* U4 — 任务/历史中心：网格卡片（对齐上传页 .job-thumb 视觉） */
.dlc-grid { display:flex; flex-wrap:wrap; gap:10px; }
.dlc-task { width:calc(50% - 5px); box-sizing:border-box; padding:8px; background:var(--bg-card); border-radius:var(--radius); overflow:hidden; }
.dlc-task-thumb { position:relative; width:100%; aspect-ratio:16/10; background:#0d1b2a; border-radius:6px; overflow:hidden; }
.dlc-task-thumb img { width:100%; height:100%; object-fit:cover; display:block; }
.dlc-task-thumb .cover-fallback { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-size:28px; color:var(--text3); }
.dlc-task-thumb .badge { position:absolute; top:6px; right:6px; font-size:11px; padding:2px 6px; }
.dlc-task-main { min-width:0; margin-top:6px; }
.dlc-task-name { font-size:12px; font-weight:500; color:var(--text); word-break:break-all; line-height:1.3; }
.dlc-task-stage { font-size:11px; color:var(--text3); margin-top:2px; }
.dlc-task .progress-bar { height:4px; margin-top:6px; }
.dlc-task .progress-bar .fill { transition:width .3s; }
.dlc-day { font-size:12px; font-weight:600; color:var(--text2); margin:10px 0 6px; }

/* 历史区：每个原始视频一张卡，卡下平铺每次合成的产物（cl-583，无「组」概念） */
.dlc-history { display:block; }
.dlc-task-row { width:100%; display:block; }
.dlc-task-row .dlc-task-name { font-size:13px; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.dlc-task-row .dlc-task-thumb { flex:0 0 56px; width:56px; aspect-ratio:16/10; }
/* 卡片头部：封面 + 文件名/时间 +（合成中/失败标签），标签右对齐不叠封面 */
.dlc-hist-head { display:flex; align-items:center; gap:10px; margin-bottom:8px; }
.dlc-hist-head-main { flex:1; min-width:0; }
.dlc-hist-head-tag { flex:0 0 auto; }
/* 平铺产物：每行 = 来源标签行 + 文件名/操作行 + 就地预览框 */
.dlc-prods { display:flex; flex-direction:column; gap:10px; margin-top:4px; }
.dlc-prod { background:rgba(255,255,255,0.03); border-radius:8px; padding:8px 10px; }
.dlc-prod-via { font-size:12px; color:var(--accent,#acf57d); font-weight:600; display:flex; flex-wrap:wrap; align-items:baseline; gap:4px; }
.dlc-prod-time { color:var(--text3,#777); font-weight:400; }
.dlc-prod-segs { color:var(--text3,#777); font-weight:400; }
.dlc-prod-row { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:8px; margin-top:6px; }
.dlc-prod-file { font-size:12px; color:var(--text2,#bbb); word-break:break-all; min-width:0; flex:1; }
.dlc-prod-actions { display:flex; flex-wrap:wrap; align-items:center; gap:6px; flex:0 0 auto; }
.dlc-prod-actions .btn-icon { width:30px; height:30px; padding:0; min-height:0; font-size:15px; display:inline-flex; align-items:center; justify-content:center; box-sizing:border-box; }
.dlc-prod-actions .dlc-rate { display:inline-flex; align-items:center; gap:2px; }
.dlc-prod-actions .btn-rate { font-size:14px !important; padding:1px; }
.dlc-prod-video { display:none; width:100%; max-height:220px; border-radius:8px; margin-top:8px; }

/* ═══════════════════════════════════════════════════════════════
   M4 — 首启欢迎弹窗 + 帮助入口
   ═══════════════════════════════════════════════════════════════ */
.help-btn {
  display:inline-flex; align-items:center; justify-content:center;
  margin-left:8px; padding:6px 10px;
  font-size:12px; font-weight:600; line-height:1;
  border:1px solid var(--border-light,#333); border-radius:14px;
  background:var(--bg-card,#1a1a1a); color:var(--text2,#ccc);
  cursor:pointer; flex-shrink:0; -webkit-user-select:none; user-select:none;
}
.help-btn:active { opacity:0.7; }
.onboard-sheet { text-align:center; }
.onboard-logo { font-size:44px; margin-bottom:8px; }
.onboard-sub { font-size:14px; color:var(--text2,#888); margin-bottom:16px; }
.onboard-steps { text-align:left; margin:0 0 16px; }
.onboard-step {
  display:flex; align-items:center; gap:10px;
  padding:8px 10px; border-radius:10px;
  background:var(--bg-card2,#222); margin-bottom:8px;
}
.onboard-step .onboard-icon { font-size:22px; flex-shrink:0; }
.onboard-step b { display:block; font-size:13px; }
.onboard-step div > span { display:block; font-size:12px; color:var(--text2,#888); }
.onboard-cta { display:flex; gap:8px; margin-bottom:12px; }
.onboard-cta .btn { flex:1; }
.onboard-tutor {
  font-size:12px; color:var(--text-muted,#555); padding-top:10px;
  border-top:1px solid var(--border-light,#333);
}
.gradient-text {
  background:linear-gradient(135deg,#4CAF50,#81C784,#A5D6A7);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}

/* ═══════════════════════════════════════════════════════════════
   P2-3 — 触摸设备高频按钮放大（≥44×44）
   ═══════════════════════════════════════════════════════════════ */
@media (pointer:coarse) {
  .btn-sm { padding:12px 18px; min-height:44px; }
}
