:root{
  /* === 色彩系统（对齐首页 Kiki Palace 主题）=== */
  --bg:#FBFAFF; --surface:rgba(255,255,255,0.72); --card:rgba(255,255,255,0.58);
  --rose:#EFE4E9; --rose-deep:#A2A1A4;
  --lav:#EDE6EE;  --lav-deep:#A5ACBF;
  --mint:#DEEBF4; --mint-deep:#93A4C1;
  --gold:#BDBBBF; --cream:#F7F8F4;
  /* === 文字 === */
  --text:#5F5F5F; --text-m:#7A7A7C; --text-l:#A2A1A4;
  /* === 强调 & 气泡 === */
  --accent:#B5A3C4; --accent-light:#F1EEF5;
  --user-bubble:#EDE6EE; --ai-bubble:rgba(255,255,255,0.86);
  /* === 边框 阴影 圆角 === */
  --border:rgba(165,172,191,0.16); --hairline:rgba(165,172,191,0.10);
  --shadow:0 1px 8px rgba(149,164,193,0.06);
  --shadow-lg:0 8px 32px rgba(149,164,193,0.09),0 0 0 0.5px rgba(255,255,255,0.85) inset;
  --glass-blur:blur(28px) saturate(1.2);
  --radius:18px; --radius-lg:22px;
  /* === 字体 === */
  --font-en:"Cormorant Garamond",Georgia,serif;
  --font-cn:"Noto Sans SC",system-ui,sans-serif;
  --font-serif:"Noto Serif SC","Cormorant Garamond",serif;
  /* === 动效缓动 === */
  --ease-bounce:cubic-bezier(.34,1.46,.5,1);
  --ease-smooth:cubic-bezier(.22,1,.36,1);
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}
button{-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none;touch-action:manipulation}
html{height:100%;height:100dvh;overflow:hidden;overscroll-behavior:none}
body{font-family:"Noto Sans SC",system-ui,sans-serif;background:transparent;color:var(--text);overflow:hidden;display:flex;flex-direction:column;position:fixed;inset:0;width:100%;height:100%;height:100dvh;min-height:0;-webkit-font-smoothing:antialiased;overscroll-behavior:none}
.chat-wall{position:fixed;inset:0;z-index:-1;background:var(--bg);background-size:cover;background-position:center;transform:translateZ(0);pointer-events:none}

.top-bar{display:flex;align-items:center;padding:calc(10px + env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) 10px max(16px,env(safe-area-inset-left));background:rgba(251,250,255,0.78);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border-bottom:1px solid var(--hairline);flex-shrink:0;z-index:50}
.top-bar button{background:none;border:none;color:var(--text-l);cursor:pointer;padding:6px;display:flex;align-items:center;border-radius:8px}
.top-bar button:active{transform:scale(0.92);opacity:0.7}
.top-bar button svg{width:18px;height:18px}
.top-bar .top-call-button{width:30px;height:30px;flex:0 0 30px;justify-content:center;color:var(--accent)}
.top-bar .title{flex:1;font-size:13px;font-weight:400;color:var(--text-m);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 8px}
.contact-strip{flex:1;display:flex;align-items:center;gap:10px;padding:0 8px;min-width:0}
.contact-avatar{width:34px;height:34px;border-radius:50%;background:linear-gradient(135deg,var(--accent-light),var(--user-bubble));border:1px solid var(--border);flex-shrink:0;overflow:hidden;background-size:cover;background-position:center}
.contact-avatar img{width:100%;height:100%;object-fit:cover}
.contact-meta{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:1px}
.contact-name{font-size:14px;font-weight:500;color:var(--text);line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-cn)}
.contact-status{display:flex;align-items:center;gap:5px;font-size:10.5px;color:var(--text-l);line-height:1.2;transition:color .2s}
.contact-status .dot-online{width:6px;height:6px;border-radius:50%;background:#8FCFA1;box-shadow:0 0 4px rgba(143,207,161,.6);flex-shrink:0}
.contact-status .status-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.contact-status.typing{color:var(--accent)}
.contact-status.typing .dot-online{display:none}
.contact-status .typing-inline{display:inline-flex;align-items:center;gap:3px}
.contact-status .typing-inline i{width:4px;height:4px;border-radius:50%;background:currentColor;animation:typDotBounce 1.25s ease-in-out infinite}
.contact-status .typing-inline i:nth-child(2){animation-delay:.16s}
.contact-status .typing-inline i:nth-child(3){animation-delay:.32s}
@keyframes typDotBounce{0%,70%,100%{transform:translateY(0);opacity:.4}35%{transform:translateY(-3px);opacity:1}}
@keyframes typDot{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-2px)}}
.message-search-bar{display:none;align-items:center;gap:6px;min-height:46px;padding:6px max(12px,env(safe-area-inset-right)) 7px max(12px,env(safe-area-inset-left));background:rgba(251,250,255,.9);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border-bottom:1px solid var(--hairline);z-index:49;flex:none}
.message-search-bar.open{display:flex}
.message-search-field{position:relative;display:flex;align-items:center;min-width:0;flex:1}
.message-search-field>svg{position:absolute;left:10px;width:14px;height:14px;color:var(--text-l);pointer-events:none}
.message-search-input{width:100%;height:33px;border:1px solid var(--border);border-radius:7px;background:rgba(255,255,255,.72);color:var(--text);padding:0 58px 0 31px;font:12px var(--font-cn);outline:none}
.message-search-input:focus{border-color:var(--accent);background:white}
.message-search-count{position:absolute;right:9px;font-size:10px;color:var(--text-l);font-variant-numeric:tabular-nums;white-space:nowrap}
.message-search-nav{width:30px;height:30px;border:0;background:transparent;color:var(--text-l);display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;flex:none}
.message-search-nav:disabled{opacity:.28}.message-search-nav:active:not(:disabled){background:var(--accent-light);color:var(--accent)}.message-search-nav svg{width:15px;height:15px}
.msg-row.message-search-hit .msg-bubble{padding:11px 14px;border-radius:var(--radius);font-size:13.5px;line-height:1.75;word-break:break-word;box-shadow:var(--shadow);font-family:system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;font-weight:400;font-synthesis:none}
.msg-row.message-search-current .msg-bubble{outline:2px solid var(--accent);outline-offset:4px;background:color-mix(in srgb,var(--accent-light) 48%,transparent)}
@media(max-width:420px){.message-search-bar{gap:3px}.message-search-nav{width:28px}.message-search-input{padding-right:52px}}


.sb-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.12);z-index:200;backdrop-filter:blur(2px)}
.sb-overlay.open{display:block}
.sidebar{position:fixed;left:0;top:0;bottom:0;width:280px;background:var(--bg);z-index:201;transform:translateX(-280px);transition:transform 0.28s cubic-bezier(0.22,1,0.36,1);display:flex;flex-direction:column;box-shadow:2px 0 20px rgba(0,0,0,0.04);will-change:transform}
.sidebar.open{transform:translateX(0)}
.sb-hdr{padding:20px 16px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.sb-hdr h2{font-size:13px;color:var(--text-m);font-weight:400}
.sb-new-wrap{position:relative;display:flex;align-items:stretch}.sb-new{background:var(--accent-light);color:var(--accent);border:0;padding:7px 10px;font-size:11px;cursor:pointer;font-weight:500}
.sb-new-main{border-radius:8px 0 0 8px}.sb-new-more{width:27px;border-left:1px solid color-mix(in srgb,var(--accent) 18%,transparent);border-radius:0 8px 8px 0;padding:0;display:grid;place-items:center}
.sb-new-more svg{width:12px;height:12px;transition:transform .16s}.sb-new-more.open svg{transform:rotate(180deg)}
.sb-new-menu{display:none;position:absolute;right:0;top:calc(100% + 7px);z-index:3;width:220px;padding:6px;background:rgba(255,255,255,.97);border:1px solid var(--border);border-radius:8px;box-shadow:0 14px 34px rgba(45,42,52,.16)}
.sb-new-menu.open{display:block}
.sb-new-option{width:100%;min-height:40px;border:0;border-radius:6px;background:transparent;color:var(--text);padding:7px 9px;display:flex;align-items:center;gap:9px;text-align:left;font:12px var(--font-cn)}
.sb-new-option:active{background:var(--accent-light)}.sb-new-option:disabled{opacity:.45}
.sb-new-option svg{width:15px;height:15px;flex:none;color:var(--accent)}
.sb-new-option-copy{min-width:0;flex:1}.sb-new-option-copy span,.sb-new-option-copy small{display:block}.sb-new-option-copy small{margin-top:2px;color:var(--text-l);font-size:9px}
.sb-new-divider{height:1px;background:var(--hairline);margin:4px 3px}
.sb-new-switch{width:34px;height:19px;position:relative;flex:none;border-radius:10px;background:#ddd;transition:.2s}
.sb-new-switch:before{content:'';position:absolute;width:15px;height:15px;left:2px;top:2px;border-radius:50%;background:white;box-shadow:0 1px 2px rgba(0,0,0,.12);transition:.2s}
.sb-new-switch.on{background:var(--accent)}.sb-new-switch.on:before{transform:translateX(15px)}


.sb-list{flex:1;overflow-y:auto;padding:8px}
.sb-item{padding:11px 14px;border-radius:11px;cursor:pointer;margin-bottom:3px;font-size:12.5px;color:var(--text-m);display:flex;align-items:center;gap:8px}
.sb-item.active{background:var(--accent-light);color:var(--accent)}
.sb-item .sb-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-item .sb-del{opacity:0;background:none;border:none;color:var(--text-l);cursor:pointer;padding:2px 6px}
.sb-item:hover .sb-del{opacity:0.6}
.sb-list::-webkit-scrollbar{width:2px}
.sb-list::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.06);border-radius:2px}
.sb-search{position:relative;padding:10px 12px 6px}.sb-search>svg{position:absolute;left:22px;top:19px;width:14px;height:14px;color:var(--text-l);pointer-events:none}
.sb-search input{width:100%;height:34px;box-sizing:border-box;border:1px solid var(--border);border-radius:7px;background:rgba(255,255,255,.62);padding:0 30px 0 32px;color:var(--text);font:12px var(--font-cn);outline:none}
.sb-search input::-webkit-search-cancel-button{display:none}.sb-search input:focus{border-color:var(--accent);background:white}.sb-search-clear{display:none;position:absolute;right:17px;top:15px;width:24px;height:24px;border:0;border-radius:6px;background:transparent;color:var(--text-l);padding:5px;align-items:center;justify-content:center}.sb-search-clear svg{display:block;width:14px;height:14px;pointer-events:none}.sb-search.has-value .sb-search-clear{display:flex}
.sb-item{min-height:48px;padding:7px 8px 7px 12px}
.sb-item-main{min-width:0;flex:1}.sb-item .sb-title{display:block}.sb-meta{display:block;margin-top:3px;font-size:9px;color:var(--text-l);font-variant-numeric:tabular-nums}
.sb-actions{display:flex;align-items:center;gap:1px;opacity:0;transition:opacity .15s}.sb-item:hover .sb-actions,.sb-item:focus-within .sb-actions{opacity:1}
.sb-action{width:27px;height:27px;border:0;border-radius:6px;background:transparent;color:var(--text-l);display:flex;align-items:center;justify-content:center;padding:0}.sb-action:active{background:var(--accent-light);color:var(--accent)}
.sb-action svg{width:13px;height:13px}.sb-action.pin.active{color:var(--accent)}.sb-action.delete:active{color:#d96868}
.sb-rename-input{width:100%;height:28px;box-sizing:border-box;border:1px solid var(--accent);border-radius:6px;background:white;color:var(--text);padding:0 7px;font:12px var(--font-cn);outline:none}
.sb-empty{padding:28px 16px;text-align:center;color:var(--text-l);font-size:11px}.sb-item.pinned .sb-title{font-weight:600;color:var(--text)}
.sb-group-label{padding:14px 13px 5px;color:var(--text-l);font-size:9px;font-weight:600;line-height:1;text-transform:uppercase;letter-spacing:0}.sb-group-label:first-child{padding-top:8px}
@media(max-width:700px){.sb-actions{opacity:1}.sb-item .sb-del{opacity:1}.sidebar{width:min(86vw,320px);transform:translateX(-100%)}.sb-action{width:30px;height:30px}}

.chat-messages{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;padding:20px max(16px,env(safe-area-inset-right)) 28px max(16px,env(safe-area-inset-left));overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scroll-padding-bottom:28px}
/* short chats do not need a flex spacer */
.chat-messages>.msg-row,.chat-messages>.empty-chat{width:100%;max-width:860px;margin-left:auto;margin-right:auto}
.chat-messages::-webkit-scrollbar{width:2px}
.chat-messages::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.04);border-radius:2px}
.scroll-nav{position:fixed;right:max(12px,env(safe-area-inset-right));bottom:120px;z-index:45;display:flex;flex-direction:column;gap:9px;pointer-events:none;transition:bottom .16s ease}
.scroll-nav-btn{width:36px;height:36px;border:1px solid var(--border);border-radius:50%;background:rgba(255,255,255,.92);color:var(--accent);box-shadow:0 5px 18px rgba(70,66,74,.12);display:grid;place-items:center;opacity:0;transform:translateX(8px);pointer-events:none;transition:opacity .2s,transform .2s;background-color .15s}
.scroll-nav-btn.show{opacity:1;transform:none;pointer-events:auto}
.scroll-nav-btn:active{transform:scale(.92);background:var(--accent-light)}
.scroll-nav-btn:disabled{opacity:.55;pointer-events:none}
.scroll-nav-btn svg{width:17px;height:17px}
@media(min-width:980px){.scroll-nav{right:max(20px,calc((100vw - 860px)/2 - 54px))}}
.empty-chat{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text-l);gap:8px}
.ec-icon{font-size:16px;opacity:0.3}.ec-text{font-size:11px;font-weight:300;letter-spacing:1px;opacity:0.6}

.proactive-center-event{position:fixed;left:50%;top:50%;z-index:10050;transform:translate(-50%,-50%) translateY(5px);width:max-content;max-width:calc(100% - 32px);margin:12px auto;padding:8px 14px;border:1px solid color-mix(in srgb,var(--accent) 25%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--bg) 88%,white);box-shadow:0 5px 20px rgba(80,65,80,.08);color:var(--text-m);font-size:11px;line-height:1.4;text-align:center;opacity:0;transition:opacity .2s,transform .2s;pointer-events:none}.proactive-center-event.show{opacity:.92;transform:translate(-50%,-50%)}.msg-row.grouped{margin-top:-12px;margin-bottom:12px}
.msg-row.grouped .msg-avatar{visibility:hidden}
.msg-row.grouped .msg-time:not(.sending):not(.failed){display:none}
.msg-row{display:flex;gap:10px;margin-bottom:20px;align-items:flex-start}
.msg-row.msg-fresh{animation:msgIn .32s var(--ease-smooth) both}
@keyframes msgIn{from{opacity:0;transform:translateY(10px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
.msg-row.user{flex-direction:row-reverse}
.msg-avatar{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:500;flex-shrink:0;overflow:hidden;position:relative}
.msg-avatar img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}
.msg-wrap{display:flex;flex-direction:column;max-width:76%;min-width:0;position:relative}
.msg-row.user .msg-wrap{align-items:flex-end}
.msg-bubble{padding:11px 14px;border-radius:var(--radius);font-size:13.5px;line-height:1.75;word-break:break-word;box-shadow:var(--shadow)}
.msg-bubble p,.msg-bubble li,.msg-bubble blockquote,.msg-bubble strong,.msg-bubble em{font-family:inherit}
.msg-row.user .msg-bubble{background:color-mix(in srgb,var(--user-bubble) 25%,transparent);color:var(--text);border-bottom-right-radius:5px}
.message-choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr));gap:8px;width:min(100%,520px);margin-top:10px}
.message-choice{min-height:40px;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--border));background:color-mix(in srgb,var(--surface) 82%,var(--accent-light));color:var(--text);font:500 12.5px/1.35 var(--font-cn);letter-spacing:0;padding:9px 12px;border-radius:8px;text-align:left;cursor:pointer;transition:background .15s,border-color .15s,opacity .15s}
.message-choice:hover:not(:disabled){background:var(--accent-light);border-color:color-mix(in srgb,var(--accent) 52%,var(--border))}
.message-choice:active:not(:disabled){transform:translateY(1px)}
.message-choice:disabled{cursor:default;opacity:.46}
.message-choice.selected{opacity:1;background:var(--accent-light);border-color:var(--accent)}
.message-choices.sending .message-choice:not(.selected){opacity:.35}
@media(max-width:430px){.message-choices{grid-template-columns:1fr;width:100%}.message-choice{min-height:42px}}

.msg-time.sending::before{content:'';display:inline-block;width:8px;height:8px;margin-right:5px;border:1px solid currentColor;border-top-color:transparent;border-radius:50%;animation:sendSpin .8s linear infinite}
.msg-time.failed{color:#d96868;opacity:.9}
.msg-time.interrupted{color:#b86d58;opacity:.9}
.stream-draft-actions{display:inline-flex;align-items:center;gap:5px;margin-left:7px;vertical-align:middle}
.stream-draft-btn{border:1px solid var(--border);background:transparent;color:var(--text-m);font:10px var(--font-cn);padding:2px 7px;border-radius:6px;cursor:pointer}
.stream-draft-btn.primary{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}
.stream-draft-btn:disabled{opacity:.45;cursor:default}
@keyframes sendSpin{to{transform:rotate(360deg)}}
.msg-meta{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:18px;margin-top:5px;padding:0 4px;color:var(--text-l)}
.msg-time{font-size:9.5px;color:inherit;font-weight:300;opacity:.68}.msg-no{font-size:9px;color:inherit;font-weight:400;opacity:.42;letter-spacing:.3px;margin-left:7px}
.msg-row.user .msg-meta{justify-content:flex-end}
.summary-record{display:flex;align-items:center;gap:8px;width:100%;margin:7px 0 2px;color:var(--text-l);font-size:10.5px;line-height:1;cursor:pointer;opacity:.78;border:0;background:transparent;padding:0}
.summary-record::before,.summary-record::after{content:'';height:1px;flex:1;background:var(--hairline)}
.summary-record svg{width:13px;height:13px;flex:none;color:#77736D}
.summary-record span{white-space:nowrap}
.summary-record:active{opacity:.5}
.msg-bubble p{margin:0 0 6px}.msg-bubble p:last-child{margin-bottom:0}
.sticker-only{background:none!important;box-shadow:none!important;padding:0!important;border:none!important;}
.sticker-only img{width:96px;height:96px;object-fit:contain;border-radius:8px;display:block;}
.sticker-msg{margin-bottom:6px!important;}
.msg-bubble code{background:rgba(0,0,0,0.03);padding:1.5px 4px;border-radius:4px;font-size:11.5px}
.msg-bubble pre{background:var(--surface);border-radius:10px;padding:12px;overflow-x:auto;margin:8px 0;border:1px solid var(--border)}
.msg-bubble pre code{background:none;padding:0;font-size:11.5px}
.msg-bubble img{max-width:220px;border-radius:12px;margin:6px 0;display:block}
.msg-row.assistant .msg-bubble{font-size:14px;line-height:1.78;color:var(--text)}
.msg-row.assistant .msg-bubble>p{margin:0 0 13px}.msg-row.assistant .msg-bubble>p:last-child{margin-bottom:0}
.msg-row.assistant .msg-bubble h1,.msg-row.assistant .msg-bubble h2,.msg-row.assistant .msg-bubble h3{line-height:1.4;margin:1.25em 0 .55em;font-weight:600;letter-spacing:0}
.msg-row.assistant .msg-bubble h1{font-size:1.28em}.msg-row.assistant .msg-bubble h2{font-size:1.16em}.msg-row.assistant .msg-bubble h3{font-size:1.06em}
.msg-row.assistant .msg-bubble ul,.msg-row.assistant .msg-bubble ol{padding-left:1.35em;margin:9px 0 13px}
.msg-row.assistant .msg-bubble li+li{margin-top:5px}
.msg-row.assistant .msg-bubble blockquote{margin:13px 0;padding:2px 0 2px 12px;border-left:2px solid var(--accent);color:var(--text-m)}
.msg-bubble pre{position:relative;padding:34px 13px 13px;margin:13px 0;border-radius:8px;background:var(--surface);border:1px solid var(--border)}
.code-head{position:absolute;top:0;left:0;right:0;height:28px;display:flex;align-items:center;justify-content:space-between;padding:0 8px 0 11px;border-bottom:1px solid var(--border);color:var(--text-l);font:10px ui-monospace,monospace}
.code-copy{width:25px;height:25px;border:0;background:transparent;color:var(--text-l);display:grid;place-items:center;border-radius:6px}
.code-copy:active{background:var(--accent-light)}.code-copy svg{width:14px;height:14px}
.msg-bubble pre code{font-size:12px;line-height:1.65;white-space:pre}
.msg-bubble table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;margin:12px 0;font-size:12.5px}
.msg-bubble th,.msg-bubble td{padding:7px 9px;border:1px solid var(--border);text-align:left}
.msg-bubble hr{border:0;border-top:1px solid var(--border);margin:18px 0}
.citation-cards{padding-top:4px;border-top:1px solid var(--hairline)}
@media(min-width:900px){.msg-row.assistant .msg-bubble{font-size:14.5px;line-height:1.8}}

.msg-bubble a{color:var(--accent)}.msg-bubble ul,.msg-bubble ol{padding-left:16px;margin:6px 0}
.msg-bubble blockquote{border-left:2px solid var(--border);padding-left:10px;color:var(--text-l);margin:6px 0}

.thinking-block{margin-bottom:8px}
.thinking-toggle{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;background:var(--accent-light);border:1px solid var(--border);border-radius:8px;cursor:pointer;font-size:10px;color:var(--text-l);user-select:none}
.thinking-toggle svg{width:9px;height:9px;transition:transform 0.2s}
.thinking-toggle.open svg{transform:rotate(90deg)}
.thinking-content{display:none;padding:10px 12px;margin-top:5px;background:var(--accent-light);border-radius:10px;font-size:11.5px;line-height:1.7;color:var(--text-m);max-height:40vh;overflow-y:auto;border:1px solid var(--border)}
.thinking-content.open{display:block}

.typing-dots{display:flex;gap:4px;padding:4px 0}.typing-dots span{width:5px;height:5px;background:var(--accent);border-radius:50%;animation:typDotBounce 1.25s ease-in-out infinite}.typing-dots span:nth-child(2){animation-delay:.16s}.typing-dots span:nth-child(3){animation-delay:.32s}
@keyframes bounce{0%,80%,100%{opacity:0.2;transform:scale(0.8)}40%{opacity:0.7;transform:scale(1)}}

.chat-input-area{padding:10px max(12px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));background:rgba(251,250,255,0.85);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border-top:1px solid var(--hairline);flex-shrink:0;position:relative}
.chat-input-area>.input-row,.chat-input-area>.sticker-panel{width:100%;max-width:860px;margin-left:auto;margin-right:auto}
.chat-input-wrap{flex:1;display:flex;align-items:flex-end;background:white;border:1px solid var(--border);border-radius:20px;padding:7px 12px}
.chat-input-wrap:focus-within{border-color:rgba(232,176,192,0.4)}
.chat-textarea{display:block;width:100%;border:none;outline:none;resize:none;font-size:14px;line-height:1.5;min-height:22px;max-height:100px;background:transparent;color:var(--text);font-family:system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;font-weight:400;font-synthesis:none;padding:2px 0}
.chat-textarea::placeholder{color:var(--text-l);font-family:system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;font-weight:300;font-synthesis:none;letter-spacing:0}
.img-btn{background:none;border:none;cursor:pointer;padding:3px;color:var(--text-l);display:flex;opacity:0.5}
.img-btn svg{width:17px;height:17px}
.send-btn{width:34px;height:34px;border-radius:50%;border:none;background:var(--accent);color:white;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;opacity:0.85}
.send-btn:active{transform:scale(0.88)}.send-btn:disabled{background:var(--surface);opacity:0.4}
.send-btn svg{width:14px;height:14px}
.img-preview{display:none;padding:8px 16px;border-top:1px solid var(--border);gap:8px;overflow-x:auto}.img-preview.show{display:flex}
.voice-recorder-panel{display:none;align-items:center;gap:9px;padding:8px 16px;border-top:1px solid var(--border);background:color-mix(in srgb,var(--bg) 92%,transparent);font-size:12px;color:var(--text-m)}.voice-recorder-panel.show{display:flex}.voice-recorder-panel canvas{height:32px;min-width:80px;flex:1}.voice-recorder-panel button{border:0;background:transparent;color:var(--text-m);padding:6px;cursor:pointer}.voice-recorder-panel button:last-child{color:var(--accent);font-weight:500}.voice-live-dot{width:7px;height:7px;border-radius:50%;background:#c94f5d;box-shadow:0 0 0 4px color-mix(in srgb,#c94f5d 18%,transparent);animation:voice-pulse 1.2s infinite}.input-tool-btn.recording{color:#c94f5d}
.msg-bubble:has(.voice-card):not(:has(>p:not(:empty))){padding:0;background:transparent;box-shadow:none}.chat-attachment-grid:has(.voice-card){width:100%}
@keyframes voice-pulse{50%{opacity:.45;transform:scale(.86)}}
@media(max-width:480px){.voice-message{min-width:min(245px,76vw)}.voice-message audio{min-width:120px;max-width:190px}.voice-recorder-panel{padding-inline:12px}}
.attachment-preview{width:128px;height:48px;flex:none;display:flex;align-items:center;gap:7px;padding:5px;border:1px solid var(--border);border-radius:7px;background:var(--surface);position:relative}
.attachment-thumb{width:36px;height:36px;border-radius:5px;object-fit:cover;background:var(--accent-light);display:grid;place-items:center;color:var(--accent);font-size:10px;font-weight:600;flex:none}
.attachment-copy{min-width:0;flex:1}.attachment-name{font-size:10px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.attachment-meta{font-size:9px;color:var(--text-l);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.attachment-progress{height:2px;margin-top:4px;border-radius:2px;background:var(--border);overflow:hidden}.attachment-progress span{display:block;height:100%;background:var(--accent);transition:width .15s linear}
.attachment-preview.error{border-color:#d96868}.attachment-preview.error .attachment-meta{color:#d96868}
.attachment-remove{position:absolute;right:2px;top:2px;width:18px;height:18px;border:0;background:rgba(255,255,255,.9);color:var(--text-m);display:grid;place-items:center;border-radius:50%;cursor:pointer;padding:0}
.attachment-remove svg{width:11px;height:11px}.attachment-retry{border:0;background:transparent;color:var(--accent);font:9px var(--font-cn);padding:2px 0;cursor:pointer;text-align:left}
.chat-attachment-grid{display:flex;flex-wrap:wrap;gap:7px;margin:5px 0}
.chat-attachment-image{display:block;max-width:min(240px,100%);max-height:300px;object-fit:contain;border-radius:7px}
.chat-file-link{display:flex;align-items:center;gap:8px;max-width:250px;padding:7px 9px;border:1px solid var(--border);border-radius:7px;color:var(--text);text-decoration:none;background:var(--surface)}
.chat-file-icon{width:28px;height:28px;display:grid;place-items:center;border-radius:5px;background:var(--accent-light);color:var(--accent);font-size:9px;font-weight:600}.chat-file-copy{min-width:0}.chat-file-name{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-file-meta{font-size:9px;color:var(--text-l);margin-top:2px}

/* ═══ MODAL ═══ */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.15);z-index:300;display:flex;align-items:flex-end;justify-content:center;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);opacity:0;pointer-events:none;transition:opacity .22s ease;visibility:hidden}
.modal-overlay.open{opacity:1;pointer-events:auto;visibility:visible}
.modal{background:var(--bg);border-radius:22px 22px 0 0;width:100%;max-width:480px;max-height:82vh;overflow-y:auto;overflow-x:hidden;padding:18px 20px 32px;box-shadow:0 -10px 40px rgba(0,0,0,0.08);animation:slideUp 0.26s cubic-bezier(.22,1,.36,1) both;will-change:transform}
@keyframes slideUp{from{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}
.modal-handle{width:36px;height:4px;background:var(--border);border-radius:4px;margin:0 auto 14px}
.modal-tabs{display:flex;gap:0;margin-bottom:16px;background:var(--accent-light);border-radius:10px;padding:3px;overflow-x:auto}
/* Profile page (Kelivo style) */
.modal.profile-page{max-width:520px;max-height:100vh;height:100dvh;border-radius:0;padding:0;background:var(--bg);display:flex;flex-direction:column;gap:0}
.profile-topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 8px}
.profile-back{background:none;border:none;cursor:pointer;color:var(--text-m);padding:6px;display:flex;align-items:center;border-radius:8px}
.profile-back:active{transform:scale(.92);opacity:.7}
.profile-topbar-emoji{font-size:20px;line-height:1;letter-spacing:2px}
.profile-tabs-wrap{padding:6px 14px 0}
.profile-tabs{margin-bottom:0!important;background:transparent!important;padding:0!important;gap:6px!important}
.profile-tabs .modal-tab{background:transparent;color:var(--text-l);padding:8px 14px;border-radius:16px;font-size:12.5px;font-weight:500;flex:none}
.profile-tabs .modal-tab.active{background:var(--accent-light);color:var(--accent);box-shadow:none}
.profile-card{margin:0 16px 16px;padding:14px;background:white;border-radius:20px;display:flex;align-items:center;gap:14px;box-shadow:0 2px 12px rgba(200,160,180,.08)}
.profile-avatar-wrap{position:relative;flex-shrink:0;cursor:pointer}
.profile-avatar{width:60px;height:60px;border-radius:50%;background:linear-gradient(135deg,var(--accent-light),var(--user-bubble));background-size:cover;background-position:center;border:2px solid white;box-shadow:0 2px 8px rgba(200,160,180,.15)}
.profile-avatar-edit{position:absolute;right:-2px;bottom:-2px;width:22px;height:22px;background:var(--accent);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 4px rgba(0,0,0,.1);border:2px solid white}
.profile-info{flex:1;min-width:0}
.profile-label{font-size:13.5px;font-weight:600;color:var(--text);margin-bottom:6px;font-family:var(--font-cn)}
.profile-name-box{background:var(--accent-light);border-radius:12px;padding:10px 14px}
.profile-name-input{width:100%;border:none;outline:none;background:transparent;font-size:13px;color:var(--text);font-family:var(--font-cn)}
.profile-page .tab-panel{padding:0 16px 24px}
.profile-page .modal-actions{padding:0 16px 16px}
.modal-tab{flex:1;padding:7px 4px;border:none;background:transparent;border-radius:8px;font-size:10.5px;color:var(--text-l);cursor:pointer;font-weight:500;white-space:nowrap;min-width:0}
.modal-tab.active{background:white;color:var(--text);box-shadow:0 1px 3px rgba(0,0,0,0.04)}
.tab-panel{display:none}.tab-panel.active{display:block}
.modal-overlay.settings-sub{z-index:410;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;align-items:stretch}
.modal-overlay.settings-sub .modal.profile-page{width:100%;max-width:none;height:100dvh;max-height:none;animation:settingsSubIn .28s cubic-bezier(.22,1,.36,1)}
.modal-overlay.settings-sub .profile-tabs-wrap,.modal-overlay.settings-sub .profile-card{display:none}
.modal-overlay.settings-sub.mine-sub .profile-tabs-wrap{display:block;margin:0;padding:8px 16px 0;border-bottom:1px solid var(--hairline);background:rgba(251,250,255,.82)}
.modal-overlay.settings-sub.mine-sub .profile-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0!important;margin:0;overflow:hidden;background:var(--accent-light);border-radius:10px}
.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab{display:none}.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab[data-tab="appearance"],.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab[data-tab="params"],.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab[data-tab="prompt"]{display:block}
.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab{width:100%;padding:8px 4px;border-radius:8px;text-align:center;justify-self:stretch}
.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab[data-tab="appearance"]{order:1}.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab[data-tab="params"]{order:2}.modal-overlay.settings-sub.mine-sub .profile-tabs .modal-tab[data-tab="prompt"]{order:3}
.modal-overlay.settings-sub .profile-topbar{height:calc(52px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 10px 0;border-bottom:1px solid var(--hairline);background:rgba(251,250,255,.82);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}
.modal-overlay.settings-sub .profile-topbar-emoji{font:500 15px var(--font-cn);letter-spacing:0;color:var(--text)}
.modal-overlay.settings-sub .tab-panel{flex:1;overflow-y:auto;padding:18px max(16px,env(safe-area-inset-right)) 28px max(16px,env(safe-area-inset-left));max-width:720px;width:100%;margin:0 auto}
.modal-overlay.settings-sub .modal-actions{flex:none;margin:0;padding:10px max(16px,env(safe-area-inset-right)) calc(10px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));border-top:1px solid var(--hairline);background:rgba(251,250,255,.9)}
.modal-overlay.settings-sub .btn-cancel{display:none}.modal-overlay.settings-sub .btn-save{max-width:720px;margin:0 auto}
@keyframes settingsSubIn{from{transform:translateX(24px);opacity:.72}to{transform:none;opacity:1}}
@media(prefers-reduced-motion:reduce){.modal-overlay.settings-sub .modal.profile-page{animation:none}}

.st-label{display:block;font-size:10px;color:var(--text-l);margin-bottom:5px;margin-top:14px;letter-spacing:0.4px;text-transform:uppercase;font-weight:500}
.st-label:first-child{margin-top:0}
.st-input,.st-textarea{width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:10px;font-size:12px;background:white;color:var(--text);outline:none;font-family:inherit}
.st-input:focus,.st-textarea:focus{border-color:rgba(232,176,192,0.4)}
.st-textarea{min-height:100px;resize:vertical;line-height:1.6}
.st-select{width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:10px;font-size:12px;background:white;color:var(--text);outline:none;font-family:inherit;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%23C4A0A8' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}

/* Provider cards */
.provider-list{margin-top:8px}
.provider-card{padding:10px 12px;border:1px solid var(--border);border-radius:12px;margin-bottom:8px;cursor:pointer;transition:all 0.15s;display:flex;align-items:center;gap:10px}
.provider-card.active{border-color:var(--accent);background:var(--accent-light)}
.provider-card:active{transform:scale(0.98)}
.prov-dot{width:8px;height:8px;border-radius:50%;background:var(--border);flex-shrink:0}
.provider-card.active .prov-dot{background:var(--accent)}
.prov-info{flex:1;min-width:0}
.prov-name{font-size:12px;font-weight:500;color:var(--text)}
.prov-url{font-size:10px;color:var(--text-l);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}
.prov-actions{display:flex;gap:4px}
.prov-actions button{background:none;border:none;color:var(--text-l);cursor:pointer;padding:4px;border-radius:6px}
.prov-actions button:active{transform:scale(0.94);opacity:0.7}
.add-provider-btn{width:100%;padding:10px;border:1px dashed var(--border);border-radius:12px;background:transparent;color:var(--text-l);font-size:11px;cursor:pointer;margin-top:6px}
.add-provider-btn:active{background:var(--accent-light)}

/* Provider form */
.prov-form{margin-top:10px;padding:12px;background:var(--accent-light);border-radius:12px}
.prov-form .st-label{margin-top:10px}.prov-form .st-label:first-child{margin-top:0}
.prov-form-actions{display:flex;gap:6px;margin-top:12px}
.prov-form-actions button{flex:1;padding:8px;border-radius:8px;font-size:11px;cursor:pointer;font-weight:500;border:none}
.prov-form-actions .pf-save{background:var(--accent);color:white}
.prov-form-actions .pf-cancel{background:white;color:var(--text-l);border:1px solid var(--border)}

/* Model select with fetch */
.model-row{display:flex;gap:6px;align-items:center;margin-top:8px}
.model-row select{flex:1}
.model-fetch{padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:white;color:var(--text-l);font-size:10px;cursor:pointer;white-space:nowrap}
.model-fetch:active{background:var(--accent-light);color:var(--accent)}

/* Theme grid */
.theme-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:8px}
.theme-card{border-radius:12px;padding:8px;border:2px solid var(--border);cursor:pointer;text-align:center}
.theme-card:active{transform:scale(0.96)}.theme-card.active{border-color:var(--accent)}
.theme-name{font-size:9.5px;color:var(--text-m);margin-top:5px}
.theme-dots{display:flex;gap:3px;justify-content:center}
.theme-dots span{width:11px;height:11px;border-radius:50%;border:1px solid rgba(0,0,0,0.05)}

.color-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.color-opt{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer}
.color-opt.active{border-color:var(--accent);transform:scale(1.15)}

.avatar-section{margin-top:8px;display:flex;align-items:center;gap:12px;padding:6px 0}
.contact-cfg-row{display:flex;gap:8px;align-items:center;margin-top:6px}
.av-circle{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:500;overflow:hidden;flex-shrink:0;border:1px solid var(--border);position:relative}
.av-circle img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}
.av-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.av-input{padding:6px 9px;border:1px solid var(--border);border-radius:8px;font-size:12px;background:white;outline:none;width:44px;text-align:center;font-family:inherit}
.av-btn{padding:6px 10px;border:1px solid var(--border);border-radius:8px;font-size:10px;background:white;color:var(--text-l);cursor:pointer;white-space:nowrap}
.av-btn:active{background:var(--accent-light);color:var(--accent)}

.modal-actions{display:flex;gap:8px;margin-top:18px}
.modal-actions button{flex:1;padding:10px;border-radius:12px;font-size:12px;font-weight:500;cursor:pointer;font-family:inherit}
.btn-save{background:var(--accent);color:white;border:none}
.btn-save:active{transform:scale(0.96)}
.btn-cancel{background:white;color:var(--text-l);border:1px solid var(--border)}

.toast{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) scale(0.9);background:rgba(74,63,66,0.85);color:white;padding:9px 20px;border-radius:18px;font-size:11px;z-index:999;display:none;backdrop-filter:blur(8px)}
.toast.show{display:block;transform:translate(-50%,-50%) scale(1)}

/* MCP Tab */
.mcp-server-card{display:flex;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid var(--border)}
.mcp-server-card:last-child{border-bottom:none}
.mcp-server-icon{width:36px;height:36px;border-radius:9px;background:var(--accent-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mcp-server-icon svg{width:16px;height:16px;color:var(--accent)}
.mcp-server-body{flex:1;min-width:0}
.mcp-server-name{font-size:13px;font-weight:500;color:var(--text)}
.mcp-server-meta{font-size:10.5px;color:var(--text-l);margin-top:2px;display:flex;align-items:center;gap:6px}
.mcp-server-badge{display:inline-block;padding:2px 7px;border-radius:10px;background:var(--accent-light);color:var(--accent);font-size:10px;font-weight:500}
.mcp-server-toggle{position:relative;width:38px;height:22px;flex-shrink:0}
.mcp-server-toggle input{opacity:0;width:0;height:0;position:absolute}
.mcp-server-toggle .mcp-tsl{position:absolute;inset:0;border-radius:11px;background:#ddd;transition:0.2s;cursor:pointer}
.mcp-server-toggle .mcp-tsl:before{content:'';position:absolute;width:18px;height:18px;left:2px;top:2px;border-radius:50%;background:white;transition:0.2s;box-shadow:0 1px 2px rgba(0,0,0,0.1)}
.mcp-server-toggle input:checked+.mcp-tsl{background:var(--accent)}
.mcp-server-toggle input:checked+.mcp-tsl:before{transform:translateX(16px)}
.mcp-server-del{font-size:14px;color:var(--text-l);cursor:pointer;padding:4px;opacity:0.5;transition:opacity 0.15s}
.mcp-server-del:hover{opacity:1;color:#c44}
.mcp-add-row{display:flex;gap:6px;align-items:center;padding:12px 0 4px}
.mcp-input{flex:1;font-size:11px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:transparent;outline:none;color:var(--text);min-width:0}
.mcp-input:focus{border-color:var(--accent)}
.mcp-input::placeholder{color:var(--text-l)}
.mcp-btn-add{width:32px;height:32px;border:none;border-radius:8px;background:var(--accent);color:white;font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mcp-headers-section{padding:4px 0 8px}
.mcp-header-item{display:flex;gap:6px;align-items:center;margin-bottom:6px}
.mcp-header-item .mcp-input{font-size:11px;padding:7px 9px}
.mcp-header-item .mcp-header-del{font-size:12px;color:var(--text-l);cursor:pointer;padding:4px;opacity:0.6}
.mcp-header-item .mcp-header-del:hover{opacity:1;color:#c44}
.mcp-add-header-btn{font-size:11px;color:var(--accent);background:none;border:none;cursor:pointer;padding:4px 0}
.mcp-tool-item{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:11.5px}
.tool-card{margin-bottom:6px;border-radius:10px;border:1px solid var(--border);overflow:hidden;font-size:11px}
.tool-card-hdr{display:flex;align-items:center;gap:6px;padding:6px 10px;background:var(--accent-light);cursor:pointer;user-select:none}
.tool-card-hdr .tc-icon{font-size:13px;flex-shrink:0}
.tool-card-hdr .tc-name{flex:1;font-weight:500;color:var(--text)}
.tool-card-hdr .tc-state{font-size:10px;color:var(--text-l);padding:2px 7px;border-radius:10px;background:rgba(0,0,0,0.05)}
.tool-card-hdr .tc-state.done{color:#4caf50}
.tool-card-hdr .tc-state.error{color:#e57373}
.tool-card-hdr .tc-arrow{font-size:10px;color:var(--text-l);transition:transform .2s}
.tool-card-hdr.open .tc-arrow{transform:rotate(90deg)}
.tool-card-body{display:none;padding:8px 10px;background:#fff;border-top:1px solid var(--border);max-height:220px;overflow-y:auto}
.tool-card-body.open{display:block}
.tool-card-section{margin-bottom:6px}
.tool-card-label{font-size:9.5px;font-weight:600;letter-spacing:.05em;color:var(--text-l);text-transform:uppercase;margin-bottom:3px}
.tool-card-value{font-size:11px;color:var(--text);word-break:break-all;white-space:pre-wrap;background:var(--accent-light);border-radius:6px;padding:4px 7px;max-height:80px;overflow-y:auto}
.tool-timeline{margin:2px 0 10px;color:var(--text-l);font-size:11px}
.tool-timeline-toggle{width:100%;min-height:30px;border:0;background:transparent;padding:3px 0;display:flex;align-items:center;gap:9px;color:inherit;font-family:inherit;text-align:left}
.tool-timeline-toggle svg{width:15px;height:15px;flex:none;opacity:.5}
.tool-timeline-summary{flex:1;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tool-timeline-arrow{transition:transform .2s ease}.tool-timeline.open .tool-timeline-arrow{transform:rotate(90deg)}
.tool-timeline-body{display:none;margin:2px 0 2px 7px;padding-left:15px;border-left:1px solid var(--border)}
.tool-timeline.open .tool-timeline-body{display:block}
.tool-timeline .tool-card{position:relative;margin:0;padding:5px 0 7px;border:0;border-radius:0;overflow:visible}
.tool-timeline .tool-card::before{content:'';position:absolute;left:-19px;top:13px;width:7px;height:7px;border-radius:50%;background:var(--text-l);opacity:.35}
.tool-timeline .tool-card-hdr{padding:2px 0;background:transparent}
.tool-timeline .tool-card-hdr .tc-icon{display:none}
.tool-timeline .tool-card-hdr .tc-state{padding:0;background:transparent}
.tool-timeline .tool-card-body{padding:7px 0 2px;background:transparent;border:0}
.tool-timeline.has-error .tool-timeline-summary{color:#d96868}
.tool-timeline.has-error .tool-card.error::before{background:#d96868;opacity:.8}
.tool-timeline-toggle:active{opacity:.72}

.citation-cards{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.citation-card{display:flex;flex-direction:column;gap:2px;padding:6px 9px;background:var(--accent-light);border:1px solid var(--border);border-radius:8px;font-size:10.5px;max-width:200px;cursor:pointer;text-decoration:none;transition:background .15s}
.citation-card:hover{background:var(--accent-light2,#f0e8ef)}
.citation-card .cc-num{font-size:9px;color:var(--text-l);font-weight:600}
.citation-card .cc-title{color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}
.citation-card .cc-url{color:var(--text-l);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}
.cite-ref{font-size:9px;color:var(--accent);font-weight:600;cursor:default;vertical-align:super;margin:0 1px}
.mcp-tool-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0}
.mcp-tool-name{color:var(--text);font-weight:400}
.mcp-tool-src{color:var(--text-l);font-size:10px}

.toggle-group{padding:8px 0}
.toggle-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-top:1px solid var(--border)}
.toggle{position:relative;width:40px;height:22px}
.toggle input{opacity:0;width:0;height:0;position:absolute}
.toggle-slider{position:absolute;inset:0;border-radius:11px;background:#ddd;transition:0.2s;cursor:pointer}
.toggle-slider:before{content:'';position:absolute;width:18px;height:18px;left:2px;top:2px;border-radius:50%;background:white;transition:0.2s;box-shadow:0 1px 2px rgba(0,0,0,0.1)}
.toggle input:checked+.toggle-slider{background:var(--accent)}
.toggle input:checked+.toggle-slider:before{transform:translateX(18px)}


.bg-upload-row{display:flex;align-items:center;gap:8px;margin-top:8px}
.bg-upload-btn{font-size:11px;padding:5px 12px;border-radius:8px;background:var(--accent-light);color:var(--accent);cursor:pointer;font-weight:500}
.bg-clear-btn{font-size:11px;color:#c88;cursor:pointer}
.bg-preview{width:60px;height:100px;border-radius:8px;object-fit:cover}
.bg-opacity-row{display:flex;align-items:center;gap:8px;margin-top:8px}
.bg-opacity-row input[type=range]{flex:1;accent-color:var(--accent)}

.chat-input-card{width:100%;box-sizing:border-box;background:white;border-radius:var(--radius);border:1px solid var(--border);padding:10px 14px}
.input-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px}
.input-tools-left{display:flex;align-items:center;gap:6px}
.input-tools-right{display:flex;align-items:center;gap:10px}
.input-tool-btn{width:32px;height:32px;border-radius:50%;background:var(--accent-light);border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text-m)}
.input-tool-btn:active{transform:scale(0.9)}
.input-tool-btn svg{width:16px;height:16px}
.input-tool-btn.active{background:var(--accent);color:white}
.input-model-btn{display:flex;align-items:center;background:var(--accent-light);border:none;border-radius:12px;padding:5px 10px;cursor:pointer;font-size:11px;font-weight:500;color:var(--text-m)}
.chat-input-card{position:relative}
.input-model-btn{max-width:132px;min-width:54px;height:32px;overflow:hidden}
.input-model-btn span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.composer-tools-menu{display:none;position:absolute;left:8px;bottom:48px;z-index:80;width:218px;padding:6px;background:rgba(255,255,255,.96);border:1px solid var(--border);border-radius:8px;box-shadow:0 16px 38px rgba(45,42,52,.16);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}
.composer-tools-menu.open{display:block;animation:contextIn .16s var(--ease-smooth)}
.composer-tool-item{width:100%;height:42px;border:0;border-radius:7px;background:transparent;padding:0 10px;display:flex;align-items:center;gap:10px;color:var(--text);font:12.5px var(--font-cn);text-align:left}
.composer-tool-item:active{background:var(--accent-light)}
.composer-tool-item svg{width:17px;height:17px;flex:none;color:var(--text-m)}
.composer-tool-item span{flex:1}.composer-tool-item small{font-size:10px;color:var(--text-l)}
.composer-tool-item.active small{color:var(--accent);font-weight:600}
#composerToolsBtn.active{background:var(--accent);color:white}
.context-status{margin-top:8px;border-top:1px solid var(--hairline);color:var(--text-l)}
.context-status-toggle{width:100%;min-height:26px;padding:5px 0 0;border:0;background:transparent;color:inherit;display:flex;align-items:center;gap:7px;font:10.5px var(--font-cn);text-align:left;cursor:pointer}
.context-status-toggle svg{width:13px;height:13px;flex:none;transition:transform .18s ease}.context-status.open .context-status-toggle svg{transform:rotate(90deg)}
.context-status-main{min-width:0;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.context-status-level{font-size:9px;white-space:nowrap}
.context-status.warning .context-status-main,.context-status.warning .context-status-level{color:#b86d58}.context-status.danger .context-status-main,.context-status.danger .context-status-level{color:#c44}
.context-status-body{display:none;padding:7px 0 2px;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 12px;font-size:10px;line-height:1.45}.context-status.open .context-status-body{display:grid}
.context-status-item{min-width:0}.context-status-item span{display:block;color:var(--text-l)}.context-status-item strong{display:block;color:var(--text-m);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.turn-context-record{border:0;background:transparent;margin-right:10px;padding:1px 0 1px 8px;color:#9b6078;font:500 9.5px/1.3 var(--font-cn);letter-spacing:0;cursor:pointer;text-align:right}.turn-context-record:hover,.turn-context-record:active{color:#713f55}
.turn-context-detail{display:grid;align-self:flex-end;grid-template-columns:repeat(2,minmax(0,1fr));width:min(292px,calc(100vw - 88px));gap:8px 18px;margin:5px 0 0;padding:11px 12px;border:1px solid rgba(220,174,190,.42);border-radius:8px;background:rgba(255,246,249,.98);box-shadow:0 5px 18px rgba(170,110,135,.08);font:400 10px/1.45 var(--font-cn);letter-spacing:0;color:#8d6875}.turn-context-detail div{display:flex;justify-content:space-between;gap:10px}.turn-context-detail strong{color:#684d57;font-weight:550}.turn-context-detail small{grid-column:1/-1;color:#b18494;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msg-row.user .turn-context-record{display:none}
@media(max-width:430px){.context-status-body{grid-template-columns:1fr 1fr}}
@media(max-width:430px){.input-model-btn{max-width:92px;padding:5px 8px}.composer-tools-menu{left:4px}}

.stop-btn{display:none;width:34px;height:34px;border-radius:50%;border:2px solid var(--accent);background:transparent;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}
.stop-btn.show{display:flex}
.sticker-panel{background:white;border-top:1px solid var(--border);padding:8px}
.sticker-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;padding:8px;max-height:180px;overflow-y:auto}
.sticker-grid img{width:100%;aspect-ratio:1;object-fit:contain;cursor:pointer;border-radius:6px}
#searchToggle,#toolsToggle{position:relative}
.search-badge{position:absolute;bottom:-2px;right:-2px;font-size:8px;font-weight:700;background:var(--accent);color:white;border-radius:4px;padding:1px 3px;line-height:1}
@media(max-width:430px){
  .input-tools-left{gap:4px;min-width:0}
  .input-tools-right{gap:6px;flex-shrink:0}
}

.msg-row.assistant .msg-wrap{max-width:100%}



.msg-act-btn{border:none;background:var(--accent-light);border-radius:12px;padding:4px 8px;font-size:10px;color:var(--text-m);cursor:pointer;display:flex;align-items:center;gap:3px}
.msg-act-btn svg{width:11px;height:11px}
.msg-act-btn:active{background:var(--accent);color:white}

input[type="checkbox"]{accent-color:var(--accent)}

.param-group{margin-bottom:14px}
.param-header{display:flex;justify-content:space-between;align-items:center}
.param-val{font-size:12px;color:var(--accent);font-weight:500}
.param-slider{width:100%;margin-top:6px;accent-color:var(--accent);height:4px}
.toggle-group{padding:8px 0}
.toggle-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-top:1px solid var(--border)}
.toggle{position:relative;width:40px;height:22px;flex-shrink:0}
.toggle input{opacity:0;width:0;height:0;position:absolute}
.toggle-slider{position:absolute;inset:0;border-radius:11px;background:#ddd;transition:0.2s;cursor:pointer}
.toggle-slider:before{content:'';position:absolute;width:18px;height:18px;left:2px;top:2px;border-radius:50%;background:white;transition:0.2s;box-shadow:0 1px 2px rgba(0,0,0,0.1)}
.toggle input:checked+.toggle-slider{background:var(--accent)}
.toggle input:checked+.toggle-slider:before{transform:translateX(18px)}

.reply-btn{height:30px;padding:0 10px;border-radius:15px;border:1.5px solid var(--accent);background:transparent;color:var(--accent);font-size:11px;font-weight:500;cursor:pointer;font-family:inherit}
.reply-btn:active{background:var(--accent);color:white}

/* Message action buttons */
.msg-actions{display:flex;align-items:center;gap:10px;margin-top:8px;padding:0 4px;opacity:0;max-height:0;overflow:hidden;transition:opacity .2s,max-height .2s}
.msg-row.msg-active .msg-actions{opacity:.62;max-height:40px}
.msg-row.msg-active .msg-actions:hover{opacity:1}




.msg-act-btn{width:25px;height:25px;border:none;background:transparent;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text)}
.msg-act-btn svg{width:16px;height:16px}
 .msg-act-btn:active{transform:scale(0.85)}
.reaction-bar{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;padding:0 3px}
.reaction-chip{border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:2px 7px;font-size:13px;line-height:18px;cursor:pointer;color:var(--text)}
.reaction-chip.active{border-color:var(--accent);background:var(--accent-light)}
.reaction-picker{display:none}
.interaction-event{width:max-content;max-width:calc(100% - 32px);margin:8px auto 18px;padding:3px 10px;color:var(--text-l);font-size:10.5px;line-height:1.4;text-align:center;display:flex;align-items:center;gap:5px}.interaction-recall{width:20px;height:20px;border:0;background:transparent;color:var(--text-l);padding:3px;opacity:.55;cursor:pointer}.interaction-recall svg{width:13px;height:13px}.interaction-recall:active{color:var(--accent);opacity:1}
.avatar-poke{position:absolute;inset:-5px;border:0;background:transparent;border-radius:50%;padding:0;cursor:pointer;opacity:.01;transition:opacity .15s}.msg-avatar:hover .avatar-poke,.msg-avatar:focus-within .avatar-poke{opacity:1;background:color-mix(in srgb,var(--accent-light) 78%,transparent)}.avatar-poke svg{width:15px;height:15px;color:var(--accent)}
.sticker-reaction-tools{display:flex;align-items:center;gap:4px;padding:6px 8px;border-bottom:1px solid var(--hairline)}.sticker-mode-btn{height:28px;display:flex;align-items:center;gap:5px;padding:0 9px;border:0;border-radius:7px;background:transparent;color:var(--text-l);font:11px var(--font-cn);cursor:pointer}.sticker-mode-btn svg{width:14px;height:14px;flex:none}.sticker-mode-btn.active{background:var(--accent-light);color:var(--accent)}.sticker-mode-btn:disabled{opacity:.34;cursor:default}.reaction-chip img{width:22px;height:22px;object-fit:contain;vertical-align:middle}.reaction-chip{display:inline-flex;align-items:center;gap:3px}
.poke-note{font-size:11px;color:var(--accent);margin-top:5px;opacity:0;transform:translateY(3px);transition:.18s}.poke-note.show{opacity:1;transform:translateY(0)}
.msg-row.poke-flash .msg-bubble{animation:poke-flash .48s ease}
@keyframes poke-flash{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}50%{transform:translateX(4px)}75%{transform:translateX(-2px)}}
.msg-variant{display:flex;align-items:center;gap:8px;margin-left:auto;font-size:12px;color:var(--text-l)}
.msg-var-btn{width:24px;height:24px;border:none;background:transparent;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer}
.msg-more-menu{display:none;flex-direction:column;background:white;border:1px solid var(--border);border-radius:16px;padding:6px;box-shadow:0 8px 24px rgba(0,0,0,0.12);position:fixed;width:140px;z-index:9999;gap:2px}
.msg-context-layer{position:fixed;inset:0;z-index:10000;background:rgba(25,24,28,.12);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.msg-context-menu{position:fixed;z-index:10001;width:176px;padding:6px;background:rgba(255,255,255,.96);border:1px solid var(--border);border-radius:14px;box-shadow:0 18px 46px rgba(45,42,52,.18);transform-origin:center;animation:contextIn .16s var(--ease-smooth)}
.msg-context-item{width:100%;height:42px;padding:0 12px;border:0;border-radius:9px;background:transparent;color:var(--text);font:13px var(--font-cn);display:flex;align-items:center;gap:10px;text-align:left}
.msg-context-item:active{background:var(--accent-light)}
.msg-context-item svg{width:17px;height:17px;color:var(--text-m);flex:none}
.msg-context-item.danger{color:#d96868}
@keyframes contextIn{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
@media(prefers-reduced-motion:reduce){.msg-context-menu{animation:none}}

.msg-more-item{display:flex;align-items:center;gap:8px;padding:10px 12px;border:none;background:transparent;border-radius:10px;font-size:13px;color:var(--text);cursor:pointer;width:100%;text-align:left;font-family:var(--font-cn)}
.msg-more-item:active{background:var(--accent-light)}
.msg-more-del{color:#E05C5C}
.msg-var-btn svg{width:12px;height:12px;color:var(--text-l)}
.msg-var-num{font-weight:600;font-variant-numeric:tabular-nums;font-size:12px}

/* Thinking block - Grace template style */
.thinking-toggle{display:flex;align-items:center;gap:9px;width:100%;min-height:28px;border:none;background:transparent;padding:3px 0;cursor:pointer;font-family:inherit;text-align:left;-webkit-tap-highlight-color:transparent;color:inherit}
.thinking-toggle .think-icon{width:15px;height:15px;flex:none;opacity:0.55;color:var(--text-l)}
.thinking-toggle .think-summary{flex:1;font-size:12.5px;color:var(--text-l);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal}
.thinking-toggle .think-arrow{width:14px;height:14px;flex:none;opacity:0.4;color:var(--text-l)}
.thinking-content{display:none}
@keyframes thinkPulse{0%,100%{opacity:0.4}50%{opacity:1}}
.thinking-toggle.streaming .think-icon{animation:thinkPulse 1.4s ease-in-out infinite}
.thinking-toggle.streaming .think-summary{font-style:italic}
.thinking-toggle.finished .think-icon{opacity:.42}
.thinking-toggle:active{opacity:.72}

/* Thinking process bottom sheet */
.think-sheet-overlay{position:fixed;inset:0;z-index:900;background:rgba(0,0,0,0);pointer-events:none;transition:background 0.2s}
.think-sheet-overlay.open{background:rgba(0,0,0,.22);pointer-events:auto}
.thinking-sheet{position:fixed;bottom:0;left:0;right:0;height:56dvh;max-height:92dvh;z-index:901;background:rgba(255,255,255,.97);backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);border-radius:18px 18px 0 0;transform:translate3d(0,100%,0);transition:transform .32s cubic-bezier(.2,.8,.2,1),height .32s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column;box-shadow:0 -8px 30px rgba(0,0,0,.12);will-change:transform;contain:layout paint;backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden}
.thinking-sheet.open{transform:translate3d(0,0,0)}
.thinking-sheet.expanded{height:92dvh}
.thinking-sheet.dragging{transition:none;user-select:none;backdrop-filter:none;-webkit-backdrop-filter:none}
.think-sheet-grab{height:24px;display:flex;align-items:center;justify-content:center;flex:none;touch-action:none;cursor:ns-resize}
.think-sheet-grab span{width:36px;height:5px;border-radius:3px;background:rgba(72,69,62,.22)}
.thinking-sheet .think-sheet-hdr{display:flex;align-items:center;padding:0 20px 12px;flex:none;background:transparent;z-index:2}
.think-sheet-close{width:36px;height:36px;border-radius:50%;border:1px solid rgba(0,0,0,0.08);background:#FFF;color:#48453E;-webkit-appearance:none;appearance:none;box-shadow:0 1px 4px rgba(0,0,0,0.06);display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none}
.think-sheet-title{flex:1;text-align:center;font-size:17px;font-weight:600;color:var(--text);letter-spacing:0}
.think-sheet-hdr-spacer{width:36px;flex:none}
.thinking-sheet .think-sheet-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:0 24px calc(28px + env(safe-area-inset-bottom));font-size:15px;line-height:1.8;color:var(--text);white-space:pre-wrap;word-break:break-word}
body.think-sheet-open{overflow:hidden}
.daily-memory-list{display:flex;flex-direction:column;gap:0}
.daily-memory-day{padding:16px 0 6px;font-size:12px;font-weight:600;color:var(--text)}
.daily-memory-card .daily-memory-action:nth-child(n+2){display:none}
.daily-memory-card{padding:13px 0;border-top:1px solid var(--hairline)}
.daily-memory-card.fading{opacity:.48;filter:blur(.2px)}
.daily-memory-text{font-size:14px;line-height:1.8;white-space:pre-wrap;word-break:break-word}
.daily-memory-actions{display:flex;justify-content:flex-end;gap:6px;margin-top:8px}
.daily-memory-action{width:34px;height:32px;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--text-m);display:grid;place-items:center}
.daily-memory-action svg{width:15px;height:15px}
.daily-memory-action.on{background:var(--accent-light);color:var(--accent)}
.daily-memory-empty{padding:54px 0;text-align:center;color:var(--text-l);font-size:13px}
.daily-memory-note{padding:0 0 12px;color:var(--text-l);font-size:11px;line-height:1.6}


.msg-edit-bar{display:flex;gap:10px;justify-content:flex-end;margin-top:10px;padding:0 4px}
.reply-preview{display:none;align-items:center;gap:10px;margin:0 2px 8px;padding:8px 10px;border-left:3px solid var(--accent);background:var(--accent-light);border-radius:4px 7px 7px 4px;min-width:0}
.reply-preview.show{display:flex}
.reply-preview-copy{min-width:0;flex:1}
.reply-preview-name{font-size:11px;font-weight:600;color:var(--accent);margin-bottom:2px}
.reply-preview-text{font-size:11px;color:var(--text-m);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reply-preview-close,.msg-retry-btn{border:0;background:transparent;color:var(--text-l);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.reply-preview-close{width:26px;height:26px;flex:none}.reply-preview-close svg{width:15px;height:15px}
.msg-retry-btn{gap:4px;margin-left:5px;padding:1px 4px;font:10px var(--font-cn);color:#d96868}.msg-retry-btn svg{width:11px;height:11px}
.msg-edit-area{display:block;width:100%;min-height:84px;max-height:240px;resize:vertical;border:1px solid var(--border);border-radius:7px;background:rgba(255,255,255,.72);color:var(--text);padding:9px 10px;font:14px/1.65 var(--font-cn);outline:none;box-sizing:border-box}.msg-edit-area:focus{border-color:var(--accent)}
.msg-edit-btn{padding:8px 18px;border:none;border-radius:18px;font-size:13px;font-family:inherit;cursor:pointer;font-weight:500;font-family:inherit}
.msg-edit-btn.cancel{background:transparent;border:1px solid var(--border);color:var(--text-l)}
.msg-edit-btn.save{background:var(--accent);color:white;border:none}
.msg-edit-btn:active{transform:scale(0.95)}
.reply-btn{display:flex;align-items:center;justify-content:center;height:32px;padding:0 14px;border-radius:16px;border:1.5px solid var(--accent);background:transparent;color:var(--accent);font-size:12px;font-weight:600;cursor:pointer;font-family:inherit}
body.is-streaming .send-btn,body.is-streaming .reply-btn{display:none!important}
body:not(.is-streaming) #stopBtn{display:none!important}
body.is-streaming #stopBtn{display:flex!important}
.reply-btn:active{background:var(--accent);color:white;transform:scale(0.95)}

/* ── Model Pick Button ── */
.model-pick-btn{width:100%;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:var(--card,#fff);border:1px solid var(--border);border-radius:14px;font-size:13px;color:var(--text);cursor:pointer;text-align:left;font-family:inherit;margin-top:2px}
.model-pick-btn:active{opacity:.7}

/* ── Model Sheet ── */
.ms-overlay{display:none;position:fixed;inset:0;z-index:430;background:rgba(0,0,0,.4)}
.ms-sheet{position:fixed;left:0;right:0;bottom:0;z-index:431;background:#fff;border-radius:20px 20px 0 0;display:flex;flex-direction:column;transform:translateY(100%);transition:transform .28s cubic-bezier(.22,1,.36,1);max-height:80dvh;box-shadow:0 -4px 24px rgba(0,0,0,.12);will-change:transform;backface-visibility:hidden;-webkit-backface-visibility:hidden;visibility:hidden}
.ms-sheet.ms-open{visibility:visible}
.ms-sheet.ms-show{transform:translateY(0)}
.ms-handle{width:36px;height:4px;background:var(--border);border-radius:2px;margin:10px auto 0;flex-shrink:0}
.ms-head{display:grid;grid-template-columns:36px 1fr 36px;align-items:center;padding:8px 16px 6px;flex-shrink:0}
.ms-title{text-align:center;font-size:15px;font-weight:500;color:var(--text)}
.ms-close{border:none;background:none;font-size:22px;color:var(--text-l);cursor:pointer;padding:0;line-height:1;text-align:left}
.ms-actions{display:flex;gap:8px;padding:4px 16px 8px;flex-shrink:0}
.ms-btn{flex:1;padding:8px 4px;border-radius:10px;border:1px solid var(--border);background:none;color:var(--text-l);font-size:12px;cursor:pointer;font-family:inherit}
.ms-btn:disabled{opacity:.55;cursor:default}
.ms-btn-add{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}
.ms-status{min-height:20px;padding:0 18px 6px;color:var(--text-l);font-size:11px;line-height:1.4;text-align:center;flex:none}
.ms-status.loading{color:var(--accent)}
.ms-status.error{color:#c55}
.ms-input-row{display:none;gap:8px;padding:0 16px 8px;flex-shrink:0}
.ms-input-row.ms-input-open{display:flex}
.ms-input{flex:1;padding:8px 12px;border-radius:10px;border:1px solid var(--border);background:none;font-size:13px;color:var(--text);outline:none;font-family:inherit}
.ms-confirm{padding:8px 14px;border-radius:10px;border:none;background:var(--accent);color:#fff;font-size:13px;cursor:pointer;white-space:nowrap;font-family:inherit}
.ms-body{flex:1;overflow-y:auto;padding:4px 12px 24px}
.ms-model-item{display:flex;align-items:center;gap:10px;padding:11px 4px;border-bottom:1px solid var(--border);cursor:pointer}
.ms-model-item:last-child{border-bottom:none}
.ms-model-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--border)}
.ms-model-dot.active{background:var(--accent)}
.ms-model-name{flex:1;font-size:13px;color:var(--text);word-break:break-all}
.ms-model-name.active{color:var(--accent);font-weight:500}
.ms-model-check{color:var(--accent);font-size:14px;font-weight:600;flex-shrink:0}

/* ══════════════════════════════
   全屏设置页 CSS
   ══════════════════════════════ */

.sp-panel{
  position:fixed;inset:0;z-index:400;
  pointer-events:none;
  transform:translateX(100%);
  opacity:0;
  transition:transform .34s cubic-bezier(.22,1,.36,1), opacity .26s ease;
  will-change:transform;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  height:100dvh;
}
.sp-panel.sp-open{
  transform:translateX(0);opacity:1;pointer-events:auto;
}
.sp-page{
  position:absolute;inset:0;
  display:flex;flex-direction:column;
  background:var(--bg,#FBFAFF);
  overflow:hidden;
  min-height:0;
}

/* 顶栏 */
.sp-topbar{
  flex:0 0 auto;
  display:flex;align-items:center;
  height:calc(52px + env(safe-area-inset-top));
  padding:env(safe-area-inset-top) 10px 0;
  border-bottom:1px solid var(--hairline,rgba(165,172,191,.1));
  background:rgba(251,250,255,.82);
  backdrop-filter:blur(24px);
  -webkit-backdrop-filter:blur(24px);
}
.sp-back-btn{
  width:40px;height:40px;flex:none;
  border:0;border-radius:50%;padding:0;
  background:transparent;color:var(--text,#5F5F5F);
  display:grid;place-items:center;cursor:pointer;
  transition:transform .15s ease;
}
.sp-back-btn:active{ transform:scale(.88); }
.sp-back-btn svg{ width:22px;height:22px;display:block; }
.sp-topbar-title{
  flex:1;text-align:center;
  font-size:15px;font-weight:500;
  color:var(--text,#5F5F5F);
}
.sp-topbar-spacer{ width:40px;flex:none; }

/* 滚动区 */
.sp-scroll{
  flex:1 1 auto;
  min-height:0;
  min-width:0;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  padding:20px 16px calc(40px + env(safe-area-inset-bottom));
  display:flex;flex-direction:column;gap:16px;
}
.sp-scroll > *{ flex:0 0 auto; }
.sp-scroll::-webkit-scrollbar{ display:none; }

/* 身份区：头像 + 名字居中 */
.sp-identity{
  display:flex;flex-direction:column;align-items:center;gap:14px;
  padding:12px 0 4px;
}
.sp-avatar-wrap{
  position:relative;flex-shrink:0;cursor:pointer;
}
.sp-avatar{
  width:80px;height:80px;border-radius:50%;
  background:linear-gradient(135deg,var(--accent-light,#F1EEF5),var(--user-bubble,#EDE6EE));
  background-size:cover;background-position:center;
  box-shadow:0 8px 24px rgba(149,164,193,.2);
  display:block;overflow:hidden;
}
.sp-avatar-edit{
  position:absolute;right:1px;bottom:1px;
  width:24px;height:24px;
  background:var(--accent,#B5A3C4);
  border-radius:50%;display:grid;place-items:center;
  border:2px solid var(--bg,#FBFAFF);
}
.sp-avatar-edit svg{ width:12px;height:12px;display:block; }
.sp-name-col{ display:flex;flex-direction:column;align-items:center;width:100%; }
.sp-name-input{
  border:0;outline:none;
  background:transparent;
  padding:4px 12px;
  font-size:22px;font-weight:500;
  color:var(--text,#5F5F5F);
  text-align:center;font-family:inherit;
  width:auto;max-width:80%;
}
.sp-name-input::placeholder{ color:var(--text-l,#A2A1A4); }

/* 分组卡片 */
.sp-card{
  background:rgba(255,255,255,.72);
  border:1px solid var(--border,rgba(165,172,191,.16));
  border-radius:18px;
  overflow:hidden;
  box-shadow:0 2px 12px rgba(149,164,193,.08);
}
.sp-data-note{padding:12px 14px;color:var(--text-l);font-size:11px;line-height:1.6}
.sp-data-actions{padding:0 14px 14px}.sp-data-button{width:100%;height:42px;border:1px solid var(--border);border-radius:7px;background:transparent;color:var(--text);font:13px var(--font-cn);cursor:pointer}
.sp-data-button.danger{color:#c55;border-color:rgba(204,85,85,.22)}.sp-data-button:active{background:var(--accent-light)}
.sp-data-page{display:none}.sp-data-page.open{display:flex;z-index:2;animation:settingsSubIn .28s cubic-bezier(.22,1,.36,1)}
.sp-data-value{font-size:12px;color:var(--text-l);margin-right:2px}

/* 行入口 */
.sp-row{
  display:flex;align-items:center;gap:13px;
  width:100%;text-align:left;
  background:transparent;border:0;
  padding:15px 18px;
  color:var(--text,#5F5F5F);font:inherit;cursor:pointer;
  transition:background .15s ease;
}
.sp-row + .sp-row{
  border-top:1px solid var(--hairline,rgba(165,172,191,.1));
}
.sp-row:active{ background:rgba(165,172,191,.1); }
.sp-row-icon{
  width:32px;height:32px;flex:none;border-radius:9px;
  background:var(--accent-light,#F1EEF5);
  display:grid;place-items:center;
  color:var(--accent,#B5A3C4);
}
.sp-row-icon svg{ width:17px;height:17px;display:block; }
.sp-row-label{
  flex:1;
  font-size:15px;font-weight:500;
  color:var(--text,#5F5F5F);
}
.sp-row-value{
  font-size:12.5px;color:var(--text-l,#A2A1A4);
  margin-right:2px;
}
.sp-chevron{
  flex:none;color:var(--text-l,#A2A1A4);
  display:grid;place-items:center;
}
.sp-chevron svg{ width:15px;height:15px;display:block; }
/* Voice messages */
.chat-attachment-grid{display:flex;flex-direction:column;gap:8px;margin-top:8px;min-width:0}.msg-bubble>.chat-attachment-grid:first-child{margin-top:0}
.voice-card{--voice-progress:0%;width:min(310px,66vw);min-width:230px;color:var(--text);font-family:var(--font-cn);letter-spacing:0}
.voice-player{display:grid;grid-template-columns:38px minmax(0,1fr) 36px;align-items:center;gap:9px;min-height:48px}.voice-player audio{display:none}
.voice-play{width:38px;height:38px;border:0;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:white;background:var(--accent);box-shadow:0 3px 10px color-mix(in srgb,var(--accent) 25%,transparent);transition:transform .15s;flex:none}.voice-play:active{transform:scale(.94)}
.voice-play:focus-visible,.voice-wave:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 58%,white);outline-offset:2px}
.voice-play svg{width:17px;height:17px;fill:currentColor;display:block}.voice-icon-play{margin-left:2px}.voice-icon-pause{display:none!important}.voice-card.playing .voice-icon-play{display:none}.voice-card.playing .voice-icon-pause{display:block!important;margin:0}
.voice-wave{position:relative;height:34px;min-width:0;cursor:pointer;overflow:hidden;touch-action:none}.voice-wave-base,.voice-wave-fill{position:absolute;inset:0;display:flex;align-items:center;gap:2px}
.voice-wave i{display:block;flex:1 1 0;min-width:1px;height:calc(4px + var(--voice-level)*24px);max-height:28px;border-radius:2px;background:color-mix(in srgb,var(--text-l) 56%,transparent)}
.voice-wave-fill{z-index:1;clip-path:inset(0 calc(100% - var(--voice-progress)) 0 0)}.voice-wave-fill i{background:var(--accent)}
.voice-duration{font:500 11px/1 var(--font-en);font-variant-numeric:tabular-nums;color:var(--text-l);text-align:right;white-space:nowrap}
.voice-transcript-text{margin:7px 0 1px 47px;padding:9px 11px;border-left:2px solid color-mix(in srgb,var(--accent) 45%,transparent);background:color-mix(in srgb,var(--surface) 70%,transparent);border-radius:0 6px 6px 0;color:var(--text-m);font-size:12.5px;line-height:1.65;letter-spacing:0}
.voice-transcript-text>span:first-child{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;white-space:pre-wrap}.voice-transcript-text.open>span:first-child{-webkit-line-clamp:unset;display:block}.voice-more{display:inline-block;margin-top:4px;color:var(--accent);font-size:11px;cursor:pointer}
.msg-row.user .voice-play{background:color-mix(in srgb,var(--accent) 82%,var(--text) 18%)}.msg-row.user .voice-wave-fill i{background:color-mix(in srgb,var(--accent) 82%,var(--text) 18%)}
.msg-voice-btn.loading svg{animation:voiceButtonPulse .85s ease-in-out infinite alternate}.msg-voice-btn:disabled{opacity:.38;cursor:wait}@keyframes voiceButtonPulse{to{transform:scale(1.18);opacity:.55}}
@media(max-width:430px){.voice-card{width:min(286px,64vw);min-width:210px}.voice-player{grid-template-columns:36px minmax(0,1fr) 34px;gap:7px}.voice-play{width:36px;height:36px}.voice-wave-base,.voice-wave-fill{gap:1.5px}.voice-transcript-text{margin-left:43px}}

/* Compact waveform voice messages */
.voice-card{width:min(330px,70vw);min-width:236px}
.voice-player{grid-template-columns:36px minmax(0,1fr) 38px;gap:10px;min-height:58px;padding:7px 11px 7px 9px;border:1px solid color-mix(in srgb,var(--voice-bubble,var(--ai-bubble)) 76%,var(--border));border-radius:8px;background:color-mix(in srgb,var(--voice-bubble,var(--ai-bubble)) 88%,var(--accent) 12%);box-shadow:0 2px 9px color-mix(in srgb,var(--text) 6%,transparent)}
.msg-row.assistant{--voice-bubble:var(--ai-bubble)}.msg-row.user{--voice-bubble:var(--user-bubble)}
.voice-play{width:36px;height:36px;padding:0;box-shadow:0 2px 8px color-mix(in srgb,var(--accent) 28%,transparent)}
.voice-wave{height:38px}
.voice-wave i{min-width:2px;height:calc(4px + var(--voice-level)*27px);max-height:31px;background:color-mix(in srgb,var(--text-l) 48%,transparent)}
.voice-transcript-text{margin:7px 4px 0;padding:8px 10px;border-left:2px solid color-mix(in srgb,var(--accent) 38%,transparent);background:transparent;border-radius:0;color:var(--text-m);font-size:13px;line-height:1.65}
.voice-transcript-text:before{content:'转文字';display:block;margin-bottom:3px;color:var(--text-l);font-size:10px;line-height:1.2}
.msg-row.user .voice-player{background:color-mix(in srgb,var(--accent-light) 80%,var(--surface) 20%)}
@media(max-width:430px){
  .voice-card{width:min(294px,72vw);min-width:216px}
  .voice-player{grid-template-columns:34px minmax(0,1fr) 34px;gap:7px;padding-inline:8px}
  .voice-play{width:34px;height:34px}
  .voice-transcript-text{margin-inline:3px}
}

/* Voice player interaction fixes */
.voice-player{cursor:pointer;-webkit-tap-highlight-color:transparent}
.voice-play{position:relative;background:var(--accent)!important}
.voice-play::before{content:"";display:block;width:0;height:0;margin-left:3px;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:11px solid #fff}
.voice-card.playing .voice-play::before{width:11px;height:14px;margin:0;border:0;background:linear-gradient(90deg,#fff 0 36%,transparent 36% 64%,#fff 64% 100%)}
.voice-card.loading .voice-play::before{width:13px;height:13px;margin:0;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;border-radius:50%;animation:voiceLoadSpin .7s linear infinite}
@keyframes voiceLoadSpin{to{transform:rotate(360deg)}}
.voice-transcript-toggle{display:inline-block;margin:7px 4px 0;padding:3px 6px;color:var(--text-l);font-size:11px;line-height:1.3;cursor:pointer;user-select:none}
.voice-transcript-toggle:focus-visible,.voice-player:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 55%,white);outline-offset:2px}
.voice-transcript-text[hidden]{display:none!important}
.voice-transcript-text::before{display:none!important}
/* Voice transcript must never inherit the legacy three-line clamp. */
.voice-transcript-text>span:first-child{
  display:block!important;
  -webkit-box-orient:initial!important;
  -webkit-line-clamp:unset!important;
  line-clamp:unset!important;
  max-height:none!important;
  overflow:visible!important;
  white-space:pre-wrap!important;
  overflow-wrap:anywhere;
  word-break:break-word;
}
.voice-transcript-text:not([hidden]){display:block!important;height:auto!important;max-height:none!important;overflow:visible!important}
.voice-translation-toggle{display:inline-block;margin:7px 2px 0 5px;padding:3px 6px;color:var(--accent);font-size:11px;line-height:1.3;cursor:pointer;user-select:none}
.voice-translation-toggle[data-loading="1"]{opacity:.65;cursor:wait}
.voice-translation-text{margin:6px 4px 0;padding:8px 10px;border-left:2px solid color-mix(in srgb,var(--accent) 55%,transparent);color:var(--text-m);font-size:13px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}
.voice-translation-text[hidden]{display:none!important}
.voice-translation-text::before{content:'中文翻译';display:block;margin-bottom:4px;color:var(--text-l);font-size:10px;line-height:1.2}
/* Callhome */
.callhome-overlay{--call-grad:linear-gradient(165deg,#2b2723,#141110 72%);--call-text:#f3efe9;--call-soft:#ccc4b8;--call-muted:#948c80;--call-glass:rgba(255,252,246,.13);--call-border:rgba(255,250,242,.20);--call-left:rgba(250,247,241,.68);--call-left-text:#2f2b25;--call-right:#f2ede4;--call-right-text:#2a2622;position:fixed;inset:0;z-index:12000;opacity:0;visibility:hidden;pointer-events:none;overflow:hidden;color:var(--call-text);background:var(--call-grad);transition:opacity .35s,visibility .35s}.callhome-overlay.cool{--call-grad:linear-gradient(165deg,#24262b,#0e1013 72%);--call-text:#eef1f4;--call-soft:#b8c0cc;--call-muted:#828a94;--call-glass:rgba(246,250,255,.13);--call-border:rgba(242,248,255,.2);--call-left:rgba(244,247,251,.68);--call-left-text:#23272f;--call-right:#e9edf2;--call-right-text:#1a1e24}.callhome-overlay.show{opacity:1;visibility:visible;pointer-events:auto}.callhome-bg,.callhome-tint{position:absolute;inset:0}.callhome-bg{background-size:cover;background-position:center}.callhome-bg:before,.callhome-bg:after{content:"";position:absolute;border-radius:50%;filter:blur(60px);animation:callhomeDrift 15s ease-in-out infinite alternate}.callhome-bg:before{width:340px;height:340px;left:-70px;top:-50px;background:rgba(216,208,196,.16)}.callhome-bg:after{width:360px;height:230px;right:-100px;bottom:40px;background:rgba(170,160,148,.14)}.callhome-tint{background:#0e0c0a;opacity:0;transition:opacity .3s}.callhome-overlay.has-bg .callhome-tint{opacity:.5}.callhome-overlay.no-tint .callhome-tint{opacity:0}.callhome-inner{position:relative;z-index:1;width:min(100%,460px);height:100%;min-height:100%;margin:auto;padding:max(22px,env(safe-area-inset-top)) 8px max(18px,env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:center}.callhome-gear{position:absolute;right:18px;top:max(20px,env(safe-area-inset-top));width:38px;height:38px;border:1px solid var(--call-border);border-radius:50%;display:grid;place-items:center;color:var(--call-text);background:var(--call-glass);backdrop-filter:blur(14px);z-index:2}.callhome-gear svg{width:20px;height:20px}.callhome-meta{text-align:center}.callhome-kicker{display:inline-flex;align-items:center;gap:7px;color:var(--call-soft);font:13px var(--font-cn);letter-spacing:1.5px}.callhome-kicker i{width:7px;height:7px;border-radius:50%;background:currentColor;animation:callhomeDot 1.4s infinite}.callhome-timer{display:none;margin-top:7px;font:600 21px var(--font-en);font-variant-numeric:tabular-nums}.callhome-status{margin-top:6px;color:var(--call-muted);font-size:12px}.callhome-incoming-hero{display:flex;flex-direction:column;align-items:center;margin-top:clamp(72px,13vh,128px)}.callhome-ripples{position:relative;width:112px;height:112px}.callhome-ripples>i{position:absolute;inset:-8px;border:1.5px solid rgba(217,160,143,.52);border-radius:50%;animation:callhomeRipple 2.2s ease-out infinite}.callhome-ripples>i:nth-child(2){animation-delay:.7s}.callhome-ripples>i:nth-child(3){animation-delay:1.4s}.callhome-avatar{position:relative;z-index:1;width:112px;height:112px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(160deg,#e8ded8,#d8cbc4) center/cover;color:#78615a;font:italic 44px var(--font-en);box-shadow:0 0 42px 8px rgba(217,160,143,.34)}.callhome-name{margin-top:24px;font:600 22px var(--font-en);letter-spacing:.04em}.callhome-reason{max-width:310px;margin-top:12px;color:var(--call-soft);font-size:14px;line-height:1.6;text-align:center}.callhome-live-hero{display:none;flex-direction:column;align-items:center;padding-top:20px}.callhome-pair{display:flex}.callhome-pair-avatar{width:94px;height:94px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(160deg,#423d36,#262220) center/cover no-repeat;font:italic 36px var(--font-en);transition:.2s box-shadow,.2s transform}.callhome-pair-avatar+.callhome-pair-avatar{margin-left:-20px;filter:drop-shadow(-4px 1px 7px rgba(0,0,0,.5))}.callhome-pair-names{display:flex;gap:62px;margin-top:12px;color:var(--call-soft);font-size:14px}.callhome-wave{width:220px;height:50px;margin-top:4px}.callhome-transcript{display:none;width:100%;flex:1;min-height:100px;overflow-y:auto;padding:8px 22px 10px;scrollbar-width:none}.callhome-caption{max-width:78%;padding:9px 13px;border-radius:16px;font-size:14px;line-height:1.5;animation:callhomeRise .25s ease;white-space:pre-wrap}.callhome-caption+.callhome-caption{margin-top:9px}.callhome-caption.assistant{margin-right:auto;color:var(--call-left-text);background:var(--call-left);border:1px solid rgba(255,255,255,.35);border-bottom-left-radius:5px;backdrop-filter:blur(16px)}.callhome-caption.user{margin-left:auto;color:var(--call-right-text);background:var(--call-right);border-bottom-right-radius:5px}.callhome-caption.pending:after{content:"▏";opacity:.55;animation:callhomeDot .8s infinite}.callhome-spacer{flex:1}.callhome-actions{width:100%;display:flex;justify-content:center;gap:58px;padding:14px}.callhome-actions[hidden]{display:none}.callhome-action{border:0;background:none;color:var(--call-text);display:flex;flex-direction:column;align-items:center;gap:8px;font:12px var(--font-cn)}.callhome-action span{width:62px;height:62px;border-radius:50%;display:grid;place-items:center;background:var(--call-glass);border:1px solid var(--call-border);backdrop-filter:blur(18px);transition:transform .12s}.callhome-action:active span{transform:scale(.93)}.callhome-action svg{width:26px;height:26px}.callhome-action.accept span{background:linear-gradient(160deg,#d9a08f,#c98a80);border:0;animation:callhomeRing 1.2s infinite}.callhome-action.decline span{background:rgba(255,255,255,.09)}.callhome-action.end span{background:var(--call-right);border-color:var(--call-right);color:#1a1714}.callhome-actions.live{gap:20px}.callhome-actions.live .callhome-action span{width:58px;height:58px}.callhome-live-hint{display:none;height:22px;color:var(--call-soft);font-size:12px}.callhome-overlay.connected .callhome-kicker span{font-size:0}.callhome-overlay.connected .callhome-kicker span:after{content:"listening";font-size:13px}.callhome-overlay.connected .callhome-timer,.callhome-overlay.connected .callhome-live-hero,.callhome-overlay.connected .callhome-transcript,.callhome-overlay.connected .callhome-live-hint{display:flex}.callhome-overlay.connected .callhome-incoming-hero{display:none}.callhome-overlay.connected .callhome-spacer{display:none}.callhome-overlay.user-speaking .callhome-pair-avatar.user,.callhome-overlay.assistant-speaking .callhome-pair-avatar.assistant{transform:scale(1.025);box-shadow:0 0 38px 8px rgba(255,240,216,.5)}.callhome-sheet{position:absolute;left:50%;bottom:max(16px,env(safe-area-inset-bottom));z-index:5;width:min(calc(100% - 32px),430px);padding:18px;transform:translate(-50%,calc(100% + 36px));transition:transform .3s;border:1px solid rgba(255,255,255,.5);border-radius:24px;color:#5f504a;background:rgba(255,248,244,.9);backdrop-filter:blur(26px);box-shadow:0 20px 70px rgba(0,0,0,.3)}.callhome-sheet.show{transform:translate(-50%,0)}.callhome-sheet-title{text-align:center;font-size:14px;margin-bottom:13px}.callhome-chips{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.callhome-chip,.callhome-decline-custom button,.callhome-sheet-cancel{border:1px solid rgba(120,95,88,.18);border-radius:999px;background:rgba(120,95,88,.08);padding:10px;color:#765f57}.callhome-decline-custom{display:flex;gap:8px;margin-top:10px}.callhome-decline-custom input{min-width:0;flex:1;border:1px solid rgba(120,95,88,.2);border-radius:999px;padding:10px 13px;background:rgba(255,255,255,.55);outline:none}.callhome-sheet-cancel{width:100%;margin-top:8px}.callhome-settings-back{position:absolute;inset:0;z-index:6;background:rgba(0,0,0,.4);opacity:0;pointer-events:none;transition:.3s}.callhome-settings{position:absolute;left:50%;bottom:0;z-index:7;width:min(100%,460px);padding:8px 20px max(26px,env(safe-area-inset-bottom));transform:translate(-50%,100%);transition:.35s;border:1px solid var(--call-border);border-radius:22px 22px 0 0;color:var(--call-text);background:var(--call-glass);backdrop-filter:blur(26px) saturate(170%)}.callhome-overlay.settings .callhome-settings-back{opacity:1;pointer-events:auto}.callhome-overlay.settings .callhome-settings{transform:translate(-50%,0)}.callhome-settings>i{display:block;width:40px;height:5px;margin:0 auto 16px;border-radius:3px;background:rgba(180,180,180,.45)}.callhome-settings h3{margin-bottom:16px;font-size:16px}.callhome-settings label{display:block;margin:16px 0 8px;color:var(--call-muted);font-size:12px}.callhome-settings button{margin-right:7px;padding:9px 15px;border:1px solid var(--call-border);border-radius:12px;color:var(--call-text);background:rgba(255,255,255,.06)}.callhome-settings button.on{color:#151311;background:var(--call-text)}.callhome-settings .callhome-settings-done{display:block;width:100%;margin-top:22px}.callhome-action.muted{opacity:.5}.callhome-action.muted span:after{content:"";position:absolute;width:34px;height:2px;background:currentColor;transform:rotate(-45deg)}.callhome-action span{position:relative}@keyframes callhomeRipple{from{transform:scale(1);opacity:.9}to{transform:scale(1.55);opacity:0}}@keyframes callhomeDot{50%{opacity:.25}}@keyframes callhomeRing{25%{transform:rotate(-7deg)}75%{transform:rotate(7deg)}}@keyframes callhomeDrift{to{transform:translate(28px,18px)}}@keyframes callhomeRise{from{opacity:0;transform:translateY(7px)}}@media(max-height:690px){.callhome-incoming-hero{margin-top:46px}.callhome-pair-avatar{width:78px;height:78px}.callhome-transcript{min-height:80px}.callhome-actions{padding-block:6px}.callhome-action span{width:54px;height:54px}}
.call-detail{position:fixed;inset:0;z-index:12100;display:flex;align-items:flex-end;justify-content:center;background:rgba(30,27,35,.28);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease,visibility .2s}.call-detail.show{opacity:1;visibility:visible;pointer-events:auto}.call-detail-panel{width:100%;max-width:680px;max-height:min(76dvh,760px);display:flex;flex-direction:column;background:#fbfafc;color:#4f4b53;border-radius:24px 24px 0 0;box-shadow:0 -18px 54px rgba(34,30,42,.2);overflow:hidden;transform:translateY(24px);transition:transform .24s cubic-bezier(.22,1,.36,1)}.call-detail.show .call-detail-panel{transform:translateY(0)}.call-detail-head{height:62px;padding:0 15px;display:grid;grid-template-columns:42px 1fr 42px;align-items:center;border-bottom:1px solid rgba(80,73,88,.09);flex:0 0 auto;background:#fbfafc}.call-detail-back{width:38px;height:38px;border:0;border-radius:50%;display:grid;place-items:center;background:transparent;color:#625d66}.call-detail-back svg{width:21px;height:21px}.call-detail-title{text-align:center;font:500 15px var(--font-cn);color:#4f4b53;line-height:1.2}.call-detail-meta{text-align:center;margin-top:4px;color:#99939d;font:10px var(--font-cn);line-height:1.2}.call-detail-head-space{width:42px}.call-detail-reason{padding:12px 22px;text-align:center;color:#85808a;font:12px var(--font-cn);line-height:1.55;border-bottom:1px solid rgba(80,73,88,.08);background:#fbfafc}.call-detail-reason:empty{display:none}.call-detail-turns{min-height:220px;overflow-y:auto;padding:19px 17px calc(22px + env(safe-area-inset-bottom));background:#f5f2f6;overscroll-behavior:contain}.call-detail-loading,.call-detail-empty{padding:48px 12px;text-align:center;color:#99939d;font:13px var(--font-cn)}.call-turn{display:flex;flex-direction:column;margin:0 0 15px;max-width:82%}.call-turn.user{margin-left:auto;align-items:flex-end}.call-turn.assistant{margin-right:auto;align-items:flex-start}.call-turn-speaker{margin:0 6px 5px;color:#99939d;font:10px var(--font-cn)}.call-turn-bubble{padding:10px 13px;border-radius:16px;background:#fff;color:#514d55;font:14px var(--font-cn);line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere;box-shadow:0 3px 14px rgba(42,36,48,.05)}.call-turn.user .call-turn-bubble{background:#ebe4ed}.call-turn-foot{display:flex;align-items:center;gap:8px;margin:5px 6px 0;color:#aaa4ad;font:9px var(--font-cn)}.call-turn.user .call-turn-foot{justify-content:flex-end}.call-turn-tone{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.call-turn-play{width:25px;height:25px;border:1px solid rgba(80,73,88,.13);border-radius:50%;display:grid;place-items:center;background:#fff;color:#77717b}.call-turn-play svg{width:12px;height:12px}.call-turn-play.playing{color:#9a829f;border-color:#bcaabe}.call-detail-open{overflow:hidden}@media(min-width:681px){.call-detail{align-items:center;padding:22px}.call-detail-panel{border-radius:22px;max-height:min(760px,calc(100dvh - 44px))}}

/* Clickable call record and transcript bottom sheet. */
.call-record-card{cursor:pointer;min-width:min(260px,72vw);padding:11px 13px!important;border:1px solid color-mix(in srgb,var(--accent) 18%,transparent)!important;border-radius:16px!important;background:color-mix(in srgb,var(--ai-bubble) 88%,transparent)!important;box-shadow:var(--shadow)!important}.call-record-open{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:8px;padding-top:8px;border-top:1px solid color-mix(in srgb,currentColor 12%,transparent);font-size:11px;color:var(--text-l)}.call-record-open svg{width:15px;height:15px}.call-record-card:active{transform:scale(.985)}.call-record-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.call-detail{position:fixed;inset:0;z-index:12100;display:flex;align-items:flex-end;justify-content:center;background:rgba(30,27,35,.28);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease,visibility .2s}.call-detail.show{opacity:1;visibility:visible;pointer-events:auto}.call-detail-panel{width:100%;max-width:680px;max-height:min(76dvh,760px);display:flex;flex-direction:column;background:#fbfafc;color:#4f4b53;border-radius:24px 24px 0 0;box-shadow:0 -18px 54px rgba(34,30,42,.2);overflow:hidden;transform:translateY(24px);transition:transform .24s cubic-bezier(.22,1,.36,1)}.call-detail.show .call-detail-panel{transform:translateY(0)}.call-detail-head{height:62px;padding:0 15px;display:grid;grid-template-columns:42px 1fr 42px;align-items:center;border-bottom:1px solid rgba(80,73,88,.09);flex:0 0 auto;background:#fbfafc}.call-detail-back{width:38px;height:38px;border:0;border-radius:50%;display:grid;place-items:center;background:transparent;color:#625d66}.call-detail-back svg{width:21px;height:21px}.call-detail-title{text-align:center;font:500 15px var(--font-cn);color:#4f4b53;line-height:1.2}.call-detail-meta{text-align:center;margin-top:4px;color:#99939d;font:10px var(--font-cn);line-height:1.2}.call-detail-head-space{width:42px}.call-detail-reason{padding:12px 22px;text-align:center;color:#85808a;font:12px var(--font-cn);line-height:1.55;border-bottom:1px solid rgba(80,73,88,.08);background:#fbfafc}.call-detail-reason:empty{display:none}.call-detail-turns{min-height:220px;overflow-y:auto;padding:19px 17px calc(22px + env(safe-area-inset-bottom));background:#f5f2f6;overscroll-behavior:contain}.call-detail-loading,.call-detail-empty{padding:48px 12px;text-align:center;color:#99939d;font:13px var(--font-cn)}.call-turn{display:flex;flex-direction:column;margin:0 0 15px;max-width:82%}.call-turn.user{margin-left:auto;align-items:flex-end}.call-turn.assistant{margin-right:auto;align-items:flex-start}.call-turn-speaker{margin:0 6px 5px;color:#99939d;font:10px var(--font-cn)}.call-turn-bubble{padding:10px 13px;border-radius:16px;background:#fff;color:#514d55;font:14px var(--font-cn);line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere;box-shadow:0 3px 14px rgba(42,36,48,.05)}.call-turn.user .call-turn-bubble{background:#ebe4ed}.call-turn-foot{display:flex;align-items:center;gap:8px;margin:5px 6px 0;color:#aaa4ad;font:9px var(--font-cn)}.call-turn.user .call-turn-foot{justify-content:flex-end}.call-turn-tone{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.call-turn-play{width:25px;height:25px;border:1px solid rgba(80,73,88,.13);border-radius:50%;display:grid;place-items:center;background:#fff;color:#77717b}.call-turn-play svg{width:12px;height:12px}.call-turn-play.playing{color:#9a829f;border-color:#bcaabe}.call-detail-open{overflow:hidden}@media(min-width:681px){.call-detail{align-items:center;padding:22px}.call-detail-panel{border-radius:22px;max-height:min(760px,calc(100dvh - 44px))}}

/* Callhome live captions, following the public UI concept's frosted left/right bubbles. */
.callhome-overlay.connected .callhome-avatar{width:92px;height:92px;margin-top:24px;font-size:38px}.callhome-overlay.connected .callhome-name{margin-top:14px;font-size:25px}.callhome-overlay.connected .callhome-reason{display:none}.callhome-transcript{display:none;width:100%;max-height:34dvh;overflow-y:auto;margin:18px 0 10px;padding:2px 2px 8px;flex-direction:column;gap:9px;scrollbar-width:none}.callhome-overlay.connected .callhome-transcript{display:flex}.callhome-caption{max-width:82%;padding:10px 13px;border-radius:16px;font:14px/1.55 var(--font-cn);word-break:break-word;white-space:pre-wrap;animation:callCaptionIn .22s ease;background:rgba(250,247,241,.72);color:#302c32;border:1px solid rgba(255,255,255,.35);backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(15px)}.callhome-caption.user{align-self:flex-end;border-bottom-right-radius:5px;background:rgba(242,237,244,.94)}.callhome-caption.assistant{align-self:flex-start;border-bottom-left-radius:5px}.callhome-caption.pending{opacity:.68}.callhome-overlay.connected .callhome-spacer{min-height:12px}.callhome-overlay.connected .callhome-live-hint{margin-bottom:18px}.callhome-action.speaking span{box-shadow:0 0 0 10px rgba(255,255,255,.08),0 10px 30px rgba(20,20,30,.22);animation:callhomePulse 1.4s ease-in-out infinite}@keyframes callCaptionIn{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}

/* 斗地主对局记录 */
.doudizhu-record-card{cursor:pointer;min-width:min(310px,76vw);border:1px solid color-mix(in srgb,var(--accent) 22%,transparent);background:linear-gradient(145deg,color-mix(in srgb,var(--ai-bubble) 92%,#f7dca4),var(--ai-bubble))}
.doudizhu-record-card>p:first-child{margin-top:0}.doudizhu-record-open{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:12px;padding-top:10px;border-top:1px solid color-mix(in srgb,var(--text) 10%,transparent);font-size:12px;color:var(--text-l)}.doudizhu-record-open svg{width:16px;height:16px}
.doudizhu-detail{position:fixed;inset:0;z-index:2300;display:flex;align-items:flex-end;justify-content:center;background:rgba(20,18,16,.28);backdrop-filter:blur(5px);opacity:0;pointer-events:none;transition:opacity .2s}.doudizhu-detail.show{opacity:1;pointer-events:auto}.doudizhu-detail-panel{width:min(680px,100%);height:min(82vh,760px);display:flex;flex-direction:column;background:var(--bg);border-radius:26px 26px 0 0;box-shadow:0 -18px 60px rgba(0,0,0,.18);transform:translateY(20px);transition:transform .25s}.doudizhu-detail.show .doudizhu-detail-panel{transform:none}.doudizhu-detail-head{display:grid;grid-template-columns:44px 1fr 44px;align-items:center;padding:14px 14px 12px;border-bottom:1px solid color-mix(in srgb,var(--text) 9%,transparent)}.doudizhu-detail-head button{border:0;background:transparent;color:var(--text);font-size:30px;line-height:1}.doudizhu-detail-head h2{margin:0;text-align:center;font-size:17px}.doudizhu-detail-head p{margin:3px 0 0;text-align:center;color:var(--text-l);font-size:11px}.doudizhu-detail-body{overflow:auto;padding:18px 16px 36px}.doudizhu-scoreboard{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.doudizhu-score-item{padding:13px 8px;border-radius:15px;background:color-mix(in srgb,var(--ai-bubble) 82%,transparent);text-align:center}.doudizhu-score-item span{display:block;font-size:12px;color:var(--text-l);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doudizhu-score-item strong{display:block;margin-top:5px;font-size:19px}.doudizhu-score-item .positive{color:#a66839}.doudizhu-score-item .negative{color:#667789}.doudizhu-rounds,.doudizhu-transcript{margin-top:22px}.doudizhu-rounds h3,.doudizhu-transcript h3{margin:0 0 10px;font-size:13px;color:var(--text-l);font-weight:600}.doudizhu-round{padding:12px 13px;margin-bottom:8px;border-radius:14px;background:color-mix(in srgb,var(--ai-bubble) 75%,transparent)}.doudizhu-round strong{font-size:14px}.doudizhu-round p{margin:5px 0 0;font-size:12px;line-height:1.55;color:var(--text-l)}.doudizhu-chat-line{display:grid;grid-template-columns:minmax(54px,auto) 1fr;gap:10px;padding:9px 3px;border-bottom:1px solid color-mix(in srgb,var(--text) 7%,transparent);font-size:13px;line-height:1.5}.doudizhu-chat-line b{font-weight:600;color:var(--text-l)}.doudizhu-detail-loading,.doudizhu-detail-empty{padding:48px 14px;text-align:center;color:var(--text-l);font-size:13px}body.doudizhu-detail-open{overflow:hidden}
@media(min-width:700px){.doudizhu-detail{align-items:center}.doudizhu-detail-panel{border-radius:26px;height:min(78vh,720px)}}

/* Settings Game entry */
.sp-game-card{background:linear-gradient(135deg,rgba(255,255,255,.78),color-mix(in srgb,var(--accent-light,#F1EEF5) 72%,white));}
.sp-game-row{min-height:64px;}
.sp-game-icon{background:color-mix(in srgb,var(--accent-light,#F1EEF5) 82%,white);color:var(--accent,#B5A3C4);}
.sp-game-icon svg{width:19px;height:19px;}

/* Context Forge v1 */
.context-status-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);opacity:.6;flex:none}.context-status-toggle>svg{order:4}.forge-sheet-overlay{position:fixed;inset:0;z-index:930;background:rgba(38,34,39,0);pointer-events:none;transition:background .22s}.forge-sheet-overlay.open{background:rgba(38,34,39,.16);pointer-events:auto}.forge-sheet{position:fixed;z-index:931;left:0;right:0;bottom:0;max-height:min(76vh,720px);background:rgba(250,248,250,.94);backdrop-filter:blur(28px) saturate(155%);-webkit-backdrop-filter:blur(28px) saturate(155%);border:1px solid var(--border);border-bottom:0;border-radius:24px 24px 0 0;box-shadow:0 -16px 46px rgba(61,53,65,.12);transform:translateY(105%);transition:transform .3s cubic-bezier(.22,1,.36,1);padding-bottom:env(safe-area-inset-bottom);display:flex;flex-direction:column}.forge-sheet.open{transform:translateY(0)}.forge-sheet-handle{width:38px;height:4px;border-radius:99px;background:var(--border);margin:9px auto 3px}.forge-sheet-header{display:flex;align-items:center;gap:12px;padding:12px 20px 13px}.forge-sheet-header>div{flex:1}.forge-sheet-header h2{margin:0;font:600 18px var(--font-cn);color:var(--text)}.forge-sheet-header p{margin:4px 0 0;font-size:10px;color:var(--text-l)}.forge-sheet-header button{width:32px;height:32px;border:0;border-radius:50%;background:var(--accent-light);color:var(--text-m);font-size:22px}.forge-sheet-body{overflow-y:auto;padding:0 16px 22px}.forge-overview{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px}.forge-stat,.forge-flow{background:rgba(255,255,255,.75);border:1px solid var(--border)}.forge-stat{border-radius:15px;padding:12px 10px}.forge-stat b{display:block;font-size:17px;color:var(--text)}.forge-stat span{font-size:9px;color:var(--text-l)}.forge-flow{border-radius:17px;overflow:hidden}.forge-step{display:grid;grid-template-columns:22px minmax(0,1fr) auto;gap:10px;padding:13px 14px}.forge-step+.forge-step{border-top:1px solid var(--hairline)}.forge-step-index{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--accent-light);color:var(--accent);font-size:10px}.forge-step strong{display:block;font-size:13px;color:var(--text)}.forge-step small{display:block;margin-top:3px;font-size:10px;line-height:1.5;color:var(--text-l)}.forge-step-state{font-size:10px;color:var(--text-m);white-space:nowrap}.forge-note{margin:12px 3px 0;font-size:10px;line-height:1.65;color:var(--text-l)}

/* In-app file viewer. Names are isolated from upload queue's .attachment-preview. */
.chat-file-link{width:100%;text-align:left;font:inherit;color:inherit}.chat-attachment-image-button{display:block;border:0;padding:0;background:transparent;cursor:pointer}
.chat-file-viewer{position:fixed!important;left:0!important;top:0!important;right:0!important;bottom:0!important;width:100vw!important;height:100dvh!important;max-width:none!important;max-height:none!important;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;z-index:14000!important;display:flex!important;flex-direction:column!important;gap:0!important;align-items:stretch!important;background:var(--bg,#f7f4f7)!important;opacity:0;visibility:hidden;pointer-events:none;transform:translate3d(100%,0,0);transition:transform .25s cubic-bezier(.22,1,.36,1),opacity .18s;box-sizing:border-box!important}
.chat-file-viewer.open{opacity:1;visibility:visible;pointer-events:auto;transform:translate3d(0,0,0)}body.chat-file-viewer-open{overflow:hidden!important}
.chat-file-viewer-bar{box-sizing:border-box;flex:0 0 auto;width:100%;min-height:calc(52px + env(safe-area-inset-top));padding:env(safe-area-inset-top) max(12px,env(safe-area-inset-right)) 0 max(12px,env(safe-area-inset-left));display:grid;grid-template-columns:minmax(76px,auto) minmax(0,1fr) minmax(60px,auto);align-items:center;gap:8px;border-bottom:1px solid var(--hairline,rgba(0,0,0,.08));background:color-mix(in srgb,var(--surface,#fff) 94%,transparent);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.chat-file-viewer-close,.chat-file-viewer-download{border:0;background:transparent;color:var(--accent,#8f6078);font:500 15px/1.2 var(--font-cn,system-ui);padding:12px 6px;text-decoration:none}.chat-file-viewer-close{display:flex;align-items:center;gap:2px;font-size:28px}.chat-file-viewer-close span{font-size:15px}.chat-file-viewer-download{text-align:right}.chat-file-viewer-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;color:var(--text,#333);font-size:14px}
.chat-file-viewer-body{position:relative;flex:1 1 auto;min-width:0;min-height:0;width:100%;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}.chat-file-viewer-loading,.chat-file-viewer-unsupported{box-sizing:border-box;min-height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:10px;padding:28px;color:#777;text-align:center}.chat-file-viewer-unsupported strong{color:#444;font-size:17px}.chat-file-viewer-unsupported span{font-size:13px}.chat-file-viewer-text{box-sizing:border-box;width:100%;min-height:100%;margin:0;padding:22px 18px calc(28px + env(safe-area-inset-bottom));white-space:pre-wrap;overflow-wrap:anywhere;color:#2f2d31;background:#fff;font:400 15px/1.75 ui-monospace,SFMono-Regular,Menlo,monospace}.chat-file-viewer-image{display:block;max-width:100%;height:auto;margin:auto}.chat-file-viewer-frame{display:block;width:100%;height:100%;border:0;background:#fff}

.callhome-caption-text{display:block}.callhome-caption-tone{display:block;margin-top:5px;font-size:10px;line-height:1.35;opacity:.62}.callhome-caption-tone[hidden]{display:none}
.callhome-caption-translation{display:block;margin-top:6px;font-size:12px;line-height:1.55;opacity:.68;font-weight:400}.call-turn-translation{margin-top:7px;padding-top:7px;border-top:1px solid currentColor;font-size:12px;line-height:1.55;opacity:.64}

/* ============ 一起听歌 · 卡片 & 抽屉 ============ */
.duetto-record-card{cursor:pointer;min-width:min(280px,74vw);max-width:min(340px,84vw);padding:14px 15px 12px!important;border:1px solid color-mix(in srgb,#c88fa5 30%,transparent)!important;border-radius:18px!important;background:linear-gradient(155deg,color-mix(in srgb,var(--ai-bubble) 88%,#f4dfe6),var(--ai-bubble))!important;box-shadow:var(--shadow)!important;display:block!important}
.duetto-record-card:active{transform:scale(.985)}
.duetto-record-card:focus-visible{outline:2px solid #c88fa5;outline-offset:2px}
.duetto-record-head{display:flex;align-items:center;gap:10px;margin-bottom:4px}
.duetto-record-ic{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#F4E4EA,#EAD5DE);color:#B58AA0;display:inline-flex;align-items:center;justify-content:center;flex:0 0 32px}
.duetto-record-ic svg{width:16px;height:16px}
.duetto-record-title{font-size:14px;font-weight:600;color:var(--text);flex:1;line-height:1.35;letter-spacing:.2px}
.duetto-record-dot{width:8px;height:8px;border-radius:50%;background:#d38aa2;box-shadow:0 0 0 3px color-mix(in srgb,#d38aa2 25%,transparent);animation:duettoPulse 1.6s ease-in-out infinite}
@keyframes duettoPulse{0%,100%{opacity:.55;transform:scale(.9)}50%{opacity:1;transform:scale(1.05)}}
.duetto-record-sub{font-size:12.5px;line-height:1.5;color:var(--text-l);padding-left:42px;letter-spacing:.1px}
.duetto-record-open{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:10px;padding-top:9px;padding-left:42px;border-top:1px solid color-mix(in srgb,#c88fa5 15%,transparent);font-size:11.5px;color:var(--text-l)}
.duetto-record-open svg{width:15px;height:15px}

.duetto-detail{position:fixed;inset:0;z-index:2300;display:flex;align-items:flex-end;justify-content:center;background:rgba(20,18,16,.28);backdrop-filter:blur(5px);opacity:0;pointer-events:none;transition:opacity .2s}
.duetto-detail.show{opacity:1;pointer-events:auto}
.duetto-detail-panel{width:min(680px,100%);height:min(82vh,760px);display:flex;flex-direction:column;background:var(--bg);border-radius:26px 26px 0 0;box-shadow:0 -18px 60px rgba(0,0,0,.18);transform:translateY(20px);transition:transform .25s}
.duetto-detail.show .duetto-detail-panel{transform:none}
.duetto-detail-head{display:grid;grid-template-columns:44px 1fr 44px;align-items:center;padding:14px 14px 12px;border-bottom:1px solid color-mix(in srgb,var(--text) 9%,transparent)}
.duetto-detail-head button{border:0;background:transparent;color:var(--text);font-size:30px;line-height:1;cursor:pointer}
.duetto-detail-head h2{margin:0;text-align:center;font-size:17px}
.duetto-detail-head p{margin:3px 0 0;text-align:center;color:var(--text-l);font-size:11px}
.duetto-detail-body{overflow:auto;padding:18px 16px 36px}
.duetto-overview{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.duetto-overview-box{padding:13px 8px;border-radius:15px;background:color-mix(in srgb,var(--ai-bubble) 82%,transparent);text-align:center}
.duetto-overview-box span{display:block;font-size:11.5px;color:var(--text-l)}
.duetto-overview-box strong{display:block;margin-top:5px;font-size:17px;color:var(--text)}
.duetto-songs,.duetto-transcript{margin-top:22px}
.duetto-songs h3,.duetto-transcript h3{margin:0 0 10px;font-size:13px;color:var(--text-l);font-weight:600}
.duetto-song{display:grid;grid-template-columns:36px 1fr;gap:12px;align-items:center;padding:11px 12px;margin-bottom:8px;border-radius:14px;background:color-mix(in srgb,var(--ai-bubble) 76%,transparent)}
.duetto-song-idx{font-family:'Cormorant Garamond',serif;font-size:20px;color:color-mix(in srgb,#c88fa5 90%,var(--text));font-weight:500;text-align:center}
.duetto-song-info{display:flex;flex-direction:column;gap:2px;min-width:0}
.duetto-song-info strong{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.duetto-song-artist{font-size:12px;color:var(--text-l);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.duetto-chat-line{display:grid;grid-template-columns:minmax(48px,auto) 1fr;gap:10px;padding:10px 3px;border-bottom:1px solid color-mix(in srgb,var(--text) 7%,transparent);font-size:13px;line-height:1.55;position:relative}
.duetto-chat-line b{font-weight:600;color:var(--text-l);font-size:12px}
.duetto-chat-line.from-you b{color:#c88fa5}
.duetto-chat-line.from-vince b{color:#9187a8}
.duetto-chat-time{grid-column:1 / -1;display:block;font-size:10.5px;color:var(--text-l);font-style:normal;opacity:.6;margin-top:2px;padding-left:58px}
.duetto-detail-loading,.duetto-detail-empty{padding:48px 14px;text-align:center;color:var(--text-l);font-size:13px}
body.duetto-detail-open{overflow:hidden}
@media(min-width:700px){.duetto-detail{align-items:center}.duetto-detail-panel{border-radius:26px;height:min(78vh,720px)}}

/* ═══ Link Card 链接名片 ═══ */
.link-card-wrap{margin-top:6px;display:flex;flex-direction:column;gap:6px}
.link-card{display:flex;text-decoration:none;background:var(--card);border:1px solid var(--border);border-radius:14px;overflow:hidden;max-width:300px;transition:transform .12s ease,box-shadow .12s ease}
.link-card:active{transform:scale(.98)}
.link-card .lc-thumb{flex:0 0 76px;width:76px;background-size:cover;background-position:center;background-color:var(--accent-light)}
.link-card.lc-noimg .lc-thumb{display:none}
.link-card .lc-body{padding:9px 11px;min-width:0;display:flex;flex-direction:column;gap:3px}
.link-card .lc-title{font-size:13px;font-weight:600;color:var(--text);line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.link-card .lc-desc{font-size:11px;color:var(--text-m);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.link-card .lc-host{font-size:10px;color:var(--text-l);margin-top:1px}
/* 流式纯文本阶段：保留换行与空白，避免段落挤成一坨；收尾切回markdown后此类名移除 */
.msg-bubble.streaming-plain{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
.thinking-content .think-plain{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
/* 流式纯文本阶段：保留换行与空白，避免段落挤成一坨；收尾切回markdown后移除此类名 */

/* 手感组 2026-08-05 —— 参考 Tidal_Echo MIT 项目实现思路 */
/* data-conn 单一状态源：JS 只改一个属性，视觉全靠 CSS 响应 */
html[data-conn="reconnecting"] .contact-status .dot-online{background:#d4a76a;box-shadow:0 0 4px rgba(212,167,106,.6)}
html[data-conn="reconnecting"] .contact-status:not(.typing) .status-text{color:#a37a4a}
html[data-conn="offline"] .contact-status .dot-online{background:#c8c0b8;box-shadow:none;opacity:.6}
html[data-conn="offline"] .contact-status:not(.typing) .status-text{color:var(--text-l);opacity:.7}
/* reaction 弹入：cubic-bezier 第二值 1.56 让它冲过头再弹回 → "啵"一下 */
.reaction-chip.pop-in{animation:reactionPop .52s cubic-bezier(.34,1.56,.5,1) both}
@keyframes reactionPop{0%{transform:scale(.3);opacity:0}60%{transform:scale(1.08);opacity:1}100%{transform:scale(1);opacity:1}}
/* reaction 布局：作为第二行挂气泡下，跟随 human/ai 左右对齐 */
.msg-row.msg-user .reaction-bar{justify-content:flex-end}
.msg-row.msg-assistant .reaction-bar{justify-content:flex-start}
/* 按钮 :active 明显反馈，手感"快" */
.reaction-chip:active,.msg-action-btn:active,.top-vocab-button:active,.composer-tool:active{transform:scale(.9);transition:transform 60ms ease-out}

/* ═══ handfeel v20260805 ═══ */
/* 连接状态视觉响应：JS 只改 html[data-conn] 一个属性，CSS 负责所有视觉 */
html[data-conn="reconnecting"] .contact-status{color:#c9a678}
html[data-conn="reconnecting"] .contact-status .dot-online{background:#e0b878;box-shadow:0 0 4px rgba(224,184,120,.6);animation:connPulse 1.6s ease-in-out infinite}
html[data-conn="offline"] .contact-status{color:#b09090}
html[data-conn="offline"] .contact-status .dot-online{background:#b09090;box-shadow:none;opacity:.6}
@keyframes connPulse{0%,100%{opacity:.6}50%{opacity:1}}

/* 关键交互按钮的按下反馈：缩到 88% 明显但不突兀 */
.top-bar button:active:not(:disabled),
.msg-attach-btn:active:not(:disabled),
.reply-btn:active:not(:disabled),
.reaction-chip:active:not(:disabled),
.action-btn:active:not(:disabled),
.top-call-button:active:not(:disabled),
.top-vocab-button:active:not(:disabled){transform:scale(.88);transition:transform .06s ease}
.top-bar button,.msg-attach-btn,.reply-btn,.reaction-chip,.action-btn,.top-call-button,.top-vocab-button{transition:transform .12s ease}

/* A3 搜索命中闪一下 —— 2.6秒橙色渐隐 */
.msg-row.msg-found .msg-bubble{animation:msgFound 2.6s ease-out}
@keyframes msgFound{0%{box-shadow:0 0 0 3px rgba(232,168,90,.55),0 4px 14px rgba(232,168,90,.28)}70%{box-shadow:0 0 0 2px rgba(232,168,90,.22),0 2px 8px rgba(232,168,90,.12)}100%{box-shadow:none}}

/* A3 搜索命中闪一下 —— 2.6秒橙色渐隐 */
.msg-row.msg-found .msg-bubble{animation:msgFound 2.6s ease-out}
@keyframes msgFound{0%{box-shadow:0 0 0 3px rgba(232,168,90,.55),0 4px 14px rgba(232,168,90,.28)}70%{box-shadow:0 0 0 2px rgba(232,168,90,.22),0 2px 8px rgba(232,168,90,.12)}100%{box-shadow:none}}

/* A3 搜索命中闪一下 2.6秒橙色渐隐 */
.msg-row.msg-found .msg-bubble{animation:msgFound 2.6s ease-out}
@keyframes msgFound{0%{box-shadow:0 0 0 3px rgba(232,168,90,.55),0 4px 14px rgba(232,168,90,.28)}70%{box-shadow:0 0 0 2px rgba(232,168,90,.22),0 2px 8px rgba(232,168,90,.12)}100%{box-shadow:none}}

/* A3 搜索命中闪一下 —— 2.6秒橙色渐隐 */
.msg-row.msg-found .msg-bubble{animation:msgFound 2.6s ease-out}
@keyframes msgFound{0%{box-shadow:0 0 0 3px rgba(232,168,90,.55),0 4px 14px rgba(232,168,90,.28)}70%{box-shadow:0 0 0 2px rgba(232,168,90,.22),0 2px 8px rgba(232,168,90,.12)}100%{box-shadow:none}}

/* A3 搜索命中闪一下 —— 2.6秒橙色渐隐 */
.msg-row.msg-found .msg-bubble{animation:msgFound 2.6s ease-out}
@keyframes msgFound{0%{box-shadow:0 0 0 3px rgba(232,168,90,.55),0 4px 14px rgba(232,168,90,.28)}70%{box-shadow:0 0 0 2px rgba(232,168,90,.22),0 2px 8px rgba(232,168,90,.12)}100%{box-shadow:none}}

/* ── Chat Next × PhotoStack multi-image messages ──
 * Required Notice: PhotoStack by Wren036 (https://github.com/Wren036/PhotoStack)
 * PolyForm Noncommercial 1.0.0; full terms: /static/vendor/photostack/LICENSE.md
 */
.chat-attachment-grid.has-photo-stack{display:flex;flex-direction:column;align-items:flex-start;overflow:visible;min-width:188px;padding:4px 18px 4px 10px;margin-top:8px}
.msg-bubble>.chat-attachment-grid.has-photo-stack:first-child{margin-top:0}
.chat-photo-stack{position:relative;width:148px;height:198px;margin:2px 7px 3px;overflow:visible;isolation:isolate}
.chat-photo-stack .pstack-stage{filter:saturate(1.015);touch-action:pan-y}
.chat-photo-stack .pstack-card{border-radius:15px;border:1px solid rgba(255,255,255,.72);box-shadow:0 5px 18px rgba(35,25,31,.17),0 1px 3px rgba(35,25,31,.09);will-change:transform,opacity;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.chat-photo-stack .pstack-card img{background:color-mix(in srgb,var(--surface,#fff) 90%,#eee)}
.chat-photo-stack .pstack-badge{right:8px;bottom:8px;min-width:30px;box-sizing:border-box;padding:3px 8px;text-align:center;font:600 11px/1.25 -apple-system,BlinkMacSystemFont,"SF Pro Text",system-ui,sans-serif;letter-spacing:.01em;background:rgba(22,19,21,.48);box-shadow:0 1px 5px rgba(0,0,0,.15);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.msg-row.user .chat-attachment-grid.has-photo-stack{align-items:flex-end}
@media (max-width:380px){.chat-attachment-grid.has-photo-stack{min-width:178px;padding-right:14px}.chat-photo-stack{width:142px;height:190px}.chat-photo-stack .pstack-stage{transform:scale(.9595);transform-origin:top left}}
@media (prefers-reduced-motion:reduce){.chat-photo-stack .pstack-card{transition-duration:.01ms!important}}


/* Chat Next video understanding */
.attachment-preview:has(video.attachment-thumb){width:158px}
.chat-video-card{width:min(270px,72vw);overflow:hidden;border:1px solid var(--border);border-radius:12px;background:var(--surface);box-shadow:0 2px 10px rgba(45,32,36,.06)}
.chat-video{display:block;width:100%;max-height:360px;background:#151315;object-fit:contain}
.chat-video-meta{display:flex;justify-content:space-between;gap:10px;padding:7px 9px;color:var(--text-l);font-size:9px}
.chat-video-meta span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:10px}
.chat-attachment-grid:has(.chat-video-card){display:flex;flex-direction:column;gap:8px}

/* 2026-08-12 摘要编辑与消息多选删除 */
.daily-memory-card .daily-memory-action:nth-child(n+2){display:grid}
.daily-memory-edit-area{width:100%;box-sizing:border-box;min-height:112px;padding:11px 12px;border:1px solid var(--accent);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;line-height:1.7;resize:vertical;outline:none}
.daily-memory-edit-cancel,.daily-memory-edit-save{min-width:62px;height:34px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text-m);font-size:12px}
.daily-memory-edit-save{border-color:var(--accent);background:var(--accent);color:#fff}
.daily-memory-page{position:fixed;inset:0;z-index:901;height:100vh;height:100dvh;display:flex;flex-direction:column;border-radius:0;box-shadow:none;background:var(--bg);transform:none!important;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .16s ease}
.daily-memory-page.open{opacity:1;visibility:visible;pointer-events:auto}
.daily-memory-page .think-sheet-hdr{display:flex;align-items:center;padding:calc(12px + env(safe-area-inset-top)) 24px 16px;flex:none;background:var(--bg);z-index:2}
.daily-memory-page .think-sheet-body{flex:1;min-height:0;box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:0 24px calc(32px + env(safe-area-inset-bottom));scroll-padding-bottom:24px;color:var(--text);font-size:15px;line-height:1.8;white-space:normal;word-break:break-word}
.daily-memory-page .daily-memory-edit-area{max-height:calc(100dvh - 190px);resize:none}
.daily-memory-overlay{display:none}
.msg-row{position:relative;transition:opacity .18s,background .18s}
.msg-select-check{display:none;position:absolute;z-index:8;top:8px;left:-3px;width:24px;height:24px;padding:4px;border:1.5px solid var(--border);border-radius:50%;background:var(--bg);color:transparent;align-items:center;justify-content:center}
.msg-row.user .msg-select-check{left:auto;right:-3px}.msg-select-check svg{width:14px;height:14px}
.message-selecting .msg-row.selectable{padding-left:34px}.message-selecting .msg-row.user.selectable{padding-left:0;padding-right:34px}.message-selecting .msg-row.selectable .msg-select-check{display:flex}.message-selecting .msg-row.selected .msg-select-check{border-color:var(--accent);background:var(--accent);color:#fff}.message-selecting .msg-row.selected .msg-bubble{outline:2px solid color-mix(in srgb,var(--accent) 45%,transparent);outline-offset:2px}
.message-select-bar{position:fixed;z-index:12010;left:50%;bottom:calc(18px + env(safe-area-inset-bottom));width:min(440px,calc(100% - 28px));height:54px;box-sizing:border-box;padding:7px 9px;transform:translate(-50%,110px);opacity:0;pointer-events:none;display:flex;align-items:center;gap:7px;border:1px solid var(--border);border-radius:17px;background:color-mix(in srgb,var(--bg) 94%,white);box-shadow:0 12px 38px rgba(48,39,50,.18);transition:transform .24s var(--ease-smooth),opacity .2s}
.message-select-bar.open{transform:translate(-50%,0);opacity:1;pointer-events:auto}.message-select-bar button{height:38px;padding:0 13px;border:0;border-radius:11px;background:var(--surface);color:var(--text-m);font-size:12px}.message-select-bar .message-select-count{flex:1;text-align:center;color:var(--text);font-size:12px}.message-select-bar .message-select-delete{background:#c95f63;color:#fff}.message-select-bar .message-select-delete:disabled{opacity:.4}
.message-selecting .chat-input-area{opacity:.3;pointer-events:none}

/* Worldbook compact rows */
#wbAlwaysWrap .wb-trigger-item,
#wbTriggersWrap .wb-trigger-item {
  background: rgba(255,255,255,.22);
}
.wb-expand-btn {
  width: 28px;
  height: 32px;
  flex: 0 0 28px;
  display: inline-grid;
  place-items: center;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--text-l);
}
.wb-expand-btn span {
  width: 7px;
  height: 7px;
  display: block;
  border-right: 1.25px solid currentColor;
  border-bottom: 1.25px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  transition: transform .18s ease;
}
.wb-expand-btn.is-open span {
  transform: translateY(2px) rotate(225deg);
}
.wb-always-name,
.wb-name {
  min-width: 0;
  height: 38px;
  border: 1px solid rgba(120,120,125,.13) !important;
  border-radius: 9px !important;
  background: rgba(255,255,255,.25) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.3);
}
.wb-always-name:focus,
.wb-name:focus {
  border-color: rgba(100,100,110,.26) !important;
  background: rgba(255,255,255,.45) !important;
}

/* Worldbook name: solid label background, no nested outline */
.wb-always-name,
.wb-name {
  border: 0 !important;
  outline: 0 !important;
  border-radius: 10px !important;
  background: rgba(128,128,135,.10) !important;
  box-shadow: none !important;
  color: var(--text-m);
}
.wb-always-name:focus,
.wb-name:focus {
  border: 0 !important;
  outline: 0 !important;
  background: rgba(128,128,135,.16) !important;
  box-shadow: none !important;
}
.wb-group{margin:12px 0;border-radius:14px;background:rgba(125,125,135,.065);overflow:hidden}.wb-group-head{min-height:54px;padding:8px 10px;display:flex;align-items:center;gap:8px}.wb-group-name{min-width:0;flex:1;border:0;background:transparent;font-size:15px;font-weight:600;color:var(--text-m);padding:7px 3px}.wb-group-name:focus{outline:0}.wb-group-count{font-size:11px;color:var(--text-l);background:rgba(120,120,130,.10);padding:3px 7px;border-radius:10px}.wb-group-arrow{width:26px;height:30px;border:0;background:transparent;display:grid;place-items:center;color:var(--text-l)}.wb-group-arrow span{width:7px;height:7px;border-right:1.25px solid currentColor;border-bottom:1.25px solid currentColor;transform:translateY(-2px) rotate(45deg)}.wb-group-arrow.is-open span{transform:translateY(2px) rotate(225deg)}.wb-group-items{padding:2px 9px 10px}.wb-group-items .wb-trigger-item{background:rgba(255,255,255,.38)}.wb-add-child{width:100%;height:38px;border:1px dashed rgba(120,120,130,.18);border-radius:10px;background:transparent;color:var(--text-l)}.wb-delete{border:0;background:none;color:var(--text-l);font-size:16px;padding:3px 5px}.wb-meta-row{display:flex;align-items:center;gap:5px;margin-top:7px;font-size:10px;color:var(--text-l);flex-wrap:wrap}.wb-meta-row input{width:42px;padding:3px}.wb-meta-row select{max-width:130px;padding:3px}.wb-ungrouped-title{font-size:11px;color:var(--text-l);margin:12px 2px 8px}.wb-add-group{margin-bottom:10px!important}

/* Chat mode switch */
.mode-toggle{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 8px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text-m);font:inherit;font-size:11px;cursor:pointer;white-space:nowrap;transition:opacity .2s,background .2s,border-color .2s}.mode-toggle svg{width:15px;height:15px;display:block}.mode-toggle.mode-casual{background:rgba(255,247,232,.9);border-color:#e8c78f;color:#9b6a2d}.mode-toggle.mode-immersive{background:rgba(81,72,101,.12);border-color:rgba(108,99,160,.45);color:#665c88}.mode-toggle.is-locked{opacity:.58;cursor:not-allowed}.mode-toggle-lock{font-size:9px;font-variant-numeric:tabular-nums}.casual-split-line{display:block;margin-top:7px}.casual-split-line:first-child{margin-top:0}

.top-mode-toggle{height:28px!important;min-width:48px!important;padding:0 7px!important;gap:3px!important;flex:0 0 auto!important;border:1px solid var(--border)!important;border-radius:10px!important;background:var(--surface)!important;font-size:11px!important}.top-mode-toggle svg{width:15px!important;height:15px!important}.top-mode-toggle.mode-casual{background:rgba(255,247,232,.9)!important;border-color:#e8c78f!important;color:#9b6a2d!important}.top-mode-toggle.mode-immersive{background:rgba(81,72,101,.12)!important;border-color:rgba(108,99,160,.45)!important;color:#665c88!important}.top-mode-toggle.is-locked{opacity:.58!important}
.summary-action-list{padding:4px 18px 24px;display:grid;gap:10px}.summary-action-list button{display:grid;gap:4px;text-align:left;padding:14px 16px;border:1px solid var(--hairline);border-radius:12px;background:var(--surface);color:var(--text);cursor:pointer}.summary-action-list strong{font-size:14px;font-weight:500}.summary-action-list span{font-size:11px;color:var(--text-l)}


.summary-system-notice{width:100%;box-sizing:border-box;padding:9px 16px 8px;color:var(--text-l,#9a9a9a);font-size:11px;line-height:1.5;text-align:center;opacity:.82;user-select:none}


/* 日常 AI 分条：沿用沉浸式正文外观，不改用户端。 */
#chatMsgs.mode-casual 
/* User messages: keep the selected color, but make the glass softer and less card-like */
.msg-row.user .msg-bubble {
  background: color-mix(in srgb, var(--user-bubble) 34%, transparent) !important;
  border: 1px solid color-mix(in srgb, var(--user-bubble) 24%, white) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.34), 0 5px 14px color-mix(in srgb, var(--user-bubble) 10%, transparent) !important;
  -webkit-backdrop-filter: blur(20px) saturate(155%) !important;
  backdrop-filter: blur(20px) saturate(155%) !important;
}

/* User bubble: a quieter, translucent glass surface derived from the selected color */
.msg-row.user .msg-bubble {
  background: color-mix(in srgb, var(--user-bubble) 34%, transparent) !important;
  border: 1px solid color-mix(in srgb, var(--user-bubble) 24%, white) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.50),
    inset 0 -1px 0 rgba(255,255,255,.08),
    0 5px 16px color-mix(in srgb, var(--user-bubble) 10%, transparent) !important;
  -webkit-backdrop-filter: blur(20px) saturate(150%) !important;
  backdrop-filter: blur(20px) saturate(150%) !important;
}




/* Native layout: assistant and user share the existing bubble renderer. */
.msg-row.assistant .msg-wrap{max-width:76%;min-width:0;margin-left:0;align-items:flex-start}
.msg-row.assistant .msg-bubble{max-width:100%;box-sizing:border-box;word-break:break-word}
.msg-row.assistant + .msg-row.assistant .msg-avatar{visibility:hidden;pointer-events:none}
.msg-row.assistant + .msg-row.assistant .msg-wrap{margin-left:0}






/* AI liquid glass — clear body, refractive edge and moving specular sheen. */
#chatMsgs .msg-row.assistant .msg-bubble{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  padding:9px 13px!important;
  font-size:13.5px!important;
  line-height:1.68!important;
  color:var(--text)!important;
  border-radius:var(--radius)!important;
  background:
    radial-gradient(120% 95% at 8% 0%,rgba(255,255,255,.46) 0%,rgba(255,255,255,.12) 31%,transparent 58%),
    radial-gradient(95% 120% at 100% 100%,color-mix(in srgb,var(--ai-bubble) 34%,transparent) 0%,transparent 64%),
    color-mix(in srgb,var(--ai-bubble) 30%,transparent)!important;
  border:1px solid color-mix(in srgb,var(--ai-bubble) 34%,rgba(255,255,255,.72))!important;
  box-shadow:
    inset 1px 1px 0 rgba(255,255,255,.72),
    inset -1px -1px 0 color-mix(in srgb,var(--ai-bubble) 22%,rgba(70,70,80,.08))!important;
  -webkit-backdrop-filter:blur(7px) saturate(145%) brightness(1.04)!important;
  backdrop-filter:blur(7px) saturate(145%) brightness(1.04)!important;
}
#chatMsgs .msg-row.assistant .msg-bubble::before{
  content:"";
  position:absolute;
  z-index:-1;
  pointer-events:none;
  inset:1px;
  border-radius:inherit;
  background:
    linear-gradient(118deg,rgba(255,255,255,.38) 0%,rgba(255,255,255,.10) 18%,transparent 39%),
    radial-gradient(55% 28% at 72% 4%,rgba(255,255,255,.34),transparent 72%);
  opacity:.82;
}
#chatMsgs .msg-row.assistant .msg-bubble::after{
  content:"";
  position:absolute;
  z-index:-1;
  pointer-events:none;
  left:8%;right:14%;top:-1px;height:2px;
  border-radius:999px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.88),transparent);
  opacity:.72;
}
/* Compact only bubbles belonging to the same assistant run. */
#chatMsgs .msg-row.assistant.grouped,
#chatMsgs .msg-row.assistant + .msg-row.assistant{margin-top:-13px;margin-bottom:16px}
#chatMsgs .msg-row.assistant.grouped .msg-avatar,
#chatMsgs .msg-row.assistant + .msg-row.assistant .msg-avatar{visibility:hidden;pointer-events:none}
@media(max-width:430px){
  #chatMsgs .msg-row.assistant .msg-bubble{font-size:13.25px!important;line-height:1.64!important;padding:8px 12px!important}
}

/* AI liquid glass: translucent color surface, curved refraction highlights, no grey outer shadow. */
.msg-row.assistant .msg-bubble{
  position:relative!important;
  isolation:isolate;
  overflow:hidden!important;
  background:
    radial-gradient(120% 90% at 8% 0%,rgba(255,255,255,.58),transparent 42%),
    radial-gradient(90% 120% at 100% 100%,color-mix(in srgb,var(--ai-bubble) 72%,transparent),transparent 68%),
    color-mix(in srgb,var(--ai-bubble) 38%,transparent)!important;
  border:1px solid color-mix(in srgb,var(--ai-bubble) 42%,rgba(255,255,255,.72))!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.72),inset 0 -1px 0 rgba(255,255,255,.18),inset 1px 0 0 rgba(255,255,255,.24)!important;
  -webkit-backdrop-filter:blur(14px) saturate(180%)!important;
  backdrop-filter:blur(14px) saturate(180%)!important;
}
.msg-row.assistant .msg-bubble::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(118deg,rgba(255,255,255,.34) 0%,rgba(255,255,255,.08) 23%,transparent 48%,color-mix(in srgb,var(--ai-bubble) 18%,transparent) 100%);
  border-radius:inherit;
}
.msg-row.assistant + .msg-row.assistant{margin-top:-8px!important;margin-bottom:12px!important}
.msg-row.assistant + .msg-row.assistant .msg-avatar{visibility:hidden!important}

/* Message timestamp: one copy above the avatar; metadata row stays hidden. */
.msg-avatar-col{display:flex;flex-direction:column;align-items:center;flex:0 0 32px;min-width:32px;gap:3px;position:relative;overflow:visible!important}
.msg-avatar-col>.msg-time{display:block;position:absolute;top:-18px;right:-2px;z-index:3;width:max-content!important;min-width:max-content;min-height:0;padding:0;white-space:nowrap;font:400 10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.15px;color:var(--text)!important;opacity:.82!important;pointer-events:none}
.msg-avatar-col>.msg-time.sending::before{display:none}
.msg-row .msg-wrap>.msg-meta{margin-top:0;min-height:0;padding:0;justify-content:flex-start}
.msg-row .msg-wrap>.msg-meta .msg-time{display:none!important}
.msg-row.user .msg-wrap>.msg-meta{justify-content:flex-end}
.msg-row.assistant .msg-avatar-col>.msg-time{left:28px;right:auto}
.msg-row.user .msg-avatar-col>.msg-time{left:auto;right:28px!important}
.msg-row.assistant + .msg-row.assistant .msg-avatar-col{visibility:hidden}
.msg-row.assistant + .msg-row.assistant .msg-avatar-col>.msg-time{visibility:hidden!important}

/* One model turn may render as several assistant bubbles; show its No.xxx only once. */
.msg-row.assistant + .msg-row.assistant .msg-no{display:none!important}
.msg-row.assistant + .msg-row.assistant .msg-meta:has(.msg-no){display:none!important}

/* One user turn may contain several rendered rows; keep No.xxx on the first row only. */
.msg-row.user + .msg-row.user .msg-no{display:none!important}
.msg-row.user + .msg-row.user .msg-meta:has(.msg-no){display:none!important}

/* Final unified liquid-glass treatment for both sides. */
.msg-row.user .msg-bubble,
.msg-row.assistant .msg-bubble{
  position:relative!important; isolation:isolate; overflow:hidden!important;
  background:
    radial-gradient(120% 90% at 8% 0%,rgba(255,255,255,.58),transparent 42%),
    radial-gradient(90% 120% at 100% 100%,color-mix(in srgb,var(--bubble-color) 72%,transparent),transparent 68%),
    color-mix(in srgb,var(--bubble-color) 38%,transparent)!important;
  border:1px solid color-mix(in srgb,var(--bubble-color) 42%,rgba(255,255,255,.72))!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.72),inset 0 -1px 0 rgba(255,255,255,.18),inset 1px 0 0 rgba(255,255,255,.24)!important;
  -webkit-backdrop-filter:blur(14px) saturate(180%)!important;
  backdrop-filter:blur(14px) saturate(180%)!important;
  color:var(--text)!important;
}
.msg-row.user .msg-bubble{--bubble-color:var(--user-bubble)}
.msg-row.assistant .msg-bubble{--bubble-color:var(--ai-bubble)}
.msg-row.user .msg-bubble::before,
.msg-row.assistant .msg-bubble::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;background:linear-gradient(118deg,rgba(255,255,255,.34),rgba(255,255,255,.08) 23%,transparent 48%,color-mix(in srgb,var(--bubble-color) 18%,transparent));}

/* A turn has one timestamp: the first adjacent row keeps it, later rows hide it. */
.msg-row.user + .msg-row.user .msg-avatar-col>.msg-time,
.msg-row.assistant + .msg-row.assistant .msg-avatar-col>.msg-time{visibility:hidden!important;display:none!important}
.msg-row.user + .msg-row.user .msg-time,
.msg-row.assistant + .msg-row.assistant .msg-time{display:none!important}

/* Slight separation between different speakers; same-speaker split rows stay compact. */
.msg-row.user + .msg-row.assistant,
.msg-row.assistant + .msg-row.user{margin-top:6px!important}

/* Liquid glass navigation and composer — 2026-08-27 */
.top-bar,.chat-input-area{background:linear-gradient(180deg,rgba(255,255,255,.68),rgba(249,247,253,.48));-webkit-backdrop-filter:blur(30px) saturate(190%) brightness(1.06);backdrop-filter:blur(30px) saturate(190%) brightness(1.06);border-color:rgba(255,255,255,.58);box-shadow:inset 0 1px 0 rgba(255,255,255,.82),inset 0 -1px 0 rgba(255,255,255,.24),0 8px 28px -18px rgba(74,62,83,.28)}
.top-bar{position:relative;isolation:isolate}.chat-input-area{isolation:isolate;box-shadow:inset 0 1px 0 rgba(255,255,255,.82),inset 0 -1px 0 rgba(255,255,255,.28),0 -10px 30px -22px rgba(74,62,83,.3)}
.top-bar:before,.chat-input-area:before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse at 18% 0%,rgba(255,255,255,.7),transparent 45%),radial-gradient(ellipse at 86% 100%,rgba(216,199,231,.14),transparent 48%)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.top-bar,.chat-input-area{background:rgba(251,250,255,.94)}}

/* Transparent liquid glass — stronger see-through treatment */
.top-bar,
.chat-input-area {
  background: linear-gradient(180deg, rgba(255,255,255,.28), rgba(248,245,252,.14)) !important;
  -webkit-backdrop-filter: blur(26px) saturate(180%) brightness(1.08) !important;
  backdrop-filter: blur(26px) saturate(180%) brightness(1.08) !important;
  border-color: rgba(255,255,255,.48) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.72), inset 0 -1px 0 rgba(255,255,255,.16), 0 8px 28px -20px rgba(50,40,60,.28) !important;
}
.top-bar:before,
.chat-input-area:before {
  z-index: 0 !important;
  background: linear-gradient(180deg, rgba(255,255,255,.22), rgba(255,255,255,0)) !important;
}
.top-bar > *,
.chat-input-area > * { position: relative; z-index: 1; }
.chat-textarea,
.input-row,
.chat-input-area .icon-btn,
.chat-input-area .model-select {
  background-color: rgba(255,255,255,.30) !important;
}

/* REAL LIQUID GLASS: keep the bars transparent so the wallpaper remains visible */
.top-bar,
.chat-input-area {
  background: rgba(255,255,255,.16) !important;
  -webkit-backdrop-filter: blur(22px) saturate(175%) brightness(1.08) !important;
  backdrop-filter: blur(22px) saturate(175%) brightness(1.08) !important;
  border: 0 !important;
  position: relative !important;
  isolation: auto !important;
}
.top-bar::after,
.chat-input-area::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background: linear-gradient(180deg,rgba(255,255,255,.28),rgba(255,255,255,.06));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.72), inset 0 -1px 0 rgba(255,255,255,.28);
}
.top-bar > *, .chat-input-area > * { position: relative; z-index: 1; }
.chat-input-area .input-row { background: rgba(255,255,255,.22) !important; border-color: rgba(255,255,255,.42) !important; }
.chat-input-area .chat-textarea { background: transparent !important; }
.chat-input-area .model-select { background: rgba(255,255,255,.25) !important; }

/* Final iOS-style Liquid Glass capsule for the avatar/action top bar. */
.top-bar {
  position: relative !important;
  z-index: 50 !important;
  isolation: isolate !important;
  margin: 8px max(10px, env(safe-area-inset-right)) 0 max(10px, env(safe-area-inset-left)) !important;
  width: auto !important;
  min-height: 56px !important;
  padding-top: 10px !important;
  padding-bottom: 10px !important;
  overflow: hidden !important;
  border: 1px solid rgba(255,255,255,.26) !important;
  border-radius: 999px !important;
  background: rgba(255,255,255,.035) !important;
  -webkit-backdrop-filter: blur(34px) saturate(190%) brightness(1.08) !important;
  backdrop-filter: blur(34px) saturate(190%) brightness(1.08) !important;
  box-shadow: none !important;
}
.top-bar::before {
  content: "" !important;
  position: absolute !important;
  inset: 0 !important;
  z-index: -1 !important;
  pointer-events: none !important;
  border-radius: inherit !important;
  background:
    radial-gradient(ellipse at 16% 0%, rgba(255,255,255,.22), transparent 42%),
    linear-gradient(120deg, rgba(255,255,255,.12), rgba(255,255,255,.012) 44%, rgba(214,197,230,.06) 76%, rgba(255,255,255,.10)) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.36), inset 0 -1px 0 rgba(255,255,255,.06) !important;
}
.top-bar::after { display: none !important; }
.top-bar > * { position: relative !important; z-index: 1 !important; }

/* Keep the existing composer transparent and shadowless. */
.chat-input-area { box-shadow: none !important; }
.chat-input-card {
  background: rgba(255,255,255,.035) !important;
  border: 1px solid rgba(255,255,255,.24) !important;
  -webkit-backdrop-filter: blur(24px) saturate(185%) !important;
  backdrop-filter: blur(24px) saturate(185%) !important;
  box-shadow: none !important;
}
.chat-input-card .chat-textarea { background: transparent !important; }

/* FINAL TOPBAR MATERIAL — iOS liquid-glass capsule, no external shadow. */
.top-bar {
  position: relative !important;
  z-index: 50 !important;
  isolation: isolate !important;
  margin: 8px max(10px, env(safe-area-inset-right)) 0 max(10px, env(safe-area-inset-left)) !important;
  width: auto !important;
  min-height: 56px !important;
  border: 1px solid rgba(255,255,255,.28) !important;
  border-radius: 999px !important;
  background: rgba(255,255,255,.025) !important;
  -webkit-backdrop-filter: blur(28px) saturate(200%) brightness(1.10) !important;
  backdrop-filter: blur(28px) saturate(200%) brightness(1.10) !important;
  box-shadow: none !important;
  overflow: hidden !important;
}
.top-bar::before {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  inset: 0 !important;
  z-index: 0 !important;
  pointer-events: none !important;
  border-radius: inherit !important;
  background:
    radial-gradient(ellipse at 18% 0%, rgba(255,255,255,.21), transparent 43%),
    radial-gradient(ellipse at 82% 100%, rgba(208,190,225,.07), transparent 47%),
    linear-gradient(125deg, rgba(255,255,255,.07), rgba(255,255,255,.008) 48%, rgba(255,255,255,.04)) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.38), inset 0 -1px 0 rgba(255,255,255,.06) !important;
}
.top-bar::after { content: none !important; display: none !important; }
.top-bar > * { position: relative !important; z-index: 1 !important; }

/* Topbar glass over the actual message layer: transparent like a message bubble. */
.chat-wall { z-index: 0 !important; }
.chat-messages {
  position: relative !important;
  z-index: 1 !important;
}
.top-bar {
  position: relative !important;
  z-index: 10 !important;
  background: rgba(255,255,255,.045) !important;
  border-color: rgba(255,255,255,.24) !important;
  -webkit-backdrop-filter: blur(20px) saturate(175%) !important;
  backdrop-filter: blur(20px) saturate(175%) !important;
  box-shadow: none !important;
}
.top-bar::before {
  background:
    linear-gradient(135deg, rgba(255,255,255,.12), rgba(255,255,255,.015) 50%, rgba(220,204,232,.05)) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.30), inset 0 -1px 0 rgba(255,255,255,.05) !important;
}
.top-bar::after { display:none !important; }
.top-bar > * { position:relative !important; z-index:1 !important; }

/* Floating glass topbar: messages run behind it while composer stays in flow. */
.top-bar {
  position: absolute !important;
  top: 8px !important;
  left: max(10px, env(safe-area-inset-left)) !important;
  right: max(10px, env(safe-area-inset-right)) !important;
  width: auto !important;
  margin: 0 !important;
  z-index: 20 !important;
}
.chat-messages {
  position: relative !important;
  z-index: 1 !important;
  flex: 1 1 auto !important;
  min-height: 0 !important;
  overflow-y: auto !important;
  padding-top: calc(82px + env(safe-area-inset-top)) !important;
}


/* Bubble colors remain independently controlled by the appearance settings. */
.msg-row.assistant .msg-bubble { background: var(--ai-bubble) !important; color: var(--text) !important; }
.msg-row.user .msg-bubble { background: color-mix(in srgb, var(--user-bubble) 25%, transparent) !important; color: var(--text) !important; }

/* Injected-episode inspector: show exactly what this turn sent to the model. */
.forge-layer-group{margin:14px 0 6px;font-size:12px;font-weight:600;color:var(--muted,#8b8b8b);letter-spacing:.02em}
.forge-episode{margin:0 0 10px;padding:10px 12px;border:1px solid var(--line,#e5e5e5);border-radius:12px;background:var(--card,#fff)}
.forge-episode-meta{font-size:11px;color:var(--muted,#8b8b8b);margin-bottom:4px}
.forge-episode-title{font-size:13px;font-weight:600;margin-bottom:4px}
.forge-episode pre{margin:0;white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.55}
.daily-memory-group{margin:14px 0 8px;font-size:12px;font-weight:600;color:var(--text-l)}
.daily-memory-card.injected{border-left:3px solid var(--accent)}
.daily-memory-archive-link{margin-top:8px;padding:5px 10px;font-size:11px;border:1px solid var(--border);border-radius:8px;background:transparent;color:var(--text-l)}

/* UI-only marker for a proactive turn that produced no visible reply. */
.silent-completion{
  display:block;
  width:100%;
  max-width:860px;
  box-sizing:border-box;
  margin:0 auto 20px;
  padding:2px 12px;
  color:rgba(110,110,110,.48);
  font-size:10.5px;
  font-weight:400;
  line-height:1.5;
  text-align:center;
  pointer-events:none;
  user-select:none;
}
