:root {
            --bg-body: #f0f2f5;
            --bg-card: #ffffff;
            --bg-sidebar: #f7f7f8;
            --text-main: #333333;
            --text-muted: #666666;
            --border-color: #e3e3e3;
            --border-strong: #cccccc;
            --primary-color: #1a73e8;
            --primary-hover: #1557b0;
            --msg-user-bg: #007bff;
            --msg-user-text: #ffffff;
            --msg-ai-bg: #e9e9eb;
            --msg-ai-text: #1c1e21;
            --input-bg: #ffffff;
            --chat-bg: #ffffff;
            --btn-tool-bg: #ececec;
            --btn-tool-text: #333333;
            --danger: #dc3545;
            --warning: #ff9800;
            --code-bg: #f6f8fa;
            --code-border: #d0d7de;
            --hover-bg: #eeeeee;
            --active-bg: #e6f0fd;
            --shadow-sm: 0 1px 2px rgba(0,0,0,0.04);
            --shadow-md: 0 6px 20px rgba(0,0,0,0.12);
        }

        [data-theme="dark"] {
            --bg-body: #0f0f10;
            --bg-card: #1e1e1e;
            --bg-sidebar: #171717;
            --text-main: #e0e0e0;
            --text-muted: #999999;
            --border-color: #2a2a2a;
            --border-strong: #3a3a3a;
            --primary-color: #3f83f8;
            --primary-hover: #2c64c6;
            --msg-user-bg: #1976d2;
            --msg-user-text: #ffffff;
            --msg-ai-bg: #2a2a2a;
            --msg-ai-text: #e0e0e0;
            --input-bg: #2c2c2c;
            --chat-bg: #1e1e1e;
            --btn-tool-bg: #2a2a2a;
            --btn-tool-text: #e0e0e0;
            --code-bg: #161b22;
            --code-border: #30363d;
            --hover-bg: #2a2a2a;
            --active-bg: #1c3654;
            --shadow-sm: 0 1px 2px rgba(0,0,0,0.3);
            --shadow-md: 0 6px 20px rgba(0,0,0,0.5);
        }

        * { box-sizing: border-box; }
        html, body { height: 100%; margin: 0; padding: 0; }
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans TC", sans-serif;
            background: var(--bg-body);
            color: var(--text-main);
            transition: background 0.3s, color 0.3s;
            overflow: hidden;
        }

        button { font-family: inherit; }
        input, textarea, select { font-family: inherit; }

        /* ========== 整體 layout ========== */
        .app-grid {
            display: grid;
            grid-template-columns: 260px 1fr;
            height: 100vh;
            height: 100dvh;
        }

        /* ========== 左側邊欄 ========== */
        .sidebar {
            background: var(--bg-sidebar);
            border-right: 1px solid var(--border-color);
            display: flex;
            flex-direction: column;
            min-height: 0;
            transition: transform 0.22s ease;
        }
        .sidebar-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 12px 14px;
            gap: 8px;
            border-bottom: 1px solid var(--border-color);
        }
        .sidebar-title {
            font-weight: 700;
            font-size: 0.95em;
            display: flex;
            align-items: center;
            gap: 6px;
        }
        .sidebar-icon-btn {
            background: transparent;
            border: none;
            cursor: pointer;
            padding: 6px 8px;
            border-radius: 6px;
            color: var(--text-muted);
            font-size: 0.95em;
        }
        .sidebar-icon-btn:hover { background: var(--hover-bg); color: var(--text-main); }
        .sidebar-search {
            padding: 8px 12px;
            border-bottom: 1px solid var(--border-color);
        }
        .sidebar-search input {
            width: 100%;
            padding: 7px 10px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
            color: var(--text-main);
            font-size: 13px;
        }
        .sidebar-search input:focus { outline: none; border-color: var(--primary-color); }
        .new-menu-wrap { padding: 8px 10px; position: relative; }
        .btn-new-session {
            width: 100%;
            background: var(--primary-color);
            color: #fff;
            border: none;
            padding: 9px 10px;
            border-radius: 7px;
            cursor: pointer;
            font-weight: 600;
            font-size: 0.9em;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 6px;
        }
        .btn-new-session:hover { background: var(--primary-hover); }
        .new-menu {
            position: absolute;
            top: 48px;
            left: 10px;
            right: 10px;
            background: var(--bg-card);
            border: 1px solid var(--border-color);
            border-radius: 8px;
            box-shadow: var(--shadow-md);
            z-index: 40;
            display: none;
        }
        .new-menu.show { display: block; }
        .new-menu button {
            width: 100%;
            background: none;
            border: none;
            text-align: left;
            padding: 10px 14px;
            cursor: pointer;
            color: var(--text-main);
            font-size: 0.9em;
        }
        .new-menu button:hover { background: var(--hover-bg); }

        .sidebar-list {
            flex-grow: 1;
            overflow-y: auto;
            padding: 4px 6px 20px;
        }
        .sidebar-group-label {
            font-size: 0.68em;
            font-weight: 700;
            color: var(--text-muted);
            padding: 12px 10px 4px;
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }
        .sidebar-item {
            display: flex;
            align-items: center;
            gap: 8px;
            padding: 8px 10px;
            border-radius: 7px;
            cursor: pointer;
            font-size: 0.88em;
            color: var(--text-main);
            border: 1px solid transparent;
            margin: 1px 0;
            position: relative;
        }
        .sidebar-item:hover { background: var(--hover-bg); }
        .sidebar-item.active { background: var(--active-bg); font-weight: 600; }
        .sidebar-item .item-icon { font-size: 0.95em; flex-shrink: 0; }
        .sidebar-item .item-name { flex-grow: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .sidebar-item .item-menu-btn {
            opacity: 0;
            background: none;
            border: none;
            cursor: pointer;
            padding: 2px 6px;
            color: var(--text-muted);
            border-radius: 4px;
        }
        .sidebar-item:hover .item-menu-btn, .sidebar-item.active .item-menu-btn { opacity: 1; }
        .sidebar-item .item-menu-btn:hover { background: var(--btn-tool-bg); color: var(--text-main); }

        .sidebar-footer {
            padding: 8px 10px;
            border-top: 1px solid var(--border-color);
            display: flex;
            gap: 4px;
        }
        .sidebar-footer button {
            flex: 1;
            background: transparent;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            padding: 7px 4px;
            cursor: pointer;
            color: var(--text-muted);
            font-size: 0.8em;
        }
        .sidebar-footer button:hover { background: var(--hover-bg); color: var(--text-main); }

        /* 漢堡鈕 (手機) */
        .sidebar-toggle {
            display: none;
            background: transparent;
            border: none;
            cursor: pointer;
            font-size: 1.2em;
            padding: 6px 10px;
            color: var(--text-main);
        }
        .sidebar-backdrop {
            display: none;
            position: fixed;
            inset: 0;
            background: rgba(0,0,0,0.45);
            z-index: 30;
        }
        .sidebar-backdrop.show { display: block; }

        /* ========== 右側主區 ========== */
        .main {
            display: flex;
            flex-direction: column;
            min-height: 0;
            min-width: 0;
            height: 100%;
            overflow: hidden;
            background: var(--bg-body);
        }
        .topbar {
            display: flex;
            align-items: center;
            gap: 10px;
            padding: 10px 16px;
            background: var(--bg-card);
            border-bottom: 1px solid var(--border-color);
            min-height: 54px;
            flex-shrink: 0;
        }
        .topbar-title {
            font-weight: 700;
            font-size: 0.98em;
            cursor: pointer;
            padding: 4px 8px;
            border-radius: 5px;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
            max-width: 240px;
        }
        .topbar-title:hover { background: var(--hover-bg); }
        .topbar-controls {
            display: flex;
            align-items: center;
            gap: 6px;
            flex-grow: 1;
            flex-wrap: wrap;
        }
        .topbar-mini-select {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            background: var(--btn-tool-bg);
            border-radius: 6px;
            padding: 2px 2px 2px 8px;
            font-size: 0.82em;
            color: var(--text-main);
        }
        .topbar-mini-select label {
            margin: 0;
            padding: 0;
            font-size: 0.9em;
            color: var(--text-muted);
            font-weight: 600;
        }
        .topbar-mini-select select,
        .topbar-mini-select input {
            background: transparent;
            border: none;
            padding: 4px 4px;
            font-size: 0.92em;
            color: var(--text-main);
            min-width: 80px;
            max-width: 180px;
        }
        .topbar-mini-select select:focus, .topbar-mini-select input:focus { outline: none; }
        .topbar-mini-select .mini-refresh {
            background: none;
            border: none;
            cursor: pointer;
            padding: 2px 6px;
            color: var(--text-muted);
            font-size: 0.9em;
            border-radius: 4px;
        }
        .topbar-mini-select .mini-refresh:hover { background: var(--hover-bg); color: var(--text-main); }
        .topbar-mini-select.quick-select select {
            min-width: 130px;
            max-width: 220px;
        }
        .topbar-mini-select .mini-quick {
            font-size: 0.82em;
            padding: 2px 5px;
        }
        .topbar-mini-select.reasoning-select { gap: 6px; padding-right: 8px; }
        .topbar-mini-select .mini-reasoning-toggle {
            width: 14px;
            height: 14px;
            accent-color: var(--primary-color);
            cursor: pointer;
        }
        .topbar-mini-select .reasoning-effort-select {
            min-width: 88px;
            max-width: 120px;
        }
        .topbar-right { display: flex; gap: 4px; align-items: center; flex-shrink: 0; margin-left: auto; }
        .topbar-right button { background: none; border: none; cursor: pointer; padding: 6px 9px; border-radius: 6px; color: var(--text-muted); font-size: 0.95em; }
        .topbar-right button:hover { background: var(--hover-bg); color: var(--text-main); }

        .more-menu {
            position: absolute;
            right: 14px;
            top: 58px;
            background: var(--bg-card);
            border: 1px solid var(--border-color);
            border-radius: 8px;
            box-shadow: var(--shadow-md);
            z-index: 40;
            min-width: 180px;
            display: none;
        }
        .more-menu.show { display: block; }
        .more-menu button {
            width: 100%;
            background: none;
            border: none;
            text-align: left;
            padding: 9px 14px;
            cursor: pointer;
            color: var(--text-main);
            font-size: 0.88em;
        }
        .more-menu button:hover { background: var(--hover-bg); }
        .more-menu .danger { color: var(--danger); }
        .more-menu hr { border: none; border-top: 1px solid var(--border-color); margin: 4px 0; }

        /* SubHeader (system prompt / lanes) */
        .subheader {
            background: var(--bg-card);
            border-bottom: 1px solid var(--border-color);
            padding: 0;
            flex-shrink: 0;
        }
        .subheader-section { border-top: 1px solid var(--border-color); }
        .subheader-section:first-child { border-top: none; }
        .subheader-toggle {
            display: flex;
            align-items: center;
            justify-content: space-between;
            cursor: pointer;
            padding: 10px 16px;
            font-size: 0.92em;
            color: var(--text-main);
            font-weight: 600;
            user-select: none;
            background: var(--bg-card);
            border-top: 1px solid var(--border-color);
            border-bottom: 1px solid var(--border-color);
        }
        .subheader-toggle:hover { background: var(--hover-bg); }
        .subheader-toggle .chevron {
            display: inline-block;
            transition: transform 0.15s;
            font-size: 0.85em;
            margin-right: 8px;
            color: var(--text-muted);
        }
        .subheader-section.expanded .subheader-toggle .chevron { transform: rotate(90deg); }
        .subheader-body { display: none; padding: 10px 16px 14px; }
        .subheader-section.expanded .subheader-body {
            display: block;
            max-height: calc(100dvh - 240px);
            overflow-y: auto;
            overscroll-behavior: contain;
        }
        @media (max-height: 600px) {
            .subheader-section.expanded .subheader-body { max-height: calc(100dvh - 160px); }
        }
        .subheader-body textarea { width: 100%; min-height: 60px; padding: 8px; border: 1px solid var(--border-color); border-radius: 6px; background: var(--input-bg); color: var(--text-main); font-size: 0.9em; resize: vertical; box-sizing: border-box; }
        .subheader-body textarea:focus { outline: none; border-color: var(--primary-color); }
        .sh-field-label { display: block; font-size: 0.72em; color: var(--text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; margin-bottom: 6px; }
        .conv-params { margin-top: 10px; border: 1px solid var(--border-color); border-radius: 6px; padding: 4px 10px; background: var(--input-bg); }
        .conv-params summary { cursor: pointer; font-size: 0.78em; color: var(--text-muted); padding: 4px 0; user-select: none; }
        .conv-params summary:hover { color: var(--text-main); }
        .conv-params-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 8px; padding: 8px 0 4px; }
        .conv-params-grid label { display: flex; flex-direction: column; gap: 4px; font-size: 0.78em; color: var(--text-muted); min-width: 0; }
        .conv-params-grid input, .conv-params-grid select { width: 100%; min-width: 0; box-sizing: border-box; padding: 6px 8px; border: 1px solid var(--border-color); border-radius: 5px; background: var(--bg-main); color: var(--text-main); font-size: 0.9em; }
        .conv-params-grid input:focus, .conv-params-grid select:focus { outline: none; border-color: var(--primary-color); }
        .conv-params-toggle { display: inline-flex; align-items: center; gap: 8px; margin: 10px 0 4px; font-size: 0.85em; color: var(--text-main); cursor: pointer; user-select: none; }
        .conv-params-toggle input[type="checkbox"] { accent-color: var(--primary-color); }
        .conv-params-hint {
            margin: 6px 0 0;
            font-size: 0.78em;
            color: var(--text-muted);
            line-height: 1.45;
        }
        .conv-params-asset-row {
            display: flex;
            gap: 6px;
            align-items: center;
        }
        .conv-params-asset-row input[type="text"] {
            flex: 1;
            min-width: 0;
        }
        .voice-settings-block {
            margin-top: 10px;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            padding: 10px 12px;
        }
        .voice-settings-block > legend {
            font-size: 0.85em;
            font-weight: 600;
            padding: 0 4px;
        }

        /* === UI 風格設定面板（重整後分區排版） === */
        .ui-style-panel .ui-style-body {
            display: flex;
            flex-direction: column;
            gap: 12px;
            padding: 8px 0 4px;
        }
        .ui-style-section {
            border: 1px solid var(--border-color);
            border-radius: 8px;
            padding: 8px 12px 12px;
            margin: 0;
            background: var(--bg-main);
        }
        .ui-style-section > legend {
            font-size: 0.78em;
            font-weight: 600;
            color: var(--text-main);
            padding: 0 6px;
        }
        .ui-style-row-full {
            display: block;
            margin-bottom: 8px;
        }
        .ui-style-row-full:last-child { margin-bottom: 0; }
        .ui-style-row-full label,
        .ui-style-section label {
            display: flex;
            flex-direction: column;
            gap: 4px;
            font-size: 0.78em;
            color: var(--text-muted);
            min-width: 0;
        }
        .ui-style-row-full label > span,
        .ui-style-section label > span {
            color: var(--text-muted);
        }
        .ui-style-section input[type="text"],
        .ui-style-section input[type="range"],
        .ui-style-section select,
        .ui-style-row-full input[type="text"],
        .ui-style-row-full select {
            width: 100%;
            min-width: 0;
            box-sizing: border-box;
            padding: 6px 8px;
            border: 1px solid var(--border-color);
            border-radius: 5px;
            background: var(--input-bg);
            color: var(--text-main);
            font-size: 0.9em;
        }
        .ui-style-section input[type="range"] { padding: 0; }
        .ui-style-section input:focus,
        .ui-style-section select:focus,
        .ui-style-section textarea:focus,
        .ui-style-row-full input:focus,
        .ui-style-row-full select:focus { outline: none; border-color: var(--primary-color); }
        .ui-style-grid-2 {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 10px;
        }
        .ui-style-card-grid {
            display: grid;
            grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
            gap: 12px;
            align-items: start;
        }
        .ui-style-textarea-label textarea.ui-style-card-text {
            width: 100%;
            min-height: 110px;
            box-sizing: border-box;
            padding: 8px 10px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
            color: var(--text-main);
            font-family: inherit;
            font-size: 0.9em;
            line-height: 1.5;
            resize: vertical;
        }
        .ui-style-agent-list {
            display: flex;
            flex-direction: column;
            gap: 10px;
        }
        .ui-style-agent-row {
            display: grid;
            gap: 10px;
            padding: 8px;
            border: 1px dashed var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
        }
        @media (max-width: 720px) {
            .ui-style-grid-2 { grid-template-columns: 1fr; }
            .ui-style-card-grid { grid-template-columns: 1fr; }
            .ui-style-agent-row { grid-template-columns: 1fr !important; }
        }

        /* 對話區 */
        .chat-area {
            flex-grow: 1;
            overflow-y: auto;
            overflow-x: hidden;
            padding: 20px max(16px, 5%);
            display: flex;
            flex-direction: column;
            min-height: 0;
            min-width: 0;
            position: relative;
        }
        .chat-style-bg-layer {
            position: absolute;
            inset: 0;
            background-size: cover;
            background-position: center;
            background-repeat: no-repeat;
            pointer-events: none;
            z-index: 0;
            display: none;
        }
        .chat-area-inner {
            max-width: 920px;
            margin: 0 auto;
            width: 100%;
            flex-grow: 1;
            display: flex;
            flex-direction: column;
            position: relative;
            z-index: 2;
        }
        .chat-area.compare-area .chat-area-inner { max-width: 1400px; }

        /* 角色卡（立繪 + markdown 資料卡）顯示在訊息上方 */
        .char-card-block {
            display: grid;
            grid-template-columns: minmax(140px, 220px) minmax(0, 1fr);
            gap: 16px;
            padding: 14px;
            margin: 0 0 18px;
            border: 1px solid var(--border-color);
            border-radius: 12px;
            background: var(--bg-card);
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
        }
        .char-card-portrait {
            display: flex;
            align-items: flex-start;
            justify-content: center;
        }
        .char-card-portrait img {
            width: 100%;
            max-width: 220px;
            aspect-ratio: 3 / 4;
            object-fit: cover;
            border-radius: 10px;
            display: block;
        }
        .char-card-portrait-empty {
            min-height: 120px;
            border: 1px dashed var(--border-color);
            border-radius: 10px;
            opacity: 0.4;
        }
        .char-card-info {
            font-size: 0.92em;
            line-height: 1.55;
            color: var(--text-main);
            overflow-wrap: anywhere;
            word-break: break-word;
        }
        .char-card-info > *:first-child { margin-top: 0; }
        .char-card-info > *:last-child { margin-bottom: 0; }
        .char-card-info p { margin: 0 0 8px; }
        .char-card-info h1, .char-card-info h2, .char-card-info h3, .char-card-info h4 { margin: 8px 0 6px; line-height: 1.3; }
        .char-card-info ul, .char-card-info ol { padding-left: 20px; margin: 6px 0; }
        .char-card-info blockquote { border-left: 3px solid var(--border-color); margin: 6px 0; padding: 2px 10px; color: var(--text-muted); }
        .char-card-info code { background: var(--code-bg); padding: 2px 6px; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.88em; }
        .char-card-info img { max-width: 100%; border-radius: 6px; }
        .char-card-block[data-has-portrait="0"] { grid-template-columns: 1fr; }
        .char-card-block[data-has-portrait="0"] .char-card-portrait { display: none; }
        @media (max-width: 640px) {
            .char-card-block {
                grid-template-columns: 1fr;
                padding: 12px;
            }
            .char-card-portrait img { max-width: 180px; margin: 0 auto; }
        }

        /* 訊息 */
        .msg-container { display: flex; align-items: flex-start; gap: 6px; margin-bottom: 14px; width: 100%; position: relative; }
        .msg-container.user { justify-content: flex-end; }
        .msg-container.ai { justify-content: flex-start; }
        .msg-container.error { justify-content: center; }

        .msg { padding: 10px 14px; border-radius: 12px; max-width: 100%; line-height: 1.55; word-wrap: break-word; overflow-wrap: anywhere; }
        .msg.user { background: var(--msg-user-bg); color: var(--msg-user-text); border-bottom-right-radius: 3px; white-space: pre-wrap; }
        .msg.ai { background: var(--msg-ai-bg); color: var(--msg-ai-text); border-bottom-left-radius: 3px; }
        .msg.error { background: #fdecea; color: #b71c1c; border: 1px solid #f5c2c7; width: 100%; }
        [data-theme="dark"] .msg.error { background: #3b1212; color: #ffb4ab; border-color: #7a2b2b; }
        .msg-streaming::after { content: ''; display: inline-block; width: 6px; height: 6px; margin-left: 6px; vertical-align: middle; border-radius: 50%; background: currentColor; opacity: 0.4; animation: pulse-dot 1s ease-in-out infinite; }
        @keyframes pulse-dot { 0%, 100% { opacity: 0.2; } 50% { opacity: 0.9; } }

        /* Markdown 內部樣式 */
        .msg.ai p { margin: 0 0 8px; }
        .msg.ai p:last-child { margin-bottom: 0; }
        .msg.ai h1, .msg.ai h2, .msg.ai h3, .msg.ai h4 { margin: 14px 0 8px; line-height: 1.3; }
        .msg.ai ul, .msg.ai ol { padding-left: 22px; margin: 6px 0; }
        .msg.ai li { margin: 3px 0; }
        .msg.ai a { color: var(--primary-color); }
        .msg.ai blockquote { border-left: 3px solid var(--border-color); margin: 6px 0; padding: 2px 10px; color: var(--text-muted); }
        .msg.ai table { border-collapse: collapse; margin: 8px 0; }
        .msg.ai th, .msg.ai td { border: 1px solid var(--border-color); padding: 4px 8px; }
        .msg.ai code { background: var(--code-bg); padding: 2px 6px; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.88em; }
        .msg.ai pre { position: relative; background: var(--code-bg); border: 1px solid var(--code-border); border-radius: 8px; padding: 30px 12px 12px; overflow-x: auto; margin: 8px 0; }
        .msg.ai pre code { background: transparent; padding: 0; font-size: 0.85em; display: block; }
        .msg.ai pre .code-lang { position: absolute; top: 6px; left: 10px; font-size: 0.7em; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; }
        .msg.ai pre .code-copy { position: absolute; top: 4px; right: 4px; background: var(--bg-card); border: 1px solid var(--border-color); color: var(--text-main); padding: 3px 8px; border-radius: 4px; font-size: 0.75em; cursor: pointer; opacity: 0.75; }
        .msg.ai pre .code-copy:hover { opacity: 1; }
        .msg.ai pre .code-copy.copied { color: #10b981; border-color: #10b981; }
        .msg.ai img { max-width: 100%; border-radius: 8px; }

        .msg-wrap { display: flex; flex-direction: column; max-width: 85%; }
        .msg-container.user .msg-wrap { align-items: flex-end; }
        .msg-container.ai .msg-wrap { align-items: flex-start; }
        .msg-wrap .msg { max-width: 100%; }
        .msg-avatar {
            width: 36px;
            height: 36px;
            border-radius: 50%;
            overflow: hidden;
            border: 1px solid var(--border-color);
            background: var(--bg-card);
            flex-shrink: 0;
            align-self: flex-start;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            font-size: 0.72em;
            font-weight: 700;
            color: var(--text-muted);
            margin-top: 2px;
        }
        .msg-avatar img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            display: block;
        }
        .msg-avatar.user { border-color: rgba(0, 123, 255, 0.35); }
        .msg-avatar.fallback { background: var(--btn-tool-bg); }
        .msg-actions { display: flex; gap: 4px; margin-top: 3px; opacity: 0; transition: opacity 0.15s; }
        .msg-container:hover .msg-actions { opacity: 1; }
        .msg-actions button { background: none; border: none; cursor: pointer; padding: 2px 6px; font-size: 0.85em; color: var(--text-muted); border-radius: 4px; }
        .msg-actions button:hover { background: var(--btn-tool-bg); color: var(--text-main); }
        .msg-meta { font-size: 0.7em; color: var(--text-muted); margin-top: 3px; font-family: ui-monospace, Menlo, monospace; }

        /* Reasoning (思考過程) 折疊框 */
        .reasoning-box {
            margin: 0 0 6px;
            border-left: 3px solid rgba(128, 128, 128, 0.5);
            background: rgba(128, 128, 128, 0.06);
            border-radius: 6px;
            font-size: 0.88em;
            max-width: 100%;
            overflow: hidden;
        }
        .reasoning-box > summary {
            cursor: pointer;
            padding: 5px 10px;
            color: var(--text-muted);
            user-select: none;
            list-style: none;
            display: flex;
            align-items: center;
            gap: 6px;
        }
        .reasoning-box > summary::-webkit-details-marker { display: none; }
        .reasoning-box > summary::before {
            content: '▸';
            transition: transform 0.15s;
            font-size: 0.85em;
            color: var(--text-muted);
        }
        .reasoning-box[open] > summary::before { transform: rotate(90deg); display: inline-block; }
        .reasoning-box > summary:hover { background: rgba(128, 128, 128, 0.08); }
        .reasoning-box .rb-label { font-weight: 500; }
        .reasoning-box .rb-dur { opacity: 0.75; font-family: ui-monospace, Menlo, monospace; font-size: 0.92em; }
        .reasoning-box .reasoning-body {
            padding: 6px 12px 10px;
            color: var(--text-muted);
            white-space: pre-wrap;
            word-break: break-word;
            line-height: 1.5;
            max-height: 400px;
            overflow-y: auto;
            border-top: 1px solid rgba(128, 128, 128, 0.15);
        }
        .reasoning-box.streaming > summary::after {
            content: '思考中';
            font-size: 0.85em;
            opacity: 0.7;
            font-style: italic;
            margin-left: auto;
        }
        .reasoning-box.cmp-reasoning { font-size: 0.82em; margin-bottom: 6px; }
        .reasoning-box.cmp-reasoning .reasoning-body { max-height: 240px; padding: 5px 10px 8px; }

        .msg-edit { width: 100%; }
        .msg-edit textarea { min-height: 180px; font-size: 14px; line-height: 1.5; margin-bottom: 6px; padding: 8px; width: 100%; border: 1px solid var(--border-color); border-radius: 6px; background: var(--input-bg); color: var(--text-main); resize: vertical; }
        .msg-edit .edit-actions { display: flex; gap: 6px; flex-wrap: wrap; }
        .msg-edit button { font-size: 0.85em; padding: 5px 10px; border: none; border-radius: 5px; cursor: pointer; }

        /* 編輯模式:讓編輯框掙脫 85% 氣泡寬度限制 */
        .msg-container:has(.msg-edit) { justify-content: stretch; }
        .msg-container:has(.msg-edit) .msg-wrap {
            max-width: 100%;
            width: 100%;
            align-items: stretch;
        }

        .retry-inline { display: inline-block; margin-top: 8px; background: var(--warning); color: #fff; padding: 5px 12px; border: none; border-radius: 5px; font-weight: 600; cursor: pointer; font-size: 0.85em; }
        .retry-inline:hover { filter: brightness(1.1); }

        /* 空狀態 */
        .empty-state {
            text-align: center;
            color: var(--text-muted);
            margin: auto;
            padding: 60px 20px;
        }
        .empty-state h2 { font-size: 1.4em; margin: 0 0 8px; color: var(--text-main); }
        .empty-state p { margin: 4px 0; font-size: 0.92em; }

        /* 輸入區 */
        .input-bar {
            background: var(--bg-card);
            border-top: 1px solid var(--border-color);
            padding: 10px 16px 14px;
        }
        .input-bar-inner {
            max-width: 920px;
            margin: 0 auto;
            display: flex;
            gap: 10px;
            align-items: flex-end;
        }
        .input-bar.wide .input-bar-inner { max-width: 1400px; }
        .input-bar textarea {
            flex-grow: 1;
            min-height: 54px;
            max-height: 240px;
            padding: 10px 12px;
            border: 1px solid var(--border-color);
            border-radius: 10px;
            font-size: 15px;
            background: var(--input-bg);
            color: var(--text-main);
            resize: none;
            line-height: 1.4;
        }
        .input-bar textarea:focus { outline: none; border-color: var(--primary-color); }
        .input-bar-actions { display: flex; flex-direction: column; gap: 6px; min-width: 110px; }
        .btn-send {
            background: var(--primary-color);
            color: white;
            border: none;
            padding: 12px 16px;
            border-radius: 8px;
            cursor: pointer;
            font-weight: 600;
            font-size: 0.95em;
        }
        .btn-send:hover { background: var(--primary-hover); }
        .btn-send:disabled { opacity: 0.5; cursor: not-allowed; }
        .btn-stop {
            background: var(--warning);
            color: white;
            border: none;
            padding: 12px 16px;
            border-radius: 8px;
            cursor: pointer;
            font-weight: 600;
            font-size: 0.95em;
            display: none;
        }
        .btn-stop:hover { filter: brightness(1.1); }
        .btn-upload {
            background: var(--btn-tool-bg);
            color: var(--text-muted);
            border: 1px solid var(--border-color);
            padding: 8px 12px;
            border-radius: 8px;
            cursor: pointer;
            font-size: 1.05em;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        .btn-upload:hover { background: var(--hover-bg); color: var(--text-main); }
        .input-toolbar {
            display: flex;
            align-items: center;
            gap: 8px;
            flex-wrap: wrap;
            width: 100%;
            max-width: 920px;
            margin: 0 auto 6px;
            box-sizing: border-box;
        }
        .input-bar.wide .input-toolbar { max-width: 1400px; }
        .input-toolbar-field {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            padding: 4px 8px 4px 10px;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            background: var(--input-bg);
            font-size: 0.85em;
            color: var(--text-main);
            cursor: pointer;
        }
        .input-toolbar-label { color: var(--text-muted); font-weight: 600; white-space: nowrap; }
        .input-toolbar-select {
            background: transparent;
            border: none;
            color: var(--text-main);
            font-size: 0.92em;
            padding: 2px 4px;
            cursor: pointer;
            min-width: 100px;
        }
        .input-toolbar-select:focus { outline: none; }
        .web-search-keyword-rows {
            display: flex;
            flex-direction: column;
            gap: 6px;
            width: 100%;
            max-width: 920px;
            margin: 0 auto 8px;
            padding: 8px 10px;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            background: var(--input-bg);
            box-sizing: border-box;
        }
        .input-bar.wide .web-search-keyword-rows { max-width: 1400px; }
        .web-search-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            font-size: 0.78em;
            color: var(--text-muted);
        }
        .web-search-label { font-weight: 600; }
        .web-search-keyword-add {
            padding: 4px 10px;
            font-size: 0.82em;
            border-radius: 6px;
            border: 1px solid var(--border-color);
            background: var(--bg-card);
            color: var(--text-main);
            cursor: pointer;
            white-space: nowrap;
        }
        .web-search-keyword-add:hover:not(:disabled) { background: var(--hover-bg); }
        .web-search-keyword-add:disabled { opacity: 0.5; cursor: not-allowed; }
        .web-search-keyword-list {
            display: flex;
            flex-direction: column;
            gap: 6px;
        }
        .web-search-keyword-row {
            display: flex;
            align-items: center;
            gap: 6px;
            position: relative;
        }
        .web-search-keyword-input {
            flex: 1 1 auto;
            min-width: 0;
            padding: 6px 10px;
            font-size: 0.88em;
            border-radius: 6px;
            border: 1px solid var(--border-color);
            background: var(--bg-card);
            color: var(--text-main);
        }
        .web-search-keyword-input:focus { outline: none; border-color: var(--primary-color); }
        .web-search-keyword-delete {
            flex: 0 0 auto;
            padding: 4px 10px;
            font-size: 0.85em;
            border-radius: 6px;
            border: 1px solid var(--border-color);
            background: transparent;
            color: var(--text-muted);
            cursor: pointer;
            white-space: nowrap;
        }
        .web-search-keyword-delete:hover { color: var(--danger); border-color: var(--danger); }

        .web-search-engine-chip {
            flex: 0 0 auto;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            padding: 3px 8px;
            font-size: 0.78em;
            line-height: 1.2;
            border-radius: 10px;
            border: 1px solid var(--border-color);
            background: transparent;
            color: var(--text-muted);
            cursor: pointer;
            white-space: nowrap;
            min-width: 64px;
        }
        .web-search-engine-chip.followed {
            color: var(--text-muted);
            border-color: var(--border-color);
        }
        .web-search-engine-chip.overridden {
            color: var(--primary-color);
            border-color: var(--primary-color);
            background: var(--hover-bg);
            font-weight: 600;
        }
        .web-search-engine-chip:hover { border-color: var(--primary-color); }

        .web-search-engine-popover {
            position: absolute;
            bottom: calc(100% + 4px);
            top: auto;
            left: 0;
            z-index: 50;
            display: flex;
            flex-direction: column;
            gap: 2px;
            padding: 6px;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            background: var(--bg-card);
            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
            max-height: 60vh;
            overflow-y: auto;
            min-width: 180px;
        }
        .web-search-engine-popover-option {
            padding: 6px 10px;
            font-size: 0.85em;
            border-radius: 6px;
            border: 1px solid transparent;
            background: transparent;
            color: var(--text-main);
            cursor: pointer;
            text-align: left;
            white-space: nowrap;
            font-family: inherit;
        }
        .web-search-engine-popover-option:hover { background: var(--hover-bg); }
        .web-search-engine-popover-option.selected {
            color: var(--primary-color);
            font-weight: 600;
        }

        .web-search-cache-badge {
            flex: 0 0 auto;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 26px;
            height: 26px;
            padding: 0;
            font-size: 0.85em;
            line-height: 1;
            border-radius: 6px;
            border: 1px solid var(--border-color);
            background: var(--bg-card);
            color: var(--text-main);
            cursor: pointer;
        }
        .web-search-cache-badge:hover { border-color: var(--primary-color); }

        .web-search-cache-popover {
            position: absolute;
            bottom: calc(100% + 4px);
            top: auto;
            right: 0;
            z-index: 50;
            display: flex;
            flex-direction: column;
            gap: 4px;
            padding: 6px;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            background: var(--bg-card);
            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
            max-height: 60vh;
            overflow-y: auto;
            min-width: 140px;
        }
        .web-search-cache-popover-action {
            padding: 6px 10px;
            font-size: 0.85em;
            border-radius: 6px;
            border: 1px solid transparent;
            background: transparent;
            color: var(--text-main);
            cursor: pointer;
            text-align: left;
            white-space: nowrap;
        }
        .web-search-cache-popover-action:hover { background: var(--hover-bg); }
        .web-search-cache-popover-action.danger { color: var(--danger); }
        .web-search-cache-popover-action.danger:hover { background: var(--hover-bg); border-color: var(--danger); }

        #webSearchPreviewDialog {
            border: 1px solid var(--border-color);
            border-radius: 12px;
            padding: 0;
            background: var(--bg-card);
            color: var(--text-main);
            width: min(720px, 92vw);
            max-width: 92vw;
        }
        #webSearchPreviewDialog::backdrop { background: rgba(0, 0, 0, 0.45); }
        .web-search-preview-meta {
            display: flex;
            flex-wrap: wrap;
            gap: 8px 14px;
            font-size: 0.82em;
            color: var(--text-muted);
            margin-bottom: 10px;
        }
        .web-search-preview-meta-item b { color: var(--text-main); margin-right: 4px; }
        .web-search-preview-body {
            white-space: pre-wrap;
            word-break: break-word;
            max-height: 60vh;
            overflow: auto;
            padding: 10px;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            background: var(--input-bg);
            color: var(--text-main);
            font-size: 0.85em;
            font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
            margin: 0;
        }

        .attachments-container {
            display: none;
            gap: 8px;
            flex-wrap: wrap;
            max-width: 920px;
            margin: 0 auto 8px;
        }
        .input-bar.wide .attachments-container { max-width: 1400px; }
        .attachment-pill {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            background: var(--chat-bg);
            border: 1px solid var(--border-color);
            padding: 4px 8px;
            border-radius: 6px;
            font-size: 0.8em;
        }
        .attachment-pill .att-name { max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .attachment-pill .att-size { color: var(--text-muted); font-size: 0.9em; }
        .attachment-pill button {
            background: none;
            border: none;
            color: var(--danger);
            cursor: pointer;
            padding: 0 4px;
            font-size: 1.1em;
            line-height: 1;
        }
        .attachment-pill button:hover { opacity: 0.7; }

        .input-info-row {
            max-width: 920px;
            margin: 0 auto 4px;
            display: flex;
            justify-content: space-between;
            font-size: 0.72em;
            color: var(--text-muted);
            font-family: ui-monospace, Menlo, monospace;
            min-height: 16px;
        }
        .input-bar.wide .input-info-row { max-width: 1400px; }
        .input-info-row .draft { font-style: italic; }

        /* 圖片預覽 (媒體模式) */
        .img-preview-inline { display: none; padding: 6px 0; max-width: 920px; margin: 0 auto; position: relative; }
        .input-bar.wide .img-preview-inline { max-width: 1400px; }
        .img-preview-inline.show { display: block; }
        .img-preview-inline img { max-height: 90px; border-radius: 8px; border: 1px solid var(--border-color); }
        .img-preview-inline .remove-img {
            position: absolute;
            top: -4px;
            left: calc(90px - 10px);
            background: red;
            color: white;
            border-radius: 50%;
            width: 22px;
            height: 22px;
            font-size: 12px;
            line-height: 1;
            text-align: center;
            cursor: pointer;
            border: none;
            padding: 0;
        }

        /* ========== 對比模式 ========== */
        .lanes-editor {
            display: flex;
            gap: 8px;
            overflow-x: auto;
            padding: 4px 2px 10px;
        }
        .lane-card {
            background: var(--bg-card);
            border: 1px solid var(--border-color);
            border-radius: 8px;
            padding: 10px;
            min-width: 210px;
            max-width: 240px;
            flex-shrink: 0;
            display: flex;
            flex-direction: column;
            gap: 6px;
            position: relative;
        }
        .lane-card .lane-head { display: flex; justify-content: space-between; align-items: center; }
        .lane-card .lane-idx { font-size: 0.7em; color: var(--text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }
        .lane-card .lane-head-actions { display: flex; gap: 2px; }
        .lane-card .lane-head-actions button {
            background: none; border: none; cursor: pointer;
            font-size: 13px; padding: 2px 5px; border-radius: 4px;
            color: var(--text-muted);
        }
        .lane-card .lane-head-actions button:hover { background: var(--hover-bg); color: var(--text-main); }
        .lane-card .lane-head-actions .lane-del:hover { color: var(--danger); }
        .lane-card label { font-size: 0.7em; color: var(--text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; margin-bottom: 1px; display: block; }
        .lane-card input, .lane-card select {
            width: 100%;
            padding: 6px 8px;
            font-size: 12px;
            border: 1px solid var(--border-color);
            border-radius: 5px;
            background: var(--input-bg);
            color: var(--text-main);
        }
        .lane-card input:focus, .lane-card select:focus { outline: none; border-color: var(--primary-color); }
        .lane-model-row { display: flex; gap: 4px; }
        .lane-model-row input { flex-grow: 1; }
        .lane-reasoning-row {
            display: flex;
            gap: 6px;
            align-items: center;
            margin-top: 4px;
        }
        .lane-reasoning-row input[type="checkbox"] {
            width: auto;
            margin: 0;
            accent-color: var(--primary-color);
        }
        .lane-reasoning-row .lane-reasoning-label {
            font-size: 0.76em;
            color: var(--text-main);
            margin-right: 4px;
            white-space: nowrap;
        }
        .lane-model-row button {
            background: var(--btn-tool-bg);
            border: 1px solid var(--border-color);
            cursor: pointer;
            padding: 4px 8px;
            border-radius: 5px;
            color: var(--text-muted);
            font-size: 0.8em;
        }
        .lane-model-row button:hover { color: var(--text-main); }
        .lane-add-btn {
            min-width: 100px;
            border: 2px dashed var(--border-color);
            background: transparent;
            border-radius: 8px;
            color: var(--text-muted);
            font-size: 0.9em;
            cursor: pointer;
            flex-shrink: 0;
        }
        .lane-add-btn:hover { border-color: var(--primary-color); color: var(--primary-color); background: var(--bg-card); }

        .cmp-turn { margin-bottom: 22px; }
        .cmp-user-prompt {
            background: var(--msg-user-bg);
            color: var(--msg-user-text);
            padding: 9px 13px;
            border-radius: 10px;
            margin-bottom: 10px;
            white-space: pre-wrap;
            word-wrap: break-word;
            overflow-wrap: anywhere;
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            gap: 8px;
        }
        .cmp-user-prompt .cmp-turn-actions { display: flex; gap: 4px; flex-shrink: 0; }
        .cmp-user-prompt button {
            background: rgba(255,255,255,0.2);
            color: inherit;
            border: none;
            padding: 2px 8px;
            font-size: 0.75em;
            border-radius: 4px;
            cursor: pointer;
        }
        .cmp-user-prompt button:hover { background: rgba(255,255,255,0.35); }
        .cmp-grid {
            display: grid;
            gap: 10px;
            grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
        }
        .cmp-lane-cell {
            border: 1px solid var(--border-color);
            border-radius: 10px;
            padding: 10px;
            background: var(--bg-card);
            display: flex;
            flex-direction: column;
            min-height: 100px;
        }
        .cmp-lane-cell .cmp-lane-head {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 6px;
            font-size: 0.78em;
            color: var(--text-muted);
            border-bottom: 1px solid var(--border-color);
            padding-bottom: 4px;
        }
        .cmp-lane-cell .cmp-lane-head strong { color: var(--text-main); font-size: 1.1em; }
        .cmp-lane-cell .cmp-lane-head .cmp-lane-model { font-family: ui-monospace, Menlo, monospace; font-size: 0.9em; }
        .cmp-lane-cell .cmp-lane-actions { display: flex; gap: 4px; }
        .cmp-lane-cell .cmp-lane-actions button {
            background: none;
            border: none;
            cursor: pointer;
            font-size: 0.85em;
            padding: 2px 5px;
            border-radius: 4px;
            color: var(--text-muted);
        }
        .cmp-lane-cell .cmp-lane-actions button:hover { background: var(--btn-tool-bg); color: var(--text-main); }
        .cmp-lane-cell .cmp-lane-actions .cmp-canonical-btn.is-canonical {
            color: var(--primary-color);
            background: rgba(26, 115, 232, 0.12);
        }
        [data-theme="dark"] .cmp-lane-cell .cmp-lane-actions .cmp-canonical-btn.is-canonical {
            background: rgba(120, 170, 255, 0.18);
        }
        .cmp-lane-cell--canonical {
            border-color: var(--primary-color);
            box-shadow: 0 0 0 1px var(--primary-color) inset;
        }
        .cmp-canonical-badge {
            display: inline-block;
            margin-left: 6px;
            padding: 0 6px;
            font-size: 0.85em;
            font-weight: 600;
            color: var(--primary-color);
            border: 1px solid var(--primary-color);
            border-radius: 999px;
            line-height: 1.4;
            white-space: nowrap;
        }
        .cmp-lane-body {
            flex-grow: 1;
            line-height: 1.5;
            font-size: 0.92em;
            overflow-wrap: anywhere;
        }
        .cmp-lane-body.streaming::after {
            content: '▎';
            color: var(--primary-color);
            animation: cmp-blink 1s step-end infinite;
        }
        @keyframes cmp-blink { 50% { opacity: 0; } }
        .cmp-lane-body.error {
            color: var(--danger);
            font-family: ui-monospace, Menlo, monospace;
            font-size: 0.85em;
            white-space: pre-wrap;
        }
        .cmp-lane-body p { margin: 0 0 8px; }
        .cmp-lane-body pre {
            background: var(--code-bg);
            border: 1px solid var(--code-border);
            border-radius: 6px;
            padding: 8px;
            overflow-x: auto;
            font-size: 0.85em;
        }
        .cmp-lane-foot {
            margin-top: 8px;
            padding-top: 6px;
            border-top: 1px dashed var(--border-color);
            font-size: 0.72em;
            color: var(--text-muted);
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
            gap: 4px;
            font-family: ui-monospace, Menlo, monospace;
        }
        .cmp-lane-foot .cmp-fastest { color: #10b981; font-weight: 600; }

        /* ========== 群聊模式 (group / AI 對 AI) ========== */
        .agents-editor {
            display: flex;
            gap: 8px;
            overflow-x: auto;
            padding: 4px 2px 10px;
        }
        .agent-card {
            background: var(--bg-card);
            border: 1px solid var(--border-color);
            border-radius: 8px;
            padding: 10px;
            min-width: 240px;
            max-width: 260px;
            flex-shrink: 0;
            display: flex;
            flex-direction: column;
            gap: 6px;
            position: relative;
            border-top-width: 3px;
        }
        .agent-card .agent-head { display: flex; justify-content: space-between; align-items: center; }
        .agent-card .agent-idx { font-size: 0.7em; color: var(--text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }
        .agent-card .agent-head-actions { display: flex; gap: 2px; }
        .agent-card .agent-head-actions button {
            background: none; border: none; cursor: pointer;
            font-size: 13px; padding: 2px 5px; border-radius: 4px;
            color: var(--text-muted);
        }
        .agent-card .agent-head-actions button:hover { background: var(--hover-bg); color: var(--text-main); }
        .agent-card .agent-head-actions .agent-del:hover { color: var(--danger); }
        .agent-card label {
            font-size: 0.7em; color: var(--text-muted); font-weight: 600;
            text-transform: uppercase; letter-spacing: 0.3px;
            margin-bottom: 1px; display: block;
        }
        .agent-card input, .agent-card select, .agent-card textarea {
            width: 100%;
            padding: 6px 8px;
            font-size: 12px;
            border: 1px solid var(--border-color);
            border-radius: 5px;
            background: var(--input-bg);
            color: var(--text-main);
            font-family: inherit;
            box-sizing: border-box;
        }
        .agent-card textarea { resize: vertical; min-height: 64px; line-height: 1.45; }
        .agent-card input:focus, .agent-card select:focus, .agent-card textarea:focus {
            outline: none; border-color: var(--primary-color);
        }
        .agent-card input.agent-color { padding: 0; height: 28px; cursor: pointer; }
        .agent-reasoning-row {
            display: flex; gap: 6px; align-items: center; margin-top: 4px;
        }
        .agent-reasoning-row input[type="checkbox"] {
            width: auto; margin: 0; accent-color: var(--primary-color);
        }
        .agent-reasoning-row .agent-reasoning-label {
            font-size: 0.76em; color: var(--text-main); margin-right: 4px; white-space: nowrap;
        }
        .agent-params-row {
            display: grid;
            grid-template-columns: 1fr 1fr 1fr;
            gap: 4px;
        }
        .agent-params-row label {
            font-size: 0.65em;
        }
        .agent-add-btn {
            min-width: 120px;
            border: 2px dashed var(--border-color);
            background: transparent;
            border-radius: 8px;
            color: var(--text-muted);
            font-size: 0.9em;
            cursor: pointer;
            flex-shrink: 0;
        }
        .agent-add-btn:hover { border-color: var(--primary-color); color: var(--primary-color); background: var(--bg-card); }

        /* 訊息上方的作者標籤 (只在 group 模式 AI 訊息顯示) */
        .msg-author {
            display: flex;
            align-items: center;
            gap: 6px;
            margin-bottom: 4px;
            font-size: 0.78em;
            color: var(--text-muted);
        }
        .msg-author-name { font-weight: 600; color: var(--text-main); }
        .msg-author-model { font-family: ui-monospace, Menlo, monospace; opacity: 0.75; }
        .msg-author-dot {
            display: inline-block;
            width: 8px;
            height: 8px;
            border-radius: 50%;
            flex-shrink: 0;
        }

        /* 輸入區「下一位發言者」控制列 */
        .group-speaker-bar {
            display: flex;
            align-items: center;
            gap: 8px;
            padding: 6px 4px;
            margin: 0 0 6px;
        }
        .group-speaker-bar .group-speaker-label {
            font-size: 0.78em;
            color: var(--text-muted);
            font-weight: 600;
            text-transform: uppercase;
            letter-spacing: 0.3px;
        }
        .group-speaker-bar .group-speaker-select {
            padding: 5px 8px;
            font-size: 0.85em;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
            color: var(--text-main);
            min-width: 200px;
        }

        /* ========== Finish reason badge (chat & compare 共用) ========== */
        .finish-badge {
            display: inline-block;
            padding: 0 6px;
            border-radius: 4px;
            font-size: 0.95em;
            font-weight: 600;
            line-height: 1.4;
            cursor: help;
            border: 1px solid transparent;
            white-space: nowrap;
        }
        .finish-badge.fr-warn  { color: #b45309; background: rgba(245, 158, 11, 0.12); border-color: rgba(245, 158, 11, 0.35); }
        .finish-badge.fr-block { color: #b91c1c; background: rgba(239, 68, 68, 0.12);  border-color: rgba(239, 68, 68, 0.35); }
        .finish-badge.fr-info  { color: #1d4ed8; background: rgba(59, 130, 246, 0.12); border-color: rgba(59, 130, 246, 0.35); }
        [data-theme="dark"] .finish-badge.fr-warn  { color: #fbbf24; background: rgba(245, 158, 11, 0.18); }
        [data-theme="dark"] .finish-badge.fr-block { color: #fca5a5; background: rgba(239, 68, 68, 0.18); }
        [data-theme="dark"] .finish-badge.fr-info  { color: #93c5fd; background: rgba(59, 130, 246, 0.18); }

        /* ========== 設定 Modal ========== */
        dialog#settings-modal {
            padding: 0;
            border: 1px solid var(--border-color);
            border-radius: 12px;
            max-width: 820px;
            width: 90vw;
            max-height: 88vh;
            background: var(--bg-card);
            color: var(--text-main);
            box-shadow: var(--shadow-md);
            overflow: hidden;
        }
        dialog#settings-modal::backdrop { background: rgba(0, 0, 0, 0.5); }
        .modal-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 14px 18px;
            border-bottom: 1px solid var(--border-color);
        }
        .modal-header h2 { margin: 0; font-size: 1.1em; }
        .modal-close {
            background: none;
            border: none;
            cursor: pointer;
            color: var(--text-muted);
            font-size: 1.2em;
            padding: 4px 10px;
            border-radius: 6px;
        }
        .modal-close:hover { background: var(--hover-bg); color: var(--text-main); }
        .modal-tabs {
            display: flex;
            gap: 2px;
            border-bottom: 1px solid var(--border-color);
            padding: 0 18px;
        }
        .modal-tab {
            background: none;
            border: none;
            padding: 10px 14px;
            cursor: pointer;
            color: var(--text-muted);
            font-weight: 600;
            font-size: 0.9em;
            border-bottom: 2px solid transparent;
        }
        .modal-tab:hover { color: var(--text-main); }
        .modal-tab.active { color: var(--primary-color); border-bottom-color: var(--primary-color); }
        .modal-body {
            padding: 18px;
            overflow-y: auto;
            max-height: calc(88vh - 120px);
        }
        .modal-section { display: none; }
        .modal-section.active { display: block; }

        /* 摘要 Modal 共用 */
        dialog#summary-modal {
            border: none;
            border-radius: 12px;
            padding: 0;
            width: min(640px, 96vw);
            max-height: 88vh;
            background: var(--bg-card);
            color: var(--text-main);
            box-shadow: var(--shadow-md);
            overflow: hidden;
        }
        dialog#summary-modal::backdrop { background: rgba(0, 0, 0, 0.5); }
        .summary-form-row { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }
        .summary-form-row > label { font-size: 0.78em; color: var(--text-muted); font-weight: 600; }
        .summary-form-row > input,
        .summary-form-row > select,
        .summary-form-row > textarea {
            padding: 8px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
            color: var(--text-main);
            font-size: 0.9em;
            box-sizing: border-box;
            width: 100%;
        }
        .summary-form-row > textarea { min-height: 120px; resize: vertical; font-family: inherit; }
        .summary-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
        .summary-info-line { font-size: 0.85em; color: var(--text-muted); margin-bottom: 12px; }
        .summary-actions { display: flex; gap: 8px; justify-content: flex-end; padding-top: 8px; border-top: 1px solid var(--border-color); margin-top: 12px; }
        .summary-history-item {
            border: 1px solid var(--border-color);
            border-radius: 8px;
            padding: 10px;
            margin-bottom: 8px;
            background: var(--input-bg);
        }
        .summary-history-item .sh-meta { font-size: 0.78em; color: var(--text-muted); margin-bottom: 6px; display: flex; justify-content: space-between; align-items: center; gap: 8px; }
        .summary-history-item pre { white-space: pre-wrap; word-break: break-word; max-height: 160px; overflow: auto; margin: 0; font-family: inherit; font-size: 0.88em; color: var(--text-main); background: transparent; }
        .summary-empty { color: var(--text-muted); font-style: italic; padding: 20px; text-align: center; }

        /* 聊天頭部摘要按鈕 + 徽章 */
        .summary-header-btn {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            background: none;
            border: 1px solid var(--border-color);
            color: var(--text-muted);
            font-size: 0.82em;
            padding: 4px 10px;
            border-radius: 14px;
            cursor: pointer;
            font-weight: 600;
        }
        .summary-header-btn:hover { background: var(--hover-bg); color: var(--text-main); }
        .summary-header-btn .sb-badge {
            background: var(--hover-bg);
            color: var(--text-muted);
            border-radius: 10px;
            padding: 1px 6px;
            font-size: 0.78em;
            font-weight: 600;
        }
        .summary-header-btn.over .sb-badge {
            background: rgba(220, 53, 69, 0.18);
            color: var(--danger, #dc3545);
        }
        .summary-header-btn.over { border-color: rgba(220, 53, 69, 0.4); color: var(--danger, #dc3545); }
        .summary-header-btn.has-summary { border-color: var(--primary-color); }
        .summary-header-btn.summarizing { border-color: var(--primary-color); color: var(--primary-color); }
        .summary-header-btn.summarizing .sb-badge {
            background: rgba(13, 110, 253, 0.15);
            color: var(--primary-color);
        }

        /* 「未進入上下文」淡化標記 (套在 .msg-container 上) */
        .msg-container.out-of-window { opacity: 0.55; }
        .msg-container.out-of-window .msg-wrap { position: relative; }
        .msg-container.out-of-window .msg-wrap::before {
            content: '未進入上下文';
            position: absolute;
            top: -6px;
            right: 0;
            font-size: 0.66em;
            color: var(--text-muted);
            background: var(--bg-card);
            padding: 1px 6px;
            border-radius: 8px;
            border: 1px solid var(--border-color);
            text-transform: none;
            letter-spacing: 0;
            font-weight: 500;
            pointer-events: none;
        }
        .msg-container.summarized-mark .msg-wrap::after {
            content: '已納入摘要';
            position: absolute;
            bottom: -6px;
            right: 0;
            font-size: 0.66em;
            color: var(--text-muted);
            background: var(--bg-card);
            padding: 1px 6px;
            border-radius: 8px;
            border: 1px dashed var(--border-color);
            pointer-events: none;
        }

        /* 輸入區上方未摘要超門檻提示列 */
        .summary-hint-bar {
            display: none;
            align-items: center;
            gap: 8px;
            padding: 6px 12px;
            margin: 0 16px 6px;
            border-radius: 8px;
            background: rgba(220, 53, 69, 0.08);
            border: 1px solid rgba(220, 53, 69, 0.25);
            font-size: 0.82em;
            color: var(--text-main);
            flex-wrap: wrap;
        }
        .summary-hint-bar.show { display: flex; }
        .summary-hint-bar .shb-text { flex: 1; min-width: 0; }
        .summary-hint-bar button {
            background: none;
            border: 1px solid var(--border-color);
            color: var(--text-muted);
            font-size: 0.85em;
            padding: 3px 10px;
            border-radius: 12px;
            cursor: pointer;
        }
        .summary-hint-bar button.primary { color: var(--primary-color); border-color: var(--primary-color); }
        .summary-hint-bar button:hover { background: var(--hover-bg); }

        /* Provider 設定清單 */
        .provider-card {
            border: 1px solid var(--border-color);
            border-radius: 10px;
            padding: 12px;
            margin-bottom: 10px;
            background: var(--bg-card);
        }
        .provider-card.proxy { background: linear-gradient(to right, var(--bg-card), rgba(63,131,248,0.04)); border-left: 3px solid var(--primary-color); }
        .provider-card-head {
            display: flex;
            align-items: center;
            justify-content: space-between;
            gap: 8px;
            margin-bottom: 8px;
        }
        .provider-card-head input.name-input {
            font-weight: 600;
            font-size: 0.95em;
            background: transparent;
            border: none;
            padding: 2px 4px;
            color: var(--text-main);
            flex-grow: 1;
        }
        .provider-card-head input.name-input:focus { outline: 1px solid var(--border-strong); border-radius: 4px; }
        .provider-card-head .pc-meta { font-size: 0.75em; color: var(--text-muted); }
        .provider-card-head .pc-del {
            background: none;
            border: none;
            cursor: pointer;
            color: var(--text-muted);
            padding: 4px 8px;
            border-radius: 5px;
            font-size: 0.95em;
        }
        .provider-card-head .pc-del:hover { background: rgba(220,53,69,0.1); color: var(--danger); }
        .provider-card-fields {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 8px;
        }
        .provider-card-fields label {
            font-size: 0.7em;
            color: var(--text-muted);
            font-weight: 600;
            text-transform: uppercase;
            letter-spacing: 0.3px;
            display: block;
            margin-bottom: 2px;
        }
        .provider-card-fields input {
            width: 100%;
            padding: 7px 10px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
            color: var(--text-main);
            font-size: 13px;
        }
        .provider-card-fields input:focus { outline: none; border-color: var(--primary-color); }
        .provider-card-fields input:disabled {
            background: transparent;
            color: var(--text-muted);
            font-style: italic;
        }
        .provider-card-foot {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-top: 8px;
            gap: 8px;
        }
        .provider-card-foot .models-count {
            font-size: 0.76em;
            color: var(--text-muted);
        }
        .provider-card-foot button {
            background: var(--btn-tool-bg);
            border: 1px solid var(--border-color);
            color: var(--text-main);
            padding: 5px 10px;
            border-radius: 6px;
            cursor: pointer;
            font-size: 0.8em;
        }
        .provider-card-foot button:hover { filter: brightness(0.92); }

        .preset-row {
            margin-top: 14px;
            padding-top: 14px;
            border-top: 1px dashed var(--border-color);
        }
        .preset-row h3 { margin: 0 0 8px; font-size: 0.85em; color: var(--text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }
        .preset-row .btns { display: flex; flex-wrap: wrap; gap: 6px; }
        .preset-row button {
            background: var(--btn-tool-bg);
            color: var(--btn-tool-text);
            border: 1px solid var(--border-color);
            padding: 6px 12px;
            border-radius: 6px;
            cursor: pointer;
            font-size: 0.85em;
        }
        .preset-row button:hover { filter: brightness(0.93); }
        .preset-row.proxy button { border-left: 3px solid var(--primary-color); }

        .settings-field-grid {
            display: grid;
            grid-template-columns: 1fr 1fr 1fr;
            gap: 12px;
        }
        .settings-field-grid label {
            display: block;
            font-size: 0.75em;
            color: var(--text-muted);
            font-weight: 600;
            margin-bottom: 4px;
        }
        .settings-field-grid input {
            width: 100%;
            padding: 8px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
            color: var(--text-main);
        }

        /* 通用按鈕 */
        .btn-primary {
            background: var(--primary-color);
            color: white;
            border: none;
            padding: 8px 14px;
            border-radius: 6px;
            cursor: pointer;
            font-size: 0.9em;
        }
        .btn-primary:hover { background: var(--primary-hover); }
        .btn-ghost {
            background: transparent;
            border: 1px solid var(--border-color);
            color: var(--text-main);
            padding: 8px 14px;
            border-radius: 6px;
            cursor: pointer;
            font-size: 0.9em;
        }
        .btn-ghost:hover { background: var(--hover-bg); }

        /* 同步狀態 */
        .sync-status {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            padding: 4px 8px;
            border-radius: 6px;
            font-size: 0.78em;
            color: var(--text-muted);
            background: transparent;
            border: 1px solid transparent;
            cursor: default;
        }
        .sync-status.clickable { cursor: pointer; }
        .sync-status.clickable:hover { background: var(--hover-bg); border-color: var(--border-color); }
        .sync-status .sync-dot {
            width: 8px;
            height: 8px;
            border-radius: 50%;
            background: #9aa0a6;
            flex-shrink: 0;
        }
        .sync-status.ok .sync-dot { background: #10b981; }
        .sync-status.syncing .sync-dot {
            background: var(--primary-color);
            animation: sync-pulse 1.1s ease-in-out infinite;
        }
        .sync-status.error .sync-dot { background: var(--danger); }
        .sync-status.conflict { background: rgba(255, 152, 0, 0.15); border-color: var(--warning); color: var(--warning); font-weight: 600; }
        .sync-status.conflict .sync-dot { background: var(--warning); }
        .sync-status.offline .sync-dot { background: #9aa0a6; }
        @keyframes sync-pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.4); opacity: 0.6; } }
        @media (max-width: 768px) { .sync-status .sync-label { display: none; } }

        /* 衝突對話框 */
        dialog#sync-conflict-modal {
            padding: 0;
            border: 1px solid var(--border-color);
            border-radius: 12px;
            max-width: 520px;
            width: 90vw;
            background: var(--bg-card);
            color: var(--text-main);
            box-shadow: var(--shadow-md);
        }
        dialog#sync-conflict-modal::backdrop { background: rgba(0, 0, 0, 0.5); }

        /* ========== 我的腳本樣板 Modal ========== */
        dialog#user-script-presets-modal {
            padding: 0;
            border: 1px solid var(--border-color);
            border-radius: 12px;
            max-width: 720px;
            width: 92vw;
            max-height: 86vh;
            background: var(--bg-card);
            color: var(--text-main);
            box-shadow: var(--shadow-md);
            overflow: hidden;
        }
        dialog#user-script-presets-modal::backdrop { background: rgba(0, 0, 0, 0.5); }
        dialog#user-script-presets-modal .modal-body {
            padding: 16px 18px;
            overflow-y: auto;
            max-height: calc(86vh - 60px);
        }
        .usp-toolbar {
            display: flex;
            align-items: center;
            gap: 8px;
            padding-bottom: 12px;
            margin-bottom: 12px;
            border-bottom: 1px solid var(--border-color);
        }
        .usp-toolbar-spacer { flex: 1; }
        .usp-count { font-size: 0.82em; color: var(--text-muted); }
        .usp-list { display: flex; flex-direction: column; gap: 8px; }
        .usp-empty {
            padding: 24px 16px;
            text-align: center;
            color: var(--text-muted);
            font-size: 0.88em;
            border: 1px dashed var(--border-color);
            border-radius: 8px;
            line-height: 1.7;
        }
        .usp-row {
            display: flex;
            gap: 12px;
            align-items: flex-start;
            padding: 10px 12px;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            background: var(--input-bg);
        }
        .usp-row:hover { border-color: var(--primary-color); }
        .usp-row-main { flex: 1; min-width: 0; }
        .usp-row-name { font-weight: 600; font-size: 0.95em; margin-bottom: 4px; word-break: break-word; }
        .usp-row-meta {
            display: flex;
            gap: 12px;
            flex-wrap: wrap;
            font-size: 0.78em;
            color: var(--text-muted);
        }
        .usp-row-desc {
            margin-top: 6px;
            font-size: 0.82em;
            color: var(--text-main);
            opacity: 0.85;
            white-space: pre-wrap;
            word-break: break-word;
        }
        .usp-row-actions {
            display: flex;
            gap: 4px;
            flex-shrink: 0;
            align-items: center;
        }
        .usp-row-actions button {
            font-size: 0.82em;
            padding: 4px 10px;
        }
        .usp-row-actions .usp-danger:hover { color: var(--danger, #dc2626); }
        .usp-help {
            margin-top: 16px;
            padding: 10px 12px;
            background: var(--input-bg);
            border-left: 3px solid var(--primary-color);
            border-radius: 5px;
            font-size: 0.8em;
            color: var(--text-muted);
            line-height: 1.6;
        }
        @media (max-width: 600px) {
            .usp-row { flex-direction: column; }
            .usp-row-actions { width: 100%; justify-content: flex-end; flex-wrap: wrap; }
        }
        dialog#sync-conflict-modal .modal-header { padding: 14px 18px; border-bottom: 1px solid var(--border-color); }
        dialog#sync-conflict-modal .modal-body { padding: 16px 18px; font-size: 0.9em; }
        dialog#sync-conflict-modal .conflict-meta { background: var(--chat-bg); padding: 10px 12px; border-radius: 8px; margin: 10px 0; font-family: ui-monospace, Menlo, monospace; font-size: 0.82em; }
        dialog#sync-conflict-modal .conflict-actions { display: flex; gap: 8px; padding: 12px 18px 16px; justify-content: flex-end; flex-wrap: wrap; }

        /* 第一次首次遷移橫幅 */
        .migrate-banner {
            display: none;
            background: var(--primary-color);
            color: #fff;
            text-align: center;
            padding: 6px;
            font-size: 0.85em;
        }
        .migrate-banner.show { display: block; }

        /* Toast / 離線 */
        .toast {
            position: fixed;
            top: 20px;
            right: 20px;
            background: #333;
            color: #fff;
            padding: 10px 18px;
            border-radius: 6px;
            display: none;
            z-index: 5000;
            box-shadow: var(--shadow-md);
            max-width: 90vw;
        }
        .toast.err { background: var(--danger); }
        .toast.warn { background: var(--warning); }
        .offline-banner {
            display: none;
            background: var(--warning);
            color: #fff;
            text-align: center;
            padding: 5px;
            font-size: 0.85em;
        }
        .offline-banner.show { display: block; }

        /* ========== 響應式 ========== */
        @media (max-width: 1023px) {
            .app-grid { grid-template-columns: 220px 1fr; }
        }
        @media (max-width: 768px) {
            .app-grid { grid-template-columns: 1fr; }
            .sidebar {
                position: fixed;
                top: 0;
                bottom: 0;
                left: 0;
                width: 280px;
                max-width: 85vw;
                z-index: 35;
                transform: translateX(-100%);
                box-shadow: var(--shadow-md);
            }
            .sidebar.open { transform: translateX(0); }
            .sidebar-toggle { display: inline-flex; }
            .topbar {
                display: grid;
                grid-template-columns: auto minmax(0, 1fr) auto;
                grid-template-rows: auto auto;
                column-gap: 8px;
                row-gap: 6px;
                padding: 8px 12px;
                min-height: 48px;
                background: var(--bg-card);
                border-bottom: 1px solid var(--border-color);
            }
            .sidebar-toggle { grid-column: 1; grid-row: 1; align-self: center; }
            .topbar-title { grid-column: 2; grid-row: 1; align-self: center; max-width: none; min-width: 0; font-size: 0.88em; }
            .topbar-right { grid-column: 3; grid-row: 1; align-self: center; flex-shrink: 1; min-width: 0; margin-left: 0; }
            .topbar-controls {
                grid-column: 1 / -1;
                grid-row: 2;
                display: flex;
                flex-wrap: wrap;
                gap: 6px;
                row-gap: 6px;
                width: auto;
                background: var(--bg-card);
            }
            .topbar-mini-select { font-size: 0.75em; flex: 1 1 140px; min-width: 0; background: var(--btn-tool-bg); }
            .topbar-mini-select select, .topbar-mini-select input { min-width: 0; max-width: 100%; }
            html, body { overflow-x: hidden; }
            .main { min-width: 0; }
            .subheader, .subheader-section, .subheader-body { min-width: 0; max-width: 100%; }
            .subheader-body textarea { word-break: break-word; overflow-wrap: anywhere; max-width: 100%; }
            .subheader-toggle { padding: 14px 16px; font-size: 1em; }
            .chat-area { padding: 14px 12px; }
            .input-bar { padding: 8px 12px 12px; }
            .input-bar-inner { min-width: 0; }
            .input-bar textarea { font-size: 14px; min-width: 0; }
            .input-bar-actions { min-width: 80px; }
            .provider-card-fields { grid-template-columns: 1fr; }
            .settings-field-grid { grid-template-columns: 1fr; }
            .cmp-grid {
                display: flex;
                grid-template-columns: none;
                overflow-x: auto;
                scroll-snap-type: x mandatory;
                scroll-padding: 12px;
                -webkit-overflow-scrolling: touch;
                gap: 10px;
                padding-bottom: 6px;
            }
            .cmp-grid > .cmp-lane-cell {
                flex: 0 0 88vw;
                max-width: 88vw;
                scroll-snap-align: start;
                scroll-snap-stop: always;
            }
            .msg-edit { margin-top: 8px; }
            .msg-edit textarea { min-height: 220px; font-size: 15px; }
            .msg-edit .edit-actions { gap: 8px; }
            .msg-edit .edit-actions button { flex: 1 1 auto; padding: 10px 12px; font-size: 0.9em; }

            /* Web Search row 元素的觸控熱區 (WCAG: 桌面 22-26px 在手機容易誤觸,
               統一拉到 ~32-40px) */
            .web-search-engine-chip {
                min-height: 32px;
                padding: 4px 10px;
                font-size: 0.88em;
            }
            .web-search-cache-badge {
                width: 32px;
                height: 32px;
                font-size: 1em;
            }
            .web-search-keyword-delete {
                min-height: 32px;
                padding: 6px 12px;
            }
            .web-search-engine-popover,
            .web-search-cache-popover {
                min-width: min(240px, 70vw);
            }
            .web-search-engine-popover-option,
            .web-search-cache-popover-action {
                min-height: 40px;
                font-size: 0.95em;
                padding: 10px 14px;
            }
        }

        /* 腳本與狀態面板 */
        .script-panel { font-size: 0.88em; }
        .script-panel input[type="text"],
        .script-panel input[type="number"],
        .script-panel select,
        .script-panel textarea {
            box-sizing: border-box;
            padding: 6px 8px;
            border: 1px solid var(--border-color);
            border-radius: 5px;
            background: var(--bg-main);
            color: var(--text-main);
            font-size: 0.9em;
        }
        .script-panel input:focus, .script-panel select:focus, .script-panel textarea:focus { outline: none; border-color: var(--primary-color); }
        .script-panel input[disabled], .script-panel select[disabled], .script-panel textarea[disabled] { opacity: 0.5; cursor: not-allowed; }
        .script-panel .sh-field-label { margin-top: 8px; }
        .script-empty { font-size: 0.8em; color: var(--text-muted); margin: 6px 0; padding: 8px; border: 1px dashed var(--border-color); border-radius: 5px; text-align: center; }
        .script-rules { display: flex; flex-direction: column; gap: 8px; margin-bottom: 8px; }
        .script-rule-card { border: 1px solid var(--border-color); border-radius: 6px; padding: 8px 10px; background: var(--input-bg); }
        .script-rule-head { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; flex-wrap: wrap; }
        .script-rule-no { font-size: 0.72em; color: var(--text-muted); font-weight: 600; min-width: 22px; }
        .script-rule-name { flex: 1 1 140px; min-width: 100px; }
        .script-rule-head select { width: auto; min-width: 140px; }
        .rule-action {
            background: transparent;
            border: 1px solid var(--border-color);
            color: var(--text-muted);
            border-radius: 4px;
            cursor: pointer;
            width: 26px;
            height: 26px;
            font-size: 0.85em;
            line-height: 1;
        }
        .rule-action:hover { color: var(--text-main); background: var(--hover-bg); }
        .rule-action.danger:hover { color: var(--danger); }
        .script-rule-body { display: flex; flex-direction: column; gap: 6px; }
        .script-rule-row { display: flex; flex-direction: column; gap: 4px; }
        .script-rule-row label { display: flex; flex-direction: column; gap: 4px; font-size: 0.78em; color: var(--text-muted); }
        .script-rule-row input[type="text"] { width: 100%; }
        .script-cases { display: flex; flex-direction: column; gap: 4px; padding: 6px; border: 1px dashed var(--border-color); border-radius: 5px; }
        .script-case-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
        .script-case-row label { flex: 0 0 auto; flex-direction: row; align-items: center; gap: 4px; font-size: 0.85em; color: var(--text-main); }
        .script-case-row input[type="number"] { width: 80px; }
        .script-case-row input[type="text"] { flex: 1 1 120px; min-width: 80px; }
        .case-del {
            background: transparent;
            border: 1px solid var(--border-color);
            color: var(--text-muted);
            border-radius: 4px;
            cursor: pointer;
            width: 24px;
            height: 24px;
            font-size: 0.8em;
        }
        .case-del:hover { color: var(--danger); }
        .script-ws-toggle { flex-direction: row !important; align-items: center; gap: 6px; }
        .script-data-row { display: flex; gap: 10px; flex-wrap: wrap; padding: 6px; border: 1px solid var(--border-color); border-radius: 5px; background: var(--input-bg); }
        .script-data-row > label { display: flex; align-items: center; gap: 6px; font-size: 0.82em; color: var(--text-main); }
        .script-data-row input[type="text"] { width: 100px; }
        .script-strip-toggle { flex: 1 1 100%; }
        .script-state-preview, .script-rolllog {
            margin: 4px 0 8px;
            padding: 8px 10px;
            background: var(--input-bg);
            border: 1px solid var(--border-color);
            border-radius: 5px;
            font-family: ui-monospace, Menlo, Consolas, monospace;
            font-size: 0.78em;
            color: var(--text-main);
            max-height: 200px;
            overflow: auto;
            white-space: pre-wrap;
            word-break: break-all;
        }
        .script-actions { display: flex; gap: 6px; flex-wrap: wrap; }
        .script-actions button { font-size: 0.82em; padding: 4px 10px; }
        .script-advanced { margin-top: 8px; }
        .script-advanced summary { font-size: 0.78em; color: var(--text-muted); cursor: pointer; }
        .script-advanced summary:hover { color: var(--text-main); }

        /* --- 新版簡化 UI 樣式 --- */
        .script-actions-bar {
            display: flex;
            gap: 8px;
            align-items: center;
            flex-wrap: wrap;
            padding: 8px 0;
            border-bottom: 1px solid var(--border-color);
            margin-bottom: 8px;
        }
        .script-actions-bar button { font-size: 0.82em; padding: 4px 10px; }
        .script-preset-select {
            padding: 4px 8px;
            font-size: 0.82em;
            min-width: 160px;
        }
        .script-help-text {
            font-size: 0.78em;
            color: var(--text-muted);
            line-height: 1.5;
            margin: 0 0 6px;
            padding: 6px 8px;
            background: var(--input-bg);
            border-radius: 5px;
            border-left: 3px solid var(--primary-color);
        }
        .script-vars, .script-fields {
            display: flex;
            flex-direction: column;
            gap: 8px;
            margin-bottom: 8px;
        }
        .script-var-card, .script-field-card {
            border: 1px solid var(--border-color);
            border-radius: 6px;
            padding: 8px 10px;
            background: var(--input-bg);
        }
        .script-field-card { border-left: 3px solid var(--primary-color); }
        .script-var-head {
            display: flex;
            align-items: center;
            gap: 6px;
            margin-bottom: 6px;
            flex-wrap: wrap;
        }
        .script-var-head label {
            display: flex;
            flex-direction: column;
            gap: 2px;
            font-size: 0.72em;
            color: var(--text-muted);
            min-width: 0;
        }
        .script-var-head input[type="text"] { font-size: 0.9em; }
        .script-var-body {
            display: flex;
            flex-direction: column;
            gap: 6px;
        }
        .script-toggles {
            flex-direction: row !important;
            flex-wrap: wrap;
            gap: 12px;
        }
        .script-field-row {
            display: grid !important;
            grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
            gap: 8px;
        }
        .script-field-source-row select {
            width: 100%;
            padding: 6px 8px;
            border: 1px solid var(--border-color);
            border-radius: 5px;
            background: var(--bg-main);
            color: var(--text-main);
            font-size: 0.88em;
        }
        .script-field-source-row select:focus { outline: none; border-color: var(--primary-color); }
        .script-inj-row {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
            gap: 8px;
            padding: 8px;
            border: 1px solid var(--border-color);
            border-radius: 5px;
            background: var(--input-bg);
        }
        .script-inj-row > label {
            display: flex;
            flex-direction: column;
            gap: 4px;
            font-size: 0.78em;
            color: var(--text-muted);
        }
        .script-inj-row .script-strip-toggle {
            flex-direction: row;
            align-items: center;
            grid-column: 1 / -1;
            color: var(--text-main);
            font-size: 0.85em;
        }
        .script-preview-block {
            margin: 4px 0 8px;
            padding: 10px 12px;
            background: var(--input-bg);
            border: 2px solid var(--primary-color);
            border-radius: 6px;
            font-family: ui-monospace, Menlo, Consolas, monospace;
            font-size: 0.82em;
            color: var(--text-main);
            max-height: 360px;
            overflow: auto;
            white-space: pre-wrap;
            word-break: break-word;
            line-height: 1.5;
        }

        /* 訊息上的「狀態快照」框 (仿 reasoning-box) */
        .data-block-box {
            margin: 0 0 8px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            background: var(--input-bg);
            font-size: 0.85em;
            overflow: hidden;
        }
        .data-block-box > summary {
            cursor: pointer;
            padding: 6px 12px;
            color: var(--text-muted);
            list-style: none;
            user-select: none;
            display: flex;
            align-items: center;
            gap: 6px;
        }
        .data-block-box > summary::-webkit-details-marker { display: none; }
        .data-block-box > summary::before {
            content: '▸';
            font-size: 0.8em;
            opacity: 0.65;
            transition: transform 0.15s ease;
            display: inline-block;
        }
        .data-block-box[open] > summary::before { transform: rotate(90deg); }
        .data-block-box > summary:hover { background: rgba(128, 128, 128, 0.08); color: var(--text-main); }
        .data-block-box .data-block-body {
            padding: 8px 12px 10px;
            font-family: ui-monospace, Menlo, Consolas, monospace;
            font-size: 0.85em;
            color: var(--text-main);
            white-space: pre-wrap;
            word-break: break-all;
            max-height: 320px;
            overflow: auto;
            border-top: 1px solid var(--border-color);
            background: var(--bg-main);
        }
        .data-block-box .data-block-section-label {
            display: block;
            font-size: 0.72em;
            color: var(--text-muted);
            font-weight: 600;
            text-transform: uppercase;
            letter-spacing: 0.3px;
            margin: 6px 12px 0;
        }

        /* 群聊隱形路由訊息: 窄版 trace box, 不算對話氣泡 */
        .msg-container.msg-router {
            justify-content: center;
            margin-bottom: 10px;
        }
        .msg-container.msg-router .router-trace-box {
            width: 100%;
            max-width: 720px;
            border: 1px dashed var(--border-color);
            border-radius: 6px;
            background: var(--bg-sidebar);
            font-size: 0.82em;
            overflow: hidden;
            opacity: 0.85;
        }
        .msg-container.msg-router .router-trace-box > summary {
            cursor: pointer;
            padding: 5px 10px;
            color: var(--text-muted);
            list-style: none;
            user-select: none;
            display: flex;
            align-items: center;
            gap: 6px;
        }
        .msg-container.msg-router .router-trace-box > summary::-webkit-details-marker { display: none; }
        .msg-container.msg-router .router-trace-box > summary::before {
            content: '▸';
            font-size: 0.8em;
            opacity: 0.65;
            transition: transform 0.15s ease;
            display: inline-block;
        }
        .msg-container.msg-router .router-trace-box[open] > summary::before { transform: rotate(90deg); }
        .msg-container.msg-router .router-trace-box > summary:hover { background: rgba(128, 128, 128, 0.08); color: var(--text-main); }
        .msg-container.msg-router .router-trace-icon { font-size: 0.95em; }
        .msg-container.msg-router .router-trace-title { color: var(--text-main); opacity: 0.85; }
        .msg-container.msg-router .router-trace-body {
            border-top: 1px solid var(--border-color);
            padding: 8px 10px 10px;
            background: var(--bg-main);
            display: flex;
            flex-direction: column;
            gap: 6px;
        }
        .msg-container.msg-router .router-trace-meta {
            font-size: 0.92em;
            color: var(--text-muted);
        }
        .msg-container.msg-router .router-trace-raw {
            margin: 0;
            padding: 6px 8px;
            background: var(--bg-sidebar);
            border: 1px solid var(--border-color);
            border-radius: 4px;
            font-family: ui-monospace, Menlo, Consolas, monospace;
            font-size: 0.92em;
            white-space: pre-wrap;
            word-break: break-word;
            color: var(--text-main);
            max-height: 200px;
            overflow: auto;
        }
        .msg-container.msg-router .router-trace-actions {
            display: flex;
            justify-content: flex-end;
            gap: 4px;
        }
