diff --git a/webclient/src/components/artifacts/ArtifactsPanel.vue b/webclient/src/components/artifacts/ArtifactsPanel.vue index dd0ffc8..b87dba4 100644 --- a/webclient/src/components/artifacts/ArtifactsPanel.vue +++ b/webclient/src/components/artifacts/ArtifactsPanel.vue @@ -1047,8 +1047,8 @@ max-width: var(--artifacts-width, min(600px, 42vw)); display: flex; flex-direction: column; - background: #16161E; - border-left: 2px solid rgba(192, 202, 245, 0.24); + background: var(--gn-color-black); + border-left: 2px solid var(--gn-border-color-muted); min-height: 0; margin-right: calc(-1 * var(--artifacts-width, min(600px, 42vw))); opacity: 0; @@ -1096,7 +1096,7 @@ .artifacts-resize-handle:hover::after, .artifacts-panel.is-resizing .artifacts-resize-handle::after { - background: #FF9E64; + background: var(--gn-color-accent); } .artifacts-header { @@ -1106,7 +1106,7 @@ justify-content: space-between; gap: 12px; padding: 0 15px; - border-bottom: 2px solid rgba(192, 202, 245, 0.24); + border-bottom: 2px solid var(--gn-border-color-muted); } .artifacts-empty { @@ -1116,7 +1116,7 @@ align-items: center; justify-content: center; gap: 8px; - color: #787C99; + color: var(--gn-color-text-dark); font-size: 13px; } @@ -1139,9 +1139,9 @@ min-height: 46px; padding: 12px 15px; border: 0; - border-right: 2px solid rgba(192, 202, 245, 0.08); + border-right: 2px solid color-mix(in srgb, var(--gn-color-text-light) 8%, transparent); background: transparent; - color: #A9B1D6; + color: var(--gn-color-text-medium); font-size: 13px; font-weight: 700; text-transform: uppercase; @@ -1151,13 +1151,13 @@ } .artifacts-tab:hover { - background: #7AA2F7; - color: #16161E; + background: var(--gn-color-secondary); + color: var(--gn-color-black); } .artifacts-tab.is-active { - background: #C0CAF5; - color: #16161E; + background: var(--gn-color-text-light); + color: var(--gn-color-black); } .artifacts-tab-count { @@ -1167,21 +1167,21 @@ min-width: 18px; height: 18px; padding: 0 5px; - background: #1F2335; - color: #787C99; + background: var(--gn-surface-panel); + color: var(--gn-color-text-dark); font-size: 11px; font-weight: 600; } .artifacts-tab.is-active .artifacts-tab-count { background: rgba(22, 22, 30, 0.2); - color: #16161E; + color: var(--gn-color-black); } .artifacts-list { max-height: calc(58px * 4); overflow-y: auto; - border-bottom: 2px solid rgba(192, 202, 245, 0.24); + border-bottom: 2px solid var(--gn-border-color-muted); } .artifact-item { @@ -1192,22 +1192,22 @@ gap: 10px; padding: 8px 12px; border: 2px solid transparent; - background: rgba(192, 202, 245, 0.045); - color: #C0CAF5; + background: color-mix(in srgb, var(--gn-color-text-light) 5%, transparent); + color: var(--gn-color-text-light); text-align: left; cursor: pointer; transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease; } .artifact-item:hover { - background: #7AA2F7; - color: #16161E; + background: var(--gn-color-secondary); + color: var(--gn-color-black); } .artifact-item.is-active { - border-color: #7AA2F7; - background: #7AA2F7; - color: #16161E; + border-color: var(--gn-color-secondary); + background: var(--gn-color-secondary); + color: var(--gn-color-black); } .artifact-icon { @@ -1216,13 +1216,13 @@ display: inline-flex; align-items: center; justify-content: center; - color: #FF9E64; - background: rgba(192, 202, 245, 0.085); + color: var(--gn-color-accent); + background: var(--gn-surface-panel-strong); } .artifact-item:hover .artifact-icon, .artifact-item.is-active .artifact-icon { - color: #16161E; + color: var(--gn-color-black); background: rgba(22, 22, 30, 0.12); } @@ -1249,7 +1249,7 @@ .artifact-meta { font-size: 11px; - color: #787C99; + color: var(--gn-color-text-dark); } .artifact-item:hover .artifact-meta, @@ -1271,13 +1271,13 @@ .artifact-detail-title { font-size: 14px; font-weight: 600; - color: #C0CAF5; + color: var(--gn-color-text-light); } .artifact-detail-filename { margin-top: 3px; font-size: 12px; - color: #787C99; + color: var(--gn-color-text-dark); } .artifact-actions { @@ -1292,24 +1292,24 @@ display: inline-flex; align-items: center; justify-content: center; - border: 2px solid rgba(192, 202, 245, 0.24); - background: #1F2335; - color: #C0CAF5; + border: 2px solid var(--gn-border-color-muted); + background: var(--gn-surface-panel); + color: var(--gn-color-text-light); text-decoration: none; cursor: pointer; transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease; } .artifact-action:hover { - background: #7AA2F7; - border-color: #7AA2F7; - color: #16161E; + background: var(--gn-color-secondary); + border-color: var(--gn-color-secondary); + color: var(--gn-color-black); } .artifact-preview { flex: 1; min-height: 0; - border-top: 2px solid rgba(192, 202, 245, 0.24); + border-top: 2px solid var(--gn-border-color-muted); background: #0f0f14; } @@ -1341,11 +1341,11 @@ font-family: "IBM Plex Mono", monospace; font-size: 12px; line-height: 1.6; - color: #C0CAF5; + color: var(--gn-color-text-light); } .artifact-source-error { - color: #F7768E; + color: var(--gn-color-error); } .artifact-source-state { @@ -1353,7 +1353,7 @@ align-items: center; gap: 8px; padding: 14px; - color: #787C99; + color: var(--gn-color-text-dark); font-size: 12px; } @@ -1365,7 +1365,7 @@ align-items: center; justify-content: center; gap: 8px; - color: #787C99; + color: var(--gn-color-text-dark); font-size: 13px; } @@ -1384,17 +1384,17 @@ } .link-item .artifact-title { - color: #FF9E64; + color: var(--gn-color-accent); } .link-item:hover .artifact-title, .link-item.is-active .artifact-title { - color: #16161E; + color: var(--gn-color-black); } .link-detail { padding: 12px 15px; - border-top: 2px solid rgba(192, 202, 245, 0.24); + border-top: 2px solid var(--gn-border-color-muted); } .link-detail-header { @@ -1403,7 +1403,7 @@ .link-detail-count { font-size: 12px; - color: #787C99; + color: var(--gn-color-text-dark); } .link-actions { @@ -1426,7 +1426,7 @@ } .file-item.is-dir .artifact-title { - color: #A9B1D6; + color: var(--gn-color-text-medium); } .file-row-actions { @@ -1509,18 +1509,18 @@ display: inline-flex; align-items: center; justify-content: center; - border: 2px solid rgba(192, 202, 245, 0.24); - background: #1F2335; - color: #C0CAF5; + border: 2px solid var(--gn-border-color-muted); + background: var(--gn-surface-panel); + color: var(--gn-color-text-light); font-size: 14px; cursor: pointer; transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease; } .files-refresh-btn:hover { - background: #7AA2F7; - border-color: #7AA2F7; - color: #16161E; + background: var(--gn-color-secondary); + border-color: var(--gn-color-secondary); + color: var(--gn-color-black); } .files-refresh-btn:disabled { @@ -1555,7 +1555,7 @@ gap: 8px; padding: 8px; font-size: 12px; - color: var(--color-text-dark, #787c99); + color: var(--gn-color-text-dark); pointer-events: none; transition: opacity 0.15s, transform 0.15s; will-change: transform, opacity; @@ -1605,21 +1605,21 @@ the detail grid's value text, where a filled background would render the text invisible (teal text on teal background). */ .terminal-status-badge.status-busy { - background: #73DACA; - color: #16161E; - border-color: #73DACA; + background: var(--gn-color-success); + color: var(--gn-color-black); + border-color: var(--gn-color-success); } .terminal-status-badge.status-idle { - background: #7AA2F7; - color: #16161E; - border-color: #7AA2F7; + background: var(--gn-color-secondary); + color: var(--gn-color-black); + border-color: var(--gn-color-secondary); } .terminal-status-badge.status-closed { - background: #F7768E; - color: #16161E; - border-color: #F7768E; + background: var(--gn-color-error); + color: var(--gn-color-black); + border-color: var(--gn-color-error); } .terminal-detail { @@ -1627,7 +1627,7 @@ min-height: 0; display: flex; flex-direction: column; - border-top: 2px solid rgba(192, 202, 245, 0.24); + border-top: 2px solid var(--gn-border-color-muted); overflow-y: auto; } @@ -1644,14 +1644,14 @@ } .artifacts-tab-count.has-running { - background: #73DACA; - color: #16161E; + background: var(--gn-color-success); + color: var(--gn-color-black); } .terminal-detail-title { font-size: 14px; font-weight: 600; - color: #C0CAF5; + color: var(--gn-color-text-light); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -1664,24 +1664,24 @@ align-items: center; justify-content: center; flex-shrink: 0; - border: 2px solid rgba(192, 202, 245, 0.24); - background: #1F2335; - color: #C0CAF5; + border: 2px solid var(--gn-border-color-muted); + background: var(--gn-surface-panel); + color: var(--gn-color-text-light); font-size: 14px; cursor: pointer; transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease; } .terminal-detail-close:hover { - background: #7AA2F7; - border-color: #7AA2F7; - color: #16161E; + background: var(--gn-color-secondary); + border-color: var(--gn-color-secondary); + color: var(--gn-color-black); } .terminal-detail-meta { margin-top: 3px; font-size: 12px; - color: #787C99; + color: var(--gn-color-text-dark); word-break: break-word; line-height: 1.5; } @@ -1691,7 +1691,7 @@ flex-direction: column; gap: 6px; padding: 0 15px 12px; - border-bottom: 2px solid rgba(192, 202, 245, 0.12); + border-bottom: 2px solid color-mix(in srgb, var(--gn-color-text-light) 12%, transparent); } .terminal-detail-row { @@ -1703,34 +1703,34 @@ } .terminal-detail-label { - color: #787C99; + color: var(--gn-color-text-dark); flex-shrink: 0; } .terminal-detail-value { - color: #C0CAF5; + color: var(--gn-color-text-light); text-align: right; word-break: break-all; } /* Status colours inside detail rows — must be after .terminal-detail-value - so their color overrides the default #C0CAF5. */ + so their color overrides the default var(--gn-color-text-light). */ .terminal-detail-value.status-busy { - color: #73DACA; + color: var(--gn-color-success); } .terminal-detail-value.status-idle { - color: #7AA2F7; + color: var(--gn-color-secondary); } .terminal-detail-value.status-closed { - color: #F7768E; + color: var(--gn-color-error); } .terminal-detail-command { font-family: "IBM Plex Mono", monospace; font-size: 11px; - color: #FF9E64; + color: var(--gn-color-accent); } .terminal-output-wrap { @@ -1747,8 +1747,8 @@ font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; - color: #787C99; - border-bottom: 2px solid rgba(192, 202, 245, 0.12); + color: var(--gn-color-text-dark); + border-bottom: 2px solid color-mix(in srgb, var(--gn-color-text-light) 12%, transparent); } .terminal-output { @@ -1761,6 +1761,6 @@ font-family: "IBM Plex Mono", monospace; font-size: 12px; line-height: 1.6; - color: #C0CAF5; + color: var(--gn-color-text-light); } diff --git a/webclient/src/components/chat/ChatArea.vue b/webclient/src/components/chat/ChatArea.vue index 92e1214..f5f978c 100644 --- a/webclient/src/components/chat/ChatArea.vue +++ b/webclient/src/components/chat/ChatArea.vue @@ -64,9 +64,9 @@ align-items: center; gap: 8px; padding: 6px 16px; - background: rgba(224, 175, 104, 0.1); - border-bottom: 1px solid rgba(224, 175, 104, 0.3); + background: color-mix(in srgb, var(--gn-color-warning) 10%, transparent); + border-bottom: 1px solid color-mix(in srgb, var(--gn-color-warning) 30%, transparent); font-size: 13px; - color: var(--color-warning, #e0af68); + color: var(--gn-color-warning); } diff --git a/webclient/src/components/chat/ChatHeader.vue b/webclient/src/components/chat/ChatHeader.vue index bac1f39..936bc33 100644 --- a/webclient/src/components/chat/ChatHeader.vue +++ b/webclient/src/components/chat/ChatHeader.vue @@ -95,8 +95,8 @@ padding: 0 4px; font-size: 10px; line-height: 1; - background: var(--accent, #4ec9b0); - color: #11111b; + background: var(--gn-color-secondary); + color: var(--gn-color-black); } .recall-banner { @@ -104,14 +104,14 @@ align-items: center; gap: 8px; padding: 6px 12px; - background: rgba(var(--color-accent-rgb, 122, 162, 247), 0.12); - border-bottom: 1px solid var(--color-border, #3b4261); + background: color-mix(in srgb, var(--gn-color-secondary) 12%, transparent); + border-bottom: 1px solid var(--gn-border-color-muted); font-size: 12px; - color: var(--color-text, #a9b1d6); + color: var(--gn-color-text-medium); } .recall-banner i { - color: var(--color-accent, #7aa2f7); + color: var(--gn-color-secondary); font-size: 14px; } @@ -125,7 +125,7 @@ .recall-btn { background: none; border: none; - color: var(--color-text-dark, #787c99); + color: var(--gn-color-text-dark); cursor: pointer; padding: 2px 4px; font-size: 14px; @@ -135,7 +135,7 @@ } .recall-btn:hover { - color: var(--color-text, #a9b1d6); - background: rgba(255,255,255,0.06); + color: var(--gn-color-text-medium); + background: color-mix(in srgb, var(--gn-color-text-light) 6%, transparent); } diff --git a/webclient/src/components/chat/FilePreviewStrip.vue b/webclient/src/components/chat/FilePreviewStrip.vue index 1adcaa2..fcfde25 100644 --- a/webclient/src/components/chat/FilePreviewStrip.vue +++ b/webclient/src/components/chat/FilePreviewStrip.vue @@ -52,8 +52,8 @@ position: absolute; top: -4px; right: -4px; - background: var(--surface-panel, #1f2335); - border: 1px solid var(--border-color-muted); + background: var(--gn-surface-panel); + border: 1px solid var(--gn-border-color-muted); width: 18px; height: 18px; display: flex; @@ -61,9 +61,9 @@ justify-content: center; font-size: 10px; cursor: pointer; - color: var(--color-text-dark); + color: var(--gn-color-text-dark); - &:hover { color: var(--color-error); } + &:hover { color: var(--gn-color-error); } } } @@ -71,7 +71,7 @@ display: flex; align-items: center; justify-content: center; - color: var(--color-text-medium, #8b95c7); + color: var(--gn-color-text-medium); .ph-spin { animation: spin 0.9s linear infinite; diff --git a/webclient/src/components/chat/InputBar.vue b/webclient/src/components/chat/InputBar.vue index 9e58efc..d947dc4 100644 --- a/webclient/src/components/chat/InputBar.vue +++ b/webclient/src/components/chat/InputBar.vue @@ -203,7 +203,7 @@ gap: 6px; padding: 4px 8px; font-size: 12px; - color: var(--color-warning, #e0af68); + color: var(--gn-color-warning); margin-bottom: 4px; } @@ -213,7 +213,7 @@ gap: 6px; padding: 4px 8px; font-size: 12px; - color: var(--color-text-medium, #8b95c7); + color: var(--gn-color-text-medium); margin-bottom: 4px; .ph-spin { diff --git a/webclient/src/components/chat/MessageList.vue b/webclient/src/components/chat/MessageList.vue index aa9e7a2..51eb6e1 100644 --- a/webclient/src/components/chat/MessageList.vue +++ b/webclient/src/components/chat/MessageList.vue @@ -322,7 +322,7 @@ align-items: center; justify-content: center; font-size: 26px; - color: var(--color-text-medium, #8b95c7); + color: var(--gn-color-text-medium); pointer-events: none; .animate-spin { @@ -346,8 +346,8 @@ gap: 8px; padding: 8px; font-size: 13px; - color: var(--color-fg-muted, #a9b1d6); - background: var(--color-bg-primary, transparent); + color: var(--gn-color-text-medium); + background: transparent; pointer-events: none; } @@ -367,8 +367,8 @@ width: 40px; height: 40px; border-radius: 50%; - background: var(--color-secondary, #7aa2f7); - color: var(--color-black, #1a1b2e); + background: var(--gn-color-secondary); + color: var(--gn-color-black); border: none; cursor: pointer; display: flex; diff --git a/webclient/src/components/chat/QueuedMessagesChip.vue b/webclient/src/components/chat/QueuedMessagesChip.vue index b7fe4c5..6a7fdbe 100644 --- a/webclient/src/components/chat/QueuedMessagesChip.vue +++ b/webclient/src/components/chat/QueuedMessagesChip.vue @@ -34,18 +34,18 @@ gap: 6px; padding: 3px 10px; border-radius: 999px; - border: 1px solid var(--border-color-muted, rgba(128, 128, 128, 0.25)); - background: var(--surface-panel-muted, rgba(128, 128, 128, 0.08)); + border: 1px solid var(--gn-border-color-muted); + background: var(--gn-surface-panel-muted); font-size: 12px; - color: var(--color-text-medium, #999); + color: var(--gn-color-text-medium); - i { color: var(--color-primary, #7aa2f7); } + i { color: var(--gn-color-secondary); } white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; - &.queued i { color: var(--color-primary, #7aa2f7); } + &.queued i { color: var(--gn-color-secondary); } } .fade-enter-active, .fade-leave-active { transition: opacity 0.2s; } diff --git a/webclient/src/components/messages/AssistantMessage.vue b/webclient/src/components/messages/AssistantMessage.vue index 9d01f83..4260e21 100644 --- a/webclient/src/components/messages/AssistantMessage.vue +++ b/webclient/src/components/messages/AssistantMessage.vue @@ -271,6 +271,6 @@ .msg-rate-btn:hover { opacity: 1; } .msg-rate-btn.active { opacity: 1; - color: var(--accent, #4ec9b0); + color: var(--gn-color-secondary); } diff --git a/webclient/src/components/messages/CompressionNotice.vue b/webclient/src/components/messages/CompressionNotice.vue index ac64473..7a7ef06 100644 --- a/webclient/src/components/messages/CompressionNotice.vue +++ b/webclient/src/components/messages/CompressionNotice.vue @@ -28,8 +28,8 @@ gap: 8px; padding: 8px 12px; border-radius: 8px; - background: var(--color-bg-tertiary, #2a2b3d); - color: var(--color-text-muted, #8b8fa3); + background: var(--gn-surface-panel-strong); + color: var(--gn-color-text-dark); font-size: 13px; } .compression-pending i { diff --git a/webclient/src/components/messages/ContentCard.vue b/webclient/src/components/messages/ContentCard.vue index c3b24a7..a6d7db2 100644 --- a/webclient/src/components/messages/ContentCard.vue +++ b/webclient/src/components/messages/ContentCard.vue @@ -317,8 +317,8 @@ diff --git a/webclient/src/components/messages/UiComponentCard.vue b/webclient/src/components/messages/UiComponentCard.vue index 39c6ac2..92ca978 100644 --- a/webclient/src/components/messages/UiComponentCard.vue +++ b/webclient/src/components/messages/UiComponentCard.vue @@ -38,8 +38,8 @@ \ No newline at end of file diff --git a/webclient/src/components/settings/SettingsView.vue b/webclient/src/components/settings/SettingsView.vue index b6eb541..1ad3184 100644 --- a/webclient/src/components/settings/SettingsView.vue +++ b/webclient/src/components/settings/SettingsView.vue @@ -36,8 +36,8 @@ align-items: center; gap: 12px; padding: 16px 20px; - border-bottom: 1px solid var(--color-border, #3b4261); - background: var(--surface-panel, #1f2335); + border-bottom: 1px solid var(--gn-border-color-muted); + background: var(--gn-surface-panel); } .settings-sidebar-toggle { @@ -51,7 +51,7 @@ font-size: 1.25rem; font-weight: 600; margin: 0; - color: var(--color-text, #a9b1d6); + color: var(--gn-color-text-medium); } .settings-body { diff --git a/webclient/src/components/settings/ShowTokenModal.vue b/webclient/src/components/settings/ShowTokenModal.vue index e40ba29..a16baaa 100644 --- a/webclient/src/components/settings/ShowTokenModal.vue +++ b/webclient/src/components/settings/ShowTokenModal.vue @@ -48,7 +48,7 @@ .show-token-warning { margin: 0 0 16px; font-size: 0.875rem; - color: var(--color-warning, #e0af68); + color: var(--gn-color-warning); display: flex; align-items: center; gap: 6px; @@ -63,8 +63,8 @@ align-items: center; gap: 8px; padding: 10px 12px; - background: var(--surface-panel, #1f2335); - border: 1px solid var(--color-border, #3b4261); + background: var(--gn-surface-panel); + border: 1px solid var(--gn-border-color-muted); border-radius: 6px; } @@ -73,6 +73,6 @@ font-family: monospace; font-size: 0.85rem; word-break: break-all; - color: var(--color-text, #a9b1d6); + color: var(--gn-color-text-medium); } diff --git a/webclient/src/components/sidebar/AppSidebar.vue b/webclient/src/components/sidebar/AppSidebar.vue index 4a3ea5d..0b8df60 100644 --- a/webclient/src/components/sidebar/AppSidebar.vue +++ b/webclient/src/components/sidebar/AppSidebar.vue @@ -297,7 +297,7 @@ display: block; padding-top: $space-sm; padding-bottom: $space-sm; - border-bottom: 1px solid var(--color-border); + border-bottom: 1px solid var(--gn-border-color-muted); } .sidebar-search-inner { @@ -357,12 +357,12 @@ .recall-filter-btn.active, .recall-filter-btn:hover { - color: var(--color-accent, #7aa2f7); + color: var(--gn-color-secondary); } .sidebar-footer { padding: 12px 16px; - border-top: 1px solid var(--color-border); + border-top: 1px solid var(--gn-border-color-muted); display: flex; align-items: center; justify-content: space-between; @@ -381,12 +381,12 @@ } .user-info:hover .user-name { - color: var(--color-text-primary); + color: var(--gn-color-text-light); } .user-name { font-size: 13px; - color: var(--color-text-secondary); + color: var(--gn-color-text-medium); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; diff --git a/webclient/src/components/sidebar/SessionItem.vue b/webclient/src/components/sidebar/SessionItem.vue index e1d2f20..eeb76d3 100644 --- a/webclient/src/components/sidebar/SessionItem.vue +++ b/webclient/src/components/sidebar/SessionItem.vue @@ -141,7 +141,7 @@ } .recall-badge { - color: var(--color-accent, #f59e0b); + color: var(--gn-color-accent); font-size: 0.85em; flex-shrink: 0; } diff --git a/webclient/src/components/sidebar/SessionList.vue b/webclient/src/components/sidebar/SessionList.vue index c6c3c7a..6e507f0 100644 --- a/webclient/src/components/sidebar/SessionList.vue +++ b/webclient/src/components/sidebar/SessionList.vue @@ -228,7 +228,7 @@ align-items: center; gap: 8px; padding: 32px 16px; - color: var(--color-text-dark, #787c99); + color: var(--gn-color-text-dark); font-size: 13px; i { font-size: 32px; opacity: 0.4; } @@ -241,7 +241,7 @@ justify-content: center; gap: 10px; padding: 28px 16px; - color: var(--color-text-dark, #787c99); + color: var(--gn-color-text-dark); font-size: 12px; } @@ -252,8 +252,8 @@ .sessions-spinner { width: 16px; height: 16px; - border: 2px solid var(--color-border, #3b4261); - border-top-color: var(--color-accent, #7aa2f7); + border: 2px solid var(--gn-border-color-muted); + border-top-color: var(--gn-color-secondary); border-radius: 50%; animation: sessions-spin 0.8s linear infinite; } @@ -275,7 +275,7 @@ gap: 8px; padding: 8px; font-size: 12px; - color: var(--color-text-dark, #787c99); + color: var(--gn-color-text-dark); pointer-events: none; transition: opacity 0.15s, transform 0.15s; will-change: transform, opacity; @@ -284,8 +284,8 @@ .ptr-spinner { width: 16px; height: 16px; - border: 2px solid var(--color-border, #3b4261); - border-top-color: var(--color-accent, #7aa2f7); + border: 2px solid var(--gn-border-color-muted); + border-top-color: var(--gn-color-secondary); border-radius: 50%; transition: transform 0.15s; } diff --git a/webclient/src/components/ui/CardGrid.vue b/webclient/src/components/ui/CardGrid.vue index 1dab4df..0316c35 100644 --- a/webclient/src/components/ui/CardGrid.vue +++ b/webclient/src/components/ui/CardGrid.vue @@ -132,7 +132,7 @@ .card-grid-title { font-size: 1rem; font-weight: 600; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); } .card-grid-items { @@ -150,8 +150,8 @@ .card-grid-item { display: flex; flex-direction: column; - background: var(--surface-elevated, #242438); - border: 1px solid var(--border, #2a2a3e); + background: color-mix(in srgb, var(--gn-color-grey) 12%, var(--gn-surface-panel)); + border: 1px solid var(--gn-border-color-muted); overflow: hidden; cursor: pointer; transition: border-color 0.15s, transform 0.1s; @@ -159,7 +159,7 @@ .card-grid-item:hover, .card-grid-item:focus { - border-color: var(--accent, #4ec9b0); + border-color: var(--gn-color-secondary); outline: none; } @@ -171,7 +171,7 @@ width: 100%; height: 140px; object-fit: cover; - background: var(--surface, #1e1e2e); + background: var(--gn-surface-panel); } .card-no-image { @@ -180,9 +180,9 @@ display: flex; align-items: center; justify-content: center; - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); font-size: 2rem; - background: var(--surface, #1e1e2e); + background: var(--gn-surface-panel); } .card-content { @@ -196,13 +196,13 @@ .card-title { font-weight: 600; font-size: 0.95rem; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); line-height: 1.3; } .card-subtitle { font-size: 0.8rem; - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); } .card-meta { @@ -218,17 +218,17 @@ } .card-meta-label { - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); } .card-meta-value { - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); font-weight: 500; } .card-description { font-size: 0.8rem; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); line-height: 1.4; opacity: 0.85; display: -webkit-box; @@ -240,7 +240,7 @@ .card-grid-more { text-align: center; font-size: 0.8rem; - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); } .card-modal-overlay { @@ -259,8 +259,8 @@ width: 100%; max-width: 560px; max-height: 90vh; - background: var(--surface, #1e1e2e); - border: 1px solid var(--border, #2a2a3e); + background: var(--gn-surface-panel); + border: 1px solid var(--gn-border-color-muted); overflow: hidden; display: flex; flex-direction: column; @@ -275,16 +275,16 @@ display: flex; align-items: center; justify-content: center; - background: var(--surface-elevated, #242438); - border: 1px solid var(--border, #2a2a3e); - color: var(--text, #cdd6f4); + background: color-mix(in srgb, var(--gn-color-grey) 12%, var(--gn-surface-panel)); + border: 1px solid var(--gn-border-color-muted); + color: var(--gn-color-text-light); cursor: pointer; z-index: 2; } .card-modal-close:hover { - border-color: var(--accent, #4ec9b0); - color: var(--accent, #4ec9b0); + border-color: var(--gn-color-secondary); + color: var(--gn-color-secondary); } .card-modal-scroll { @@ -296,7 +296,7 @@ width: 100%; max-height: 320px; object-fit: cover; - background: var(--surface, #1e1e2e); + background: var(--gn-surface-panel); } .card-modal-content { @@ -310,11 +310,11 @@ margin: 0; font-size: 1.3rem; font-weight: 600; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); } .card-modal-subtitle { - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); font-size: 0.9rem; } @@ -328,7 +328,7 @@ font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); } .card-modal-meta-grid { @@ -338,27 +338,27 @@ } .card-modal-meta-cell { - background: var(--surface-elevated, #242438); - border: 1px solid var(--border, #2a2a3e); + background: color-mix(in srgb, var(--gn-color-grey) 12%, var(--gn-surface-panel)); + border: 1px solid var(--gn-border-color-muted); padding: 10px; } .card-modal-meta-label { font-size: 0.7rem; - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); margin-bottom: 4px; } .card-modal-meta-value { font-size: 0.9rem; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); font-weight: 500; } .card-modal-text { margin: 0; line-height: 1.5; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); } .card-modal-details { @@ -372,7 +372,7 @@ justify-content: space-between; gap: 12px; padding: 8px 0; - border-bottom: 1px solid var(--border, #2a2a3e); + border-bottom: 1px solid var(--gn-border-color-muted); } .card-modal-detail-row:last-child { @@ -380,13 +380,13 @@ } .card-modal-detail-row dt { - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); font-size: 0.85rem; } .card-modal-detail-row dd { margin: 0; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); font-size: 0.85rem; text-align: right; word-break: break-word; @@ -402,14 +402,14 @@ display: inline-flex; align-items: center; padding: 8px 14px; - background: var(--accent-muted, #313244); - color: var(--accent, #4ec9b0); + background: color-mix(in srgb, var(--gn-color-secondary) 14%, var(--gn-surface-panel)); + color: var(--gn-color-secondary); text-decoration: none; font-size: 0.85rem; font-weight: 500; } .card-modal-action:hover { - background: var(--border, #2a2a3e); + background: var(--gn-border-color-muted); } diff --git a/webclient/src/components/ui/ContextBar.vue b/webclient/src/components/ui/ContextBar.vue index 04479a4..ec179cb 100644 --- a/webclient/src/components/ui/ContextBar.vue +++ b/webclient/src/components/ui/ContextBar.vue @@ -36,10 +36,10 @@ font-size: 11px; font-weight: 600; font-variant-numeric: tabular-nums; - color: var(--color-success); + color: var(--gn-color-success); white-space: nowrap; - &.is-warn { color: var(--color-warning); } - &.is-crit { color: var(--color-error); } + &.is-warn { color: var(--gn-color-warning); } + &.is-crit { color: var(--gn-color-error); } } diff --git a/webclient/src/components/ui/Form.vue b/webclient/src/components/ui/Form.vue index cad5c92..66d2d12 100644 --- a/webclient/src/components/ui/Form.vue +++ b/webclient/src/components/ui/Form.vue @@ -367,12 +367,12 @@ .ui-form-title { font-size: 1rem; font-weight: 600; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); } .ui-form-description { font-size: 0.85rem; - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); line-height: 1.4; } @@ -389,41 +389,41 @@ } .ui-form-field.has-error .ui-form-input { - border-color: var(--color-error, #f38ba8); + border-color: var(--gn-color-error); } .ui-form-label { font-size: 0.85rem; font-weight: 500; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); } .ui-form-required { - color: var(--color-error, #f38ba8); + color: var(--gn-color-error); margin-left: 2px; } .ui-form-field-hint { font-size: 0.75rem; - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); } .ui-form-input { padding: 10px 12px; - background: var(--surface, #1e1e2e); - border: 1px solid var(--border, #2a2a3e); - color: var(--text, #cdd6f4); + background: var(--gn-surface-panel); + border: 1px solid var(--gn-border-color-muted); + color: var(--gn-color-text-light); font-size: 0.9rem; outline: none; transition: border-color 0.15s; } .ui-form-input:focus { - border-color: var(--accent, #4ec9b0); + border-color: var(--gn-color-secondary); } .ui-form-input::placeholder { - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); } select.ui-form-input { @@ -445,20 +445,20 @@ align-items: center; gap: 8px; font-size: 0.9rem; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); cursor: pointer; } .ui-form-checkbox input { width: 18px; height: 18px; - accent-color: var(--accent, #4ec9b0); + accent-color: var(--gn-color-secondary); cursor: pointer; } .ui-form-error { font-size: 0.8rem; - color: var(--color-error, #f38ba8); + color: var(--gn-color-error); } .ui-form-submit { @@ -468,8 +468,8 @@ gap: 8px; align-self: flex-start; padding: 10px 18px; - background: var(--accent, #4ec9b0); - color: var(--surface, #1e1e2e); + background: var(--gn-color-secondary); + color: var(--gn-surface-panel); border: none; font-size: 0.9rem; font-weight: 600; @@ -510,7 +510,7 @@ align-items: center; gap: 6px; font-size: 0.85rem; - color: var(--accent, #4ec9b0); + color: var(--gn-color-secondary); } .ui-form-summary { @@ -524,7 +524,7 @@ justify-content: space-between; gap: 12px; padding: 8px 0; - border-bottom: 1px solid var(--border, #2a2a3e); + border-bottom: 1px solid var(--gn-border-color-muted); } .ui-form-summary-row:last-child { @@ -532,13 +532,13 @@ } .ui-form-summary-row dt { - color: var(--text-muted, #6c7086); + color: var(--gn-color-text-dark); font-size: 0.85rem; } .ui-form-summary-row dd { margin: 0; - color: var(--text, #cdd6f4); + color: var(--gn-color-text-light); font-size: 0.85rem; text-align: right; word-break: break-word; diff --git a/webclient/src/components/ui/ImageLightbox.vue b/webclient/src/components/ui/ImageLightbox.vue index 7ed1b6d..95aeb65 100644 --- a/webclient/src/components/ui/ImageLightbox.vue +++ b/webclient/src/components/ui/ImageLightbox.vue @@ -78,7 +78,7 @@ justify-content: center; gap: 8px; padding: 32px; - color: #787C99; + color: var(--gn-color-text-dark); font-size: 13px; } .lightbox-error i { diff --git a/webclient/src/components/ui/LoginScreen.vue b/webclient/src/components/ui/LoginScreen.vue index 35e60f3..5ef0943 100644 --- a/webclient/src/components/ui/LoginScreen.vue +++ b/webclient/src/components/ui/LoginScreen.vue @@ -24,7 +24,7 @@ display: flex; align-items: center; justify-content: center; - background: #111; + background: var(--gn-color-black); z-index: 9999; } @@ -34,7 +34,7 @@ align-items: center; gap: 16px; padding: 48px 40px; - border: 1px solid var(--color-border); + border: 1px solid var(--gn-border-color-muted); border-radius: 16px; max-width: 360px; width: 90%; @@ -48,13 +48,13 @@ .login-title { font-size: 24px; font-weight: 700; - color: var(--color-text-primary); + color: var(--gn-color-text-light); margin: 0; } .login-subtitle { font-size: 14px; - color: var(--color-text-secondary); + color: var(--gn-color-text-medium); margin: 0; } diff --git a/webclient/src/components/ui/SelectionToolbar.vue b/webclient/src/components/ui/SelectionToolbar.vue index 5b6b7ce..eadcf44 100644 --- a/webclient/src/components/ui/SelectionToolbar.vue +++ b/webclient/src/components/ui/SelectionToolbar.vue @@ -6,7 +6,7 @@ :style="{ top: pos.y + 'px', left: pos.x + 'px' }" @mousedown.prevent > - + Reply @@ -88,7 +88,7 @@ transform: translateX(-50%); z-index: 900; pointer-events: all; - background: #e0af68; - color: black; + background: var(--gn-color-warning); + color: var(--gn-color-black); } diff --git a/webclient/src/styles/app.scss b/webclient/src/styles/app.scss index bdea59b..f04945a 100644 --- a/webclient/src/styles/app.scss +++ b/webclient/src/styles/app.scss @@ -288,7 +288,7 @@ } .session-recall-icon { - color: var(--color-accent, #7aa2f7); + color: var(--gn-color-secondary); } } @@ -465,8 +465,8 @@ } .msg-user--recall .msg-user-bubble { - background: rgba(122, 162, 247, 0.12); - border: 1px solid rgba(122, 162, 247, 0.25); + background: color-mix(in srgb, var(--gn-color-secondary) 12%, transparent); + border: 1px solid color-mix(in srgb, var(--gn-color-secondary) 25%, transparent); .msg-user-text { color: $color-text-light; @@ -478,7 +478,7 @@ align-items: center; gap: 4px; font-size: 11px; - color: #7aa2f7; + color: var(--gn-color-secondary); margin-bottom: 4px; opacity: 0.85; } @@ -1731,16 +1731,10 @@ } } -// ─── UI kit overrides ────────────────────────────────────────────────────── +// ─── Disclosure chevrons ─────────────────────────────────────────────────── -// Disable btn-icon icon rotation on hover — too distracting for utility buttons. -// Use .with-rotate class to opt back in where rotation makes sense. -.btn-icon:not(.with-rotate) .ph { - transform: none !important; - transition: none !important; -} - -// Tool card chevron should still rotate (opt-in) +// Kit 1.0 dropped the hover icon rotation entirely; app-owned +// tool/thinking cards keep the open-state chevron flip. .tool-card[open] > summary .tool-chevron, .thinking-card[open] > summary .tool-chevron { transform: rotate(180deg) !important;