/* Theme pack · three skins: mist (default) / celadon / blossom.
   The skin switch lives on html[data-theme] (set by hsSkin() in app.js and
   pre-read in the <head> so the page never flashes the wrong colours).
   :root below holds the shared token base every skin builds on. */

*{box-sizing:border-box}
html,body{margin:0;padding:0}
/* One wallpaper layer: painted on a fixed body::before —
   iOS 不支持 background-attachment:fixed（会拉伸错位），fixed 伪元素才是正路。
   三套皮各自换 --wall-image；聊天页仍走 body.chat-open 的 --wall-default 通道，
   自定义壁纸只作用聊天页规则不变。 */
body{
  background-color: var(--bg, #080b13);
  color:var(--text);
  font-family:var(--font-ui);
  min-height:100vh;
  -webkit-tap-highlight-color:transparent;
}
body::before{
  content:"";
  position:fixed;
  inset:0;
  z-index:-1;
  background-color: var(--bg, #080b13);
  background-image: var(--wall-image, none);
  background-size: cover;
  background-position: center;
}

/* Star dust drifting over the wallpaper (transparent base so --wall-image shows through) */
.sky{
  min-height:100vh;
  background-color: transparent;
  background-image:
    radial-gradient(1.2px 1.2px at 18% 12%,rgba(232,234,242,.8) 50%,transparent 51%),
    radial-gradient(1px 1px at 73% 7%,rgba(232,234,242,.55) 50%,transparent 51%),
    radial-gradient(1px 1px at 88% 21%,rgba(232,234,242,.4) 50%,transparent 51%),
    radial-gradient(1.4px 1.4px at 9% 33%,rgba(232,234,242,.5) 50%,transparent 51%),
    radial-gradient(1px 1px at 62% 29%,rgba(232,234,242,.35) 50%,transparent 51%),
    radial-gradient(1px 1px at 34% 47%,rgba(232,234,242,.45) 50%,transparent 51%),
    radial-gradient(1.2px 1.2px at 81% 55%,rgba(232,234,242,.4) 50%,transparent 51%),
    radial-gradient(1px 1px at 15% 68%,rgba(232,234,242,.4) 50%,transparent 51%),
    radial-gradient(1px 1px at 55% 76%,rgba(232,234,242,.3) 50%,transparent 51%),
    radial-gradient(1.3px 1.3px at 90% 83%,rgba(232,234,242,.45) 50%,transparent 51%);
}

/* 通用字role */
.hand{font-family:var(--font-script);font-weight:400}
.fine{font-family:var(--font-en);font-style:italic;font-weight:400;letter-spacing:.08em}

/* 星月分隔线 */
.divider{display:block;margin:13px auto;width:86%;opacity:.9}

/* 偶尔眨眼的星 */
.wink{position:absolute;z-index:2;color:var(--line);opacity:.7;animation:wink 7s ease-in-out infinite}  /* a121 实机截图：右上星被 duo 磨砂卡(backdrop-filter 层叠上下文视同 z0)压半——贴纸式骑边,完整浮上层 */
.wink.b{animation-delay:3.5s}
@keyframes wink{0%,100%{opacity:.15}50%{opacity:.85}}
@media (prefers-reduced-motion:reduce){
  .wink{animation:none}
  .astro-rotor{animation:none !important}
}

/* ── 星河底栏 · a49 胶囊水渠 → a119 徽章胶囊（tab 栏回底，比老款小一号，只有选中的 tab 冒头。
   波浪 svg 水渠造型退役；光斑 ::before 与 .river/.tab 波面字随之退役，app.js 的 --gx 派发落空无害） ── */
nav.river-nav{
  position:fixed;bottom:calc(10px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);
  width:min(86vw, 340px);height:40px;z-index:40;
  padding:0;
  pointer-events:none;
  /* The capsule is white, shaded with paper tint per skin: gradient ends,
     glint and the two shadow layers are all nav tokens (base values in :root,
     the per-skin tints live down in the skin blocks). */
  background:linear-gradient(180deg,var(--nav-cap-hi) 0%,var(--nav-cap-lo) 100%);
  border:0;   /* a120 描边圈退役（内联那处同步动，两处一起） */
  border-radius:999px;
  box-shadow:
    inset 0 1px 0 var(--nav-glint),
    var(--nav-shadow);
  overflow:visible;   /* a119 选中徽章要顶出上沿，管口放行（波浪已退役，无需再裁） */
}
.riverband{pointer-events:auto;position:relative;height:100%}

/* ── 页面切换 ── */
.page{display:none;position:relative;padding:0 22px calc(96px + env(safe-area-inset-bottom))}  /* a119 tab 回底垫脚复役:40 管高+10 底距+11 徽章冒头+35 呼吸(与 a49 时代 104 的净空对齐) */
.page.on{display:block}

/* 占位页面 */
.stub{min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;text-align:center}
.stub .t{font-family:var(--font-script);font-size:44px;color:var(--text);text-shadow:0 0 22px var(--glow)}
.stub .s{font-family:var(--font-en);font-style:italic;font-size:13px;letter-spacing:.14em;color:var(--text-dim)}

/* ╔══════════════════════════════════════════════════════════════╗
   ║  Murmur tab · 聊天引擎样式（2026-07-18 总装 a1）              ║
   ║  基础层=web/index.html 旧样式区活件精选（死重不搬），          ║
   ║  #page-murmur 前缀圈场、.app→.chat-app 避壳；                 ║
   ║  后接 SKIN 决议层（m11-m19），层叠次序与线上 murmur 一致。     ║
   ╚══════════════════════════════════════════════════════════════╝ */
:root{
    --screen-height: 100vh;
    --keyboard-offset: 0px;
    --ios-pwa-bottom-bleed: 0px;
    --ref-width: 430px; /* a78 桌面修：与壳外框 .app{max-width:430px} 同一列宽真相——941 是没人用过的旧账，chat-app 按它铺会溢出外框被裁 */
    --ref-height: 1672px;
    --font-en: "Cormorant Garamond", Georgia, serif;
    --font-cn: "Noto Serif SC", "Songti SC", "STSong", "SimSun", serif;
    --wall-default: linear-gradient(180deg,#FBFDFF,#EEF4FA);
    --menu-wall-default: var(--wall-default);
    /* Placeholder avatar. Picking one in Dials overrides this with an inline
       --avatar-default on <html>. */
    --avatar-default: linear-gradient(150deg, var(--accent-soft, #b9c6d4), rgba(255,255,255,.25));
    
    --bg: #F7FAFC;
    --header-bg: #F7FAFC;
    --hairline: rgba(120,142,165,.24);
    --text: #253447;
    --text-soft: #5E7080;
    --text-faint: #8A99A8;
    --bubble-ai-bg: rgba(248,249,252,.40);
    --bubble-ai-fg: #253447;
    --bubble-ai-line: rgba(255,255,255,0);
    --bubble-human-bg: rgba(242,235,245,.40);
    --bubble-human-fg: #253447;
    --bubble-human-line: rgba(255,255,255,0);
    --bubble-shadow: rgba(0,0,0,.06);
    --accent: #4C6378;
    --send-bg: #4E6B89;  /* a85 发送键调浅（原 #2C4056 太沉，日夜两主题统一） */
    --tick: #7E93A4;
    --accent-fg: #ffffff;
    --top-line: var(--hairline);
    --top-active-bg: var(--seg-track);
    --top-active-fg: var(--accent);
    --top-typing-shadow: rgba(76,99,120,.22);
    --think-flourish: rgba(99, 121, 142, 0.52);
    --think-label: #6A7E8E;
    --think-body: #56697A;
    --think-panel-bg: rgba(255,255,255,.20);
    --think-panel-line: rgba(255,255,255,.18);
    --think-glass-hi: rgba(255,255,255,.14);
    --think-glass-shadow: rgba(18,24,32,.08);
    --think-text-shadow: 0 1px 10px rgba(255,255,255,.72);
    --composer-bg: #EEF4FA;
    --field-bg: rgba(247,250,252,.92);
    --field-line: rgba(151,169,181,.09);   /* a120 输入框描边调淡一档(.18→.09),与夜档同批 */
    --shadow: 0 18px 46px rgba(74, 93, 108, 0.10);
    --soft-shadow: 0 14px 34px rgba(86, 104, 118, 0.08);
    --scrim: linear-gradient(180deg, rgba(255,255,255,0.38), rgba(255,255,255,0.12) 30%, rgba(255,255,255,0.04) 68%, rgba(255,255,255,0.22));
    --header-h: clamp(56px, 10vw, 120px);
    --side-pad: clamp(16px, 4vw, 40px);
    --avatar-size: clamp(32px, 5vw, 48px);
    --bubble-radius: 20px;
    --composer-h: clamp(44px, 6vw, 72px);
    --motion-fast: 150ms;
    --motion-normal: 260ms;
    --ease-soft: cubic-bezier(0.22, 1, 0.36, 1);
    
    --composer-zone: calc(var(--composer-h) + 16px + env(safe-area-inset-bottom) + var(--keyboard-offset));
    --edge-fade-top: clamp(24px, 5vw, 52px);
    --edge-fade-tail: clamp(16px, 3vw, 30px);
    
    --card-bg: rgba(244,248,250,.42);
    --card-line: rgba(150,168,182,.12);
    --card-shadow: 0 10px 28px rgba(70,92,108,.05);
    --seg-track: rgba(140,160,176,.11);
    --seg-thumb: rgba(255,255,255,.68);
    --seg-thumb-shadow: 0 2px 8px rgba(40,60,78,.08);
    --row-press: rgba(140,160,176,.09);
    --slider-track: rgba(143,162,176,.28);
    --slider-thumb: #44627b;
    --info-ring: rgba(143,162,176,.38);
    --status-dot: #5fbf8f;
    
    --call-glass-top: rgba(255,255,255,.46);
    --call-glass-bot: rgba(255,255,255,.20);
    --call-glass-edge: rgba(255,255,255,.58);
    --call-glass-hi: rgba(255,255,255,.72);
    --call-glass-glow: rgba(150,172,196,.20);
    --call-glass-shadow: 0 20px 50px rgba(74,93,108,.16);
    --call-scrim: rgba(64,82,102,.06);
    --call-hangup-bg: #cf8d92;
    --call-hangup-shadow: rgba(176,96,104,.34);
  }
#page-murmur .chat-app{
    display: flex;
    flex-direction: column;
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1;
    width: min(100vw, var(--ref-width));
    margin: 0 auto;
    overflow: hidden;
  }
#page-murmur .wall{
    position:fixed;
    inset:0;
    width:100vw;
    height:var(--screen-height);
    z-index:0;
    background-color: var(--bg);
    background-image: var(--wall-default);
    background-size: cover; background-position: center;
    transform: translateZ(0);
    -webkit-transform: translateZ(0);
  }
#page-murmur .wall::after{
    content:""; position:absolute; inset:0; background: var(--scrim); pointer-events:none;
  }
#page-murmur .topbar, #page-murmur .scroll, #page-murmur .composer{ position: relative; z-index: 1; }
#page-murmur .topbar{
    position: sticky; top: 0; z-index: 10;
    display: flex; align-items: center; justify-content: center;
    height: calc(var(--header-h) + env(safe-area-inset-top));
    padding: calc(env(safe-area-inset-top) + 8px) var(--side-pad) 10px;
    border-bottom: 1px solid var(--top-line);
    pointer-events: none;
  }
#page-murmur .topbar > *{ pointer-events: auto; }
#page-murmur .topbar::after{
    content:"";
    position:absolute;
    left:0; right:0; top:100%;
    height: var(--edge-fade-top);
    pointer-events:none;
    background: linear-gradient(180deg, rgba(255,255,255,.40), rgba(255,255,255,0));
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    -webkit-mask-image: linear-gradient(180deg, #000, transparent);
    mask-image: linear-gradient(180deg, #000, transparent);
  }
#page-murmur .peerpill{
    display:flex; flex-direction:column; align-items:center; line-height:1.15;
    background: transparent;
    border: none;
    border-radius: 0;
    padding: 0 76px;
  }
#page-murmur .peerpill .name{
    font-family: "Songti SC", "Noto Serif SC", "STSong", "SimSun", serif;
    font-size: clamp(18px, 3vw, 28px);
    font-weight: 500;
    color: var(--text);
    letter-spacing: 0;
    text-shadow: 0 1px 18px rgba(255,255,255,0.3);
  }
#page-murmur .topbar .status{
    position:absolute;
    left: calc(var(--side-pad) + 48px);
    top: calc(env(safe-area-inset-top) + clamp(14px, 2.5vw, 36px));
    height:36px; display:inline-flex; align-items:center;
    font-family: var(--font-en), var(--font-cn);
    font-size: clamp(11px, 1.6vw, 14px);
    color: var(--text-soft);
    letter-spacing: 0;
    max-width: 24vw; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  }
#page-murmur .chat-app[data-conn="reconnecting"] .topbar .status{ color:var(--top-active-fg); }
#page-murmur .topbar .status.typing{
    color: var(--top-active-fg);
    font-weight: 500;
    text-shadow: 0 0 16px var(--top-typing-shadow);
    display: inline-flex; align-items: center;
  }
#page-murmur .typing-dots{ display:inline-flex; align-items:center; gap:3px; margin-left:6px; }
#page-murmur .typing-dots i{ width:4px; height:4px; border-radius:50%; background:currentColor; animation: typingDot 1.25s ease-in-out infinite; }
#page-murmur .typing-dots i:nth-child(2){ animation-delay:.16s; }
#page-murmur .typing-dots i:nth-child(3){ animation-delay:.32s; }
@keyframes typingDot{ 0%,70%,100%{ transform:translateY(0); opacity:.4; } 35%{ transform:translateY(-3px); opacity:1; } }
#page-murmur .avatar:focus-visible, #page-murmur .backbtn:focus-visible, #page-murmur button:focus-visible, #page-murmur textarea:focus-visible, #page-murmur input:focus-visible{
    outline: 2px solid var(--accent);
    outline-offset: 3px;
  }
#page-murmur .scroll{
    flex: 1 1 auto;
    overflow-y: auto;
    overflow-x: hidden;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    overflow-anchor: none;
    padding: clamp(14px, 2.4vw, 28px) var(--side-pad) var(--composer-zone);
    display: flex; flex-direction: column;
    transition: padding-bottom .28s cubic-bezier(.2,.8,.2,1);
    
  }
#page-murmur .scroll::-webkit-scrollbar{ width:0; height:0; }
#page-murmur .v-spacer{
    flex: 0 0 auto;
    width: 100%;
    min-height: 0;
    pointer-events: none;
  }
#page-murmur .day{
    align-self: center;
    margin: 0;
    font-family: var(--font-en), var(--font-cn);
    font-size: clamp(12px, 1.6vw, 16px); color: var(--text-faint);
    padding: 0;
    border-radius: 0;
    background: transparent;
    border: none;
  }
#page-murmur .row{ display:flex; position:relative; margin-top: clamp(20px, 3vw, 34px); } /* a35 间距放大 */
#page-murmur .day + .row{ margin-top: clamp(12px, 1.8vw, 20px); }
#page-murmur .new-divider{
    display:flex;
    align-items:center;
    justify-content:center;
    gap: clamp(16px, 2.4vw, 24px);
    margin: clamp(16px, 2.4vw, 28px) 0 clamp(12px, 1.8vw, 20px);
    color: var(--text-faint);
    font-family: var(--font-en), var(--font-cn);
    font-size: clamp(12px, 1.6vw, 16px);
    line-height:1;
    letter-spacing:0;
  }
#page-murmur .new-divider::before, #page-murmur .new-divider::after{
    content:"";
    width: clamp(94px, 24vw, 226px);
    height:1px;
    background: var(--hairline);
  }
#page-murmur .row.grouped{ margin-top: clamp(8px, 1.2vw, 14px); } /* a35 连发间距也放大 */
#page-murmur .row.human{ justify-content: flex-end; }
#page-murmur .row.ai{ justify-content: flex-start; padding-left: calc(var(--avatar-size) + clamp(10px, 1.6vw, 16px)); }
#page-murmur .row.ai::before{
    content:"";
    position:absolute;
    left:0;
    top: clamp(5px, 1vw, 9px);
    width: var(--avatar-size);
    height: var(--avatar-size);
    border-radius: 50%;
    background-image: var(--avatar-default);
    background-size: cover;
    background-position: center;
    box-shadow: 0 12px 24px rgba(24,46,67,0.14);
  }
/* Your own avatar slot: once one is picked in Dials, body.has-human-avatar goes on and your side of the chat shows it */
body.has-human-avatar #page-murmur .row.human{
    padding-right: calc(var(--avatar-size) + clamp(10px, 1.6vw, 16px));
  }
body.has-human-avatar #page-murmur .row.human::before{
    content:"";
    position:absolute;
    right:0;
    top: clamp(5px, 1vw, 9px);
    width: var(--avatar-size);
    height: var(--avatar-size);
    border-radius: 50%;
    background-image: var(--avatar-human, none);
    background-size: cover;
    background-position: center;
    box-shadow: 0 12px 24px rgba(24,46,67,0.14);
  }
#page-murmur .bubble{
    /* a49 每行再窄两个字（约 30px），估高器 06-virtual-list 的 estCharsPerLine 同步 */
    max-width: min(calc(61vw - 30px), 476px);
    padding: clamp(10px, 1.3vw, 14px) clamp(16px, 2vw, 21px) clamp(10px, 1.3vw, 14px); /* a39 内衬放宽（用户红笔标边） */
    border-radius: 20px;
    position: relative;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    font-size: clamp(14px, 1.55vw, 16px); line-height: 1.58;
    word-wrap: break-word;
    overflow-wrap: break-word;
    animation: pop .24s cubic-bezier(.2,.8,.2,1) both;
    background: var(--bubble-bg, rgba(248,249,252,.40));
    border: 1px solid var(--bubble-line, rgba(255,255,255,0));
    box-shadow: 0 1px 2px var(--bubble-shadow); /* a117 阴影贴边:随下方 a106 规则一并收到 0 1px 2px */
    /* a23：气泡近实色后，重雾退役，留一口薄雾衔接壁纸 */
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
  }
#page-murmur .row[data-vkey] .bubble, #page-murmur .row[data-vkey] .think-block{ animation: none; }
@keyframes pop{ from{ transform: translateY(5px) scale(.99);} to{ transform:none;} }
#page-murmur .row[data-vkey].enter-human .bubble{ transform-origin: bottom right; animation: enterHuman .44s cubic-bezier(.34,1.46,.5,1) both; }
#page-murmur .row[data-vkey].enter-ai .bubble{ transform-origin: bottom left; animation: enterAi .44s cubic-bezier(.34,1.46,.5,1) both; }
@keyframes enterHuman{ from{ transform: translate(6px, 9px) scale(.95); opacity:0; } 55%{ opacity:1; } to{ transform:none; opacity:1; } }
@keyframes enterAi{ from{ transform: translate(-6px, 9px) scale(.95); opacity:0; } 55%{ opacity:1; } to{ transform:none; opacity:1; } }
#page-murmur .row.ai .bubble{
    --bubble-bg: var(--bubble-ai-bg);
    --bubble-line: var(--bubble-ai-line);
    color: var(--bubble-ai-fg);
  }
#page-murmur .row.human .bubble{
    --bubble-bg: var(--bubble-human-bg);
    --bubble-line: var(--bubble-human-line);
    color: var(--bubble-human-fg);
  }
#page-murmur .bubble .txt{ white-space: pre-wrap; } /* a100 章鱼保腿：连续空格不折叠；\n 早被 renderText 吃成 <br>，不会双倍换行 */
#page-murmur .bubble.has-att{ display:flex; flex-direction:column; gap:6px; }
#page-murmur .bubble.att-only{ background:transparent !important; padding:0 !important; box-shadow:none !important; }
#page-murmur .att-img-link{ display:block; line-height:0; border-radius:14px; overflow:hidden; width:min(64vw,260px); aspect-ratio:var(--att-ratio, 1.04); max-height:340px; background:rgba(125,128,135,.10); }
/* Images are wider than the bubble cap, so bubbles with attachments widen to fit image + 34px padding */
#page-murmur .bubble.has-att{ max-width:min(calc(64vw + 22px), 520px); } /* a98 内衬 11px 随动 */
#page-murmur .att-img{ display:block; width:100%; height:100%; object-fit:cover; border-radius:14px; }
#page-murmur .att-file{ display:flex; align-items:center; gap:10px; padding:9px 11px; min-width:170px; max-width:250px; text-decoration:none; color:inherit; background:rgba(125,128,135,.12); border-radius:12px; }
#page-murmur .att-file-ic{ flex:0 0 auto; width:36px; height:36px; display:grid; place-items:center; border-radius:9px; background:rgba(125,128,135,.20); }
#page-murmur .att-file-ic svg{ width:20px; height:20px; opacity:.85; }
#page-murmur .att-file-meta{ display:flex; flex-direction:column; min-width:0; }
#page-murmur .att-file-name{ font-size:13px; font-weight:600; line-height:1.3; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#page-murmur .att-file-size{ font-size:11px; opacity:.6; margin-top:2px; }
#page-murmur .att-uploading{ opacity:.62; }
#page-murmur .att-img-dead img{ display:none; }
#page-murmur .att-img-dead::after{ content:"⚠ 图片已失效"; display:inline-block; padding:16px 20px; font-size:12px; color:var(--text-faint); background:rgba(125,128,135,.14); border-radius:14px; }
#page-murmur .att-failed{ outline:1.5px solid #e3534d; outline-offset:1px; }
#page-murmur .bubble .txt a{ color: inherit; text-decoration: underline; text-underline-offset: 2px; }
#page-murmur .bubble .txt code{
    font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: .92em;
    background: rgba(120,100,80,0.14); padding: 1px 5px; border-radius: 5px;
  }
#page-murmur .bubble .txt strong{ font-weight: 700; }
#page-murmur .meta{
    display:inline; margin-left: clamp(10px, 1.4vw, 16px); white-space: nowrap;
    font-family: var(--font-en), var(--font-cn);
    font-size: clamp(11px, 1.3vw, 14px); color: var(--text-faint); user-select:none;
    vertical-align: baseline;
  }
#page-murmur .meta .tick{ color: var(--tick); margin-left: 7px; letter-spacing:0; }
#page-murmur .meta .state{ color: var(--accent); }
#page-murmur .meta .fail{ color:#c0533f; cursor:pointer; }
#page-murmur .row.human .meta, #page-murmur .row.ai .meta{ color: var(--text-faint); }
#page-murmur .row.human .meta .tick, #page-murmur .row.ai .meta .tick{ color: var(--tick); }
#page-murmur .meta .tick.clock{ color: var(--tick); }
#page-murmur .meta .tick.clock svg{ width: 1.05em; height: 1.05em; vertical-align: -0.18em; }
#page-murmur .row.think{
    justify-content: flex-start;
    padding-left: calc(var(--avatar-size) + clamp(10px, 1.6vw, 16px));
    padding-right: 0;
    /* a46 胶囊属于下面那条 AI 回复——离上一条消息远，贴自己的回复近 */
    margin-top: clamp(18px, 2.8vw, 30px);
    margin-bottom: 0;
  }
#page-murmur .row.think.think-open{
    justify-content: center;
    padding-left: 0;
    padding-right: 0;
    margin-top: clamp(20px, 3.2vw, 34px);
    margin-bottom: clamp(18px, 2.8vw, 28px);
  }
#page-murmur .think-block{
    width: min(61vw, 506px);
    max-width: min(61vw, 506px);
    color: var(--think-body);
    text-align: left;
    animation: pop .24s cubic-bezier(.2,.8,.2,1) both;
  }
#page-murmur .think-block.open{
    width: 100%;
    max-width: min(100%, 760px);
    text-align: center;
  }
#page-murmur .think-toggle{
    appearance: none;
    -webkit-appearance: none;
    width: auto;
    max-width: 100%;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    border-radius: 999px;
  }
#page-murmur .think-block:not(.open) .think-toggle{
    padding: 3px 9px;
    background:
      linear-gradient(135deg, var(--think-glass-hi), transparent 42%),
      var(--think-panel-bg);
    border: 1px solid var(--think-panel-line);
    box-shadow:
      inset 0 1px 0 var(--think-glass-hi),
      0 8px 24px var(--think-glass-shadow);
    -webkit-backdrop-filter: blur(22px) saturate(1.55);
    backdrop-filter: blur(22px) saturate(1.55);
  }
#page-murmur .think-block.open .think-toggle{
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(9px, 1.8vw, 14px);
  }
#page-murmur .think-toggle:hover .think-caption{ color: var(--accent); }
#page-murmur .think-toggle:active{ transform: translateY(1px); }
#page-murmur .think-rule{
    display: none;
    position: relative;
    width: 100%;
    height: 1px;
    color: var(--think-flourish);
  }
#page-murmur .think-block.open .think-rule{ display: block; }
#page-murmur .think-rule::before{
    content: "";
    position: absolute;
    left: clamp(22px, 6vw, 64px);
    right: clamp(22px, 6vw, 64px);
    top: 0;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--think-flourish) 16%, var(--think-flourish) 84%, transparent);
    opacity: .46;
  }
#page-murmur .think-caption{
    display: inline-flex;
    align-items: center;
    justify-content: flex-start;
    gap: 6px;
    color: var(--think-label);
    font-family: var(--font-en), var(--font-cn);
    font-size: clamp(12px, 1.38vw, 14px);
    line-height: 1.1;
    letter-spacing: .08em;
    transition: color var(--motion-fast) var(--ease-soft);
  }
#page-murmur .think-caption-star, #page-murmur .think-state{
    color: var(--think-flourish);
    font-size: 1.18em;
    line-height: 1;
    transform: translateY(-.02em);
  }
#page-murmur .think-block.open .think-caption-star{ display: none; }
#page-murmur .think-state::before{ content: "✧"; }
#page-murmur .think-block.open .think-state::before{ content: "✦"; }
#page-murmur .think-body[hidden]{ display: none !important; }
#page-murmur .think-body{
    margin-top: clamp(12px, 2.2vw, 20px);
  }
#page-murmur .think-text{
    width: min(82%, 520px);
    margin: 0 auto clamp(16px, 2.6vw, 24px);
    padding: clamp(12px, 2.2vw, 18px) clamp(14px, 3vw, 24px);
    border: 1px solid var(--think-panel-line);
    border-radius: 22px;
    background:
      linear-gradient(135deg, var(--think-glass-hi), transparent 38%),
      var(--think-panel-bg);
    box-shadow:
      inset 0 1px 0 var(--think-glass-hi),
      inset 0 -1px 0 rgba(255,255,255,.10),
      0 14px 36px var(--think-glass-shadow);
    color: var(--think-body);
    font-family: var(--font-cn);
    font-size: clamp(12px, 1.25vw, 13.5px);
    line-height: 1.72;
    text-align: center;
    white-space: normal;
    overflow-wrap: break-word;
    -webkit-backdrop-filter: blur(26px) saturate(1.65);
    backdrop-filter: blur(26px) saturate(1.65);
  }
#page-murmur .think-starline{
    position: relative;
    width: 100%;
    height: 24px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--think-flourish);
  }
#page-murmur .think-starline::before, #page-murmur .think-starline::after{
    content: "";
    position: absolute;
    top: 50%;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--think-flourish) 15%, var(--think-flourish) 85%, transparent);
    opacity: .5;
  }
#page-murmur .think-starline::before{ left: 0; right: calc(50% + 34px); }
#page-murmur .think-starline::after{ left: calc(50% + 34px); right: 0; }
#page-murmur .think-star{
    position: relative;
    z-index: 1;
    color: var(--think-flourish);
    display: grid;
    place-items: center;
  }
#page-murmur .think-star svg{ width: 24px; height: 24px; display: block; }
#page-murmur .think-copy{ min-width: 0; }
#page-murmur .think-copy a{ color: inherit; text-decoration: underline; text-underline-offset: 2px; }
#page-murmur .think-copy code{
    font-family: ui-monospace, "SF Mono", Menlo, monospace;
    font-size: .9em;
    background: rgba(120,100,80,0.10);
    padding: 1px 5px;
    border-radius: 5px;
  }
#page-murmur .think-caption, #page-murmur .think-text, #page-murmur .act-label, #page-murmur .act-detail, #page-murmur .act-k, #page-murmur .act-v{
    text-shadow: var(--think-text-shadow);
  }
#page-murmur .row.act{
    justify-content: flex-start;
    padding-left: calc(var(--avatar-size) + clamp(10px, 1.6vw, 16px));
    padding-right: clamp(12px, 4vw, 40px);
    /* a46 同 .row.think：胶囊归属下面的回复 */
    margin-top: clamp(18px, 2.8vw, 30px);
    margin-bottom: 0;
  }
/* Rows following a chip hug it — that is what makes them read as one group */
#page-murmur .row.think + .row, #page-murmur .row.act + .row{
    margin-top: clamp(5px, 0.9vw, 9px);
  }
#page-murmur .act-block{
    max-width: min(80vw, 470px);
    animation: pop .24s cubic-bezier(.2,.8,.2,1) both;
  }
#page-murmur .act-toggle{
    appearance: none; -webkit-appearance: none;
    margin: 0; padding: 2px 8px; border: 1px solid var(--think-panel-line); /* a72 收腰 */
    border-radius: 999px;
    background:
      linear-gradient(135deg, var(--think-glass-hi), transparent 42%),
      var(--think-panel-bg);
    color: inherit; font: inherit; cursor: pointer; text-align: left;
    max-width: 100%;
    display: inline-flex; align-items: baseline; gap: 5px;
    box-shadow:
      inset 0 1px 0 var(--think-glass-hi),
      0 8px 24px var(--think-glass-shadow);
    -webkit-backdrop-filter: blur(22px) saturate(1.55);
    backdrop-filter: blur(22px) saturate(1.55);
  }
#page-murmur .act-toggle.bare{ cursor: default; }
#page-murmur .act-toggle:focus-visible{ outline: none; }
#page-murmur .act-glyph{
    flex: none;
    color: var(--think-flourish);
    font-size: .92em; line-height: 1;
    transform: translateY(.06em);
  }
#page-murmur .act-label{
    color: var(--think-label);
    font-family: var(--font-cn);
    font-size: clamp(10.5px, 1.2vw, 12px);
    line-height: 1.42;
    letter-spacing: .02em;
  }
#page-murmur .act-state{
    flex: none;
    color: var(--think-flourish);
    font-size: .95em;
    line-height: 1;
    transform: translateY(.02em);
    transition: color var(--motion-fast) var(--ease-soft);
  }
#page-murmur .act-state::before{ content: "✧"; }
#page-murmur .act-block.open .act-state::before{ content: "✦"; }
#page-murmur .act-toggle:hover .act-state{ color: var(--accent); }
#page-murmur .act-toggle:hover .act-label{ color: var(--think-body); }
#page-murmur .act-toggle:active{ transform: translateY(1px); }
#page-murmur .act-detail[hidden]{ display: none !important; }
#page-murmur .act-detail{
    margin-top: 8px;
    border-radius: 22px;
    background:
      linear-gradient(135deg, var(--think-glass-hi), transparent 38%),
      var(--think-panel-bg);
    border: 1px solid var(--think-panel-line);
    box-shadow:
      inset 0 1px 0 var(--think-glass-hi),
      inset 0 -1px 0 rgba(255,255,255,.10),
      0 14px 36px var(--think-glass-shadow);
    padding: clamp(9px, 1.6vw, 13px) clamp(11px, 1.8vw, 14px);
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: 12px; line-height: 1.6;
    color: var(--think-body);
    overflow-x: auto;
    animation: pop .2s cubic-bezier(.2,.8,.2,1) both;
    -webkit-backdrop-filter: blur(26px) saturate(1.65);
    backdrop-filter: blur(26px) saturate(1.65);
  }
#page-murmur .act-step + .act-step{
    margin-top: 7px; padding-top: 7px;
    border-top: 1px dashed var(--field-line);
  }
#page-murmur .act-line{ white-space: pre-wrap; overflow-wrap: anywhere; }
#page-murmur .act-k{ color: var(--think-body); opacity:.58; user-select: none; }
#page-murmur .act-v{ color: var(--think-body); }
#page-murmur .composer{
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 100;
    width: min(100vw, var(--ref-width));
    margin: 0 auto;
    display:flex; align-items:center; gap: clamp(6px, 1vw, 12px);
    background: transparent; border:none;
    padding: 0 var(--side-pad) clamp(10px, 1.6vw, 18px);
    padding-bottom: calc(clamp(10px, 1.6vw, 18px) + env(safe-area-inset-bottom));
    transform: translate3d(0, calc(-1 * var(--keyboard-offset)), 0);
    -webkit-transform: translate3d(0, calc(-1 * var(--keyboard-offset)), 0);
    transition: transform .28s cubic-bezier(.2,.8,.2,1);
  }
#page-murmur .composer::before{
    content:"";
    position:absolute;
    left:0; right:0; bottom:0;
    top: calc(-1 * var(--edge-fade-tail));
    z-index:-1;
    pointer-events:none;
    background: linear-gradient(180deg, rgba(255,255,255,0), rgba(255,255,255,.40) var(--edge-fade-tail));
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    -webkit-mask-image: linear-gradient(180deg, transparent, #000 var(--edge-fade-tail));
    mask-image: linear-gradient(180deg, transparent, #000 var(--edge-fade-tail));
  }
#page-murmur .floatbtn{
    flex:none; width: clamp(36px, 5vw, 48px); height: clamp(36px, 5vw, 48px); border-radius:50%;
    border: none; background: transparent;
    color: var(--accent); display:grid; place-items:center; cursor:pointer; padding:0;
    transition: transform .15s ease, color .2s ease;
  }
#page-murmur .floatbtn:active{ transform: scale(.9); color: var(--text); }
#page-murmur .floatbtn:hover{ color: var(--text); }
#page-murmur .floatbtn svg{ width: clamp(20px, 2.8vw, 28px); height: clamp(20px, 2.8vw, 28px); display:block; }
#page-murmur .floatbtn.send{
    background: var(--send-bg);
    color:#ffffff;
    box-shadow: 0 16px 32px rgba(41, 60, 78, 0.22);
    /* a51 发送键收进输入框内——比外置时代缩一圈，撑不动输入框高度 */
    width: clamp(32px, 4.2vw, 42px); height: clamp(32px, 4.2vw, 42px);
  }
#page-murmur .floatbtn.send svg{ width: clamp(16px, 2.2vw, 22px); height: clamp(16px, 2.2vw, 22px); }
#page-murmur .floatbtn.send:hover{ color:#ffffff; }
#page-murmur .floatbtn.send:active{ transform: scale(.97); }
@keyframes send-go{ from{ transform: scale(.96); } to{ transform: scale(1); } }
#page-murmur .floatbtn.send.send-go{ animation: send-go .22s cubic-bezier(.2,.8,.2,1); }
@media (prefers-reduced-motion: reduce){
#page-murmur .floatbtn.send.send-go{ animation: none; }
}
#page-murmur .composer .field{
    flex:1 1 auto; display:flex; align-items:center; gap: clamp(4px, 0.8vw, 10px);
    background: var(--field-bg);
    border: 1px solid var(--field-line);
    border-radius: 999px;
    padding: clamp(4px, 0.6vw, 8px) clamp(8px, 1.2vw, 14px) clamp(4px, 0.6vw, 8px) clamp(10px, 1.5vw, 16px);
    min-height: clamp(42px, 5.5vw, 56px);
    box-shadow: var(--shadow);
    transition: border-color .2s ease;
  }
#page-murmur .composer .field:focus-within{ border-color: var(--field-line); }
#page-murmur .composer textarea:focus, #page-murmur .composer textarea:focus-visible, #page-murmur .composer button:focus-visible{
    outline: none;
  }
#page-murmur textarea{
    flex:1 1 auto; border:none; outline:none; resize:none; background:transparent;
    color: var(--text); font-family: var(--font-en), var(--font-cn); font-size: clamp(15px, 2vw, 18px); line-height:1.35;
    max-height: 110px; padding: 6px 0; margin:0;
  }
#page-murmur textarea::placeholder{ color: var(--text-faint); opacity: 1; }
#page-murmur .newmsg-pill{
    position: fixed; left: 50%; z-index: 90;
    bottom: calc(clamp(78px, 13vw, 96px) + env(safe-area-inset-bottom));
    display: inline-flex; align-items: center; gap: 5px;
    padding: 7px 14px 7px 11px; border: none; border-radius: 999px;
    background: rgba(34, 46, 60, .52); color: #fff;
    font-family: var(--font-en), var(--font-cn); font-size: 13px; line-height: 1; letter-spacing: .01em;
    -webkit-backdrop-filter: blur(10px) saturate(1.2); backdrop-filter: blur(10px) saturate(1.2);
    box-shadow: 0 8px 24px rgba(18, 28, 40, .26);
    cursor: pointer; opacity: 0; pointer-events: none;
    transform: translate3d(-50%, calc(8px - var(--keyboard-offset, 0px)), 0);
    transition: opacity .2s ease, transform .28s cubic-bezier(.2,.8,.2,1);
  }
#page-murmur .newmsg-pill.show{ opacity: 1; pointer-events: auto; transform: translate3d(-50%, calc(-1 * var(--keyboard-offset, 0px)), 0); }
#page-murmur .newmsg-pill svg{ width: 15px; height: 15px; flex: none; }
@media (prefers-reduced-motion: reduce){
#page-murmur .newmsg-pill{ transition: opacity .2s ease; }
}
#page-murmur .hidden{ display:none !important; }
#page-murmur .chat-app.kb .composer{ padding-bottom: 8px; }
@media (max-width: 520px){
:root{
      --side-pad: 16px;
      --header-h: 56px;
      --avatar-size: 32px;
    }
#page-murmur .peerpill{ padding: 0 44px; }
#page-murmur .peerpill .name{ font-size: 18px; }
#page-murmur .topbar .status{ font-size: 11px; max-width: 22vw; }
#page-murmur .row{ margin-top: 26px; }            /* a35 间距放大 */
#page-murmur .row.grouped{ margin-top: 13px; }
#page-murmur .row.ai{ padding-left: 42px; }
#page-murmur .bubble{ max-width: min(63vw, 520px); font-size: 14px; letter-spacing: .022em; line-height: 1.62; padding: 10px 17px 10px; } /* a39 内衬放宽；a75 的 14.5 被用户退回；7-31 用户点单 14px+字距.022（a84 热补今转正）——现行定案 */
#page-murmur .meta{ font-size: 11px; margin-left: 8px; }
#page-murmur .day{ font-size: 12px; }
#page-murmur .new-divider{ font-size: 12px; margin: 14px 0 10px; }
#page-murmur .composer{ gap: 5px; padding-left: 16px; padding-right: 16px; }
#page-murmur .floatbtn{ width: 36px; height: 36px; }
#page-murmur .floatbtn svg{ width: 20px; height: 20px; }
#page-murmur .composer .field{ min-height: 42px; padding: 4px 8px 4px 12px; }
#page-murmur textarea{ font-size: 15px; }
#page-murmur .row.think{ padding-left: 42px; padding-right: 0; }
#page-murmur .think-block{ width: min(63vw, 520px); max-width: min(63vw, 520px); }
#page-murmur .think-block.open{ width: 100%; max-width: 100%; }
#page-murmur .row.think.think-open{ padding-left: 0; padding-right: 0; }
#page-murmur .think-caption{ font-size: 12.5px; letter-spacing: .07em; }
#page-murmur .think-caption-star, #page-murmur .think-state{ font-size: 1.2em; }
#page-murmur .think-body{ margin-top: 12px; }
#page-murmur .think-text{ width: min(86%, 360px); font-size: 12px; line-height: 1.66; }
#page-murmur .think-star svg{ width: 22px; height: 22px; }
}
#page-murmur #scroll, #page-murmur #scroll *{
    -webkit-user-select:none !important; user-select:none !important;
    -webkit-touch-callout:none !important;
  }
#page-murmur textarea, #page-murmur input, #page-murmur .composer, #page-murmur .composer *{
    -webkit-user-select:text !important; user-select:text !important;
    -webkit-touch-callout:default !important;
  }
#page-murmur .msg-menu{ position:fixed; inset:0; z-index:250; opacity:0; pointer-events:none; }
#page-murmur .msg-menu.open{ opacity:1; pointer-events:auto; }
#page-murmur .msg-menu-scrim{
    position:absolute; inset:0;
    background:rgba(10,16,24,.30);
    -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px);
    opacity:0; transition:opacity .26s var(--ease-soft);
  }
#page-murmur .msg-menu.open .msg-menu-scrim{ opacity:1; }
#page-murmur .msg-menu-clone{
    position:fixed !important; margin:0 !important; animation:none !important;
    pointer-events:none; box-sizing:border-box;
    box-shadow:0 22px 50px rgba(18,34,52,.30);
    transform:scale(1); transition:transform .26s var(--ease-soft); will-change:transform;
  }
#page-murmur .msg-menu.open .msg-menu-clone{ transform:scale(1.02); }
#page-murmur .msg-menu-clone.clone-human{ background:var(--bubble-human-bg) !important; color:var(--bubble-human-fg) !important; border-radius:20px !important; border:1px solid var(--bubble-human-line) !important; box-shadow:var(--soft-shadow) !important; }
#page-murmur .msg-menu-clone.clone-ai{ background:var(--bubble-ai-bg) !important; color:var(--bubble-ai-fg) !important; border-radius:20px !important; border:1px solid var(--bubble-ai-line) !important; box-shadow:var(--soft-shadow) !important; }
#page-murmur .msg-menu-actions{
    position:fixed; display:flex; flex-direction:column; min-width:150px; padding:5px;
    border-radius:16px; background:var(--composer-bg); border:1px solid var(--hairline);
    box-shadow:var(--shadow);
    -webkit-backdrop-filter:blur(20px) saturate(1.4); backdrop-filter:blur(20px) saturate(1.4);
    opacity:0; transform:translateY(8px) scale(.96); transform-origin:top center;
    transition:opacity .2s var(--ease-soft) .05s, transform .26s var(--ease-soft) .05s;
  }
#page-murmur .msg-menu.open .msg-menu-actions{ opacity:1; transform:none; }
#page-murmur .msg-act{
    appearance:none; -webkit-appearance:none; border:0; background:transparent; color:var(--text);
    font-family:var(--font-en), var(--font-cn); font-size:15px; display:flex; align-items:center; gap:11px;
    padding:10px 14px; border-radius:12px; cursor:pointer; text-align:left; width:100%;
    transition:background var(--motion-fast);
  }
#page-murmur .msg-act:hover{ background:var(--row-press); }
#page-murmur .msg-act:active{ background:var(--row-press); transform:scale(.98); }
#page-murmur .msg-act svg{ width:18px; height:18px; opacity:.82; flex:0 0 auto; }
#page-murmur .msg-act.danger{ color:#e05a4d; }
#page-murmur .row.think.api-trace, #page-murmur .row.act.api-trace{
    padding-left:calc(var(--avatar-size) + clamp(10px,1.6vw,16px));
    /* a46 胶囊归属下面那条回复——串首离上一条消息拉开，串内保持 3px 紧凑 */
    margin-top:clamp(16px,2.4vw,26px); margin-bottom:0;
  }
#page-murmur .row.think.api-trace + .row.think.api-trace,
#page-murmur .row.think.api-trace + .row.act.api-trace,
#page-murmur .row.act.api-trace + .row.act.api-trace,
#page-murmur .row.act.api-trace + .row.think.api-trace{ margin-top:3px; }
/* With tool rows embedded in the reply, bubble -> tool row also hugs */
#page-murmur .row.ai + .row.act.api-trace,
#page-murmur .row.ai + .row.think.api-trace{ margin-top: clamp(5px, 0.9vw, 9px); }
#page-murmur .row.think.api-trace.think-open{ justify-content:flex-start; padding-left:calc(var(--avatar-size) + clamp(10px,1.6vw,16px)); }
#page-murmur .row.think.api-trace .think-block, #page-murmur .row.think.api-trace .think-block.open{ width:min(61vw,506px); max-width:min(61vw,506px); text-align:left; }
#page-murmur .row.think.api-trace .think-caption, #page-murmur .row.act.api-trace .act-label{ font-size:11px; color:var(--text-faint); letter-spacing:.01em; }
#page-murmur .row.think.api-trace .think-block.open .think-toggle{ width:auto; display:inline-flex; flex-direction:row; gap:5px; }
#page-murmur .row.think.api-trace .think-rule, #page-murmur .row.think.api-trace .think-starline{ display:none !important; }
#page-murmur .row.think.api-trace .think-body{ margin:4px 0 0 12px; }
#page-murmur .row.think.api-trace .think-text{ width:auto; margin:0; color:var(--text-faint); font-size:11px; line-height:1.55; text-align:left; }
#page-murmur .row.act.api-trace .act-detail{
    margin:4px 0 0 12px; padding:0; border:0; border-radius:0; background:transparent;
    color:var(--text-faint); font-size:11px; font-family:var(--font-cn); line-height:1.5;
  }
@media (prefers-reduced-motion: reduce){
#page-murmur *, #page-murmur *::before, #page-murmur *::after{
      animation: none !important;
      transition-duration: 0.01ms !important;
      scroll-behavior: auto !important;
    }
#page-murmur .call-wave i{
      animation: callWave var(--dur, 1s) var(--ease-soft) var(--d, 0s) infinite alternate !important;
    }
}

/* ══════════ Murmur tab · SKIN 决议层（m11-m19 定案迁入，源=murmur.html style#2） ══════════
   迁移规则：聊天内部选择器加 #page-murmur 前缀；.app→.chat-app；
   html/body/星河栏级别的决议圈进 .chat-open（只在聊天 tab 生效，别的页面不受染）；
   已死 DOM（terminalBtn/emojiBtn/login/profile）的隐藏令不搬。 */

:root{
  --murmur-nav: 74px;   /* a119 tab 回底 60(40管+10底+10余量) → a123 实测徽章冒头顶到输入框:+14 净空(徽章顶=nav上沿+11,composer field 下沿抬到 66+safe 留 5px 呼吸);composer-zone/newmsg-pill 跟变量自动让 */
  --line:#c7cedd; --line-dim:rgba(199,206,221,.32);
  --text-dim:#8a91a6; --glow:rgba(216,179,106,.22);
  --font-script:"Pinyon Script",cursive;

  --bg:#080b13; --header-bg:transparent;
  --hairline:rgba(199,206,221,.14);
  --text:#e8eaf2; --text-soft:#a7aec2; --text-faint:#8a91a6;
  --wall-image:
    linear-gradient(180deg,#080b13 0%,var(--night) 34%,#0b0f1b 78%,#090c15 100%);   /* a4 壳全屋壁纸（body 层）；图后接兜底渐变，未加载时不秃；聊天页另有 --wall-default 通道 */
  /* a23 气泡角色分层（角色令牌+抬升对比+压透明度）——
     AI 侧=冷·蓝墨实体，你那侧=暖·金褐实体，一冷一暖一眼分家；近实色治透底，细边+投影把消息层从壁纸上抬起来。
     用户的自定义气泡四件套（custom-theme.js 内联）照旧最高优先级。 */
  --bubble-ai-bg:rgba(23,29,45,.94); --bubble-ai-fg:#e8eaf2; --bubble-ai-line:rgba(199,206,221,0);
  --bubble-human-bg:rgba(56,46,31,.94); --bubble-human-fg:#f6ecd9; --bubble-human-line:rgba(216,179,106,0);
  --bubble-shadow:rgba(0,0,0,.32);
  --accent:#d8b36a; --send-bg:#e2c687; --accent-fg:#141625; --tick:#8a91a6;
  --top-line:rgba(199,206,221,.12); --top-active-bg:rgba(216,179,106,.14);
  --top-active-fg:#d8b36a; --top-typing-shadow:rgba(216,179,106,.25);
  --think-flourish:rgba(199,206,221,.35); --think-label:#a7aec2; --think-body:#9aa2b8;
  --think-panel-bg:rgba(255,255,255,.08); --think-panel-line:rgba(255,255,255,.14);
  --think-glass-hi:rgba(255,255,255,.05); --think-glass-shadow:rgba(0,0,0,.25);
  --think-text-shadow:0 1px 10px rgba(0,0,0,.4);
  --composer-bg:transparent; --field-bg:rgba(255,255,255,.10); --field-line:rgba(255,255,255,.10);   /* a120 输入框描边留但调淡一档(.20→.10,若有似无);act-step 虚线共用此令牌随轻 */
  --shadow:0 18px 46px rgba(0,0,0,.35); --soft-shadow:0 14px 34px rgba(0,0,0,.3);
  --scrim:linear-gradient(180deg, rgba(8,11,19,.22), rgba(8,11,19,0) 30%, rgba(8,11,19,0) 62%, rgba(8,11,19,.30));
  --card-bg:rgba(14,18,32,.55); --card-line:rgba(199,206,221,.10); --card-shadow:0 10px 28px rgba(0,0,0,.35);
  --seg-track:rgba(199,206,221,.10); --seg-thumb:rgba(216,179,106,.22); --seg-thumb-shadow:0 2px 8px rgba(0,0,0,.3);
  --row-press:rgba(199,206,221,.08);
  --slider-track:rgba(199,206,221,.22); --slider-thumb:#d8b36a; --info-ring:rgba(199,206,221,.30);
  --status-dot:#7fb894;

  /* Default chat wallpaper. A wallpaper picked in Dials overrides this through
     the inline variables written by custom-theme.js. */
  --wall-default:
    radial-gradient(1.2px 1.2px at 18% 12%,rgba(232,234,242,.8) 50%,transparent 51%),
    radial-gradient(1px 1px at 73% 7%,rgba(232,234,242,.55) 50%,transparent 51%),
    radial-gradient(1px 1px at 88% 21%,rgba(232,234,242,.4) 50%,transparent 51%),
    radial-gradient(1.4px 1.4px at 9% 33%,rgba(232,234,242,.5) 50%,transparent 51%),
    radial-gradient(1px 1px at 62% 29%,rgba(232,234,242,.35) 50%,transparent 51%),
    radial-gradient(1px 1px at 34% 47%,rgba(232,234,242,.45) 50%,transparent 51%),
    radial-gradient(1.2px 1.2px at 81% 55%,rgba(232,234,242,.4) 50%,transparent 51%),
    radial-gradient(1px 1px at 15% 68%,rgba(232,234,242,.4) 50%,transparent 51%),
    radial-gradient(1px 1px at 55% 76%,rgba(232,234,242,.3) 50%,transparent 51%),
    radial-gradient(1.3px 1.3px at 90% 83%,rgba(232,234,242,.45) 50%,transparent 51%),
    linear-gradient(180deg,#080b13 0%,#0a0d16 34%,#0b0f1b 78%,#090c15 100%);
  --menu-wall-default: var(--wall-default);

  /* composer 底部让出星河栏的高度；--vp-gap=浏览器工具栏吃掉的布局底（JS 实时量，PWA 里恒为 0） */
  --composer-zone: calc(var(--composer-h) + 10px + var(--murmur-nav) + env(safe-area-inset-bottom) + var(--keyboard-offset) + var(--vp-gap, 0px));
}

/* ── iOS 底部黑区 · m11：100vh 统一战——高度链不许混 auto/100%/dvh（只在聊天 tab 生效） ── */
html.chat-open, body.chat-open{ height:100vh; }
html.chat-open{ overflow:hidden; overscroll-behavior:none; }
body.chat-open{
  position:static; overflow:hidden; overscroll-behavior:none;
  font-family:var(--font-cn); font-size:clamp(14px, 1.45vw, 16px); line-height:1.5;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  background-color:#080b13; background-image:var(--wall-default);
  background-size:cover; background-position:center;
}
#page-murmur.page{ padding:0; }
#page-murmur .chat-app{ position:relative; height:100vh; }
#page-murmur .wall{ position:absolute; inset:0; width:100%; height:100%; }

/* 顶/底白雾边缘渐隐：m16 拆除（夜色渐隐在浅色壁纸上糊成烟灰） */
#page-murmur .topbar::after{ background:none; }
#page-murmur .composer::before{ display:none; }

/* composer 抬到星河栏之上；键盘弹出时栏让位、composer 归位（m12 公式+m18 收 6px） */
#page-murmur .composer{ bottom: calc(var(--murmur-nav) + env(safe-area-inset-bottom) - 16px + var(--vp-gap, 0px)); padding-bottom: 8px; } /* a99 输入框贴近 tab 栏;a109 tab 上天曾置底,a119 tab 回底让位公式复役 */
body.kb nav.river-nav{ display:none; }
body.kb #page-murmur .composer{ bottom: 0; }
body:not(.kb) #page-murmur .newmsg-pill{ bottom: calc(clamp(78px, 13vw, 96px) + env(safe-area-inset-bottom) + var(--murmur-nav) + var(--vp-gap, 0px)); }

/* ── a2 实色三件套 token（胶囊/输入框/tab栏退磨砂，固定主题色，
   an ink-brightness step plus a 1px hairline; a new skin only swaps these tokens） ── */
:root{
  --solid-card:#161b28;              /* 台阶·卡面（胶囊/输入框） */
  --solid-bar:#0d111c;               /* 台阶·tab 栏 */
  --solid-line:rgba(255,255,255,.08);/* 细边保底 */
  --solid-press:#1e2433;             /* a35 按压态：夜=同调抬亮（定案） */
  --frost-card:rgba(22,27,40,.62);   /* a37 有色磨砂卡（定案：跟主题、别挡壁纸） */
  --frost-press:rgba(30,36,51,.78);
}

/* 顶栏=极简悬浮胶囊：名字＋状态（m14 压扁版；a2 改实色固定；a97 两侧都靠最左，回模型胶囊的老墙角） */
#page-murmur .topbar{
  position:fixed; top:calc(env(safe-area-inset-top) + 10px);
  left:max(10px, calc(50vw - 205px)); width:auto; height:auto;
  padding:1px 11px; border:1px solid var(--solid-line); border-radius:999px;
  background:var(--solid-card);
  display:flex; align-items:center; gap:7px; z-index:60;
  box-shadow:0 8px 30px rgba(0,0,0,.30);
}
#page-murmur .topbar::after{ display:none; }
#page-murmur .peerpill{ padding:0; flex-direction:row; align-items:baseline; gap:7px; }
/* a2：胶囊底固定 → 名字/状态也固定跟主题字色，任何壁纸任何气泡自定义都读得清 */
#page-murmur .peerpill .name{ font-size:12px; color:var(--text); }
#page-murmur .topbar .status{ position:static; max-width:none; font-size:9px; }
/* 气泡磨砂与胶囊同参 */
#page-murmur .bubble{ -webkit-backdrop-filter:blur(18px) saturate(1.2); backdrop-filter:blur(18px) saturate(1.2); }

/* a69 定案（推翻 a2 实色案）：顶部胶囊改有色磨砂，稍透（a96 起模型段/返回键并入顶栏，不再单独上妆） */
#page-murmur .topbar,
#page-murmur .api-sessions,
#page-murmur .cc-search-btn{
  background:var(--frost-card);
  -webkit-backdrop-filter:blur(14px) saturate(1.15);
  backdrop-filter:blur(14px) saturate(1.15);
}

/* ── a96 模型名并入名字胶囊，住输入状态楼下（用户红笔：不与状态并排、胶囊尺寸不动） ── */
#page-murmur .pill-left{
  display:flex; flex-direction:column; align-items:flex-start; justify-content:center;
  row-gap:1px; min-height:36px;
}
body:not(.api-mode) #page-murmur .topbar .status{ height:auto; max-width:30vw; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* ── a96 API 态返回键并入名字胶囊（由独立圆钮改为胶囊内左段，胶囊尺寸不动） ── */
#page-murmur .topbar .api-back{
  position:static; width:auto; height:auto; border-radius:0;
  background:transparent; border:none; padding:0 3px 0 0;
  color:var(--text); display:none; align-items:center; justify-content:center;
  cursor:pointer; -webkit-tap-highlight-color:transparent;
}
body.api-mode #page-murmur .topbar .api-back{ display:flex; }
#page-murmur .topbar .api-back svg{ width:16px; height:16px; }

/* 点睛色跟随壳的 Dials 选择（补足 send 键等聊天专属 token） */

/* 顶栏退出文档流后，消息区自己留出胶囊的头部空间 */
#page-murmur .scroll{ padding-top: calc(env(safe-area-inset-top) + 46px); }

/* 消息列宽度（a35 收窄；a49 再收窄；a118 反向加宽一档：每行多 3 个字≈41px——真生效的是这两条，上游 61vw 那些是空军。
   390px 屏行宽账：内容 358 − 异侧空档 42 = 316px ≥ 68vw+13 = 278px，不顶破；估高器 06-virtual-list 同步 */
#page-murmur .bubble{ max-width:min(calc(60vw - 14px), 486px); }  /* a123 回吐 2 字(a118 +3 净+1) */
@media (max-width: 520px){
  #page-murmur .bubble{ max-width:calc(68vw - 14px); }  /* a123 同批收 27px */
  #page-murmur .think-block{ width:min(76vw, 520px); max-width:min(76vw, 520px); }
  #page-murmur .think-block.open{ width:100%; max-width:100%; }
  #page-murmur .att-img-link{ width:min(70vw, 300px); }
  #page-murmur .bubble.has-att{ max-width:min(calc(70vw + 22px), 322px); } /* a85 图更宽气泡跟着放；a98 内衬 11px 随动（图宽+2×内衬） */
}

/* ── 星河底栏（a2 写实——固定主题色实底+细边，取代 m17 隐形毛化）——只在聊天 tab 换这身衣服 ── */
/* a10 tab 栏拉平：聊天页专属 nav 几何退役——聊天页原来吃全额安全区 padding，比其他四页高 18px
   （用户 a9 截图点名"murmur 的 tab 栏太高"）。现在五页共用 index 内联那一套几何+实色，
   只留 vp-gap 跟浏览器工具栏（PWA 恒 0）和标签的浅底描边。 */
nav.river-nav{ bottom:calc(10px + env(safe-area-inset-bottom) + var(--vp-gap, 0px)); }  /* a49 胶囊悬浮：这条在层叠末端，底距必须写在这 */
/* a12 的 7px 下移是贴底通栏时代的产物，胶囊悬浮后会把波浪压出管子——退役 */
@media (display-mode: standalone){
  .riverband{ transform: none; }
}

/* a12 呼吸感 → a13 精确镜像：对面一侧留出与头像列等宽的空档，
   两人气泡的左右边线严格重合（验收："还是无法对齐"——大概齐不行，要同一条线） */
#page-murmur .row.ai{ padding-right: calc(var(--avatar-size) + clamp(10px, 1.6vw, 16px)); }
#page-murmur .row.human{ padding-left: calc(var(--avatar-size) + clamp(10px, 1.6vw, 16px)); }
#page-murmur .bubble{ line-height: 1.62; padding: 7px 11px 7px; } /* tighter padding so the bubble hugs the text */
/* a98 一条消息拆多泡=只留首泡头像（❌ 图定稿），后续泡贴紧站队 */
#page-murmur .row.cont::before{ content:none; }
#page-murmur .row.cont{ margin-top:7px; }
body.chat-open nav.river-nav{ z-index:110; }
/* a121 rlabel 夜影退役：胶囊改固定纯白后标签底不再是磨砂暗面，text-shadow 失义（blossom 同款覆写一并摘） */

/* ── m19 Markdown 全套的衣服（结构由 renderText 生成） ── */
#page-murmur .bubble .txt .md-pre{ background:rgba(255,255,255,.10); border:1px solid rgba(255,255,255,.14); border-radius:10px; padding:8px 11px; margin:6px 0; overflow-x:auto; }
#page-murmur .bubble .txt .md-pre code{ background:none; padding:0; font-size:.87em; line-height:1.55; white-space:pre; display:block; }
#page-murmur .bubble .txt .md-ul, #page-murmur .bubble .txt .md-ol{ margin:4px 0; padding-left:20px; }
#page-murmur .bubble .txt .md-ul li, #page-murmur .bubble .txt .md-ol li{ margin:2px 0; }
#page-murmur .bubble .txt .md-quote{ display:block; border-left:2px solid var(--accent); padding:2px 0 2px 10px; margin:6px 0; opacity:.94; }
#page-murmur .bubble .txt .md-h{ display:block; font-weight:700; margin:8px 0 3px; }
#page-murmur .bubble .txt .md-h1{ font-size:1.16em; }
#page-murmur .bubble .txt .md-h2{ font-size:1.10em; }
#page-murmur .bubble .txt .md-h3, #page-murmur .bubble .txt .md-h4{ font-size:1.03em; }
#page-murmur .bubble .txt .md-hr{ display:block; height:1px; margin:9px 2px; background:linear-gradient(90deg,transparent,var(--line-dim),transparent); }
#page-murmur .bubble .txt em{ font-style:italic; }
#page-murmur .bubble .txt del{ opacity:.72; }

/* ── 输入框（a2 实色跟主题，取代 m18 跟气泡案）——固定底配固定字，任何壁纸不盲打 ── */
#page-murmur .composer .field{
  background: var(--solid-card);
  border-color: var(--solid-line);
}
#page-murmur .composer textarea{ color: var(--text); caret-color: var(--text); }
#page-murmur .composer textarea::placeholder{ color: var(--text-dim); opacity:.8; }

/* 总装验收暗号 */
#page-murmur .mstamp{position:fixed;top:calc(env(safe-area-inset-top) + 52px);right:10px;font-size:8px;letter-spacing:.14em;color:var(--text-dim);opacity:.75;font-family:var(--font-en);font-style:italic;pointer-events:none;z-index:400}

/* ── a14 语音气泡（QQ 式）：播放圆钮=点睛色，进度轨随播放涨，秒数右侧 ── */
#page-murmur .voice-msg{
  display:flex; align-items:center; gap:10px;
  min-width: 168px; max-width: 240px;
  padding: 8px 12px; margin: 2px 0;
  border: 1px solid var(--bubble-line, rgba(255,255,255,.08));
  border-radius: 16px;
  background: var(--bubble-bg, rgba(248,249,252,.4));
  cursor: pointer; -webkit-tap-highlight-color: transparent;
  color: inherit; font: inherit;
}
#page-murmur .voice-msg .v-play{
  flex: 0 0 auto; width: 30px; height: 30px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--accent); color: var(--accent-fg, #fff);
  box-shadow: 0 4px 12px var(--glow);
}
#page-murmur .voice-msg .vp-pause{ display: none; }
#page-murmur .voice-msg.playing .vp-pause{ display: block; }
#page-murmur .voice-msg.playing .vp-play{ display: none; }
#page-murmur .voice-msg .v-track{
  flex: 1 1 auto; height: 3px; border-radius: 2px; overflow: hidden;
  background: color-mix(in srgb, currentColor 18%, transparent);
  position: relative;
}
#page-murmur .voice-msg .v-track .v-fill{
  position: absolute; inset: 0 auto 0 0; width: var(--v-p, 0%);
  background: var(--accent); border-radius: 2px;
  transition: width .2s linear;
}
#page-murmur .voice-msg .v-dur{
  flex: 0 0 auto; font-size: 11px; letter-spacing: .04em;
  font-variant-numeric: tabular-nums; opacity: .75;
}

/* ── a22 API 门：侧钮（返回/三横）+ 会话列表页（实色定案，退老磨砂） ── */
#page-murmur .api-side{
  /* z above any floating decoration; generous hit area */
  position:fixed; top:calc(env(safe-area-inset-top) + 10px); z-index:130;
  width:38px; height:38px; border-radius:50%;
  display:none; align-items:center; justify-content:center;
  background:var(--solid-card); color:var(--text);
  border:1px solid var(--solid-line); cursor:pointer;
  -webkit-tap-highlight-color:transparent; padding:0;
}
#page-murmur .api-side svg{ width:16px; height:16px; }
#page-murmur .api-back{ left:max(10px, calc(50vw - 205px)); } /* a78 桌面上锚到 430 列边而非窗角 */
#page-murmur .api-sessions{ right:max(10px, calc(50vw - 205px)); }
body.api-mode #page-murmur .api-side{ display:flex; }


.session-pop.page{
  display:block;   /* a27 破案：壳的 .page（tab页类）自带 display:none，13 号加的 page 类撞名被误杀——特异度反杀 */
  position:fixed; inset:0; z-index:250; overflow:auto;
  padding:calc(env(safe-area-inset-top) + 18px) max(18px, 5vw) calc(env(safe-area-inset-bottom) + 24px);
  background:var(--solid-bar);
  color:var(--text);
}
.session-pop[hidden]{ display:none !important; }
.session-head{ display:flex; align-items:center; justify-content:space-between; gap:8px; padding:4px 2px 12px; max-width:680px; margin:0 auto; }
.session-title{ font-size:12px; letter-spacing:.3em; color:var(--text-faint); }
.session-back{ border:0; background:transparent; color:var(--text); font:inherit; font-size:13px; padding:7px 4px; cursor:pointer; }
.session-new{
  border:1px solid var(--accent-soft); border-radius:999px; padding:5px 12px;
  background:var(--solid-card); color:var(--accent); font:inherit; font-size:11.5px; cursor:pointer;
}
.session-list{ display:flex; flex-direction:column; gap:6px; max-width:680px; margin:0 auto; }
.session-item{
  border:1px solid var(--solid-line); width:100%; background:var(--solid-card); color:var(--text);
  display:grid; grid-template-columns:1fr auto; align-items:center; gap:8px;
  padding:11px 12px; border-radius:14px; text-align:left; cursor:pointer; font:inherit;
}
.session-item.active{ border-color:var(--accent-soft); }
.session-item:active{ background:var(--solid-press, var(--solid-card)); transform:scale(.992); }
.session-main{ min-width:0; display:flex; flex-direction:column; align-items:flex-start; gap:3px; }
.session-name{ font-size:14px; line-height:1.25; }
.session-meta{ font-size:11px; color:var(--text-faint); }
.session-preview{ font-size:11.5px; color:var(--text-soft); max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.session-rename{
  border:0; background:transparent; color:var(--text-faint); width:30px; height:30px;
  border-radius:50%; display:grid; place-items:center; cursor:pointer; padding:0;
}
.session-rename svg{ width:15px; height:15px; display:block; }
.session-actions{
  position:fixed; inset:0; z-index:420; display:flex; align-items:flex-end; justify-content:center;
  padding:18px max(18px, env(safe-area-inset-right)) calc(18px + env(safe-area-inset-bottom));
  background:rgba(8,11,19,.45);
}
.session-actions[hidden]{ display:none !important; }
.session-actions-card{
  width:min(100%,420px); padding:8px; border-radius:20px; background:var(--solid-card);
  border:1px solid var(--solid-line); box-shadow:0 18px 60px rgba(0,0,0,.35);
}
.session-actions-title{ padding:10px 12px 8px; color:var(--text-faint); font-size:12px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.session-action{ width:100%; border:0; border-radius:13px; padding:13px; background:transparent; color:var(--text); font:inherit; text-align:center; cursor:pointer; }
.session-action:active{ background:var(--solid-press, rgba(255,255,255,.06)); }
.session-action.danger{ color:#c96a6a; }

/* toast（a4 随 showToast 从 murmur.html 迁入；挂 body 上，聊天/壳通用） */
.toast{
  position: fixed; left:50%; bottom: calc(40px + env(safe-area-inset-bottom));
  transform: translate(-50%, 12px); z-index:300;
  background: rgba(20,34,48,.92); color:#eef5fb; font-size:14px;
  padding:10px 18px; border-radius:999px;
  box-shadow: 0 14px 34px rgba(0,0,0,.28);
  opacity:0; pointer-events:none;
  transition: opacity .24s ease, transform .24s ease;
}
.toast.show{ opacity:1; transform: translate(-50%, 0); }

/* ── 壳色权守卫（2026-07-18 a1）──
   房子的点睛色只由 Dials 的 gold/ice 管；custom-theme.js 写在 html 内联的旧"主色/正文色"
   不许染壳里的其他页面（body 层变量压过 html 内联）。用户的气泡四件套/壁纸自定义照旧全归用户。 */
body[data-accent="base"]{ --accent:#d8b36a; --accent-soft:rgba(216,179,106,.55); --glow:rgba(216,179,106,.22); --text:#e8eaf2; }

/* ══════════ 三套皮肤 ══════════
   开关挂 html[data-theme]（app.js 的 hsSkin + <head> 里的早读脚本，键名 chat-skin）。
   权力次序与壳色权守卫同理：
   · html[data-theme] 层 = 皮肤改写 SKIN 决议层，仍让位于用户 html 内联的气泡四件套/壁纸自定义；
   · html[data-theme] body 层 = 皮肤结构色（正文/点睛/实色三件套），压过 custom-theme 旧主色；
   门（gate）三套皮共用同一副深色造型——进门仪式感不随皮肤变。 */

/* ── nav capsule baseline for the light skins: bright glint, shallow shadow.
   Each skin block then tints it a shade of its own paper colour.
   [data-theme] and [data-theme="X"] have the same specificity (0,1,0), so this
   rule MUST stay above the skin blocks and yield by source order. ── */
html[data-theme]{
  --nav-cap-hi:#fdfdfe; --nav-cap-lo:#f2f3f5;
  --nav-glint:rgba(255,255,255,.9);
  --nav-shadow:0 1px 2px rgba(20,26,38,.10),0 10px 24px rgba(20,26,38,.12);
}

/* ════ 晨雾少女（mist）· 珍珠潮汐复刻：值取自旧前端 PEARL TIDE 原装 token ════ */
html[data-theme="mist"]{
  /* 壳 token */
  --line:#7E93A4; --line-dim:rgba(94,112,128,.38); --hairline:rgba(120,142,165,.28);
  --text:#253447; --text-dim:#7E93A4;
  --accent:#4C6378; --accent-soft:rgba(76,99,120,.5); --glow:rgba(76,99,120,.16); --nav-tint:#DBE0E4; --nav-cap-hi:#FDFEFE; --nav-cap-lo:#F4F7FA;   /* a121 nav 徽章浅档;a122 胶囊白蘸一成冷蓝纸色(solid-bar #eef3f8) */
  /* 聊天 SKIN 改写：回珍珠原值 */
  --bg:#F7FAFC; --header-bg:transparent;
  --wall-image: linear-gradient(180deg,#FBFDFF 0%,#F5F9FC 34%,#EFF4F9 78%,#ECF1F6 100%);  /* a4 晨雾脱壁纸：只留珍珠潮汐渐变+星尘 */
  --text-soft:#5E7080; --text-faint:#8A99A8;
  /* a23 角色分层：AI 侧=冷白瓷，你那侧=暖珠贝紫，实体化+细边（会诊方向） */
  --bubble-ai-bg:rgba(252,253,255,.95); --bubble-ai-fg:#253447; --bubble-ai-line:rgba(120,142,165,0);
  --bubble-human-bg:rgba(240,233,244,.96); --bubble-human-fg:#3a3247; --bubble-human-line:rgba(140,120,165,0);
  --bubble-shadow:rgba(74,93,108,.14);
  --send-bg:#4E6B89; --accent-fg:#ffffff; --tick:#7E93A4;  /* a85 发送键统一调浅 */
  --top-line:rgba(120,142,165,.24); --top-active-bg:rgba(140,160,176,.11);
  --top-active-fg:#4C6378; --top-typing-shadow:rgba(76,99,120,.22);
  --think-flourish:rgba(99,121,142,.52); --think-label:#6A7E8E; --think-body:#56697A;
  --think-panel-bg:rgba(255,255,255,.20); --think-panel-line:rgba(255,255,255,.18);
  --think-glass-hi:rgba(255,255,255,.14); --think-glass-shadow:rgba(18,24,32,.08);
  --think-text-shadow:0 1px 10px rgba(255,255,255,.72);
  --shadow:0 18px 46px rgba(74,93,108,.10); --soft-shadow:0 14px 34px rgba(86,104,118,.08);
  --scrim:linear-gradient(180deg, rgba(255,255,255,.38), rgba(255,255,255,.12) 30%, rgba(255,255,255,.04) 68%, rgba(255,255,255,.22));
  --card-bg:rgba(244,248,250,.42); --card-line:rgba(150,168,182,.12); --card-shadow:0 10px 28px rgba(70,92,108,.05);
  --seg-track:rgba(140,160,176,.11); --seg-thumb:rgba(255,255,255,.68); --seg-thumb-shadow:0 2px 8px rgba(40,60,78,.08);
  --row-press:rgba(140,160,176,.09);
  --slider-track:rgba(143,162,176,.28); --slider-thumb:#44627b; --info-ring:rgba(143,162,176,.38);
  --status-dot:#5fbf8f;
  --wall-default:linear-gradient(180deg,#FBFDFF,#EEF4FA);  /* a4 晨雾脱壁纸：聊天页也只留珍珠潮汐渐变 */
  --menu-wall-default:var(--wall-default);
  /* 实色三件套 · 珍珠台阶（底 F7FAFC → 卡提白 → 栏压灰一档） */
  --solid-card:#fcfdff; --solid-bar:#eef3f8; --solid-line:rgba(37,52,71,.10);
  --solid-press:#edf2f7;             /* a35 按压态：浅皮压暗 */
  --frost-card:rgba(252,253,255,.55);
  --frost-press:rgba(233,240,246,.72);
}
html[data-theme="mist"] body{ background:#F7FAFC; }
html[data-theme="mist"] .sky{
  background-color: transparent;
  background-image:
    radial-gradient(1.2px 1.2px at 18% 12%,rgba(76,99,120,.26) 50%,transparent 51%),
    radial-gradient(1px 1px at 73% 7%,rgba(76,99,120,.18) 50%,transparent 51%),
    radial-gradient(1px 1px at 88% 21%,rgba(76,99,120,.14) 50%,transparent 51%),
    radial-gradient(1.4px 1.4px at 9% 33%,rgba(76,99,120,.17) 50%,transparent 51%),
    radial-gradient(1px 1px at 62% 29%,rgba(76,99,120,.12) 50%,transparent 51%),
    radial-gradient(1px 1px at 34% 47%,rgba(76,99,120,.15) 50%,transparent 51%),
    radial-gradient(1.2px 1.2px at 81% 55%,rgba(76,99,120,.14) 50%,transparent 51%),
    radial-gradient(1px 1px at 15% 68%,rgba(76,99,120,.13) 50%,transparent 51%),
    radial-gradient(1px 1px at 55% 76%,rgba(76,99,120,.10) 50%,transparent 51%),
    radial-gradient(1.3px 1.3px at 90% 83%,rgba(76,99,120,.15) 50%,transparent 51%);
}
/* a5：mist nav 覆写退役，默认 nav.river-nav 已读 var(--solid-bar) 跟主题皮自动切换 */
html[data-theme="mist"] body.chat-open{ background-color:#F7FAFC; }
html[data-theme="mist"] .medal svg > circle:nth-of-type(3){ fill:rgba(255,255,255,.60); }
html[data-theme="mist"] #page-murmur .topbar{ box-shadow:0 8px 24px rgba(74,93,108,.16); }
html[data-theme="mist"] #page-murmur .bubble .txt .md-pre{ background:rgba(37,52,71,.05); border-color:rgba(37,52,71,.10); }
/* 守卫的晨雾分店：本色=雾蓝；冰蓝在浅底上加深一档才立得住 */
html[data-theme="mist"] body[data-accent="base"]{ --accent:#4C6378; --accent-soft:rgba(76,99,120,.5); --glow:rgba(76,99,120,.16); --text:#253447; }
html[data-theme="mist"] 
/* ════ 雨青（celadon）· a46 选用的青瓷色卡：E2E4E5/CFE3DE/BAD6CF/A1C3BA/9AB8BA
   "雨过天青云破处"——雾白起，青瓷收，你那侧是薄荷瓷，AI 那侧是冷白瓷 ════ */
html[data-theme="celadon"]{
  /* 壳 token */
  --line:#7E9A92; --line-dim:rgba(94,120,112,.38); --hairline:rgba(120,150,140,.28);
  --text:#283B36; --text-dim:#7E958D;
  --accent:#527A72; --accent-soft:rgba(82,122,114,.5); --glow:rgba(82,122,114,.16); --nav-tint:#DCE4E3; --nav-cap-hi:#FDFEFD; --nav-cap-lo:#F1F7F4;   /* a121 nav 徽章浅档;a122 胶囊白蘸一成青白纸色(solid-bar #e9f2ee) */
  /* 聊天 SKIN 改写 */
  --bg:#F3F7F5; --header-bg:transparent;
  --wall-image: linear-gradient(180deg,#F7FAF8 0%,#EEF5F1 34%,#E4EFEA 78%,#DCE9E4 100%);
  --text-soft:#57706A; --text-faint:#82988F;
  /* 角色分层：虞=冷白瓷，文=薄荷青瓷，实体化+细边（沿 a23 会诊方向） */
  --bubble-ai-bg:rgba(252,254,253,.95); --bubble-ai-fg:#283B36; --bubble-ai-line:rgba(120,150,140,0);
  --bubble-human-bg:rgba(216,232,226,.96); --bubble-human-fg:#2D423C; --bubble-human-line:rgba(122,158,146,0);
  --bubble-shadow:rgba(74,108,98,.14);
  --send-bg:#5F837A; --accent-fg:#ffffff; --tick:#7E9A92;  /* a88 雨青发送键调淡 */
  --top-line:rgba(120,150,140,.24); --top-active-bg:rgba(140,170,160,.12);
  --top-active-fg:#527A72; --top-typing-shadow:rgba(82,122,114,.22);
  --think-flourish:rgba(99,132,122,.52); --think-label:#6A837B; --think-body:#566B64;
  --think-panel-bg:rgba(255,255,255,.20); --think-panel-line:rgba(255,255,255,.18);
  --think-glass-hi:rgba(255,255,255,.14); --think-glass-shadow:rgba(18,32,28,.08);
  --think-text-shadow:0 1px 10px rgba(255,255,255,.72);
  --shadow:0 18px 46px rgba(74,108,98,.10); --soft-shadow:0 14px 34px rgba(86,118,108,.08);
  --scrim:linear-gradient(180deg, rgba(255,255,255,.38), rgba(255,255,255,.12) 30%, rgba(255,255,255,.04) 68%, rgba(255,255,255,.22));
  --card-bg:rgba(244,250,247,.42); --card-line:rgba(150,178,168,.12); --card-shadow:0 10px 28px rgba(70,108,96,.05);
  --seg-track:rgba(140,170,160,.11); --seg-thumb:rgba(255,255,255,.68); --seg-thumb-shadow:0 2px 8px rgba(40,78,66,.08);
  --row-press:rgba(140,170,160,.09);
  --slider-track:rgba(143,176,166,.28); --slider-thumb:#486F66; --info-ring:rgba(143,176,166,.38);
  --status-dot:#5fbf8f;
  --wall-default:linear-gradient(180deg,#F7FAF8,#E7F1EC);
  --menu-wall-default:var(--wall-default);
  /* 实色三件套 · 青瓷台阶（底 F3F7F5 → 卡提白 → 栏压青一档） */
  --solid-card:#f9fcfa; --solid-bar:#e9f2ee; --solid-line:rgba(40,59,54,.10);
  --solid-press:#e6efeb;
  --frost-card:rgba(250,253,252,.55);
  --frost-press:rgba(228,240,235,.72);
}
html[data-theme="celadon"] body{ background:#F3F7F5; }
html[data-theme="celadon"] .sky{
  background-color: transparent;
  background-image:
    radial-gradient(1.2px 1.2px at 18% 12%,rgba(82,122,114,.26) 50%,transparent 51%),
    radial-gradient(1px 1px at 73% 7%,rgba(82,122,114,.18) 50%,transparent 51%),
    radial-gradient(1px 1px at 88% 21%,rgba(82,122,114,.14) 50%,transparent 51%),
    radial-gradient(1.4px 1.4px at 9% 33%,rgba(82,122,114,.17) 50%,transparent 51%),
    radial-gradient(1px 1px at 62% 29%,rgba(82,122,114,.12) 50%,transparent 51%),
    radial-gradient(1px 1px at 34% 47%,rgba(82,122,114,.15) 50%,transparent 51%),
    radial-gradient(1.2px 1.2px at 81% 55%,rgba(82,122,114,.14) 50%,transparent 51%),
    radial-gradient(1px 1px at 15% 68%,rgba(82,122,114,.13) 50%,transparent 51%),
    radial-gradient(1px 1px at 55% 76%,rgba(82,122,114,.10) 50%,transparent 51%),
    radial-gradient(1.3px 1.3px at 90% 83%,rgba(82,122,114,.15) 50%,transparent 51%);
}
html[data-theme="celadon"] body.chat-open{ background-color:#F3F7F5; }
html[data-theme="celadon"] .medal svg > circle:nth-of-type(3){ fill:rgba(255,255,255,.60); }
html[data-theme="celadon"] #page-murmur .topbar{ box-shadow:0 8px 24px rgba(74,108,98,.16); }
html[data-theme="celadon"] #page-murmur .bubble .txt .md-pre{ background:rgba(40,59,54,.05); border-color:rgba(40,59,54,.10); }
/* 守卫的雨青分店：本色=青瓷；冰蓝沿通用深一档 */
html[data-theme="celadon"] body[data-accent="base"]{ --accent:#527A72; --accent-soft:rgba(82,122,114,.5); --glow:rgba(82,122,114,.16); --text:#283B36; }
html[data-theme="celadon"] 
/* ════ 花信（blossom）· a46 豆沙×灰绿 → a118 用户给的新色卡整体调粉：FFE9ED/FFD1D7/E8C0C9/FFF9FA
   花信风·樱：FFF9FA 是信纸底，磨砂走 FF 系亮粉（a119 卡片内里去灰：F5E6E8 隔着 blur 发闷，
   底色升 FFF1F3/FFEFF2 家族，透明度不动），两粉分两侧（用户侧更粉），E8C0C9 走线脚边框点缀 ════ */
html[data-theme="blossom"]{
  /* 壳 token */
  --line:#C98FA0; --line-dim:rgba(201,143,160,.38); --hairline:rgba(200,145,160,.16);   /* a121 压淡;a125 除灰:灰紫→玫瑰(用户给的 C98FA0 方向,装饰档放宽) */
  --text:#463731; --text-dim:#A07A85;   /* a125 除灰:主文往暖一丝(11.1:1 不牺牲);次级字灰褐→淡玫瑰(对比 3.67 反超原 3.44) */
  --accent:#B57E86; --accent-soft:rgba(181,126,134,.5); --glow:rgba(181,126,134,.15);  /* a88 豆沙→偏粉 */ --nav-tint:#F0E5E7; --nav-cap-hi:#FFFEFE; --nav-cap-lo:#FFF9FB;   /* a122 蘸色→a126 随整屋再浅一档 */
  /* 聊天 SKIN 改写 */
  --bg:#FFFDFE; --header-bg:transparent;   /* a126 随壁纸 0% 停 */
  --wall-image: linear-gradient(180deg,#FFFDFE 0%,#FFFAFB 30%,#FFF5F7 65%,#FFEEF1 100%);   /* a124 提亮→a126 卡片亮上来后背景再上一档(相对论追击) */
  --text-soft:#6E5B55; --text-faint:#95867F;
  /* 角色分层 a123 用户换色：虞=白系 FFFDFD，文=浅樱粉 FFDDE2（用户侧仍更粉）；默认细边全皮退役(令牌置透明,custom 磨砂不在此列) */
  --bubble-ai-bg:rgba(255,253,253,.96); --bubble-ai-fg:#403633; --bubble-ai-line:rgba(232,192,201,0);
  --bubble-human-bg:rgba(255,221,226,.96); --bubble-human-fg:#4A383C; --bubble-human-line:rgba(232,192,201,0);
  --bubble-shadow:rgba(170,105,125,.12);
  --send-bg:#C2848E; --accent-fg:#ffffff; --tick:#95867F;  /* a88 发送键调淡+随粉 */
  --top-line:rgba(200,145,160,.14); --top-active-bg:rgba(205,160,172,.12);   /* a121 线条压淡 .24→.14 */
  --top-active-fg:#B57E86; --top-typing-shadow:rgba(181,126,134,.20);
  --think-flourish:rgba(185,135,150,.50); --think-label:#8A736C; --think-body:#6E5B55;
  --think-panel-bg:rgba(255,255,255,.22); --think-panel-line:rgba(255,255,255,.18);
  --think-glass-hi:rgba(255,255,255,.15); --think-glass-shadow:rgba(40,28,24,.08);
  --think-text-shadow:0 1px 10px rgba(255,255,255,.72);
  --shadow:0 18px 46px rgba(170,105,125,.10); --soft-shadow:0 14px 34px rgba(170,105,125,.08);
  --scrim:linear-gradient(180deg, rgba(255,255,255,.38), rgba(255,255,255,.12) 30%, rgba(255,255,255,.04) 68%, rgba(255,255,255,.22));
  --card-bg:rgba(255,246,248,.55); --card-line:rgba(232,192,201,.16);   /* a125 除灰 FFE5EA→FFF6F8 */ --card-shadow:0 10px 28px rgba(170,100,120,.05);  /* a119 卡底去灰:F5E6E8→FFF1F3;a121 卡边压淡 .40→.16 */
  --seg-track:rgba(215,155,170,.12); --seg-thumb:rgba(255,255,255,.68); --seg-thumb-shadow:0 2px 8px rgba(140,80,100,.08);
  --row-press:rgba(215,155,170,.10);
  --slider-track:rgba(220,160,175,.28); --slider-thumb:#B57E86; --info-ring:rgba(220,160,175,.38);
  --status-dot:#8FAE94;
  --wall-default:linear-gradient(180deg,#FFFDFE,#FFF5F7);   /* a126 同族跟停 */
  --menu-wall-default:var(--wall-default);
  /* 实色三件套 · 信纸台阶（底 FFF9FA → 卡提白 → 栏压粉一档；a119 去灰:F5E6E8→FFEFF2） */
  --solid-card:#FFFDFE; --solid-bar:#FFF9FB; --solid-line:rgba(232,192,201,.22);   /* a126 胶囊追平背景层,不当屋里最深 */   /* a121 实机反馈点名:全屋描边太显眼 .50→.22(别家 .10 上下但色相深,玫瑰浅色相补两档) */
  --solid-press:#F1DCE0;
  --frost-card:rgba(255,243,246,.62);   /* a124 FFE7EC→a125 需要除灰:宁浅不灰(FFF3F6),分离度交 card-shadow 兜底 */
  --frost-press:rgba(255,233,238,.80);  /* a125 随卡提亮保按压差(FFE9EE@.80,合成差 g9 可感) */
}
html[data-theme="blossom"] body{ background:#FFFDFE; }  /* a126 随提 */
html[data-theme="blossom"] .sky{
  background-color: transparent;
  /* 星尘换成花瓣：a118 全粉两调——玫瑰为主，掺三粒深绛作层次（原灰绿叶随新色卡退役） */
  background-image:
    radial-gradient(1.2px 1.2px at 18% 12%,rgba(214,120,140,.24) 50%,transparent 51%),
    radial-gradient(1px 1px at 73% 7%,rgba(214,120,140,.17) 50%,transparent 51%),
    radial-gradient(1px 1px at 88% 21%,rgba(172,116,138,.14) 50%,transparent 51%),
    radial-gradient(1.4px 1.4px at 9% 33%,rgba(214,120,140,.16) 50%,transparent 51%),
    radial-gradient(1px 1px at 62% 29%,rgba(214,120,140,.11) 50%,transparent 51%),
    radial-gradient(1px 1px at 34% 47%,rgba(172,116,138,.13) 50%,transparent 51%),
    radial-gradient(1.2px 1.2px at 81% 55%,rgba(214,120,140,.13) 50%,transparent 51%),
    radial-gradient(1px 1px at 15% 68%,rgba(214,120,140,.12) 50%,transparent 51%),
    radial-gradient(1px 1px at 55% 76%,rgba(172,116,138,.10) 50%,transparent 51%),
    radial-gradient(1.3px 1.3px at 90% 83%,rgba(214,120,140,.14) 50%,transparent 51%);
}
html[data-theme="blossom"] body.chat-open{ background-color:#FFFDFE; }  /* a126 随提 */
/* a121 blossom rlabel 白影随夜影同批退役（白胶囊后失义） */
html[data-theme="blossom"] .medal svg > circle:nth-of-type(3){ fill:rgba(255,255,255,.60); }
html[data-theme="blossom"] #page-murmur .topbar{ box-shadow:0 8px 24px rgba(170,105,125,.16); }
html[data-theme="blossom"] #page-murmur .bubble .txt .md-pre{ background:rgba(64,54,51,.05); border-color:rgba(64,54,51,.10); }
/* 守卫的花信分店：本色=豆沙；冰蓝沿通用深一档 */
html[data-theme="blossom"] body[data-accent="base"]{ --accent:#B57E86; --accent-soft:rgba(181,126,134,.5); --glow:rgba(181,126,134,.15); --text:#463731; } /* a88 豆沙→偏粉（本色档） */
html[data-theme="blossom"] 
/* a90 雨青/花信的呼吸灯（模型胶囊小圆点）调淡 */

/* ════ test紫 · 晨雾质感浅紫色板（独立第四主题） ════ */
html[data-theme="test-purple"]{
  --line:#A99ABF; --line-dim:rgba(136,115,168,.30); --hairline:rgba(151,132,178,.20);
  --text:#40384D; --text-dim:#81778F;
  --accent:#8873A8; --accent-soft:rgba(136,115,168,.48); --glow:rgba(136,115,168,.18);
  --nav-tint:#DDD2EA; --nav-cap-hi:#FEFDFF; --nav-cap-lo:#F2EDF8;
  --bg:#F8F6FC; --header-bg:transparent;
  --wall-image:
    radial-gradient(circle at 82% 9%,rgba(255,255,255,.82) 0,rgba(255,255,255,0) 32%),
    radial-gradient(circle at 12% 58%,rgba(216,203,234,.42) 0,rgba(216,203,234,0) 42%),
    linear-gradient(180deg,#FBFAFE 0%,#F5F1FA 34%,#EEE8F6 76%,#E9E2F2 100%);
  --text-soft:#665C75; --text-faint:#9B92A7;
  --bubble-ai-bg:rgba(253,252,255,.94); --bubble-ai-fg:#40384D; --bubble-ai-line:rgba(136,115,168,0);
  --bubble-human-bg:rgba(230,220,242,.96); --bubble-human-fg:#463A58; --bubble-human-line:rgba(136,115,168,0);
  --bubble-shadow:rgba(91,72,117,.10);
  --send-bg:#8873A8; --accent-fg:#fff; --tick:#9A89B4;
  --top-line:rgba(136,115,168,.18); --top-active-bg:rgba(136,115,168,.10);
  --top-active-fg:#8069A3; --top-typing-shadow:rgba(136,115,168,.20);
  --think-flourish:rgba(136,115,168,.48); --think-label:#7F7093; --think-body:#665C75;
  --think-panel-bg:rgba(255,255,255,.20); --think-panel-line:rgba(255,255,255,.18);
  --think-glass-hi:rgba(255,255,255,.14); --think-glass-shadow:rgba(91,72,117,.07);
  --think-text-shadow:0 1px 10px rgba(255,255,255,.72);
  --shadow:0 18px 46px rgba(91,72,117,.10); --soft-shadow:0 14px 34px rgba(91,72,117,.07);
  --scrim:linear-gradient(180deg,rgba(255,255,255,.40),rgba(255,255,255,.13) 30%,rgba(255,255,255,.05) 68%,rgba(255,255,255,.22));
  --card-bg:rgba(249,246,253,.55); --card-line:rgba(151,132,178,.12); --card-shadow:0 10px 28px rgba(91,72,117,.06);
  --seg-track:rgba(136,115,168,.10); --seg-thumb:rgba(255,255,255,.74); --seg-thumb-shadow:0 2px 8px rgba(91,72,117,.07);
  --row-press:rgba(136,115,168,.08);
  --slider-track:rgba(136,115,168,.24); --slider-thumb:#8069A3; --info-ring:rgba(136,115,168,.34);
  --status-dot:#8FBBA6;
  --wall-default:linear-gradient(180deg,#FBFAFE,#EDE7F5);
  --menu-wall-default:var(--wall-default);
  --solid-card:#FCFBFE; --solid-bar:#EEE8F5; --solid-line:rgba(136,115,168,.10);
  --solid-press:#E7DFF1;
  --frost-card:rgba(252,250,255,.66); --frost-press:rgba(232,224,243,.78);
}
html[data-theme="test-purple"] body,
html[data-theme="test-purple"] body.chat-open{ background-color:#F8F6FC; }
html[data-theme="test-purple"] .sky{
  background-color:transparent;
  background-image:
    radial-gradient(1.2px 1.2px at 18% 12%,rgba(136,115,168,.24) 50%,transparent 51%),
    radial-gradient(1px 1px at 73% 7%,rgba(136,115,168,.17) 50%,transparent 51%),
    radial-gradient(1px 1px at 88% 21%,rgba(136,115,168,.13) 50%,transparent 51%),
    radial-gradient(1.4px 1.4px at 9% 33%,rgba(136,115,168,.16) 50%,transparent 51%),
    radial-gradient(1px 1px at 62% 29%,rgba(136,115,168,.11) 50%,transparent 51%),
    radial-gradient(1px 1px at 34% 47%,rgba(136,115,168,.14) 50%,transparent 51%),
    radial-gradient(1.2px 1.2px at 81% 55%,rgba(136,115,168,.13) 50%,transparent 51%),
    radial-gradient(1px 1px at 15% 68%,rgba(136,115,168,.12) 50%,transparent 51%),
    radial-gradient(1px 1px at 55% 76%,rgba(136,115,168,.10) 50%,transparent 51%),
    radial-gradient(1.3px 1.3px at 90% 83%,rgba(136,115,168,.14) 50%,transparent 51%);
}
html[data-theme="test-purple"] .medal svg > circle:nth-of-type(3){ fill:rgba(255,255,255,.60); }
html[data-theme="test-purple"] #page-murmur .topbar{ box-shadow:0 8px 24px rgba(91,72,117,.12); }
html[data-theme="test-purple"] #page-murmur .bubble .txt .md-pre{
  background:rgba(136,115,168,.055); border-color:rgba(136,115,168,.10);
}
html[data-theme="test-purple"] body[data-accent="base"]{
  --accent:#8873A8; --accent-soft:rgba(136,115,168,.48); --glow:rgba(136,115,168,.18); --text:#40384D;
}

/* test紫最终覆盖层：必须位于文件末段之后，压过原版的深色基础令牌与
   custom-theme 写在 html 上的气泡颜色。 */
html[data-theme="test-purple"]{
  color-scheme:light;
  --bg:#FBFAFE;
  --header-bg:rgba(251,250,254,.90);
  --wall-image:linear-gradient(180deg,#FFFFFF 0%,#FBFAFE 36%,#F6F2FA 100%);
  --wall-default:linear-gradient(180deg,#FFFFFF 0%,#FAF8FD 42%,#F2ECF8 100%);
  --menu-wall-default:var(--wall-default);
  --text:#40384D; --text-soft:#665C75; --text-dim:#81778F; --text-faint:#9B92A7;
  --accent:#8873A8; --accent-soft:rgba(136,115,168,.44); --glow:rgba(136,115,168,.15);
  --solid-card:#FCFBFE; --solid-bar:#F2EDF8; --solid-line:rgba(136,115,168,.12);
  --solid-press:#E9E1F2;
  --frost-card:rgba(249,246,253,.76); --frost-press:rgba(232,224,243,.82);
  --card-bg:rgba(250,247,253,.82); --card-line:rgba(136,115,168,.14);
  --field-bg:rgba(255,255,255,.72); --field-line:rgba(136,115,168,.18);
  --composer-bg:transparent;
  --nav-cap-hi:#FFFFFF; --nav-cap-lo:#F4F0F9; --nav-tint:#DED3EB; --nav-ink:#8069A3;
}
html[data-theme="test-purple"] body,
html[data-theme="test-purple"] body.chat-open,
html[data-theme="test-purple"] .app,
html[data-theme="test-purple"] .page,
html[data-theme="test-purple"] #page-murmur,
html[data-theme="test-purple"] #page-dials{
  background-color:#FBFAFE !important;
  color:#40384D !important;
}
html[data-theme="test-purple"] body.chat-open{
  background-image:var(--wall-default) !important;
}
html[data-theme="test-purple"] .sky,
html[data-theme="test-purple"] #page-murmur .wall{
  background-color:#FBFAFE !important;
  background-image:var(--wall-default) !important;
}
html[data-theme="test-purple"] #page-dials .set-group,
html[data-theme="test-purple"] #page-dials .drawer,
html[data-theme="test-purple"] #page-dials .card{
  background:rgba(249,246,253,.88) !important;
  border-color:rgba(136,115,168,.14) !important;
  box-shadow:0 10px 28px rgba(91,72,117,.06) !important;
}
html[data-theme="test-purple"] #page-dials input,
html[data-theme="test-purple"] #page-dials textarea,
html[data-theme="test-purple"] #page-dials select{
  background:rgba(255,255,255,.76) !important;
  color:#40384D !important;
  border-color:rgba(136,115,168,.20) !important;
}
html[data-theme="test-purple"] #page-murmur .bubble{
  -webkit-backdrop-filter:blur(15px) saturate(112%);
  backdrop-filter:blur(15px) saturate(112%);
  border:1px solid rgba(136,115,168,.13) !important;
  box-shadow:0 8px 22px rgba(91,72,117,.08) !important;
}
html[data-theme="test-purple"] #page-murmur .row.ai .bubble{
  background:rgba(241,235,248,.72) !important;
  color:#40384D !important;
}
html[data-theme="test-purple"] #page-murmur .row.human .bubble{
  background:rgba(221,209,237,.68) !important;
  color:#463A58 !important;
}
html[data-theme="test-purple"] #page-murmur .bubble .txt,
html[data-theme="test-purple"] #page-murmur .bubble .txt *{
  color:inherit;
}
html[data-theme="test-purple"] #page-murmur .topbar,
html[data-theme="test-purple"] #page-murmur .composer-field,
html[data-theme="test-purple"] #page-murmur .composer textarea,
html[data-theme="test-purple"] nav.river-nav{
  background-color:rgba(252,250,255,.88) !important;
  color:#40384D !important;
  border-color:rgba(136,115,168,.14) !important;
}
html[data-theme="test-purple"] #page-murmur .composer textarea::placeholder{
  color:#9B92A7 !important;
}

/* ═══════════ a106 组头 header（用户 8-8 三改·QQ 风）+ thinking 云卡 + 工具圆点行 ═══════════
   头像挪进组头,旁边竖排日期/时间(系统字体),时间旁小云朵=thinking,脚边小虚线;
   工具行(api-trace)圆点裸行排虚线楼下,气泡压轴、左缘与头像平齐(缩进列退役);
   点云在下方展开 thinking 磨砂卡。展开态复用 openThinkKeys。 */
#page-murmur .row.stamp{ -webkit-user-select:none; user-select:none; }
#page-murmur .row.stamp.stamp-ai{ justify-content: flex-start; }
#page-murmur .row.stamp.stamp-human{ justify-content: flex-end; }
#page-murmur .stamp-head{
  display: flex; align-items: center; gap: 10px;
  padding-bottom: 7px;
  border-bottom: 1px dashed var(--line-dim, rgba(140,150,165,.4));
}
#page-murmur .row.stamp.stamp-human .stamp-head{ flex-direction: row-reverse; }
#page-murmur .stamp-avatar{
  flex: none;
  width: var(--avatar-size); height: var(--avatar-size);
  border-radius: 50%;
  background-image: var(--avatar-default);
  background-size: cover; background-position: center;
  box-shadow: 0 2px 6px rgba(24,46,67,0.14);
}
#page-murmur .row.stamp.stamp-human .stamp-avatar{ background-image: var(--avatar-human, none); }
body:not(.has-human-avatar) #page-murmur .row.stamp.stamp-human .stamp-avatar{ display: none; }
#page-murmur .stamp-col{ display: flex; flex-direction: column; gap: 2px; }
#page-murmur .row.stamp.stamp-human .stamp-col{ align-items: flex-end; }
#page-murmur .stamp-date, #page-murmur .stamp-clock{
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  font-size: 11.5px; line-height: 1.35; letter-spacing: .04em;
  color: var(--text-soft, var(--text-dim));
}
#page-murmur .stamp-clock{ display: inline-flex; align-items: center; gap: 6px; }
#page-murmur .stamp-cloud{
  appearance: none; -webkit-appearance: none;
  margin: 0; padding: 0 1px; border: 0; background: none;
  color: var(--text-soft, var(--text-dim)); cursor: pointer; line-height: 1;
  display: inline-flex; align-items: center;
  transition: color var(--motion-fast) var(--ease-soft);
}
#page-murmur .stamp-cloud svg{ width: 15px; height: 15px; display: block; }
#page-murmur .stamp-cloud:hover, #page-murmur .stamp-cloud[aria-expanded="true"]{ color: var(--accent); }
#page-murmur .stamp-cloud:active{ transform: translateY(1px); }
#page-murmur .stamp-think[hidden]{ display: none !important; }
#page-murmur .stamp-think{ margin-top: 8px; text-align: left; animation: pop .2s cubic-bezier(.2,.8,.2,1) both; }
/* a117 回滚 a116 裸摊：用户看后说裸摊叠背景看不清，磨砂卡展开态回炉；云朵点开交互不动 */
#page-murmur .tcard{
  border-radius: 16px;
  background: var(--frost-card);
  border: 1px solid var(--solid-line);
  box-shadow: 0 10px 28px rgba(0,0,0,.07);
  -webkit-backdrop-filter: blur(14px) saturate(1.4);
  backdrop-filter: blur(14px) saturate(1.4);
  padding: clamp(12px, 2vw, 16px) clamp(14px, 2.2vw, 18px);
  max-width: min(80vw, 470px);
}
#page-murmur .tcard-cap{
  text-align: center;
  font-family: var(--font-en); font-style: italic;
  font-size: 11px; letter-spacing: .28em;
  color: var(--text-dim);
  margin-bottom: 8px;
}
#page-murmur .tcard-cap-star{ letter-spacing: 0; font-style: normal; }
#page-murmur .tcard-body{
  font-family: var(--font-cn);
  font-size: 12.5px; line-height: 1.78;
  color: var(--think-body);
  overflow-wrap: anywhere;
}
#page-murmur .tcard-tail{ text-align: center; color: var(--text-dim); font-size: 12px; margin-top: 8px; }
/* 气泡行头像退役(头像住进组头),缩进列一并收回——气泡与头像同一左缘(用户的参考图) */
#page-murmur .row.ai::before{ content: none; }
body.has-human-avatar #page-murmur .row.human::before{ content: none; }
#page-murmur .row.ai{ padding-left: 0; }
body.has-human-avatar #page-murmur .row.human{ padding-right: 0; }
#page-murmur .row.think.api-trace, #page-murmur .row.act.api-trace{ padding-left: 0; }
#page-murmur .row.think.api-trace.think-open{ padding-left: 0; }
/* header 楼下的行贴紧;工具行串首规则(16-26px)在这里让位 */
#page-murmur .row.stamp + .row{ margin-top: 8px; }
#page-murmur .row.stamp + .row.act.api-trace{ margin-top: 8px; }
/* 工具行去胶囊 → 圆点裸行(只动 api-trace 系,历史碎碎念的动作胶囊不受累) */
#page-murmur .row.act.api-trace .act-toggle{
  border: 0; border-radius: 0; padding: 0;
  background: none; box-shadow: none;
  -webkit-backdrop-filter: none; backdrop-filter: none;
}
/* a106 圆点加粗:字符换真圆,尺寸自控 */
#page-murmur .row.act.api-trace .act-glyph{
  font-size: 0; width: 5px; height: 5px; border-radius: 50%;
  background: currentColor; color: var(--accent);
  display: inline-block; transform: none; align-self: center; flex: none;
}
#page-murmur .row.act.api-trace .act-label{ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 11.5px; }
#page-murmur .row.act.api-trace .act-state{ font-size: .78em; }    /* a104 星星缩小;cc 侧裸行也带星(JS 侧放行) */
/* a106 默认气泡阴影收身(此前 0 6px 18px 漂浮影);a117 再收:0 2px 5px→0 1px 2px,贴边不晕染 */
#page-murmur .bubble{ box-shadow: 0 1px 2px var(--bubble-shadow); }


/* a111 输入框字体跟随系统(与气泡同款) */
#page-murmur .composer textarea{ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }

/* test紫 FINAL：置于整个文件最末，保证白底与半透明浅紫气泡不被旧深色层覆盖。 */
html[data-theme="test-purple"],
html[data-theme="test-purple"] body,
html[data-theme="test-purple"] body.chat-open,
html[data-theme="test-purple"] .app,
html[data-theme="test-purple"] .page,
html[data-theme="test-purple"] #page-murmur,
html[data-theme="test-purple"] #page-dials{
  background-color:#FBFAFE !important;
  color:#40384D !important;
}
html[data-theme="test-purple"] body.chat-open,
html[data-theme="test-purple"] .sky,
html[data-theme="test-purple"] #page-murmur .wall{
  background-color:#FBFAFE !important;
  background-image:linear-gradient(180deg,#FFFFFF 0%,#FBFAFE 42%,#F3EDF8 100%) !important;
}
html[data-theme="test-purple"] #page-murmur .row.ai .bubble{
  background:rgba(238,230,247,.70) !important;
  color:#40384D !important;
  border:1px solid rgba(136,115,168,.13) !important;
  -webkit-backdrop-filter:blur(15px) saturate(112%);
  backdrop-filter:blur(15px) saturate(112%);
}
html[data-theme="test-purple"] #page-murmur .row.human .bubble{
  background:rgba(216,202,234,.66) !important;
  color:#463A58 !important;
  border:1px solid rgba(136,115,168,.14) !important;
  -webkit-backdrop-filter:blur(15px) saturate(112%);
  backdrop-filter:blur(15px) saturate(112%);
}
html[data-theme="test-purple"] #page-murmur .topbar,
html[data-theme="test-purple"] #page-murmur .composer-field,
html[data-theme="test-purple"] nav.river-nav,
html[data-theme="test-purple"] #page-dials .set-group,
html[data-theme="test-purple"] #page-dials .drawer{
  background:rgba(252,250,255,.90) !important;
  color:#40384D !important;
  border-color:rgba(136,115,168,.14) !important;
  box-shadow:0 8px 24px rgba(91,72,117,.07) !important;
}
html[data-theme="test-purple"] #page-murmur .composer textarea,
html[data-theme="test-purple"] #page-dials input,
html[data-theme="test-purple"] #page-dials textarea,
html[data-theme="test-purple"] #page-dials select{
  background:rgba(255,255,255,.76) !important;
  color:#40384D !important;
  border-color:rgba(136,115,168,.18) !important;
}

/* test紫发送键：覆盖原深色基础主题的金色发送按钮。 */
html[data-theme="test-purple"] #page-murmur .floatbtn.send{
  background:#8873A8 !important;
  color:#FFFFFF !important;
  border-color:rgba(255,255,255,.34) !important;
  box-shadow:0 9px 22px rgba(105,82,139,.24) !important;
}
html[data-theme="test-purple"] #page-murmur .floatbtn.send:hover,
html[data-theme="test-purple"] #page-murmur .floatbtn.send:active{
  background:#78629A !important;
  color:#FFFFFF !important;
}
html[data-theme="test-purple"] #page-murmur .floatbtn.send:disabled{
  background:#D6CAE5 !important;
  color:rgba(255,255,255,.88) !important;
  box-shadow:none !important;
}

/* ══════════ Cove · 可移动日期时间小组件 ══════════ */
.cove-page{
  position:relative;
  min-height:100vh;
  overflow:hidden;
  background:var(--wall-image, var(--bg));
  touch-action:none;
}
.cove-widget{
  position:absolute;
  left:50%; top:34%;
  width:min(78vw,330px);
  min-height:150px;
  padding:26px 28px 22px;
  border:1px solid var(--accent-soft);
  border-radius:28px;
  background:var(--frost-card);
  color:var(--text);
  box-shadow:0 14px 34px var(--glow);
  -webkit-backdrop-filter:blur(18px) saturate(112%);
  backdrop-filter:blur(18px) saturate(112%);
  transform:translate(-50%,-50%);
  user-select:none;
  -webkit-user-select:none;
  touch-action:none;
  cursor:grab;
  z-index:5;
  transition:box-shadow .2s ease,border-color .2s ease,scale .2s ease;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
}
.cove-widget.drag-ready{
  border-color:var(--accent);
  box-shadow:0 18px 42px var(--glow);
  scale:1.025;
  animation:cove-wiggle .18s ease-in-out infinite alternate;
}
.cove-widget.dragging{ cursor:grabbing; animation:none; transition:none; }
@keyframes cove-wiggle{ from{rotate:-.35deg} to{rotate:.35deg} }
.cove-clock-time{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  font-size:clamp(58px,16vw,82px);
  font-weight:300;
  line-height:1;
  letter-spacing:-.055em;
  font-variant-numeric:tabular-nums;
}
.cove-clock-date{
  margin-top:15px;
  color:var(--text-soft);
  font-size:15px;
  letter-spacing:.08em;
  width:100%;
  text-align:center;
}
.cove-drag-hint{
  position:absolute;
  right:20px; bottom:13px;
  color:var(--text-faint);
  font-size:9px;
  letter-spacing:.16em;
  opacity:0;
  transition:opacity .2s ease;
}
.cove-widget.drag-ready .cove-drag-hint{opacity:.8}
html[data-theme="test-purple"] .cove-page{
  background-color:#FBFAFE !important;
  background-image:linear-gradient(180deg,#FFFFFF 0%,#FBFAFE 42%,#F3EDF8 100%) !important;
}
html[data-theme="test-purple"] .cove-widget{
  background:rgba(238,230,247,.66);
  border-color:rgba(136,115,168,.20);
  box-shadow:0 14px 34px rgba(91,72,117,.10);
}
