@charset "UTF-8";

/* JetBrains Mono v2.304（SIL OFL 1.1，许可全文见 web/fonts/OFL.txt）。
   family 名取自字体文件 name 表（ID 1 / ID 16 均为 "JetBrains Mono"），不是自造别名。
   unicode-range 只声明该字体实际覆盖的拉丁/数字/西文标点区段（cmap 共 1363 字，
   无 CJK、无全角标点）：中日韩文字与全角标点不命中这些 @font-face，直接落到 family 链
   后面的 "PingFang SC"，中文标点因此跟随中文。font-display:swap 保证加载期间不空白。 */
@font-face{
  font-family:"JetBrains Mono";
  src:url("/fonts/JetBrainsMono-Regular.woff2") format("woff2");
  font-weight:400; font-style:normal; font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+0259,U+02B0-02FF,U+0300-036F,U+1E00-1EFF,U+2000-206F,U+2070-209F,U+20A0-20CF,U+2100-214F,U+2190-21FF,U+2200-22FF,U+2713-2714,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"JetBrains Mono";
  src:url("/fonts/JetBrainsMono-Medium.woff2") format("woff2");
  font-weight:500; font-style:normal; font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+0259,U+02B0-02FF,U+0300-036F,U+1E00-1EFF,U+2000-206F,U+2070-209F,U+20A0-20CF,U+2100-214F,U+2190-21FF,U+2200-22FF,U+2713-2714,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"JetBrains Mono";
  src:url("/fonts/JetBrainsMono-SemiBold.woff2") format("woff2");
  font-weight:600; font-style:normal; font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+0259,U+02B0-02FF,U+0300-036F,U+1E00-1EFF,U+2000-206F,U+2070-209F,U+20A0-20CF,U+2100-214F,U+2190-21FF,U+2200-22FF,U+2713-2714,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"JetBrains Mono";
  src:url("/fonts/JetBrainsMono-Bold.woff2") format("woff2");
  font-weight:700; font-style:normal; font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+0259,U+02B0-02FF,U+0300-036F,U+1E00-1EFF,U+2000-206F,U+2070-209F,U+20A0-20CF,U+2100-214F,U+2190-21FF,U+2200-22FF,U+2713-2714,U+FEFF,U+FFFD;
}

/* 语义 token 单一来源。数值权威：docs/design-system/foundations.md。
   浅色是默认值，深色由 prefers-color-scheme 覆盖同一批变量；
   本文件不再保留第二、第三个 :root 覆盖块与 [data-theme] 分支。 */
:root{
  color-scheme:light dark;

  /* color.* — v2 黑白侘寂，逐字取自 foundations 颜色表 */
  --canvas:#F8F8F5;
  --surface:#EFEFEA;
  --elevated:#FFFFFF;
  --ink:#262823;
  --muted:#62655E;
  --on-brand:#FAFAF7;
  --brand:#292C26;
  --brand-tint:#E9EBE3;
  --action-text:#30352C;
  --separator:#DADCD4;
  --control-stroke:#7A7E72;
  --success:#24704D;
  --warning:#8C580C;
  --error:#A93C40;
  --overlay:rgba(38,40,35,.32);

  /* Issue #33 页面绿色语义 token（集中区块，数值权威：docs/design-system/foundations.md）。
     品牌绿/交互色/成功·警告·错误分别定义：这些只用于主操作填充与链接交互，
     不改 --brand.* 中性 token、不承担 --success 状态语义。页面代码只引用下列变量名，禁散落绿色魔法值。
     --action-* 深浅同值（深色块不重复覆盖）；--link/--user-bubble/--page-base 由深色块覆盖。
     实测对比度：onFill/fill 5.42:1、onFill/fillPressed 5.16:1、深绿 link/白底 5.57:1。 */
  --action-fill:#36C27E;
  --action-fill-pressed:#2EBE76;
  --action-on-fill:#163B2A;
  --link:#21764F;
  --user-bubble:#F1F2F1;
  --page-base:#FAFAF8;

  /* type.*：rem 相对根字号，响应 200% 文本缩放 */
  /* 字体族（v3，2026-09-22 用户方向调整）：正文/标题/UI 文本/字标的拉丁字母、数字、西文标点
     改用系统无衬线 UI 字体（不再用 JetBrains Mono 等宽）；中文与中文标点落 "PingFang SC"，
     非苹果环境按 -apple-system／系统 UI／Segoe UI／冬青黑体／微软雅黑／Noto Sans CJK 顺序兜底。
     --font-code 仅供代码与内联代码等宽复用，@font-face 的 JetBrains Mono 现只服务代码族。 */
  --font-body:-apple-system,BlinkMacSystemFont,system-ui,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",sans-serif;
  --font-code:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --type-brand:1.25rem;
  --type-display:1.5625rem;
  --type-page-title:1.25rem;
  --type-section:1.125rem;
  --type-card-title:1rem;
  --type-body:1rem;
  --type-support:.875rem;
  --type-meta:.75rem;
  --type-caption:.6875rem;
  --type-code:.875rem;
  --type-metric:2rem;
  --lh-body:1.5;
  --lh-support:1.43;
  --lh-meta:1.4;

  /* space.* / layout.* / size.* */
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px;
  --space-6:24px; --space-8:32px; --space-12:48px;
  --page-inset:20px;
  --reading-max:680px;
  --form-max:480px;
  --grid-gap:10px;
  --control-gap:8px;
  --section-gap:20px;
  --message-gap:16px;
  --card-inset:14px;
  --control-inset:16px;
  --message-footer-gap:8px;
  --chat-card-inset:12px;
  --chat-card-header-gap:8px;
  --chat-row-min-height:44px;
  --tap-min:44px;
  --primary-min-height:52px;
  --row-min-height:52px;
  --composer-min-height:60px;
  --focus-ring:2px;
  --focus-offset:2px;

  /* radius.* */
  --radius-field:16px;
  --radius-card:16px;
  --radius-composer:24px;
  --radius-inner:12px;
  --radius-bubble:16px;

  /* motion.* */
  --motion-feedback:150ms;
  --motion-layout:200ms;
  --motion-exit:120ms;
  --motion-curve:cubic-bezier(.2,0,0,1);

  /* 旧类名别名：指向同一批语义 token，避免两套色值漂移。 */
  --bg:var(--canvas);
  --surface-soft:var(--surface);
  --faint:var(--muted);
  --accent:var(--action-text);
  --accent-dark:var(--action-text);
  --blue-soft:var(--brand-tint);
  --user:var(--brand-tint);
  --line:var(--separator);
  --green:var(--success);
  --chart:var(--brand);
  --hero-ink:var(--ink);
  --hero-muted:var(--muted);
  --bar:var(--separator);
  --bar-current:var(--brand);
  --card-blue:var(--brand-tint);
  --action:var(--brand);
  --action-ink:var(--on-brand);
  /* elevation.content：正文与静态卡片不加投影，靠底色和留白分组。 */
  --shadow:0 0 0 1px var(--separator);
}

@media(prefers-color-scheme:dark){
  :root{
    --canvas:#161715;
    --surface:#222420;
    --elevated:#2C2E29;
    --ink:#EEEEEA;
    --muted:#AEB1A8;
    --on-brand:#20221D;
    --brand:#E3E5DD;
    --brand-tint:#2C3028;
    --action-text:#DEE2D5;
    --separator:#454A40;
    --control-stroke:#8F9587;
    --success:#8BD5AC;
    --warning:#E7BE76;
    --error:#F0A0A2;
    --overlay:rgba(16,17,13,.56);
    /* Issue #33 绿色语义 token 深色覆盖：--action-* 深浅同值不重复；
       --link/--user-bubble/--page-base 覆盖为深色值（见 foundations 契约）。 */
    --link:#83DAA9;
    --user-bubble:#2C3028;
    --page-base:#161715;
  }
}

*{box-sizing:border-box}
html,body{height:100%;margin:0;overflow:hidden}
body{font-family:var(--font-body);background:var(--page-base);color:var(--ink);-webkit-font-smoothing:antialiased;font-size:var(--type-body);line-height:var(--lh-body)}
button,input,textarea{font:inherit}
button{border:0;background:none;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
a{color:inherit}
button{transition:background var(--motion-feedback) var(--motion-curve),box-shadow var(--motion-feedback) var(--motion-curve),transform var(--motion-feedback) var(--motion-curve),opacity var(--motion-feedback) var(--motion-curve)}
button:active{transform:scale(.96)}
button:disabled{cursor:default;transform:none}
/* 键盘焦点：唯一可见焦点环，使用 action.text 与 focusRing/focusOffset。 */
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:var(--focus-ring) solid var(--action-text);outline-offset:var(--focus-offset)}
h1,h2,h3,p{margin:0}
svg{display:block;flex-shrink:0}
.icon{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.app-shell{height:100dvh;max-height:100%;position:relative;display:flex;flex-direction:column;overflow:hidden;background:var(--page-base)}
.statusbar{height:44px;flex:0 0 44px;display:flex;align-items:center;justify-content:space-between;padding:7px 29px 0;font-size:var(--type-support);font-weight:600;color:var(--ink)}
.status-symbols{display:flex;align-items:center;gap:var(--space-1)}
.status-symbols svg{width:15px;height:12px;fill:currentColor}
.status-symbols .battery{width:25px;height:13px}

/* 顶栏：品牌或标题 + 至多一个辅助入口，高度随内容适配。 */
.app-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:var(--space-1) var(--page-inset);position:relative}
.icon-button{width:var(--tap-min);height:var(--tap-min);display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--action-text)}
.icon-button:hover{background:var(--surface)}
.brand-center{display:flex;align-items:center;gap:var(--space-2);min-width:0}
.brand-orb{display:flex;align-items:center;justify-content:center;width:var(--space-6);height:var(--space-6);flex:0 0 auto}
.brand-orb .brand-glyph{width:var(--space-6);height:var(--space-6);display:block}
/* 品牌双圆：自带两圆渐变与咬合间隙，无描边/玻璃/方块底。顶栏 size.icon.feature=24。 */
.brand-glyph{width:var(--space-6);height:var(--space-6);display:inline-block;vertical-align:middle}
.brand-copy{display:flex;align-items:center;gap:var(--space-2);min-width:0}
.brand-name{font:var(--type-brand)/1.15 var(--font-body);color:var(--ink)}
.header-spacer{width:var(--tap-min);height:var(--tap-min);flex:0 0 var(--tap-min)}
.brand-state{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted)}
.online-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--success);vertical-align:middle;margin-right:var(--space-1)}
.online-dot.offline{background:var(--muted)}
.header-title{font-size:var(--type-card-title);font-weight:600;text-align:center;flex:1;min-width:0}
.header-title small{display:block;font-weight:400;font-size:var(--type-meta);color:var(--muted);margin-top:2px}
.avatar-letter{width:29px;height:29px;display:flex;align-items:center;justify-content:center;background:var(--surface);border-radius:50%;font:var(--type-support) var(--font-body);color:var(--action-text)}

.view{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none;position:relative}
.view::-webkit-scrollbar{display:none}

/* 单阅读列：宽屏保持居中，遵守 layout.readingMax。 */
.chat-content,.profile-content,.feishu-content,.settings-content{max-width:var(--reading-max);margin:0 auto}
.chat-content{padding:var(--space-3) var(--page-inset) var(--space-4)}
.date-label{text-align:center;font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);margin:0 0 var(--message-gap)}

/* 用户消息：brand.tint，宽度不超过阅读列的 88%。 */
.user-message{margin-left:auto;max-width:88%;padding:var(--space-3) var(--space-4);background:var(--user-bubble);border-radius:var(--radius-bubble) var(--radius-bubble) 8px var(--radius-bubble);font-size:var(--type-body);line-height:var(--lh-body)}
.assistant-message{margin-top:var(--message-gap)}
.assistant-text{font-size:var(--type-body);line-height:var(--lh-body)}
.assistant-text strong{font-weight:600}
.assistant-message .assistant-text+.assistant-text{margin-top:var(--space-3)}

.inline-card{display:block;width:100%;text-align:left;border-radius:var(--radius-card);background:var(--surface);box-shadow:var(--shadow);padding:var(--card-inset);margin-top:var(--space-3)}
.card-eyebrow{display:flex;align-items:center;justify-content:space-between;font-size:var(--type-meta);color:var(--muted)}
.card-eyebrow>span{display:flex;align-items:center;gap:var(--space-1)}
.card-eyebrow .icon{width:var(--space-4);height:var(--space-4)}
.card-eyebrow>.icon{width:var(--space-4);height:var(--space-4);color:var(--muted)}
.sleep-inline-main{display:flex;align-items:flex-end;justify-content:space-between;margin-top:var(--space-2);gap:var(--space-4)}
.sleep-number{white-space:nowrap;font-size:var(--type-section);line-height:1.3;font-weight:500;font-variant-numeric:tabular-nums}
.sleep-number small{font-size:var(--type-meta);font-weight:400;margin:0 var(--space-1);color:var(--muted)}
.mini-bars{display:flex;gap:var(--space-1);height:31px;align-items:flex-end;padding-bottom:2px}
.mini-bars span{display:block;width:9px;min-height:5px;border-radius:4px;background:var(--separator)}
.mini-bars span:last-child{background:var(--brand)}
.inline-foot{font-size:var(--type-meta);color:var(--muted);margin-top:var(--space-2);display:flex;justify-content:space-between;gap:var(--space-2);align-items:center}
.inline-foot .trend{color:var(--action-text)}

.document-card{padding:var(--space-3);display:flex;align-items:center;gap:var(--space-3)}
.document-icon{flex-shrink:0;width:var(--space-6);height:var(--space-6);display:flex;align-items:center;justify-content:center;color:var(--action-text)}
.document-icon .icon{width:var(--space-5,20px);height:var(--space-5,20px)}
.document-card-text{flex:1;min-width:0}
.document-card h3{font-size:var(--type-support);font-weight:500;line-height:var(--lh-support)}
.document-card p{font-size:var(--type-meta);color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.document-card>.icon{width:var(--space-4);height:var(--space-4);color:var(--muted)}
.reply-tail{margin-top:var(--space-3);font-size:var(--type-body);line-height:var(--lh-body);color:var(--muted)}
.next-user{margin-top:var(--message-gap)}

/* 聊天输入：最小 composerMinHeight，安全区只由底栏消费一次。 */
.composer{padding:var(--space-3) var(--page-inset);background:var(--page-base);flex:0 0 auto;position:relative}
.composer-form{display:grid;grid-template-columns:var(--tap-min) minmax(0,1fr) var(--tap-min);grid-template-areas:"add input send";align-items:end;gap:var(--space-1);border-radius:var(--radius-composer);min-height:var(--composer-min-height);background:var(--surface);padding:var(--space-2);box-shadow:0 0 0 1px var(--separator);transition:border-radius var(--motion-layout) var(--motion-curve),padding var(--motion-layout) var(--motion-curve)}
.attach-button{grid-area:add;width:var(--tap-min);height:var(--tap-min);display:flex;align-items:center;justify-content:center;color:var(--muted);flex:0 0 var(--tap-min);border-radius:50%}
.attach-button .icon{width:var(--space-5,20px);height:var(--space-5,20px)}
.composer textarea{grid-area:input;min-width:0;border:0;outline:none!important;background:transparent;color:var(--ink);resize:none;width:100%;height:var(--tap-min);max-height:calc(var(--type-body) * var(--lh-body) * 6);padding:var(--space-2) 0;line-height:var(--lh-body);font-size:var(--type-body);scrollbar-width:none;overflow-y:auto}
.composer textarea::placeholder{color:var(--muted)}
.send-button{grid-area:send;justify-self:end;width:var(--tap-min);height:var(--tap-min);display:flex;align-items:center;justify-content:center;flex:0 0 var(--tap-min);border-radius:50%;background:var(--action-fill);color:var(--action-on-fill);transition:background var(--motion-feedback) var(--motion-curve),color var(--motion-feedback) var(--motion-curve),box-shadow var(--motion-feedback) var(--motion-curve)}
.send-button .icon{width:var(--space-5,20px);height:var(--space-5,20px);stroke-width:2}
.composer.is-expanded .composer-form{grid-template-areas:"input input input" "add . send";padding:var(--space-3);gap:var(--space-1)}
.composer.is-expanded textarea{min-height:calc(var(--type-body) * var(--lh-body) * 2);padding:var(--space-1) var(--space-2)}
.send-button[data-action="stop"]{background:var(--brand);color:var(--on-brand)}
.send-button:not(:disabled):active{background:var(--action-fill-pressed);color:var(--action-on-fill)}
.send-button[data-action="stop"]:not(:disabled):active{background:var(--brand);color:var(--on-brand)}
.send-button:disabled{background:var(--surface);color:var(--muted);box-shadow:inset 0 0 0 1px var(--separator)}
.send-button:not(:disabled):hover{filter:brightness(.96)}
.composer-hint{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);text-align:center}
.composer-hint:not(:empty){padding-top:var(--space-2)}

/* Tab Bar：图标与文字同时显示，当前项使用品牌语义。 */
.tabbar{flex:0 0 auto;display:flex;justify-content:center;gap:var(--space-12);background:var(--page-base);border-top:1px solid var(--separator);padding-bottom:env(safe-area-inset-bottom)}
.tabbar button{min-width:80px;min-height:var(--tap-min);display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted);font-size:var(--type-caption);gap:2px;padding:var(--space-2) var(--space-2)}
/* 当前 Tab 前景=link（Issue #33）；不只靠颜色区分，选中项另有 .tab-icon 背景形状标识。 */
.tabbar button[aria-current=page]{color:var(--link)}
.tab-icon{height:var(--space-6);display:flex;align-items:center;justify-content:center}
.tab-icon .icon{width:22px;height:22px;stroke-width:1.7}
.tabbar button[aria-current=page] .tab-icon{background:var(--brand-tint);border-radius:var(--radius-inner);width:48px}
.home-indicator{height:21px;flex:0 0 21px;display:flex;justify-content:center;align-items:center;background:var(--page-base)}
.home-indicator span{height:4px;width:108px;background:var(--ink);border-radius:3px;opacity:.85}

/* 我的资料：一个 pageTitle → 同步时间 → 睡眠 → 指标 → 连接 → 说明。 */
.profile-content{padding:var(--section-gap) var(--page-inset)}
.page-kicker{display:none}
.profile-content h1{font-size:var(--type-page-title);font-weight:600;line-height:1.36}
.page-subtitle{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);margin-top:var(--space-2);margin-bottom:var(--section-gap);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}
.sync-button{font-size:var(--type-meta);color:var(--action-text);padding:0 var(--space-2);min-height:var(--tap-min);display:flex;gap:var(--space-1);align-items:center}
.sync-button .icon{width:var(--space-3);height:var(--space-3)}
.segment{display:flex;padding:var(--space-1);background:var(--surface);border-radius:var(--radius-inner);margin:var(--space-4) 0}
.segment button{flex:1;min-height:var(--tap-min);border-radius:var(--space-2);color:var(--muted);font-size:var(--type-support)}
.segment button[aria-pressed=true]{color:var(--ink);background:var(--elevated)}

.sleep-hero{display:block;text-align:left;width:100%;padding:var(--card-inset);border-radius:var(--radius-card);background:var(--brand-tint);color:var(--ink);position:relative;overflow:hidden}
.hero-top{display:flex;align-items:center;justify-content:space-between;font-size:var(--type-support);color:var(--muted)}
.hero-top>span{display:flex;align-items:center;gap:var(--space-2)}
.hero-top .icon{width:var(--space-4);height:var(--space-4)}
.hero-number{font-size:var(--type-metric);line-height:1.2;margin-top:var(--space-3);font-weight:500;font-variant-numeric:tabular-nums}
.hero-number small{font-size:var(--type-support);margin:0 var(--space-1);color:var(--muted)}
.hero-hint{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);margin-top:var(--space-2)}
.week-chart{display:flex;align-items:flex-end;justify-content:space-between;height:74px;gap:var(--space-2);margin-top:var(--space-3)}
.bar-column{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:var(--space-2)}
.week-bar{width:100%;max-width:17px;min-height:6px;background:var(--separator);border-radius:5px}
.bar-column.current .week-bar{background:var(--brand)}
.bar-column small{font-size:var(--type-caption);color:var(--muted);line-height:1}
.bar-column.current small{color:var(--ink)}

/* 指标：剩余列宽不足时改单列，不缩小数字硬塞双列。 */
.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--grid-gap);margin-top:var(--grid-gap)}
.metric{width:100%;text-align:left;border-radius:var(--radius-card);background:var(--surface);padding:var(--card-inset);box-shadow:var(--shadow)}
.metric-name{display:flex;align-items:center;gap:var(--space-2);font-size:var(--type-support);color:var(--muted)}
.metric-name .icon{width:var(--space-4);height:var(--space-4);color:var(--muted)}
.metric-value{font-size:var(--type-metric);font-weight:500;line-height:1.2;margin-top:var(--space-3);font-variant-numeric:tabular-nums;color:var(--ink)}
.metric-value small{font-size:var(--type-meta);font-weight:400;color:var(--muted);margin-left:var(--space-1)}
.metric-bottom{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);margin-top:var(--space-2)}
.no-metric{font-size:var(--type-support);line-height:var(--lh-support);color:var(--muted)}
.sparkline{width:44px;height:15px;color:var(--brand);stroke-width:1.5}
.section-label{font-size:var(--type-card-title);font-weight:600;margin:var(--section-gap) 0 var(--control-gap);color:var(--ink)}

/* 连接列表行：rowMinHeight，自适应双行，有跳转才加箭头。 */
.list-card{background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow);overflow:hidden}
.list-row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--card-inset);min-height:64px;width:100%;text-align:left}
.list-row+.list-row{border-top:1px solid var(--separator)}
.row-icon{height:var(--space-6);width:var(--space-6);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--action-text)}
.row-icon .icon{height:var(--space-5,20px);width:var(--space-5,20px)}
.row-text{flex:1;min-width:0}
.row-text h3{font-size:var(--type-body);font-weight:400;line-height:1.4}
.row-text p{font-size:var(--type-meta);color:var(--muted);margin-top:2px;line-height:var(--lh-meta)}
.list-row>.icon{width:var(--space-4);height:var(--space-4);color:var(--muted)}
.row-tag{font-size:var(--type-meta);color:var(--success);white-space:nowrap}
.private-note{display:flex;gap:var(--space-1);color:var(--muted);font-size:var(--type-meta);line-height:var(--lh-meta);margin-top:var(--section-gap)}
.private-note .icon{width:var(--space-3);height:var(--space-4)}

/* 飞书：标题/连接状态 → 搜索 → 结果列表 → 详情。 */
.feishu-content{padding:var(--section-gap) var(--page-inset)}
.connection-hero{display:flex;flex-direction:column;align-items:flex-start;padding:0 0 var(--section-gap)}
.feishu-logo{display:none}
.connection-hero h1{font-size:var(--type-page-title);font-weight:600;line-height:1.36}
.connection-hero>p{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);margin-top:var(--space-2)}
.connected-pill{display:flex;gap:var(--space-1);align-items:center;color:var(--muted);font-size:var(--type-meta);margin-top:var(--space-2)}
.connected-pill .icon{width:var(--space-3);height:var(--space-3)}
.scope-card{padding:var(--card-inset);border-radius:var(--radius-card);background:var(--surface);box-shadow:var(--shadow)}
.scope-card-top{display:flex;align-items:center;justify-content:space-between;font-size:var(--type-card-title);font-weight:600;padding-bottom:var(--space-3);border-bottom:1px solid var(--separator)}
.scope-card-top span:last-child{font-size:var(--type-meta);font-weight:400;color:var(--muted)}
.scope-row{display:flex;align-items:center;gap:var(--space-3);min-height:var(--row-min-height);font-size:var(--type-support)}
.scope-row>.icon{width:var(--space-4);height:var(--space-4);color:var(--muted)}
.scope-row>span{flex:1}
.scope-row>.scope-state{flex:0 0 auto}
.scope-state{display:flex;align-items:center;gap:var(--space-1);font-size:var(--type-meta);color:var(--muted)}
.scope-state .icon{height:var(--space-3);width:var(--space-3)}
.scope-button{display:flex;align-items:center;gap:var(--space-1);white-space:nowrap;font-size:var(--type-support);color:var(--action-text);padding:0 var(--space-2);min-height:var(--tap-min)}
.scope-button .icon{width:var(--space-3);height:var(--space-3)}
.scope-muted{font-size:var(--type-meta);color:var(--muted)}
.recent-doc{display:flex;align-items:flex-start;gap:var(--space-3);width:100%;text-align:left;padding:var(--card-inset);background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow);margin-top:var(--control-gap)}
.recent-doc h3{font-weight:600;font-size:var(--type-card-title);line-height:1.4}
.recent-doc p{font-size:var(--type-support);color:var(--muted);line-height:var(--lh-support);margin-top:var(--space-1)}
.recent-doc small{display:block;font-size:var(--type-meta);color:var(--muted);margin-top:var(--space-2)}
.recent-doc>.icon{width:var(--space-4);height:var(--space-4);color:var(--muted);margin-left:auto;margin-top:var(--space-2)}
.connection-actions{display:flex;justify-content:space-between;align-items:center;margin-top:var(--section-gap);gap:var(--space-3)}
.text-action{font-size:var(--type-support);color:var(--action-text);min-height:var(--tap-min);padding:0 var(--space-2);text-decoration:underline;text-underline-offset:4px}
.feishu-ask{font-size:var(--type-support);background:var(--surface);color:var(--action-text);border-radius:var(--radius-field);padding:0 var(--control-inset);min-height:var(--tap-min);display:flex;align-items:center;gap:var(--space-1)}
.feishu-ask .icon{width:var(--space-4);height:var(--space-4)}

/* 聊天空状态：一句邀请 + 可输入区域，不用大装饰占满首屏。 */
.empty-hero{padding:var(--section-gap) 0;text-align:left}
.empty-orb{display:none}
.empty-hero h1{font-size:var(--type-section);font-weight:600;line-height:1.4}
.empty-hero p{font-size:var(--type-body);line-height:var(--lh-body);color:var(--muted);margin-top:var(--space-3)}
.suggestions{display:flex;flex-direction:column;align-items:stretch;gap:var(--control-gap);margin-top:var(--section-gap)}
.suggestions button{display:flex;align-items:center;gap:var(--space-2);min-height:var(--tap-min);border-radius:var(--radius-inner);padding:var(--space-2) var(--space-3);background:var(--surface);font-size:var(--type-body);box-shadow:var(--shadow);color:var(--ink);text-align:left}

/* 弹层：语义、焦点限制、Escape 关闭。 */
.sheet-layer{position:absolute;inset:0;z-index:var(--layer-modal,30);display:flex;align-items:flex-end}
.sheet-layer[hidden]{display:none}
.sheet-backdrop{position:absolute;inset:0;width:100%;height:100%;background:var(--overlay);cursor:default}
.sheet-backdrop:active{transform:none}
.sheet{position:relative;width:100%;max-width:var(--reading-max);margin:0 auto;background:var(--elevated);border-radius:var(--radius-composer) var(--radius-composer) 0 0;max-height:86%;min-height:240px;padding:var(--space-2) var(--page-inset) calc(var(--space-6) + env(safe-area-inset-bottom));display:flex;flex-direction:column;transform:translateY(0);transition:transform var(--motion-layout) var(--motion-curve),opacity var(--motion-exit)}
.sheet-layer.opening .sheet{transform:translateY(18px);opacity:0}
.sheet-handle{width:34px;height:4px;border-radius:5px;background:var(--separator);margin:0 auto var(--space-3);flex:0 0 4px}
.sheet-top{display:flex;justify-content:space-between;align-items:center;padding-bottom:var(--space-3);gap:var(--space-3)}
.sheet-top h2{font-size:var(--type-page-title);font-weight:600;overflow-wrap:anywhere}
.close-sheet{width:var(--tap-min);height:var(--tap-min);flex:0 0 var(--tap-min);background:var(--surface);color:var(--ink)}
.close-sheet .icon{width:var(--space-4);height:var(--space-4)}
.sheet-content{scrollbar-gutter:stable;overflow-y:auto;min-height:0;scrollbar-width:none;overscroll-behavior:contain;padding-bottom:var(--space-2)}
.sheet-description{font-size:var(--type-support);line-height:var(--lh-support);color:var(--muted);margin-bottom:var(--space-4)}
.detail-number{font-size:var(--type-metric);font-weight:500;line-height:1.2;margin-top:var(--space-2);font-variant-numeric:tabular-nums}
.detail-number small{font-size:var(--type-support);color:var(--muted);margin:0 var(--space-1)}
.sleep-times{font-size:var(--type-support);color:var(--muted);margin:var(--space-2) 0 var(--space-4)}
.stage-line{height:var(--space-4);display:flex;gap:3px;border-radius:5px;overflow:hidden;margin:var(--space-3) 0 var(--space-2)}
.stage-line span{border-radius:3px;background:var(--brand)}
.stage-line span:nth-child(2n){opacity:.45}
.stage-line span:nth-child(3n){opacity:.7}
.stage-legend{display:flex;justify-content:space-between;font-size:var(--type-meta);color:var(--muted);margin-bottom:var(--space-4)}
.detail-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:var(--control-gap);margin-bottom:var(--space-4)}
.detail-stat{background:var(--surface);padding:var(--space-3) var(--space-2);border-radius:var(--radius-inner);text-align:center}
.detail-stat small{display:block;color:var(--muted);font-size:var(--type-meta)}
.detail-stat strong{font-size:var(--type-body);font-weight:500}

/* 主操作：brand.fill + text.onBrand，primaryMinHeight，radius.field。 */
/* 主操作按钮（Issue #33）：action.fill＋action.onFill 深墨绿前景（不用白字）；按下 fillPressed；禁用回中性。 */
.sheet-primary{display:flex;align-items:center;justify-content:center;gap:var(--space-2);width:100%;min-height:var(--primary-min-height);background:var(--action-fill);color:var(--action-on-fill);border-radius:var(--radius-field);font-size:var(--type-body);font-weight:500;margin-top:var(--space-4);padding:0 var(--control-inset)}
.sheet-primary:not(:disabled):active{background:var(--action-fill-pressed);color:var(--action-on-fill)}
.sheet-primary .icon{width:var(--space-4);height:var(--space-4)}
.sheet-primary:disabled{background:var(--surface);color:var(--muted);box-shadow:inset 0 0 0 1px var(--separator)}
/* 次操作：无填充 + action.text。 */
.sheet-secondary{display:flex;justify-content:center;align-items:center;width:100%;min-height:var(--tap-min);color:var(--action-text);font-size:var(--type-body);font-weight:500;margin-top:var(--control-gap)}

.data-type-row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) 0;border-bottom:1px solid var(--separator);min-height:var(--row-min-height)}
.data-type-row .icon{width:var(--space-4);height:var(--space-4);color:var(--muted)}
.data-type-row div{flex:1;min-width:0}
.data-type-row h3{font-size:var(--type-body);font-weight:400}
.data-type-row p{font-size:var(--type-meta);color:var(--muted)}
.data-type-row>span{font-size:var(--type-meta);color:var(--muted);min-width:64px;text-align:right;flex-shrink:0}
.data-type-row h3,.data-type-row p{overflow-wrap:anywhere}

/* 普通输入：field 控件，靠 control.stroke 识别边界。 */
.type-search{display:flex;align-items:center;gap:var(--space-2);background:var(--surface);border:1px solid var(--control-stroke);border-radius:var(--radius-field);padding:0 var(--control-inset);min-height:var(--primary-min-height);margin-bottom:var(--space-3)}
.type-search .icon{width:var(--space-4);height:var(--space-4);color:var(--muted)}
.type-search input{width:100%;background:none;border:0;color:var(--ink);font-size:var(--type-body);outline:none;padding:var(--space-2) 0}
.type-search input::placeholder{color:var(--muted)}
.no-results{font-size:var(--type-body);color:var(--muted);padding:var(--section-gap) 0}
.document-meta{font-size:var(--type-meta);color:var(--muted);display:flex;align-items:center;gap:var(--space-1);margin-bottom:var(--space-4)}
.document-meta .icon{height:var(--space-4);width:var(--space-4)}
.document-body{font-size:var(--type-body);line-height:var(--lh-body)}
.document-body h3{font-weight:600;margin-top:var(--space-6);margin-bottom:var(--space-2);font-size:var(--type-card-title)}
.document-body p{margin-bottom:var(--space-3)}
.document-body blockquote{margin:var(--space-3) 0;border-left:3px solid var(--brand);padding:var(--space-3) var(--space-4);color:var(--muted)}
.document-body ul{padding-left:var(--space-4)}
.document-body li{margin:var(--space-2) 0}
.demo-note{font-size:var(--type-meta);color:var(--muted);line-height:var(--lh-meta);margin-top:var(--space-4)}
.notice-box{padding:var(--space-3) var(--card-inset);border-radius:var(--radius-inner);background:var(--surface);font-size:var(--type-support);line-height:var(--lh-support);color:var(--ink);margin:var(--space-3) 0}
.history-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-3) 0;width:100%;text-align:left;border-bottom:1px solid var(--separator);gap:var(--space-3);min-height:var(--row-min-height)}
.history-row h3{font-size:var(--type-body);font-weight:400}
.history-row p{font-size:var(--type-meta);color:var(--muted);margin-top:2px}
.history-row .icon{height:var(--space-4);width:var(--space-4);color:var(--muted)}

/* 复制完成等无风险反馈才用短暂提示；待处理错误走就近状态条。 */
.toast{position:absolute;left:var(--page-inset);right:var(--page-inset);bottom:calc(92px + env(safe-area-inset-bottom));z-index:var(--layer-notice,40);padding:var(--space-3) var(--card-inset);border-radius:var(--radius-inner);font-size:var(--type-support);text-align:center;background:var(--ink);color:var(--canvas);opacity:0;transform:translateY(7px);pointer-events:none;transition:opacity var(--motion-feedback),transform var(--motion-feedback);overflow-wrap:anywhere;max-width:var(--reading-max);margin:0 auto}
.toast.visible{opacity:1;transform:translateY(0)}
.typing{display:flex;gap:var(--space-1);align-items:center;height:22px}
.typing span{height:5px;width:5px;border-radius:50%;background:var(--brand);animation:typing 1s infinite ease-in-out}
.typing span:nth-child(2){animation-delay:150ms}
.typing span:nth-child(3){animation-delay:300ms}
@keyframes typing{0%,80%,100%{opacity:.25;transform:translateY(0)}
40%{opacity:1;transform:translateY(-3px)}
}

/* 双圆思考动效（Issue #33，#41 精致化）：放在消息列表末尾、左对齐助手正文起点，替换通用 loading。
   #41：双圆收到 size.icon.small(16)、文字降到 meta 更轻、去掉 44 点击区高度（等待行不可点），整体更含蓄。 */
.thinking-row{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) 0;min-height:auto}
.thinking-glyph{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex:0 0 auto}
.thinking-glyph .brand-glyph{width:100%;height:100%;display:block}
.thinking-text{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted)}
/* 两圆作为整体绕共同中心匀速旋转：3s/圈、顺时针、linear（motion.thinkingRotation）。
   旋转施加在内层 g 上，transform-box:fill-box + transform-origin:center 保证绕图形几何中心，不裁切、不位移。 */
.brand-glyph .brand-glyph-spin{transform-box:fill-box;transform-origin:center}
.brand-glyph.spinning .brand-glyph-spin{animation:brand-glyph-spin var(--thinking-rotation,3s) linear infinite}
@keyframes brand-glyph-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
/* 页面隐藏/后台时暂停旋转，恢复可见后继续（JS 同时重评当前请求状态）。 */
.page-hidden .brand-glyph.spinning .brand-glyph-spin{animation-play-state:paused}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
[hidden]{display:none!important}
.app-shell{padding-top:env(safe-area-inset-top)}

/* 离线/失败：就近状态条 + 可操作动作。 */
.connection-banner{font-size:var(--type-support);line-height:var(--lh-support);padding:var(--space-2) var(--page-inset);background:var(--surface);color:var(--ink);display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);border-bottom:1px solid var(--separator)}
.connection-banner button{white-space:nowrap;color:var(--action-text);font-weight:500;min-height:var(--tap-min);padding:0 var(--space-2);flex-shrink:0}

.message+.message{margin-top:var(--message-gap)}
.message.user-wrap{margin-top:var(--message-gap)}
.user-message,.assistant-text{overflow-wrap:anywhere;white-space:pre-wrap}
.message-meta{font-size:var(--type-meta);color:var(--muted);display:flex;align-items:center;gap:var(--space-1);min-height:var(--tap-min);margin-top:var(--space-1)}
.message-meta button{font-size:var(--type-meta);display:inline-flex;align-items:center;justify-content:center;min-height:var(--tap-min);min-width:var(--tap-min);color:var(--muted);border-radius:var(--space-2);padding:0 var(--space-2)}
.message-meta button:hover{background:var(--surface)}
.message-meta .icon{width:var(--space-4);height:var(--space-4)}
.user-wrap .message-meta{justify-content:flex-end}
.queue-error{font-size:var(--type-meta);line-height:var(--lh-meta);text-align:right;color:var(--error);margin:0 0 var(--space-1)}
.empty-reply{font-size:var(--type-support);color:var(--muted)}

/* 消息尾部（#41）：无操作排（复制/来源胶囊都移除）。竖排承载：可选状态文字 + Today 式来源一行。 */
.message-footer{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-1);margin-top:var(--space-2)}
.footer-status{font-size:var(--type-meta);color:var(--muted)}
/* Today 极简来源一行：链接图标 + “参考了 N 个来源”，meta 灰、无底块；点按展开真实来源列表。 */
.source-label{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);padding:var(--space-1) 0;min-height:auto}
.source-label:hover{color:var(--action-text)}
.source-label .icon{width:var(--space-3);height:var(--space-3)}
.source-list{display:flex;flex-direction:column;gap:var(--space-1);margin:var(--space-1) 0 0;width:100%}
.source-row{display:flex;align-items:center;gap:var(--space-2);min-height:var(--tap-min);padding:var(--space-1) 0;color:var(--ink);text-decoration:none;font-size:var(--type-support)}
.source-row>.icon{width:var(--space-4);height:var(--space-4);color:var(--muted);flex-shrink:0}
.source-row-text{min-width:0;flex:1;overflow-wrap:anywhere}
.source-row-text small{display:block;font-size:var(--type-meta);color:var(--muted)}
.source-row>.icon:last-child{color:var(--muted)}

.settings-content{padding:var(--section-gap) var(--page-inset)}
.settings-brand{font:var(--type-display)/1.3 var(--font-body);margin:0 0 var(--space-3);color:var(--ink)}
.row-tag{max-width:90px;text-align:right;overflow-wrap:anywhere;white-space:normal}
.row-text p{overflow-wrap:anywhere}
.break-word{overflow-wrap:anywhere}
.pairing-card{background:var(--surface);padding:var(--card-inset);border-radius:var(--radius-card);text-align:center}
.pairing-card p{font-size:var(--type-support);line-height:var(--lh-support);color:var(--muted)}
.pairing-code{display:block;font:600 var(--type-display)/1.5 var(--font-code);letter-spacing:5px;overflow-wrap:anywhere;color:var(--ink);user-select:all;margin:var(--space-2) 0}
.pairing-card .text-action{min-height:var(--tap-min);font-size:var(--type-support)}
.pairing-card .sheet-secondary{margin-top:var(--space-1)}
.form-hint{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);margin-top:var(--space-4);overflow-wrap:anywhere}
.inline-error{font-size:var(--type-support);line-height:var(--lh-support);color:var(--error);background:var(--surface);padding:var(--space-3) var(--card-inset);border-radius:var(--radius-inner);margin:var(--space-3) 0;overflow-wrap:anywhere}

/* 配对：同一对齐线、formMax，键盘态可滚动到按钮。 */
.auth-content{padding:var(--section-gap) var(--page-inset);max-width:var(--form-max);margin:0 auto;text-align:left}
.auth-content h1{font-weight:600;font-size:var(--type-display);margin:var(--space-6) 0 var(--space-3)}
.auth-content>p{font-size:var(--type-body);color:var(--muted);line-height:var(--lh-body)}
.auth-content .typing{justify-content:flex-start;margin-top:var(--space-6)}
.auth-content .sheet-primary{margin-top:var(--section-gap)}
#pair-form{margin-top:var(--section-gap);text-align:left}
#pair-form label{display:block;font-size:var(--type-support);color:var(--muted);margin-bottom:var(--space-2)}
#pair-code{display:block;width:100%;border:1px solid var(--control-stroke);border-radius:var(--radius-field);padding:var(--space-3) var(--control-inset);min-height:var(--primary-min-height);background:var(--surface);color:var(--ink);font-size:var(--type-body);letter-spacing:2px;text-align:center}

.search-form .type-search{min-height:var(--primary-min-height)}
.search-form .type-search input{font-size:var(--type-body)}
.search-form .sheet-primary{margin-top:var(--space-3)}
.search-result{display:flex;gap:var(--space-3);width:100%;text-align:left;align-items:flex-start;padding:var(--space-4) 0;border-bottom:1px solid var(--separator);min-height:var(--tap-min)}
.search-result>span:nth-child(2){flex:1;min-width:0}
.search-result h3{font-size:var(--type-card-title);font-weight:600;line-height:1.4}
.search-result p{font-size:var(--type-support);color:var(--muted);line-height:var(--lh-support);margin-top:var(--space-1);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.search-result>.icon{width:var(--space-4);height:var(--space-4);margin-top:var(--space-2);color:var(--muted)}
.document-origin{font-size:var(--type-meta);display:inline-flex;align-items:center;gap:var(--space-1);color:var(--muted);margin-bottom:var(--space-4)}
.document-origin .icon{width:var(--space-3);height:var(--space-3)}
.readable-text{white-space:pre-wrap;overflow-wrap:anywhere;line-height:var(--lh-body)}

/* 桌面：扩展到 readingMax，不用固定手机壳装所有场景。 */
@media(min-width:768px){
  .app-shell{max-width:none;box-shadow:none}
  body{background:var(--page-base)}
  .chat-content,.profile-content,.feishu-content,.settings-content{padding-left:var(--space-8);padding-right:var(--space-8)}
}
@media(max-width:359px){
  :root{--page-inset:16px}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important;scroll-behavior:auto!important}
  button:active{transform:none}
  .typing span{opacity:.6}
  .brand-glyph.spinning .brand-glyph-spin{transform:rotate(0deg)}
}

/* 消息富文本：与周围回复共享正文基准，宽内容在自身块内横滚。 */
.view{scroll-behavior:auto}
.message,.assistant-text,.document-body{min-width:0;max-width:100%}
.assistant-text.rich-text,.rich-text{white-space:normal;overflow-wrap:anywhere;font-size:var(--type-body);line-height:var(--lh-body);text-wrap:pretty}
.rich-text>:first-child{margin-top:0}
.rich-text>:last-child{margin-bottom:0}
.rich-text p{margin:0 0 var(--space-3)}
/* Markdown 层级在消息内部重新分配：h1→sectionTitle，h2→cardTitle，h3+→body semibold。 */
.rich-text h1,.rich-text h2,.rich-text h3,.rich-text h4,.rich-text h5,.rich-text h6{color:var(--ink);font-weight:600;line-height:1.4;margin:var(--space-6) 0 var(--space-2);text-wrap:balance}
.rich-text h1{font-size:var(--type-section)}
.rich-text h2{font-size:var(--type-card-title)}
.rich-text h3,.rich-text h4,.rich-text h5,.rich-text h6{font-size:var(--type-body)}
.rich-text strong{font-weight:700;color:var(--ink)}
.rich-text em{font-style:italic}
.rich-text del{color:var(--muted)}
.rich-text ul,.rich-text ol{padding-left:1.65em;margin:var(--space-2) 0 var(--space-3)}
.rich-text li{padding-left:.2em;margin:var(--space-2) 0}
.rich-text li::marker{color:var(--muted);font-variant-numeric:tabular-nums}
.rich-text li>p{margin:var(--space-1) 0}
.rich-text li>ul,.rich-text li>ol{margin:var(--space-1) 0}
.rich-text li:has(>.task-checkbox),.rich-text li:has(>p>.task-checkbox){list-style:none;position:relative}
.task-checkbox{display:inline-flex;align-items:center;justify-content:center;width:var(--space-4);height:var(--space-4);border:1.5px solid var(--control-stroke);border-radius:5px;vertical-align:-2px;margin-left:-1.6em;margin-right:.45em;font:600 .75rem/1 inherit;color:var(--success);background:var(--canvas)}
.task-checkbox.is-checked{background:var(--brand-tint);border-color:var(--brand)}
.rich-text blockquote{margin:var(--space-3) 0;padding:var(--space-3) var(--space-4);border-left:3px solid var(--brand);color:var(--muted)}
.rich-text blockquote>:first-child{margin-top:0}
.rich-text blockquote>:last-child{margin-bottom:0}
.rich-text a{color:var(--link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;overflow-wrap:anywhere}
.rich-text a:hover{text-decoration-thickness:2px}
.rich-text .markdown-image-link{display:inline-flex;align-items:center;padding:0 var(--space-3);margin:var(--space-1) 0;border-radius:var(--radius-inner);background:var(--surface);font-size:var(--type-support);text-decoration:none;min-height:var(--tap-min)}
.rich-text hr{border:0;border-top:1px solid var(--separator);margin:var(--space-6) 0}
.rich-text code{font-family:var(--font-code);font-size:var(--type-code);line-height:1.6;padding:2px 5px;background:var(--surface);color:var(--ink);border-radius:5px;box-decoration-break:clone;-webkit-box-decoration-break:clone}
/* 代码块：语言标签 + 复制，背景 surface，长行块内横滚。 */
.code-block{max-width:100%;min-width:0;margin:var(--space-3) 0;border:1px solid var(--separator);border-radius:var(--radius-inner);background:var(--surface);overflow:hidden}
.code-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);min-height:var(--tap-min);padding:0 var(--space-2) 0 var(--space-3);border-bottom:1px solid var(--separator)}
.code-language{font-size:var(--type-meta);color:var(--muted);overflow-wrap:anywhere}
.code-toolbar button{font-size:var(--type-meta);color:var(--action-text);min-height:var(--tap-min);min-width:64px;padding:0 var(--space-2);border-radius:var(--space-2);flex-shrink:0}
.code-toolbar button:hover{background:var(--brand-tint)}
.rich-text pre{margin:0;padding:var(--space-3);max-width:100%;overflow:auto;overscroll-behavior-x:contain;scrollbar-width:thin;white-space:pre;tab-size:2;text-wrap:nowrap;font-family:var(--font-code);font-size:var(--type-code);line-height:1.6}
.rich-text pre code{display:block;width:max-content;min-width:100%;font-size:inherit;line-height:inherit;padding:0;background:none;color:var(--ink);border:0;border-radius:0;white-space:pre;text-wrap:nowrap;overflow-wrap:normal}
.rich-text .plain-message{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;padding:0;background:none}
/* 表格：保留表头，整块局部横滚。 */
.rich-text .markdown-table{max-width:100%;margin:var(--space-3) 0;overflow-x:auto;overscroll-behavior-x:contain;border:1px solid var(--separator);border-radius:var(--radius-inner);background:var(--canvas);scrollbar-width:thin}
.rich-text table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--type-support);line-height:var(--lh-support);font-variant-numeric:tabular-nums;text-wrap:wrap}
.rich-text th,.rich-text td{padding:var(--space-2) var(--space-3);min-width:98px;max-width:300px;border-bottom:1px solid var(--separator);border-right:1px solid var(--separator);text-align:left;vertical-align:top;overflow-wrap:break-word}
.rich-text th{font-weight:600;background:var(--surface);color:var(--ink);white-space:nowrap}
.rich-text tr:last-child td{border-bottom:0}
.rich-text th:last-child,.rich-text td:last-child{border-right:0}
.rich-text tbody tr:nth-child(even){background:var(--surface)}
.rich-text .align-right{text-align:right}
.rich-text .align-center{text-align:center}
.rich-text .align-left{text-align:left}
.rich-text [tabindex]:focus-visible{outline:var(--focus-ring) solid var(--action-text);outline-offset:calc(var(--focus-offset) * -1)}
/* 代码高亮：侘寂单色，靠字重与明暗区分词法，不引入彩色；明/深色随语义变量自适应。 */
.rich-text .hljs-keyword,.rich-text .hljs-selector-tag,.rich-text .hljs-literal,
.rich-text .hljs-title,.rich-text .hljs-title.function_,.rich-text .hljs-section,
.rich-text .hljs-type,.rich-text .hljs-built_in,.rich-text .hljs-variable,.rich-text .hljs-attribute{color:var(--ink);font-weight:600}
.rich-text .hljs-string,.rich-text .hljs-regexp,.rich-text .hljs-template-tag{color:var(--muted)}
.rich-text .hljs-number,.rich-text .hljs-symbol,.rich-text .hljs-attr{color:var(--muted)}
.rich-text .hljs-comment,.rich-text .hljs-quote{color:var(--muted);font-style:italic}
.rich-text .hljs-meta,.rich-text .hljs-tag,.rich-text .hljs-name{color:var(--muted)}

/* 聊天内紧凑变体：chatCard inset 12、headerGap 8、rowMinHeight 44；标题与计数同排，去掉嵌套内卡底色。 */
.ui-part{margin:var(--space-4) 0;background:var(--surface);border-radius:var(--radius-card);padding:var(--chat-card-inset);box-shadow:var(--shadow);overflow:hidden}
.ui-part-header{margin-bottom:var(--chat-card-header-gap)}
.ui-part-kicker{display:flex;align-items:center;gap:var(--space-1);font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted)}
.ui-part-kicker:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--brand)}
.ui-part-headline{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-2);margin-top:var(--space-1)}
.rich-text .ui-part h3{font-size:var(--type-card-title);line-height:1.4;margin:0;font-weight:600;color:var(--ink);text-wrap:balance}
.ui-part-count{font-size:var(--type-meta);line-height:var(--lh-meta);color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.ui-part-desc{font-size:var(--type-support);color:var(--muted);line-height:var(--lh-support);margin:var(--space-1) 0 0}
.ui-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--grid-gap)}
.ui-metric{padding:var(--space-2);min-width:0}
.ui-metric:only-child{grid-column:1/-1}
.ui-metric-label{font-size:var(--type-meta);color:var(--muted);line-height:var(--lh-meta)}
.ui-metric-value{font-size:var(--type-section);line-height:1.3;color:var(--ink);font-variant-numeric:tabular-nums;margin:var(--space-1) 0;text-wrap:wrap;overflow-wrap:anywhere}
.ui-metric-detail{font-size:var(--type-meta);color:var(--muted);line-height:var(--lh-meta)}
.tone-good .ui-metric-value{color:var(--success)}
.tone-attention .ui-metric-value{color:var(--warning)}
.ui-checklist{margin:0}
.ui-check-row{display:flex;align-items:center;gap:var(--space-3);width:100%;min-height:var(--chat-row-min-height);padding:var(--space-1) 0;text-align:left;line-height:var(--lh-body);font-size:var(--type-body)}
.ui-check-row:hover:not(:disabled){background:var(--brand-tint)}
.ui-check-mark{display:flex;align-items:center;justify-content:center;flex:0 0 var(--space-5,20px);height:var(--space-5,20px);border:1.5px solid var(--control-stroke);border-radius:6px;font-size:var(--type-meta);font-weight:600;color:var(--success);background:var(--canvas)}
.ui-check-label{min-width:0;flex:1;overflow-wrap:anywhere}
.ui-check-row.is-done .ui-check-mark{border-color:var(--success);background:var(--brand-tint)}
.ui-check-row.is-done .ui-check-label{text-decoration:line-through;text-decoration-thickness:1px;color:var(--muted)}
.ui-check-saving{font-size:var(--type-meta);white-space:nowrap;color:var(--muted)}
.ui-check-row:disabled,.ui-choice:disabled{cursor:default;color:var(--muted)}
.ui-part-footer{display:flex;justify-content:space-between;gap:var(--space-2);color:var(--muted);font-size:var(--type-meta);line-height:var(--lh-meta);margin-top:var(--chat-card-header-gap);font-variant-numeric:tabular-nums}
.ui-choices{display:flex;flex-direction:column}
.ui-choice{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);text-align:left;min-height:var(--chat-row-min-height);padding:var(--space-1) 0;color:var(--ink);font-size:var(--type-body);line-height:var(--lh-body);border-bottom:1px solid var(--separator)}
.ui-choice:last-child{border-bottom:0}
.ui-choice>span:first-child{min-width:0;overflow-wrap:anywhere}
.ui-choice-arrow{flex:0 0 var(--space-4);font-size:var(--type-body);color:var(--action-text);text-align:center}
.ui-choice:hover:not(:disabled){background:var(--brand-tint)}
.ui-part-pending{display:flex;align-items:center;gap:var(--space-2);min-height:65px;background:var(--surface);color:var(--muted);font-size:var(--type-support)}
.ui-pending-dot{height:7px;width:7px;border-radius:50%;background:var(--brand)}
