:root{
  --bg:#0d1117; --panel:#161b22; --panel2:#1c232c; --line:#242c37;
  --text:#e6edf3; --muted:#8b949e; --accent:#ff6b1a; --accent2:#ffa64d;
  --good:#3fb950; --bad:#f85149; --radius:14px;
  /* 主题化辅助色（黑夜默认值）*/
  --hero-bg:linear-gradient(135deg,#1a2332,#12181f);
  --act-hover:#202832;
  --badge-bg:#243040; --badge-text:#9ecbff;
  --ai-card-bg:linear-gradient(180deg,#1a1613,#161b22); --ai-card-line:#3a2a1a;
  --ai-box-bg:#11161d; --ai-box-text:#d6dde4;
  --code-bg:#0b1017;
  --toast-bg:#1f2733;
  --text2:#c3ccd6;
  --danger-line:#3a1e1e;
  --shadow:0 1px 3px rgba(0,0,0,.35);
  --nav-bg:rgba(13,17,23,.82);
}
/* ---------- 白天样式（默认黑夜，由 html[data-theme] 切换）---------- */
html[data-theme="light"]{
  --bg:#f2f5f9; --panel:#ffffff; --panel2:#eef2f7; --line:#dde3ea;
  --text:#1f2328; --muted:#5c6672; --accent:#f2620a; --accent2:#d9641a;
  --good:#1a7f37; --bad:#cf222e;
  --hero-bg:linear-gradient(135deg,#eef2f8,#e2e8f1);
  --act-hover:#e9eef5;
  --badge-bg:#dbeafe; --badge-text:#1d4ed8;
  --ai-card-bg:linear-gradient(180deg,#fff6ee,#ffffff); --ai-card-line:#f0d9c6;
  --ai-box-bg:#f6f8fa; --ai-box-text:#243039;
  --code-bg:#eef1f5;
  --toast-bg:#ffffff;
  --text2:#48505a;
  --danger-line:#f0c8c8;
  --shadow:0 1px 3px rgba(15,23,42,.07);
  --nav-bg:rgba(242,245,249,.85);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
}
.wrap{max-width:1080px;margin:0 auto;padding:16px 14px 40px}

/* ---------- 顶部 ---------- */
.hero{
  display:flex;flex-wrap:wrap;gap:14px;justify-content:space-between;align-items:center;
  background:var(--hero-bg);
  border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 18px;margin-bottom:14px;
}
.hero-main{display:flex;gap:14px;align-items:center;min-width:0;flex:1 1 260px}
.hero-main > div{min-width:0}
.hero-side{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end;flex:0 0 auto}
.hero-btn{
  background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:999px;padding:5px 12px;font-size:13px;cursor:pointer;line-height:1.5;white-space:nowrap;
  text-decoration:none;
}
.hero-btn:hover{border-color:var(--accent)}
.avatar{
  width:52px;height:52px;border-radius:50%;flex:0 0 auto;
  background:linear-gradient(135deg,var(--accent),var(--accent2));
  display:flex;align-items:center;justify-content:center;
  font-size:22px;font-weight:700;color:#101418;
}
.hero h1{margin:0;font-size:20px;letter-spacing:.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sub{color:var(--muted);font-size:13px;margin-top:4px}
.hero-meta{display:flex;gap:8px;flex-wrap:wrap;flex:1 1 100%}
.pill{
  background:var(--panel2);border:1px solid var(--line);border-radius:999px;
  padding:5px 11px;font-size:12px;color:var(--muted)
}
.pill b{color:var(--text);font-weight:600}

/* ---------- KPI ---------- */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}
.kpi{position:relative;overflow:hidden;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}
.kpi::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--accent),transparent 60%)}
.kpi .k{color:var(--muted);font-size:12px}
.kpi .v{font-size:22px;font-weight:700;margin-top:6px;letter-spacing:.5px}
.kpi .v small{font-size:12px;color:var(--muted);font-weight:500;margin-left:3px}

/* ---------- 卡片 ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 14px 10px;margin-bottom:14px;box-shadow:var(--shadow)}
.card h3{margin:2px 0 10px;font-size:15px;font-weight:600;display:flex;align-items:center}
.card h3::before{content:"";width:3px;height:14px;border-radius:2px;background:var(--accent);margin-right:8px;flex:0 0 auto}
.hint{color:var(--muted);font-size:12px;font-weight:400;margin-left:6px}
.chart{width:100%;height:280px}
.chart-foot{color:var(--muted);font-size:12px;line-height:1.6;margin-top:4px;padding-top:8px;border-top:1px dashed var(--line);min-height:16px}

/* ---------- 分段切换（跑量粒度：周 / 月 / 年）---------- */
.seg{margin-left:auto;display:inline-flex;gap:2px;background:var(--panel2);border:1px solid var(--line);border-radius:999px;padding:2px}
.seg button{background:transparent;border:0;color:var(--muted);font-size:12px;line-height:1;padding:5px 10px;border-radius:999px;cursor:pointer;font-family:inherit}
.seg button:hover{color:var(--text)}
.seg button.on{background:var(--accent);color:#101418;font-weight:600}

/* ---------- 跑量规律 & 纪录统计块 ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:6px}
.stat{background:var(--panel2);border-radius:10px;padding:10px 12px}
.stat .k{color:var(--muted);font-size:12px}
.stat .v{font-size:18px;font-weight:700;margin-top:5px;font-variant-numeric:tabular-nums}
.stat .v small{font-size:11px;color:var(--muted);font-weight:500;margin-left:3px}

/* ---------- 本周小结 ---------- */
.wk-table{display:flex;flex-direction:column;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:4px}
.wk-row{display:grid;grid-template-columns:1.1fr 1fr 1fr 1fr;gap:8px;align-items:center;background:var(--panel);padding:9px 12px;font-size:13px}
.wk-row.wk-head{background:var(--panel2);font-size:12px;font-weight:600}
.wk-row.wk-head .wk-k,.wk-row.wk-head .wk-v,.wk-row.wk-head .wk-d{color:var(--muted)}
.wk-k{color:var(--muted)}
.wk-v,.wk-d{font-variant-numeric:tabular-nums}
.wk-v{font-weight:600}
.wk-up{color:var(--accent2)}
.wk-down{color:#58a6ff}
.wk-fast{color:var(--good)}
.wk-slow{color:var(--bad)}
.wk-flat{color:var(--muted)}

/* ---------- 下周训练建议 ---------- */
.nw-headline{font-size:14px;font-weight:600;margin:2px 0 10px}
.nw-list{display:flex;flex-direction:column;gap:8px;margin-bottom:4px}
.nw-item{display:flex;gap:10px;align-items:flex-start;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:9px 12px;font-size:13px;line-height:1.55}
.nw-tag{flex:0 0 auto;border-radius:999px;padding:1px 9px;font-size:12px;font-weight:600;line-height:1.7}
.nw-text{color:var(--text2)}
.nw-build{background:rgba(63,185,80,.16);color:var(--good)}
.nw-hold{background:rgba(88,166,255,.16);color:#58a6ff}
.nw-cut{background:rgba(248,81,73,.16);color:var(--bad)}
.nw-recover{background:rgba(88,166,255,.16);color:#58a6ff}
.nw-intensity{background:rgba(255,166,77,.18);color:var(--accent2)}
.nw-pace{background:rgba(139,148,158,.18);color:var(--muted)}

/* ---------- 训练配速（丹尼尔斯 VDOT 五区）---------- */
.pace-table{display:flex;flex-direction:column;gap:8px;margin-bottom:4px}
.pace-row{
  display:grid;grid-template-columns:40px 96px 1fr auto;gap:12px;align-items:center;
  background:var(--panel2);border-radius:10px;padding:10px 12px;
}
.pace-zone{
  width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:14px;color:#101418;
}
.pace-zone--E{background:#3fb950}
.pace-zone--M{background:#58a6ff}
.pace-zone--T{background:#ffa64d}
.pace-zone--I{background:#ff6b1a}
.pace-zone--R{background:#f85149}
.pace-name{font-size:13px}
.pace-val{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}
.pace-desc{font-size:12px;color:var(--muted)}
@media (max-width:640px){
  .pace-row{grid-template-columns:36px 1fr auto;grid-template-areas:"zone name val" "zone desc desc";row-gap:4px}
  .pace-zone{grid-area:zone;align-self:start}
  .pace-name{grid-area:name}
  .pace-val{grid-area:val;justify-self:end}
  .pace-desc{grid-area:desc}
}

/* ---------- 地点分布（地图维度）---------- */
.place-wrap{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:14px;align-items:start;margin-bottom:4px}
.pl-table{display:flex;flex-direction:column;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.pl-row{display:grid;grid-template-columns:1.6fr .6fr .8fr .8fr .6fr;gap:8px;align-items:center;background:var(--panel);padding:9px 12px;font-size:13px}
.pl-row.pl-head{background:var(--panel2);font-size:12px;font-weight:600;color:var(--muted)}
.pl-name{display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-v{font-variant-numeric:tabular-nums;text-align:right;color:var(--text2)}
.pl-tm .pl-name{color:var(--accent2)}
.pl-unnamed .pl-name,.pl-unk .pl-name{color:var(--muted)}
.pl-fix{margin-left:2px;background:none;border:0;color:var(--accent2);font-size:12px;cursor:pointer;padding:0 2px;flex:0 0 auto}
.pl-fix:hover{text-decoration:underline}
.pl-mng{display:flex;flex-direction:column;gap:8px;margin:12px 0}
.pl-mng-row{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:9px 11px}
.pl-mng-row.is-focus{border-color:var(--accent)}
.pl-mng-head{display:flex;justify-content:space-between;gap:10px;align-items:baseline}
.pl-mng-head code{font-size:12px;color:var(--muted)}
.pl-mng-meta{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.pl-mng-ctl{display:flex;gap:8px;margin-top:7px}
.pl-mng-ctl input{flex:1;min-width:0;background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-size:14px;outline:none}
.pl-mng-ctl input:focus{border-color:var(--accent)}
.pl-mng-ctl select{background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:9px;padding:8px;font-size:13px;font-family:inherit}
.pl-hint{display:block;color:var(--muted);font-size:11.5px;margin-top:6px}
.pl-mng-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
@media (max-width:640px){
  .place-wrap{grid-template-columns:1fr}
  .pl-row{grid-template-columns:1.8fr .6fr .8fr .6fr;font-size:12.5px}
  .pl-row > span:nth-child(4){display:none}   /* 手机隐藏「时长」列，避免挤 */
}

/* ---------- 今日状态灯（Readiness）---------- */
.readiness{
  display:flex;align-items:center;gap:10px;
  background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--good);
  border-radius:var(--radius);padding:11px 14px;margin-bottom:14px;box-shadow:var(--shadow);
}
.readiness[hidden]{display:none}
.rd-dot{width:11px;height:11px;border-radius:50%;flex:0 0 auto;background:var(--good);box-shadow:0 0 0 4px rgba(63,185,80,.22)}
.readiness--ok{border-left-color:var(--good)}
.readiness--ok .rd-label{color:var(--good)}
.readiness--caution{border-left-color:#d29922}
.readiness--caution .rd-dot{background:#d29922;box-shadow:0 0 0 4px rgba(210,153,34,.22)}
.readiness--caution .rd-label{color:#d29922}
.readiness--recover{border-left-color:var(--bad)}
.readiness--recover .rd-dot{background:var(--bad);box-shadow:0 0 0 4px rgba(248,81,73,.22)}
.readiness--recover .rd-label{color:var(--bad)}
.rd-text{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0}
.rd-label{font-weight:700;font-size:14px}
.rd-sum{color:var(--muted);font-size:13px}

/* ---------- 活动列表 ---------- */
.act-list{display:flex;flex-direction:column;gap:8px}
.act{
  display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;
  background:var(--panel2);border:1px solid transparent;border-radius:10px;
  padding:11px 12px;cursor:pointer;transition:border-color .15s,background .15s;
}
.act:hover{border-color:var(--accent);background:var(--act-hover)}
.act .date{color:var(--muted);font-size:12px;white-space:nowrap}
.act .title{font-size:14px}
.act .dist{font-size:15px;font-weight:700;text-align:right}
.act .pace{color:var(--muted);font-size:12px;text-align:right}
.act .badge{background:var(--badge-bg);color:var(--badge-text);border-radius:6px;padding:1px 6px;font-size:11px;margin-left:6px}
.more-btn{
  width:100%;margin-top:10px;padding:10px;border-radius:10px;cursor:pointer;
  background:var(--panel2);color:var(--text);border:1px solid var(--line);font-size:14px;
}
.more-btn:hover{border-color:var(--accent)}

/* ---------- AI ---------- */
.ai-card{border-color:var(--ai-card-line);background:var(--ai-card-bg)}
.ai-tools{display:flex;gap:8px;margin-bottom:10px}
.ai-tools select{
  flex:1;background:var(--panel2);color:var(--text);border:1px solid var(--line);
  border-radius:10px;padding:9px 10px;font-size:14px;
}
.ai-tools button{
  background:linear-gradient(135deg,var(--accent),var(--accent2));color:#101418;
  border:0;border-radius:10px;padding:9px 18px;font-size:14px;font-weight:700;cursor:pointer;
}
.ai-tools button:disabled{opacity:.55;cursor:progress}
.ai-box{
  background:var(--ai-box-bg);border:1px solid var(--line);border-radius:10px;padding:14px 16px;
  font-size:14px;line-height:1.8;color:var(--ai-box-text);min-height:60px;
}
.ai-box .err{color:var(--bad)}
/* AI 复盘输出：极简 Markdown 渲染结果 */
.ai-content{font-size:14px;line-height:1.8}
.ai-content p{margin:0 0 10px}
.ai-content p:last-child{margin-bottom:0}
.ai-content .ai-h{
  display:flex;align-items:center;margin:18px 0 8px;font-size:14px;font-weight:700;color:var(--text);
  break-after:avoid;page-break-after:avoid;
}
.ai-content .ai-h:first-child{margin-top:2px}
.ai-content .ai-h::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--accent);margin-right:8px;flex:0 0 auto}
.ai-content ul,.ai-content ol{margin:0 0 10px;padding-left:22px}
.ai-content li{margin:5px 0;break-inside:avoid;page-break-inside:avoid}
.ai-content li::marker{color:var(--accent)}
.ai-content strong{color:var(--text);font-weight:700}
.ai-content code{background:var(--code-bg);border:1px solid var(--line);border-radius:5px;padding:1px 5px;font-size:12px}

/* ---------- 弹窗 ---------- */
body.modal-open{overflow:hidden}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;align-items:flex-end;justify-content:center;z-index:50;padding:0;overscroll-behavior:contain}
.modal[hidden]{display:none}
.modal-panel{
  background:var(--panel);border:1px solid var(--line);border-radius:16px 16px 0 0;
  width:100%;max-width:720px;max-height:88vh;overflow:auto;padding:18px 16px 26px;position:relative;
  overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
}
.modal-close{position:absolute;top:10px;right:12px;background:none;border:0;color:var(--muted);font-size:26px;cursor:pointer;line-height:1}
.m-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:12px 0}
.m-cell{background:var(--panel2);border-radius:10px;padding:9px 11px}
.m-cell .k{color:var(--muted);font-size:11px}
.m-cell .v{font-size:17px;font-weight:700;margin-top:4px}
.m-title{font-size:17px;font-weight:700}
.m-sub{color:var(--muted);font-size:13px;margin-top:4px}

footer{color:var(--muted);font-size:12px;text-align:center;margin-top:8px}

/* ---------- 设置页表单 ---------- */
a{color:inherit}
.presets{display:flex;gap:8px;flex-wrap:wrap}
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}
.field input{
  width:100%;background:var(--panel2);color:var(--text);border:1px solid var(--line);
  border-radius:10px;padding:10px 12px;font-size:14px;outline:none;
}
.field input:focus{border-color:var(--accent)}
.tip{color:var(--muted);font-size:12px;margin-top:6px;line-height:1.6}
.tip code,code{background:var(--code-bg);border:1px solid var(--line);border-radius:5px;padding:1px 5px;font-size:12px}
.key-row{display:flex;gap:8px}
.key-row input{flex:1}
/* 折叠式「怎么拿 Key」说明（账户页） */
.key-guide{margin:14px 0 4px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}
.key-guide>summary{cursor:pointer;font-size:13px;font-weight:600;padding:11px 14px;list-style:none}
.key-guide>summary::-webkit-details-marker{display:none}
.key-guide>summary::before{content:"▸";color:var(--muted);margin-right:8px}
.key-guide[open]>summary::before{content:"▾"}
.key-guide-body{padding:2px 14px 12px;border-top:1px solid var(--line)}
.key-guide-body p{margin:9px 0;color:var(--text2);font-size:13px;line-height:1.7}
.key-guide-body a{color:var(--accent);text-decoration:none}
.key-guide-body a:hover{text-decoration:underline}
button.ghost{
  background:var(--panel2);color:var(--text);border:1px solid var(--line);
  border-radius:10px;padding:10px 14px;font-size:14px;cursor:pointer;white-space:nowrap;
}
button.ghost:hover{border-color:var(--accent)}
button.ghost:disabled{opacity:.55;cursor:progress}
button.ghost.preset-rec{border-color:var(--accent);color:var(--accent);background:var(--act-hover);font-weight:600}
button.primary{
  background:linear-gradient(135deg,var(--accent),var(--accent2));color:#101418;
  border:0;border-radius:10px;padding:10px 22px;font-size:14px;font-weight:700;cursor:pointer;
}
button.primary:disabled{opacity:.55;cursor:progress}
.cfg-actions{display:flex;gap:10px;margin:16px 0 6px}
.msg{margin-top:10px;font-size:13px;line-height:1.7;min-height:20px}
.msg .ok{color:var(--good)}
.msg .err{color:var(--bad)}
.notes p{margin:8px 0;color:var(--text2);font-size:13px;line-height:1.75}
.cfg-back{text-decoration:none;font-size:20px}

/* ---------- 等宽数字（避免数字跳动）---------- */
.kpi .v,.act .dist,.pill b,.m-cell .v{font-variant-numeric:tabular-nums}

/* ---------- 吸顶分区导航（借鉴 claude-fitness-cn）----------
   滚过大图后吸在顶部，胶囊链接点击跳到对应卡片；窗口越窄越靠横向滚动。*/
.board-nav{
  position:sticky;top:0;z-index:20;
  display:flex;gap:4px;overflow-x:auto;
  padding:8px 0;margin:-4px 0 12px;
  background:var(--nav-bg);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
  scrollbar-width:none;
}
.board-nav::-webkit-scrollbar{display:none}
.board-nav a{
  color:var(--muted);text-decoration:none;font-size:14px;
  padding:6px 14px;border-radius:999px;white-space:nowrap;transition:.15s;
}
.board-nav a:hover,.board-nav a.active{color:var(--text);background:var(--panel2)}
.board-nav a[hidden]{display:none}

/* ---------- 双端版式（阶段八）----------
   单栏为底（手机 / 平板），≥1100px 起切多栏桌面版式。
   结构见 index.html：.board > .board-main（卡片栅格）+ .board-side（活动列表）。
   栅格用 auto-fit：以后加/减模块自动流排，不必手改列数。*/
.board,
.board-main{display:block}
/* 未登录引导态：这些容器自带 display，需显式声明才让 hidden 生效 */
.kpis[hidden],.hero-meta[hidden],.board[hidden],.board-nav[hidden]{display:none}
/* 点击锚点跳到卡片时，给吸顶导航留出高度 */
.board-main > .card,.board-side > .card{scroll-margin-top:72px}

/* --- 手机 H5（≤640px）：紧凑单栏 --- */
@media (max-width:640px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .chart{height:240px}
  .wk-row{grid-template-columns:1fr .9fr .9fr .95fr;gap:6px;padding:8px 10px;font-size:12px}
  .hero{padding:14px}
  .hero h1{font-size:18px;max-width:58vw}
  .hero-main{flex:1 1 100%}
  .hero-side{justify-content:flex-start;gap:8px}
  .hero-btn{padding:5px 10px;font-size:12px}
  .kpi{padding:11px 12px}
  .kpi .v{font-size:20px}
  .act{padding:10px 11px;gap:10px}
  .act .dist{font-size:14px}
  .modal-panel{border-radius:14px 14px 0 0}
  .wrap{padding-bottom:calc(40px + env(safe-area-inset-bottom))}
  footer{padding-bottom:env(safe-area-inset-bottom)}
  .board-nav a{font-size:13px;padding:5px 12px}
}

/* --- 平板（641–1099px）：单栏，略加宽 --- */
@media (min-width:641px) and (max-width:1099px){
  .wrap{max-width:860px}
  .chart{height:300px}
}

/* --- PC（≥1100px）：两栏桌面版式 --- */
@media (min-width:1100px){
  .wrap{max-width:1320px;padding:20px 22px 48px}
  .hero{padding:20px 24px;gap:18px}
  .hero h1{font-size:24px}
  .avatar{width:60px;height:60px;font-size:26px}
  .sub{font-size:14px}
  .kpis{grid-template-columns:repeat(4,1fr);gap:12px}
  .kpi{padding:14px 16px}
  .kpi .v{font-size:26px}
  .chart{height:320px}
  .card{padding:16px 16px 12px}

  /* 主体：左（卡片栅格）+ 右（活动列表）。
     align-items 用默认 stretch（不用 start）：让右栏高度撑满整行，
     这样活动列表的 sticky 才能「跟随滚动」走完整页——否则右栏只到卡片底部，
     下面整条 340px 都是空白，视觉上很割裂。 */
  .board{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:stretch}
  /* flex 自动流排：半宽卡两两并排；某行只剩一张时自动拉伸铺满，杜绝留白。
     模块增减/隐藏都不需改列数，也不会出现「半宽卡旁边空一大块」。 */
  .board-main{display:flex;flex-wrap:wrap;gap:16px;align-items:stretch}
  .board-main > .card{flex:1 1 340px;min-width:0}
  .board-main > .card--full{flex:1 1 100%}
  .board-main > .card,
  .board-side > .card{margin-bottom:0}

  /* 活动列表固定跟随，卡片内滚动 */
  .board-side > .card{position:sticky;top:60px}
  .board-side .act-list{max-height:calc(100vh - 260px);overflow:auto;padding-right:4px}

  /* AI 复盘长文：宽屏双栏，行更短更好读、卡片高度减半 */
  .ai-content{columns:2;column-gap:32px}
}

/* ---------- 字号档位（写 CSS 变量，作用于 .wrap）---------- */
:root{--coros-fs:1}
.wrap{zoom:var(--coros-fs,1)}

/* ---------- 交互组件：toast / 状态块 / 站内弹层 ---------- */
.coros-toast{
  position:fixed;left:50%;bottom:32px;transform:translateX(-50%) translateY(12px);
  background:var(--toast-bg);border:1px solid var(--line);color:var(--text);
  padding:10px 16px;border-radius:999px;font-size:13px;z-index:9998;
  opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;
  box-shadow:0 10px 30px rgba(0,0,0,.4);max-width:80vw;text-align:center;
}
.coros-toast.is-show{opacity:1;transform:translateX(-50%) translateY(0)}

.coros-state{display:flex;flex-direction:column;align-items:center;gap:8px;padding:18px 8px;color:var(--muted);text-align:center}
.coros-state__icon{font-size:22px}
.coros-state--error{color:var(--bad)}
.coros-state--loading{color:var(--accent2)}

.coros-dialog-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:9999;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:20px;box-sizing:border-box}
.coros-dialog{width:100%;max-width:420px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px 20px 16px;box-shadow:0 18px 50px rgba(0,0,0,.5);box-sizing:border-box;color:var(--text);font-size:15px;line-height:1.6}
.coros-dialog__title{font-size:17px;font-weight:600;margin-bottom:8px}
.coros-dialog__text{color:var(--text2);margin-bottom:14px}
.coros-dialog__code{display:flex;align-items:center;gap:8px;background:var(--code-bg);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.coros-dialog__code code{flex:1;min-width:0;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:14px;word-break:break-all;background:none;border:0;color:var(--text)}
.coros-dialog__copy{flex:none;border:0;background:none;color:var(--accent2);font-size:14px;cursor:pointer;padding:4px}
.coros-dialog__actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
.coros-dialog__btn{border:1px solid var(--line);border-radius:9px;padding:9px 16px;font-size:14px;cursor:pointer;background:var(--panel2);color:var(--text)}
.coros-dialog__btn--danger{background:var(--bad);border-color:var(--bad);color:#fff}

/* ---------- 我的账户页 ---------- */
.code-row{display:flex;align-items:center;gap:8px;background:var(--code-bg);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.code-row code{flex:1;min-width:0;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:14px;word-break:break-all;background:none;border:0;color:var(--text)}
.bind-code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:22px;letter-spacing:4px;font-weight:700;color:var(--accent2);padding:8px 14px;background:var(--code-bg);border:1px solid var(--line);border-radius:10px;min-width:128px;text-align:center}
.danger-text{color:var(--bad)}
.danger-card{border-color:var(--danger-line)}

/* ---------- 比赛模块 ---------- */
.race-add{margin-left:8px;background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:999px;padding:4px 12px;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap}
#raceMarkBtn{margin-left:auto}
.race-add:hover{border-color:var(--accent)}

.race-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.race-empty{grid-column:1/-1;color:var(--muted);font-size:13px;line-height:1.65;background:var(--panel2);border:1px dashed var(--line);border-radius:10px;padding:14px}

.race-card{position:relative;display:flex;flex-direction:column;gap:5px;background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:14px 14px 12px}
.race-card--planned{cursor:pointer}
.race-card--planned:hover{border-color:var(--accent)}
.race-top{display:flex;align-items:center;gap:6px;padding-right:18px}
.race-emoji{font-size:15px;flex:0 0 auto}
.race-name{font-size:15px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.race-card--done .race-name{cursor:pointer}
.race-card--done .race-name:hover{color:var(--accent2)}
.race-meta{font-size:12px;color:var(--muted);line-height:1.5}
.race-cat{align-self:flex-start;border-radius:999px;padding:2px 9px;font-size:11px;font-weight:600;background:var(--badge-bg);color:var(--badge-text)}
.race-cat--A{background:rgba(248,81,73,.16);color:#ff8b82}
.race-cat--B{background:rgba(255,166,77,.18);color:var(--accent2)}
.race-cat--C{background:rgba(63,185,80,.16);color:var(--good)}
html[data-theme="light"] .race-cat--A{background:#fde8e6;color:#cf222e}
html[data-theme="light"] .race-cat--B{background:#fdeedd;color:#b45309}
html[data-theme="light"] .race-cat--C{background:#e6f4ea;color:#1a7f37}
.race-num{display:flex;align-items:baseline;gap:6px;margin-top:6px}
.race-num b{font-size:30px;font-weight:800;line-height:1;color:var(--accent);letter-spacing:.5px;font-variant-numeric:tabular-nums}
.race-num small{font-size:12px;color:var(--muted)}
.race-card--done .race-num b{font-size:24px}
.race-date{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.race-x{position:absolute;top:8px;right:8px;width:22px;height:22px;border:0;border-radius:50%;background:transparent;color:var(--muted);font-size:16px;line-height:1;cursor:pointer;opacity:.6}
.race-x:hover{opacity:1;color:var(--bad)}
.race-toggle{align-self:flex-start;margin-top:4px;background:none;border:0;color:var(--accent2);font-size:12px;cursor:pointer;padding:2px 0}
.race-analysis{margin-top:6px;border-top:1px dashed var(--line);padding-top:8px;display:flex;flex-direction:column;gap:5px}
.ra-row{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;line-height:1.5}
.ra-k{color:var(--muted);flex:0 0 auto}
.ra-v{color:var(--text);text-align:right;font-variant-numeric:tabular-nums}
.ra-tags{margin:2px 0}
.ra-tag{display:inline-block;border-radius:999px;padding:2px 9px;font-size:12px;font-weight:600}
.ra-tag--good{background:rgba(63,185,80,.16);color:var(--good)}
.ra-tag--warn{background:rgba(248,81,73,.16);color:var(--bad)}
html[data-theme="light"] .ra-tag--good{background:#e6f4ea}
html[data-theme="light"] .ra-tag--warn{background:#fde8e6}
.ra-note{font-size:12px;color:var(--muted);line-height:1.55}

.race-sub{margin:16px 0 8px;font-size:14px;font-weight:600}
.race-pb{display:flex;flex-direction:column}
.pb-head,.pb-row{display:grid;grid-template-columns:1fr 1fr 1fr 1.2fr;gap:8px;align-items:center;padding:9px 10px}
.pb-head{color:var(--muted);font-size:12px;border-bottom:1px solid var(--line)}
.pb-row{font-size:13px;border-bottom:1px solid var(--line)}
.pb-row:last-child{border-bottom:0}
.pb-d{font-weight:600}
.pb-t{font-weight:700;color:var(--accent2);font-variant-numeric:tabular-nums}
.pb-p,.pb-date{color:var(--muted);font-variant-numeric:tabular-nums}

/* 比赛表单（复用站内 #modal） */
.race-form{display:flex;flex-direction:column;gap:12px;margin-top:8px}
.race-field{display:flex;flex-direction:column;gap:5px}
.race-field__k{font-size:12px;color:var(--muted)}
.race-field input,.race-field select{width:100%;background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:9px 11px;color:var(--text);font-size:14px;font-family:inherit}
.race-field input:focus,.race-field select:focus{outline:none;border-color:var(--accent)}
.race-ro{font-size:12px;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:9px 11px;line-height:1.5}
.race-form__actions{display:flex;gap:10px;margin-top:4px}
.race-btn{flex:1;border:0;border-radius:9px;padding:11px;background:var(--accent);color:#101418;font-size:14px;font-weight:700;cursor:pointer}
.race-btn--ghost{flex:0 0 auto;background:transparent;border:1px solid var(--danger-line);color:var(--bad)}
.race-pick-list{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.race-pick{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;text-align:left;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;color:var(--text);font-size:13px;cursor:pointer}
.race-pick:hover{border-color:var(--accent)}
.race-pick.is-done{opacity:.5;cursor:default}
.race-pick__d{color:var(--muted);font-size:12px;white-space:nowrap}
.race-pick__t{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.race-pick__v{font-weight:600;white-space:nowrap;font-variant-numeric:tabular-nums}

@media (max-width:640px){
  .race-list{grid-template-columns:1fr 1fr}
  .pb-head,.pb-row{font-size:12px;padding:7px 6px;gap:6px}
}

/* ---------- AI 跑步教练（对话框页）---------- */
.coach-card h3{align-items:center}
.coach-card .seg{margin-left:auto}
.persona-desc{
  margin:2px 0 10px;padding:8px 12px;border-radius:10px;
  background:var(--panel2);border:1px solid var(--line);
  color:var(--muted);font-size:12px;line-height:1.65;
}
.persona-desc b{color:var(--text)}
.persona-demo{display:block;margin-top:6px;padding-top:6px;border-top:1px dashed var(--line);font-style:italic}
.chat-log{
  display:flex;flex-direction:column;gap:12px;
  min-height:200px;max-height:56vh;overflow-y:auto;
  padding:6px 2px 8px;margin:2px 0 10px;
}
.chat-msg{display:flex;flex-direction:column;gap:4px;max-width:92%}
.chat-msg--user{align-self:flex-end;align-items:flex-end}
.chat-msg--assistant{align-self:flex-start}
.chat-who{font-size:11px;color:var(--muted);padding:0 4px}
.chat-bubble{
  border:1px solid var(--line);border-radius:14px;padding:10px 14px;
  background:var(--ai-box-bg);color:var(--ai-box-text);font-size:14px;line-height:1.7;
  word-break:break-word;
}
.chat-msg--user .chat-bubble{background:var(--accent);color:#101418;border-color:transparent}
.chat-msg--user .chat-bubble .ai-content p{margin:0}
.chat-thinking .chat-bubble{color:var(--muted);font-style:italic}
.chat-empty{color:var(--muted);font-size:13px;line-height:1.7;padding:14px;border:1px dashed var(--line);border-radius:12px;background:var(--panel2)}
.chat-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.chat-chip{
  background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:999px;padding:7px 13px;font-size:13px;cursor:pointer;font-family:inherit;
}
.chat-chip:hover{border-color:var(--accent);color:var(--accent2)}
.chat-form{display:flex;gap:10px;align-items:flex-end}
.chat-form textarea{
  flex:1;min-width:0;resize:none;background:var(--panel2);border:1px solid var(--line);
  border-radius:12px;padding:10px 12px;color:var(--text);font-size:14px;font-family:inherit;
  line-height:1.5;max-height:160px;
}
.chat-form textarea:focus{outline:none;border-color:var(--accent)}
.chat-form button{
  flex:0 0 auto;border:0;border-radius:12px;padding:11px 20px;
  background:var(--accent);color:#101418;font-size:14px;font-weight:700;cursor:pointer;
}
.chat-form button:disabled{opacity:.55;cursor:progress}

/* ---------- 补给计算器（教练页工具条）---------- */
.coach-tool{padding:12px 16px}
.coach-tool>summary{cursor:pointer;font-size:14px;font-weight:600;list-style:none}
.coach-tool>summary::-webkit-details-marker{display:none}
.coach-tool>summary::before{content:"▸";color:var(--muted);margin-right:6px}
.coach-tool[open]>summary::before{content:"▾"}
.coach-tool-hint{color:var(--muted);font-size:12px;font-weight:400;margin-left:6px}
.fuel-grid{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin:12px 0 10px}
.fuel-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
.fuel-grid input,.fuel-grid select{
  background:var(--panel2);border:1px solid var(--line);color:var(--text);
  border-radius:10px;padding:8px 10px;font-size:14px;font-family:inherit;min-width:120px;
}
.fuel-grid input:focus,.fuel-grid select:focus{outline:none;border-color:var(--accent)}
.fuel-out{
  font-size:14px;line-height:1.7;color:var(--ai-box-text);background:var(--ai-box-bg);
  border:1px solid var(--line);border-radius:12px;padding:10px 14px;min-height:20px;
}
.fuel-out:empty{display:none}
@media (max-width:640px){
  .fuel-grid input,.fuel-grid select{min-width:0;width:100%}
  .fuel-grid label{flex:1 1 45%}
}

/* ---------- 知识库（列表页 → 详情页）---------- */
/* 列表页：纯文字菜单，主标题左 + 副标题右 + 箭头，参考手机「设置」列表观感 */
.kb-list{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;box-shadow:var(--shadow);
}
.kb-item{
  display:flex;align-items:center;gap:14px;width:100%;
  padding:19px 18px;background:none;border:0;border-bottom:1px solid var(--line);
  color:var(--text);font-family:inherit;text-align:left;cursor:pointer;
}
.kb-item:last-child{border-bottom:0}
.kb-item:hover{background:var(--panel2)}
.kb-item__title{flex:1;min-width:0;font-size:16px;font-weight:500;letter-spacing:.2px}
.kb-item__sub{flex:0 0 auto;color:var(--muted);font-size:14px;white-space:nowrap}
.kb-item__arrow{flex:0 0 auto;color:var(--muted);font-size:20px;line-height:1;font-weight:300}

/* 详情页 */
.kb-detail{display:flex;flex-direction:column}
.kb-detail-title{margin:0 0 6px;font-size:20px;font-weight:700}
.kb-detail-sub{color:var(--muted);font-size:12.5px;margin:0 0 12px}
.kb-lead{color:var(--text2);font-size:13.5px;line-height:1.8;margin:0 0 12px}
.kb-lead p{margin:0 0 8px}
.kb-lead p:last-child{margin-bottom:0}
.kb-h{display:flex;align-items:center;font-size:14px;font-weight:600;margin:16px 0 8px}
.kb-h::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--accent);margin-right:8px;flex:0 0 auto}
.kb-note{color:var(--muted);font-size:12px;line-height:1.7;margin:8px 0 0}
.kb-tip{
  background:var(--panel2);border:1px solid var(--line);border-radius:10px;
  padding:10px 12px;font-size:12.5px;line-height:1.7;color:var(--text2);margin:10px 0 0;
}

/* 表格（可横向滚动，手机上不挤） */
.kb-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;margin:0 0 12px;-webkit-overflow-scrolling:touch}
table.kb-table{width:100%;border-collapse:collapse;font-size:13px}
.kb-table th,.kb-table td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}
.kb-table thead th{background:var(--panel2);color:var(--muted);font-size:12px;font-weight:600}
.kb-table tbody tr:last-child td{border-bottom:0}
.kb-table td.kb-grade{color:var(--muted)}
.kb-table td.kb-num{font-variant-numeric:tabular-nums;font-weight:600;color:var(--accent2)}
.kb-table td.kb-name{font-weight:600}

/* 官方来源背书块 */
.kb-src{margin-top:16px;padding-top:12px;border-top:1px dashed var(--line)}
.kb-src__title{display:flex;align-items:center;font-size:12px;color:var(--muted);margin-bottom:8px}
.kb-src__title::before{content:"🔗";margin-right:6px}
.kb-src__list{display:flex;flex-direction:column;gap:7px;margin:0;padding:0;list-style:none}
.kb-src__item{font-size:12.5px;line-height:1.55}
.kb-src__item a{color:var(--accent2);text-decoration:none;word-break:break-all}
.kb-src__item a:hover{text-decoration:underline}
.kb-src__tag{
  display:inline-block;background:var(--badge-bg);color:var(--badge-text);
  border-radius:5px;padding:1px 6px;font-size:11px;margin-right:6px;font-weight:600;
}

/* 常用网站链接块（可点击卡片行） */
.kb-links{display:flex;flex-direction:column;gap:8px;margin:0 0 12px;padding:0;list-style:none}
.kb-links__item{
  display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 10px;
  padding:10px 13px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;
}
.kb-links__item a{color:var(--accent2);text-decoration:none;font-size:13.5px;font-weight:500;word-break:break-all}
.kb-links__item a:hover{text-decoration:underline}
.kb-links__item a::after{content:"↗";margin-left:5px;font-size:12px;color:var(--muted)}
.kb-links__note{color:var(--muted);font-size:12.5px;line-height:1.5}

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

@media (max-width:640px){
  .kb-item{padding:17px 14px}
  .kb-item__title{font-size:15px}
  .kb-item__sub{font-size:13px}
  .kb-detail-title{font-size:18px}
}

