:root{--color-bg:#0d0d0d;--color-surface:#1a1a1a;--color-surface-elevated:#2a2a2a;--color-surface-hover:#333;--color-border:#333;--color-border-subtle:#262626;--color-text:#ececec;--color-text-secondary:#a0a0a0;--color-text-tertiary:#666;--color-accent:#10a37f;--color-accent-hover:#0d8f6e;--color-code-bg:#1e1e1e;--color-danger:#ef4444;--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;--font-mono:"SF Mono","Fira Code",monospace;--radius-sm:6px;--radius-md:12px;--radius-lg:18px;--radius-full:9999px;--sidebar-width:260px;--transition:.15s ease}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);overflow:hidden;-webkit-font-smoothing:antialiased}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
textarea{font-family:inherit}
.app{display:flex;height:100vh;width:100vw}
.sidebar{width:var(--sidebar-width);min-width:var(--sidebar-width);background:var(--color-bg);border-right:1px solid var(--color-border-subtle);display:flex;flex-direction:column;transition:transform .2s ease;z-index:50}
.sidebar-header{padding:12px;display:flex;align-items:center;gap:8px}
.sidebar-new-chat{flex:1;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-md);border:1px solid var(--color-border);color:var(--color-text);font-size:14px;transition:background var(--transition);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar-new-chat:hover{background:var(--color-surface)}
.sidebar-new-chat svg{flex-shrink:0;width:16px;height:16px}
.sidebar-toggle{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);color:var(--color-text-secondary);transition:background var(--transition);flex-shrink:0}
.sidebar-toggle:hover{background:var(--color-surface)}
.sidebar-toggle svg{width:20px;height:20px}
.sidebar-nav{flex:1;overflow-y:auto;padding:4px 8px}
.sidebar-nav::-webkit-scrollbar{width:4px}
.sidebar-nav::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}
.sidebar-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:var(--radius-sm);font-size:13px;color:var(--color-text-secondary);cursor:pointer;transition:background var(--transition);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar-item:hover{background:var(--color-surface);color:var(--color-text)}
.sidebar-item.active{background:var(--color-surface);color:var(--color-text)}
.sidebar-item svg{flex-shrink:0;width:16px;height:16px;opacity:.7}
.sidebar-item-text{flex:1;overflow:hidden;text-overflow:ellipsis}
.sidebar-item-delete{opacity:0;padding:2px;border-radius:4px;transition:opacity var(--transition);flex-shrink:0}
.sidebar-item:hover .sidebar-item-delete{opacity:1}
.sidebar-item-delete:hover{background:var(--color-surface-hover)}
.sidebar-footer{padding:12px;border-top:1px solid var(--color-border-subtle)}
.sidebar-user{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition)}
.sidebar-user:hover{background:var(--color-surface)}
.sidebar-user-avatar{width:28px;height:28px;border-radius:50%;background:var(--color-accent);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff;flex-shrink:0}
.sidebar-user-name{font-size:13px;font-weight:500}
.main{flex:1;display:flex;flex-direction:column;min-width:0;position:relative}
.chat-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--color-border-subtle);background:var(--color-bg);z-index:10}
.chat-header-left{display:flex;align-items:center;gap:8px}
.mobile-menu-btn{display:none;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);color:var(--color-text-secondary)}
.mobile-menu-btn:hover{background:var(--color-surface)}
.chat-header-actions{display:flex;align-items:center;gap:4px}
.header-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);color:var(--color-text-secondary);transition:background var(--transition)}
.header-btn:hover{background:var(--color-surface);color:var(--color-text)}
.messages{flex:1;overflow-y:auto;scroll-behavior:smooth}
.messages::-webkit-scrollbar{width:6px}
.messages::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}
.messages-inner{max-width:768px;margin:0 auto;padding:24px 16px 120px}
.message{display:flex;gap:16px;padding:20px 0;border-bottom:1px solid var(--color-border-subtle)}
.message:last-child{border-bottom:none}
.message-avatar{width:30px;height:30px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff;overflow:hidden}
.message-avatar.user-avatar{background:#5e5e5e}
.message-avatar.bot-avatar{background:var(--color-accent)}
.message-avatar img{width:100%;height:100%;object-fit:cover}
.message-content{flex:1;min-width:0;padding-top:2px}
.message-role{font-size:13px;font-weight:600;margin-bottom:6px}
.message-text{font-size:15px;line-height:1.7;color:var(--color-text);word-wrap:break-word}
.message-text p{margin:0 0 8px}
.message-text p:last-child{margin-bottom:0}
.message-text pre{background:var(--color-code-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:16px;margin:12px 0;overflow-x:auto;font-family:var(--font-mono);font-size:13px;line-height:1.6}
.message-text code{font-family:var(--font-mono);font-size:13px}
.message-text :not(pre)>code{background:var(--color-code-bg);padding:2px 6px;border-radius:4px;font-size:13px}
.message-text ul,.message-text ol{padding-left:24px;margin:8px 0}
.message-text li{margin-bottom:4px}
.message-text strong{font-weight:600}
.message-text h1,.message-text h2,.message-text h3{margin:16px 0 8px;font-weight:600}
.message-text h1{font-size:20px}.message-text h2{font-size:18px}.message-text h3{font-size:16px}
.message-text blockquote{border-left:3px solid var(--color-border);padding-left:16px;margin:12px 0;color:var(--color-text-secondary)}
.message-text table{width:100%;border-collapse:collapse;margin:12px 0}
.message-text td,.message-text th{border:1px solid var(--color-border);padding:8px 12px}
.message-text hr{border:none;border-top:1px solid var(--color-border);margin:16px 0}
.message-actions{display:flex;gap:4px;margin-top:8px}
.msg-action-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-sm);color:var(--color-text-tertiary);transition:all var(--transition)}
.msg-action-btn:hover{background:var(--color-surface);color:var(--color-text)}
.msg-action-btn svg{width:16px;height:16px}
.welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;text-align:center}
.welcome-icon{width:64px;height:64px;border-radius:50%;background:var(--color-accent);display:flex;align-items:center;justify-content:center;margin-bottom:20px}
.welcome-icon svg{width:32px;height:32px;color:#fff}
.welcome h1{font-size:28px;font-weight:600;margin-bottom:8px}
.welcome p{color:var(--color-text-secondary);font-size:15px;margin-bottom:32px}
.suggestions{display:grid;grid-template-columns:1fr 1fr;gap:12px;max-width:600px;width:100%}
.suggestion-card{padding:14px 16px;border:1px solid var(--color-border);border-radius:var(--radius-md);text-align:left;transition:all var(--transition);cursor:pointer}
.suggestion-card:hover{background:var(--color-surface);border-color:var(--color-text-tertiary)}
.suggestion-card-title{font-size:13px;font-weight:600;margin-bottom:4px}
.suggestion-card-desc{font-size:12px;color:var(--color-text-secondary)}
.input-area{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,var(--color-bg) 30%);padding:20px 16px 16px}
.input-inner{max-width:768px;margin:0 auto}
.input-wrapper{display:flex;align-items:flex-end;gap:8px;background:var(--color-surface-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:10px 14px;transition:border-color var(--transition);box-shadow:0 4px 20px rgba(0,0,0,.3)}
.input-wrapper:focus-within{border-color:var(--color-text-tertiary)}
.input-actions-left{display:flex;align-items:center;gap:2px;padding-bottom:2px}
.input-action-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);color:var(--color-text-secondary);transition:all var(--transition)}
.input-action-btn:hover{background:var(--color-surface-hover);color:var(--color-text)}
.input-action-btn svg{width:18px;height:18px}
.chat-input{flex:1;background:none;border:none;outline:none;color:var(--color-text);font-size:15px;line-height:1.5;resize:none;max-height:200px;min-height:24px;padding:4px 0}
.chat-input::placeholder{color:var(--color-text-tertiary)}
.send-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:var(--color-text-tertiary);color:var(--color-bg);transition:all var(--transition);flex-shrink:0;margin-bottom:1px}
.send-btn:hover{background:var(--color-text-secondary)}.send-btn:disabled{opacity:.4;cursor:default}
.send-btn svg{width:16px;height:16px}
.input-footer{text-align:center;padding-top:8px;font-size:11px;color:var(--color-text-tertiary)}
.typing-indicator{display:flex;gap:4px;padding:8px 0}
.typing-indicator span{width:6px;height:6px;border-radius:50%;background:var(--color-text-tertiary);animation:typing 1.4s infinite}
.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}
@keyframes typing{0%,60%,100%{transform:translateY(0);opacity:.4}30%{transform:translateY(-6px);opacity:1}}
.sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:40}
@media(max-width:768px){.sidebar{position:fixed;top:0;left:0;bottom:0;transform:translateX(-100%);box-shadow:4px 0 20px rgba(0,0,0,.5)}.sidebar.open{transform:translateX(0)}.sidebar-overlay.open{display:block}.mobile-menu-btn{display:flex}.suggestions{grid-template-columns:1fr}}
.stop-btn{display:flex;align-items:center;gap:6px;padding:6px 14px;border:1px solid var(--color-border);border-radius:var(--radius-full);font-size:13px;color:var(--color-text);transition:all var(--transition)}
.stop-btn:hover{background:var(--color-surface)}.stop-btn svg{width:12px;height:12px}
.model-selector{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--radius-full);font-size:13px;font-weight:500;color:var(--color-text);transition:background var(--transition);cursor:pointer}
.model-selector:hover{background:var(--color-surface)}.model-selector svg{width:16px;height:16px}
.toast{position:fixed;bottom:100px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--color-surface-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:10px 20px;font-size:13px;color:var(--color-text);box-shadow:0 4px 20px rgba(0,0,0,.4);opacity:0;transition:all .3s ease;z-index:100;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.message-text pre::-webkit-scrollbar{height:4px}.message-text pre::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:2px}
.sp-modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:200;align-items:center;justify-content:center;backdrop-filter:blur(2px)}
.sp-modal-overlay.open{display:flex}
.sp-modal{background:var(--color-surface-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:560px;max-width:90vw;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.5);animation:sp-in .2s ease}
@keyframes sp-in{from{opacity:0;transform:scale(.95) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}
.sp-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--color-border-subtle)}
.sp-modal-header h2{font-size:16px;font-weight:600;display:flex;align-items:center;gap:8px}
.sp-modal-header h2 svg{width:18px;height:18px;color:var(--color-accent)}
.sp-modal-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);color:var(--color-text-secondary);transition:all var(--transition)}
.sp-modal-close:hover{background:var(--color-surface-hover);color:var(--color-text)}
.sp-modal-close svg{width:18px;height:18px}
.sp-modal-body{padding:20px;overflow-y:auto;flex:1}
.sp-modal-desc{font-size:13px;color:var(--color-text-secondary);margin-bottom:16px;line-height:1.5}
.sp-label{font-size:13px;font-weight:600;color:var(--color-text);margin-bottom:8px;display:block}
.sp-textarea{width:100%;min-height:120px;max-height:300px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px 14px;color:var(--color-text);font-size:14px;line-height:1.6;resize:vertical;outline:0;transition:border-color var(--transition);font-family:var(--font-sans)}
.sp-textarea:focus{border-color:var(--color-accent)}
.sp-textarea::placeholder{color:var(--color-text-tertiary)}
.sp-modal-footer{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-top:1px solid var(--color-border-subtle);gap:12px}
.sp-modal-footer-left,.sp-modal-footer-right{display:flex;align-items:center;gap:8px}
.sp-btn{display:flex;align-items:center;gap:6px;padding:8px 16px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;transition:all var(--transition);white-space:nowrap}
.sp-btn svg{width:15px;height:15px}
.sp-btn-primary{background:var(--color-accent);color:#fff;border:1px solid var(--color-accent)}
.sp-btn-primary:hover{background:var(--color-accent-hover)}
.sp-btn-secondary{background:0 0;color:var(--color-text-secondary);border:1px solid var(--color-border)}
.sp-btn-secondary:hover{background:var(--color-surface-hover);color:var(--color-text)}
.sp-btn-danger{background:0 0;color:var(--color-danger);border:1px solid transparent}
.sp-btn-danger:hover{background:rgba(239,68,68,.1)}
.sp-badge{display:flex;align-items:center;gap:5px;padding:5px 10px;border-radius:var(--radius-full);font-size:12px;font-weight:500;background:rgba(16,163,127,.12);color:var(--color-accent);border:1px solid rgba(16,163,127,.2);cursor:pointer;transition:all var(--transition);max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-badge:hover{background:rgba(16,163,127,.2)}
.sp-badge svg{width:13px;height:13px;flex-shrink:0}
.sp-badge span{overflow:hidden;text-overflow:ellipsis}
.sp-badge-empty{background:0 0;color:var(--color-text-tertiary);border:1px solid var(--color-border)}
.sp-badge-empty:hover{background:var(--color-surface);color:var(--color-text-secondary)}
.message-system{display:flex;gap:16px;padding:16px 0;border-bottom:1px solid var(--color-border-subtle);opacity:.85}
.message-system .message-avatar{background:rgba(16,163,127,.2)!important;color:var(--color-accent)!important}
.message-system .message-text{font-size:13px;color:var(--color-text-secondary);font-style:italic}
.sp-toggle-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);color:var(--color-text-secondary);transition:background var(--transition);position:relative}
.sp-toggle-btn:hover{background:var(--color-surface);color:var(--color-text)}
.sp-toggle-btn.active{color:var(--color-accent)}
.sp-toggle-btn .sp-indicator{position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:50%;background:var(--color-accent);display:none}
.sp-toggle-btn.active .sp-indicator{display:block}
.streaming-cursor{display:inline-block;width:2px;height:16px;background:var(--color-accent);animation:blink 1s infinite;margin-left:2px;vertical-align:middle}
@keyframes blink{0%,50%{opacity:1}51%,100%{opacity:0}}
