:root{--bg: #f5f1ea;--panel: #fbf8f3;--ink: #3a3631;--muted: #9c9388;--pink: #e7b6b8;--pink-soft: #f3dde0;--line: #e7e0d6;--surface: #ffffff;--surface-warm: #fffaf9;--think-bg: #faf3f1;--think-ink: #7d6f6a;--accent-ink: #9b6d70;--link: #c77777;--wave-mine: #b98488;--play-mine: #d59fa2;--tone-ink: #a9928f;--ok: #4a8c5a;--err: #c0564f;--rec: #d9534f;--scrim: rgba(0,0,0,.3);--shadow: rgba(0,0,0,.08);--bubble-shadow: 0 1px 2px rgba(58,54,49,.05);--on-pink: #ffffff;--me-bg: var(--pink-soft);--me-ink: var(--ink);--me-surface: var(--surface-warm);--me-muted: var(--muted);--sep-ink: var(--muted);color-scheme:light}:root[data-theme=dark]{--bg: #171412;--panel: #1f1b19;--ink: #ece6de;--muted: #978d83;--pink: #c98f93;--pink-soft: #3b2c2e;--line: #322c28;--surface: #26211e;--surface-warm: #2c2422;--think-bg: #241d1d;--think-ink: #b3a49c;--accent-ink: #d9a8ab;--link: #d99a9a;--wave-mine: #c98f93;--play-mine: #b0787c;--tone-ink: #a2928c;--ok: #7fb98c;--err: #e08a83;--rec: #e0736d;--scrim: rgba(0,0,0,.55);--shadow: rgba(0,0,0,.4);--bubble-shadow: 0 1px 2px rgba(0,0,0,.22);--on-pink: #ffffff;color-scheme:dark}:root[data-theme=dark][data-tone=soft]{--bg: #2b1d19;--panel: #352520;--ink: #fce5e7;--muted: #c3a496;--pink: #e8c1aa;--pink-soft: #66463d;--line: #6a4d42;--surface: #63483e;--surface-warm: #6d5045;--think-bg: #5b4239;--think-ink: #d9bfb2;--accent-ink: #f0d0c4;--link: #e8c1aa;--wave-mine: #d9b09a;--play-mine: #b98a72;--tone-ink: #c9ab9c;--ok: #9dcaa2;--err: #f0a196;--rec: #ef8c7f;--scrim: rgba(0,0,0,.45);--shadow: rgba(0,0,0,.28);--bubble-shadow: 0 1px 2px rgba(0,0,0,.14);--on-pink: #2b1d19;--me-bg: #fce5e7;--me-ink: #5a3f36;--me-surface: #f7dcdd;--me-muted: #7a5a4e;--sep-ink: #e3ccc0;--wave-mine: #a8737a;--play-mine: #c78e94;color-scheme:dark}*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden}#root{height:100vh;height:100dvh;height:var(--app-h, 100dvh);overflow:hidden}input,textarea,select{font-size:16px}body{font-family:-apple-system,PingFang SC,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}.app{display:flex;height:100%;position:relative;overflow:hidden}.sidebar{width:260px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:16px 12px}.brand{font-weight:700;font-size:18px;padding:6px 8px 14px}.new-btn{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:12px;padding:10px;font-size:15px;cursor:pointer}.new-btn:active{background:var(--pink-soft)}.sessions{margin-top:12px;overflow-y:auto;flex:1}.session{display:flex;align-items:center;justify-content:space-between;padding:10px;border-radius:10px;cursor:pointer;font-size:14px;color:var(--ink)}.session.active{background:var(--pink-soft)}.session-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.del{color:var(--muted);padding:0 4px;font-size:12px}.del:hover{color:var(--pink)}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{display:flex;align-items:center;gap:10px;padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top));border-bottom:1px solid var(--line);background:var(--panel)}.icon-btn{border:none;background:transparent;font-size:20px;cursor:pointer;color:var(--ink);padding:4px 6px}.model-select{flex:1;min-width:0;max-width:280px;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:8px 10px;font-size:16px;color:var(--ink);text-overflow:ellipsis}.icon-btn{flex:none}.inputbar textarea{min-width:0}.messages{flex:1;overflow-y:auto;padding:18px 14px}.hint{text-align:center;color:var(--muted);margin-top:40px;font-size:14px}.bubble{max-width:78%;padding:11px 14px;border-radius:16px;margin:8px 0;line-height:1.6;font-size:15px;white-space:pre-wrap;word-break:break-word}.bubble.me{background:var(--me-bg);color:var(--me-ink);margin-left:auto;border-bottom-right-radius:5px;box-shadow:var(--bubble-shadow)}.bubble-img{display:block;max-width:100%;border-radius:10px}.bubble:has(.bubble-img){padding:5px}.bubble.ai{background:var(--surface);border:1px solid var(--line);border-bottom-left-radius:5px;box-shadow:var(--bubble-shadow)}.msg-link{color:var(--link);word-break:break-all}.msg-row{display:flex;flex-direction:column;align-items:flex-start}.think{max-width:80%;margin:8px 0 -2px;font-size:13px}.think summary{cursor:pointer;list-style:none;padding:5px 12px;border-radius:12px;background:var(--pink-soft);color:var(--accent-ink);display:inline-block;-webkit-user-select:none;user-select:none}.think summary::-webkit-details-marker{display:none}.think[open] summary{border-bottom-left-radius:4px}.think-body{margin-top:4px;padding:10px 14px;background:var(--think-bg);border:1px dashed var(--pink);border-radius:14px;line-height:1.6;white-space:pre-wrap;word-break:break-word;color:var(--think-ink)}.typing{display:inline-flex;gap:4px;align-items:center}.typing span{width:7px;height:7px;border-radius:50%;background:var(--pink);animation:blink 1.2s infinite both}.typing span:nth-child(2){animation-delay:.2s}.typing span:nth-child(3){animation-delay:.4s}@keyframes blink{0%,80%,to{opacity:.25}40%{opacity:1}}.inputbar{display:flex;gap:8px;padding:10px 12px;border-top:1px solid var(--line);background:var(--panel)}.inputbar textarea{flex:1;resize:none;border:1px solid var(--line);border-radius:14px;padding:11px 14px;font-size:16px;font-family:inherit;max-height:140px;background:var(--surface);color:var(--ink)}.send-btn{border:none;background:var(--pink);color:var(--on-pink);border-radius:14px;padding:0 18px;font-size:15px;cursor:pointer}.send-btn:disabled{opacity:.5}.attach-btn{display:flex;align-items:center;justify-content:center;width:34px;height:38px;font-size:19px;cursor:pointer;flex:none;background:transparent;border:none;padding:0;border-radius:10px}.attach-btn input{display:none}.attach-btn.on{background:var(--pink-soft);border-radius:10px}.img-preview{position:relative;align-self:flex-start;margin:0 0 -2px 12px;background:var(--panel)}.img-preview img{max-height:96px;border-radius:10px;display:block}.img-preview button{position:absolute;top:-8px;right:-8px;width:22px;height:22px;border-radius:50%;border:none;background:var(--ink);color:var(--bg);font-size:12px;cursor:pointer}.rec-bar{flex:1;display:flex;align-items:center;gap:10px;border:1px solid var(--pink);background:var(--surface);border-radius:14px;padding:9px 12px}.rec-dot{width:9px;height:9px;border-radius:50%;background:var(--rec);flex:none;animation:pulse 1.1s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}.rec-time{flex:1;font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}.rec-cancel,.rec-done{border:none;border-radius:10px;padding:7px 14px;font-size:14px;cursor:pointer;flex:none}.rec-cancel{background:transparent;color:var(--muted)}.rec-done{background:var(--pink);color:var(--on-pink)}.voice{max-width:78%;margin:8px 0}.voice.mine{margin-left:auto}.voice-bar{display:flex;align-items:center;gap:10px;padding:9px 13px;background:var(--surface);border:1px solid var(--line);border-radius:16px 16px 16px 5px}.voice.mine .voice-bar{background:var(--me-bg);border-color:transparent;border-bottom-left-radius:16px;border-bottom-right-radius:5px}.voice-play{flex:none;width:30px;height:30px;border-radius:50%;border:none;cursor:pointer;background:var(--pink);color:var(--on-pink);font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center}.voice.mine .voice-play{background:var(--play-mine)}.voice-wave{flex:1;min-width:90px;height:28px;cursor:pointer;display:flex;align-items:center;gap:2px}.voice-wave i{flex:1;min-width:2px;border-radius:2px;background:var(--pink);opacity:.3;transition:opacity .12s linear}.voice-wave i.on{opacity:.95}.voice.mine .voice-wave i{background:var(--wave-mine)}.voice-dur{flex:none;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;letter-spacing:.3px}.voice-txt{flex:none;border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:8px;padding:2px 7px;font-size:11px;cursor:pointer;line-height:1.5}.voice-txt.on{background:var(--pink);border-color:var(--pink);color:var(--on-pink)}.voice-text{margin-top:6px;padding:9px 13px;border-radius:13px;background:var(--surface);border:1px solid var(--line);font-size:14px;line-height:1.6;white-space:pre-wrap;word-break:break-word}.voice.mine .voice-text{background:var(--me-surface);color:var(--me-ink)}.voice-tone{margin-top:5px;padding:0 4px;font-size:12px;color:var(--tone-ink);font-style:italic}.voice.mine .voice-tone{text-align:right}.voice-preview{position:relative;align-self:flex-end;margin:0 12px -2px 0;max-width:70%}.voice-preview .voice{max-width:none}.voice-drop{position:absolute;top:-8px;right:-8px;width:22px;height:22px;border-radius:50%;border:none;background:var(--ink);color:var(--bg);font-size:12px;cursor:pointer;line-height:1}.speak-btn{align-self:flex-start;margin:-2px 0 6px;padding:3px 10px;border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:11px;font-size:12px;cursor:pointer}.speak-btn:disabled{opacity:.6}.speak-btn.on{background:var(--pink-soft);border-color:var(--pink);color:var(--accent-ink)}.voice-pick{display:flex;gap:8px}.voice-select{flex:1;min-width:0;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:9px 11px;font-size:16px;color:var(--ink)}.voice-try{flex:none;border:1px solid var(--pink);background:var(--pink-soft);color:var(--accent-ink);border-radius:10px;padding:0 14px;font-size:13px;cursor:pointer}.voice-try:disabled{opacity:.6}.style-presets{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.style-preset{border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:999px;padding:5px 12px;font-size:12px;cursor:pointer}.style-preset.on{background:var(--pink);border-color:var(--pink);color:var(--on-pink)}.tts-style{width:100%;margin-top:8px;border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:16px;font-family:inherit;resize:vertical;background:var(--surface);color:var(--ink)}.tts-auto{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);margin:10px 0 0;cursor:pointer}.tts-auto input{accent-color:var(--pink)}.scrim{display:none}.modal-scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--scrim);display:flex;align-items:center;justify-content:center;padding:20px;z-index:30}.modal{background:var(--panel);border-radius:18px;padding:20px;width:100%;max-width:480px;max-height:86vh;overflow-y:auto}.modal h3{margin:0 0 14px}.modal label{display:block;font-size:13px;color:var(--muted);margin:12px 0 6px}.sys-prompt{width:100%;min-height:180px;border:1px solid var(--line);border-radius:12px;padding:12px;font-size:16px;font-family:inherit;resize:vertical;background:var(--surface);color:var(--ink)}.modal input[type=range]{width:100%;accent-color:var(--pink)}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.modal-actions button{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:9px 16px;font-size:14px;cursor:pointer;color:var(--ink)}.modal-actions .primary{background:var(--pink);color:var(--on-pink);border-color:var(--pink)}.diary-btn{width:100%;margin-bottom:12px;padding:11px;border-radius:12px;border:1px solid var(--pink);background:var(--pink-soft);color:var(--accent-ink);font-size:14px;cursor:pointer}.diary-btn:disabled{opacity:.6}.mem-add{display:flex;gap:8px;margin-bottom:14px}.mem-add textarea{flex:1;border:1px solid var(--line);border-radius:12px;padding:10px;font-size:16px;font-family:inherit;resize:vertical;background:var(--surface);color:var(--ink)}.mem-add .primary{align-self:stretch;padding:0 16px}.mem-list{display:flex;flex-direction:column;gap:10px}.mem-item{border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--surface)}.mem-item.pinned{border-color:var(--pink);background:var(--surface-warm)}.mem-actions{display:flex;gap:14px;align-items:center}.mem-pin{margin-top:8px;border:none;background:transparent;color:var(--muted);font-size:13px;cursor:pointer;padding:2px 0}.mem-pin:hover,.mem-item.pinned .mem-pin{color:var(--pink)}.mem-text{font-size:13px;line-height:1.6;white-space:pre-wrap;word-break:break-word;max-height:220px;overflow-y:auto;color:var(--ink)}.mem-del{margin-top:8px;border:none;background:transparent;color:var(--muted);font-size:13px;cursor:pointer;padding:2px 0}.mem-del:hover{color:var(--pink)}.mcp-list{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}.mcp-item{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:var(--surface)}.mcp-item.off{opacity:.55}.mcp-row1{display:flex;align-items:baseline;gap:8px}.mcp-name{font-size:14px;font-weight:600;color:var(--ink)}.mcp-meta{font-size:12px;color:var(--muted)}.mcp-url{font-size:12px;color:var(--muted);word-break:break-all;margin:2px 0 6px}.mcp-item-actions{display:flex;align-items:center;gap:14px}.mcp-toggle{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:5px;cursor:pointer;margin:0}.mcp-add{display:flex;flex-direction:column;gap:8px;margin-bottom:6px}.mcp-add input{border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:16px;font-family:inherit;background:var(--surface);color:var(--ink)}.mcp-add-actions{display:flex;gap:8px}.mcp-add-actions button{flex:1;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:9px;font-size:14px;cursor:pointer;color:var(--ink)}.mcp-add-actions button:disabled{opacity:.6}.mcp-add-actions .primary{background:var(--pink);color:var(--on-pink);border-color:var(--pink)}.mcp-test{font-size:12px;line-height:1.5;padding:6px 2px;word-break:break-word}.mcp-test.ok{color:var(--ok)}.mcp-test.err{color:var(--err)}@media (max-width: 720px){.sidebar{position:fixed;left:0;top:0;bottom:0;z-index:20;transform:translate(-100%);transition:transform .25s ease;box-shadow:2px 0 16px var(--shadow)}.sidebar.open{transform:translate(0)}.scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:var(--scrim);z-index:15}.model-select{max-width:none}.inputbar{gap:4px;padding-left:8px;padding-right:8px}.attach-btn{width:29px;font-size:17px}.inputbar textarea{padding:11px 12px}.send-btn{padding:0 13px}.voice{max-width:88%}}@media (min-width: 721px){.icon-btn.menu{display:none}}.empty-msg{color:var(--muted);font-size:13px;font-style:italic}.msg-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ctx-note{font-size:11px;color:var(--muted)}.ctx-note.trimmed{color:var(--tone-ink)}.link-btn{background:none;border:0;padding:0 0 0 6px;cursor:pointer;font:inherit;color:inherit;text-decoration:underline}.cost-note{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;background:none;border:0;padding:0;cursor:pointer;font-family:inherit}.cost-note.cached{color:var(--tone-ink)}.cost-note.on{text-decoration:underline}.cost-detail{margin:4px 0 2px 8px;padding:8px 10px;border-left:2px solid var(--line, rgba(128,128,128,.3));font-size:11px;line-height:1.7;color:var(--muted);word-break:break-all}.icon-btn,.attach-btn,.send-btn,.voice-play,.new-btn,.speak-btn,.mem-pin,.mem-del,.theme-btn{display:inline-flex;align-items:center;justify-content:center;gap:5px}.icon-btn{color:var(--muted);transition:color .15s}.icon-btn:hover,.icon-btn:active{color:var(--ink)}.attach-btn{color:var(--muted)}.attach-btn.on{color:var(--accent-ink)}.send-btn{padding:0 16px}.del{display:inline-flex;align-items:center}.mem-pin-mark{color:var(--pink);vertical-align:-2px;margin-right:4px}.time-sep{display:flex;justify-content:center;margin:16px 0 6px}.time-sep span{font-size:11px;color:var(--sep-ink);letter-spacing:.3px;background:var(--pink-soft);border-radius:999px;padding:3px 11px}.theme-pick{display:flex;gap:6px}.theme-btn{flex:1;border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:10px;padding:8px 4px;font-size:13px;cursor:pointer}.theme-btn.on{background:var(--pink-soft);border-color:var(--pink);color:var(--accent-ink)}.modal h3{display:flex;align-items:center;gap:7px}.modal label{display:flex;align-items:center;gap:5px}.think summary{display:inline-flex;align-items:center;gap:5px}.tabbar{display:flex;flex:none;border-top:1px solid var(--line);background:var(--panel);padding-bottom:env(safe-area-inset-bottom)}.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:7px 0 5px;border:none;background:none;cursor:pointer;color:var(--muted);font-size:11px;letter-spacing:.3px}.tab.on{color:var(--accent-ink)}.topbar .tt{flex:1;min-width:0;text-align:center}.tt-name{font-size:15px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tt-sub{font-size:11px;color:var(--muted);margin-top:1px}.icon-btn.ghost{width:34px;pointer-events:none}.page{flex:1;overflow-y:auto;padding:16px 14px}.set-label{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--muted);margin:14px 0 6px}.set-label:first-child{margin-top:0}.set-note{font-size:12px;line-height:1.7;color:var(--muted);margin:14px 2px 0}.set-list{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}.set-row{width:100%;display:flex;align-items:center;gap:10px;padding:14px;border:none;border-bottom:1px solid var(--line);background:none;cursor:pointer;text-align:left}.set-row:last-child{border-bottom:none}.set-row:active{background:var(--pink-soft)}.set-row .k{flex:none;font-size:15px;color:var(--ink)}.set-row .v{flex:1;text-align:right;font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.set-row .chev{flex:none;color:var(--muted);transform:rotate(180deg)}.set-foot{text-align:center;font-size:11px;color:var(--muted);margin-top:22px}.save-btn{width:100%;margin-top:18px;padding:12px;border-radius:12px;border:none;background:var(--pink);color:var(--on-pink);font-size:15px;cursor:pointer}.mem-list{margin-top:4px}.brand{display:flex;align-items:center;gap:7px;color:var(--accent-ink)}.s-act{display:inline-flex;align-items:center;color:var(--muted);padding:2px 3px;flex:none}.s-act:hover{color:var(--accent-ink)}.session-name{flex:1}.field{width:100%;border:1px solid var(--line);border-radius:10px;padding:11px 12px;font-size:16px;font-family:inherit;background:var(--surface);color:var(--ink)}.page input[type=range]{width:100%;accent-color:var(--pink)}.voice.mine .voice-dur{color:var(--me-muted)}.voice.mine .voice-txt{color:var(--me-muted);border-color:var(--me-muted)}
