Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b762239
πŸ€– Consolidate theme variables to Tailwind native colors
kylecarbs Oct 23, 2025
cfce8d2
Fix prettier formatting
kylecarbs Oct 23, 2025
52db15d
Fix invalid Tailwind classes caught by Codex
kylecarbs Oct 23, 2025
04b14d6
Fix double prefixes and missing class replacements
kylecarbs Oct 23, 2025
e2aea0e
Fix Tailwind class ordering (lint-fix)
kylecarbs Oct 23, 2025
3961840
Use neutral-* instead of gray-* for pure neutral colors
kylecarbs Oct 23, 2025
4092c89
Brighten UI colors to match original lightness
kylecarbs Oct 23, 2025
d06db2a
Lighten background from neutral-950 to neutral-900
kylecarbs Oct 23, 2025
e488a7c
Fix lint warnings
kylecarbs Oct 23, 2025
2780b5a
Lighten sidebars and input area, fix scrollbar blue tint
kylecarbs Oct 23, 2025
6b15a49
Replace all gray references with neutral in globals.css
kylecarbs Oct 23, 2025
535b249
Fix tooltip styling to match original
kylecarbs Oct 23, 2025
f34e7e3
Fix tooltip styling and workspace selection colors
kylecarbs Oct 23, 2025
c405fdf
πŸ€– fix: remove duplicate text in ProjectSidebar className
kylecarbs Oct 23, 2025
b3f0f1a
πŸ€– fix: match sidebar colors exactly to main branch
kylecarbs Oct 23, 2025
e9f42a6
πŸ€– fix: lighten message area and fix project sidebar border
kylecarbs Oct 23, 2025
abeb044
πŸ€– fix: make message area darker and match sidebar to main exactly
kylecarbs Oct 23, 2025
1d27311
Merge remote-tracking branch 'origin/main' into merge-theme
kylecarbs Oct 23, 2025
2c44421
πŸ€– retrigger CI
kylecarbs Oct 24, 2025
e765b13
Merge remote-tracking branch 'origin/main' into merge-theme
kylecarbs Oct 27, 2025
3177e30
πŸ€– fix: apply linting fixes after merge
kylecarbs Oct 27, 2025
09828ae
πŸ€– retrigger CI - formatting checks pass locally
kylecarbs Oct 27, 2025
5235b21
πŸ€– fix: prettier formatting for Context1MCheckbox
kylecarbs Oct 27, 2025
57111cd
Merge remote-tracking branch 'origin/main' into merge-theme
kylecarbs Oct 27, 2025
d1b7b1f
πŸ€– fix: apply linting after merge
kylecarbs Oct 27, 2025
8c58488
πŸ€– retrigger CI - integration tests
kylecarbs Oct 30, 2025
9b21d07
πŸ€– fix: linting after merge
kylecarbs Oct 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@ function AppInner() {

return (
<>
<div className="bg-bg-dark flex h-screen overflow-hidden [@media(max-width:768px)]:flex-col">
<div className="bg-bg-gray-950 flex h-screen overflow-hidden [@media(max-width:768px)]:flex-col">
<LeftSidebar
projects={projects}
workspaceMetadata={workspaceMetadata}
Expand Down Expand Up @@ -701,7 +701,7 @@ function AppInner() {
</ErrorBoundary>
) : (
<div
className="[&_p]:text-muted mx-auto w-full max-w-3xl text-center [&_h2]:mb-4 [&_h2]:font-bold [&_h2]:tracking-tight [&_h2]:text-white [&_p]:leading-[1.6]"
className="mx-auto w-full max-w-3xl text-center [&_h2]:mb-4 [&_h2]:font-bold [&_h2]:tracking-tight [&_h2]:text-white [&_p]:leading-[1.6] [&_p]:text-gray-500"
style={{
padding: "clamp(40px, 10vh, 100px) 20px",
fontSize: "clamp(14px, 2vw, 16px)",
Expand Down
24 changes: 12 additions & 12 deletions src/components/AIView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -245,12 +245,12 @@ const AIViewInner: React.FC<AIViewProps> = ({
return (
<div
className={cn(
"flex flex-1 flex-row bg-dark text-light overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
"flex flex-1 flex-row bg-gray-950 text-gray-200 overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
className
)}
style={{ containerType: "inline-size" }}
>
<div className="text-placeholder flex h-full flex-1 flex-col items-center justify-center text-center">
<div className="flex h-full flex-1 flex-col items-center justify-center text-center text-gray-500">
<h3 className="m-0 mb-2.5 text-base font-medium">Loading workspace...</h3>
</div>
</div>
Expand Down Expand Up @@ -286,12 +286,12 @@ const AIViewInner: React.FC<AIViewProps> = ({
return (
<div
className={cn(
"flex flex-1 flex-row bg-dark text-light overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
"flex flex-1 flex-row bg-gray-950 text-gray-200 overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
className
)}
style={{ containerType: "inline-size" }}
>
<div className="text-placeholder flex h-full flex-1 flex-col items-center justify-center text-center">
<div className="flex h-full flex-1 flex-col items-center justify-center text-center text-gray-500">
<h3 className="m-0 mb-2.5 text-base font-medium">Loading workspace...</h3>
</div>
</div>
Expand All @@ -302,12 +302,12 @@ const AIViewInner: React.FC<AIViewProps> = ({
return (
<div
className={cn(
"flex flex-1 flex-row bg-dark text-light overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
"flex flex-1 flex-row bg-gray-950 text-gray-200 overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
className
)}
style={{ containerType: "inline-size" }}
>
<div className="text-placeholder flex h-full flex-1 flex-col items-center justify-center text-center">
<div className="flex h-full flex-1 flex-col items-center justify-center text-center text-gray-500">
<h3 className="m-0 mb-2.5 text-base font-medium">No Workspace Selected</h3>
<p className="m-0 text-[13px]">
Select a workspace from the sidebar to view and interact with Claude
Expand All @@ -320,7 +320,7 @@ const AIViewInner: React.FC<AIViewProps> = ({
return (
<div
className={cn(
"flex flex-1 flex-row bg-dark text-light overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
"flex flex-1 flex-row bg-gray-950 text-gray-200 overflow-x-auto overflow-y-hidden [@media(max-width:768px)]:flex-col",
className
)}
style={{ containerType: "inline-size" }}
Expand All @@ -329,8 +329,8 @@ const AIViewInner: React.FC<AIViewProps> = ({
ref={chatAreaRef}
className="flex min-w-96 flex-1 flex-col [@media(max-width:768px)]:max-h-full [@media(max-width:768px)]:w-full [@media(max-width:768px)]:min-w-0"
>
<div className="bg-separator border-border-light flex items-center justify-between border-b px-[15px] py-1 [@media(max-width:768px)]:flex-wrap [@media(max-width:768px)]:gap-2 [@media(max-width:768px)]:py-2 [@media(max-width:768px)]:pl-[60px]">
<div className="text-foreground flex min-w-0 items-center gap-2 overflow-hidden font-semibold">
<div className="flex items-center justify-between border-b border-gray-800 bg-gray-900 px-[15px] py-1 [@media(max-width:768px)]:flex-wrap [@media(max-width:768px)]:gap-2 [@media(max-width:768px)]:py-2 [@media(max-width:768px)]:pl-[60px]">
<div className="flex min-w-0 items-center gap-2 overflow-hidden font-semibold text-gray-200">
<StatusIndicator
streaming={canInterrupt}
title={
Expand All @@ -345,13 +345,13 @@ const AIViewInner: React.FC<AIViewProps> = ({
<span className="min-w-0 truncate font-mono text-xs">
{projectName} / {branch}
</span>
<span className="text-muted min-w-0 truncate font-mono text-[11px] font-normal">
<span className="min-w-0 truncate font-mono text-[11px] font-normal text-gray-500">
{namedWorkspacePath}
</span>
<TooltipWrapper inline>
<button
onClick={handleOpenTerminal}
className="text-muted hover:text-foreground flex cursor-pointer items-center justify-center border-none bg-transparent p-1 transition-colors [&_svg]:h-4 [&_svg]:w-4"
className="flex cursor-pointer items-center justify-center border-none bg-transparent p-1 text-gray-500 transition-colors hover:text-gray-200 [&_svg]:h-4 [&_svg]:w-4"
>
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 01-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z" />
Expand All @@ -378,7 +378,7 @@ const AIViewInner: React.FC<AIViewProps> = ({
className="h-full overflow-y-auto p-[15px] leading-[1.5] break-words whitespace-pre-wrap"
>
{mergedMessages.length === 0 ? (
<div className="text-placeholder flex h-full flex-1 flex-col items-center justify-center text-center [&_h3]:m-0 [&_h3]:mb-2.5 [&_h3]:text-base [&_h3]:font-medium [&_p]:m-0 [&_p]:text-[13px]">
<div className="flex h-full flex-1 flex-col items-center justify-center text-center text-gray-500 [&_h3]:m-0 [&_h3]:mb-2.5 [&_h3]:text-base [&_h3]:font-medium [&_p]:m-0 [&_p]:text-[13px]">
<h3>No Messages Yet</h3>
<p>Send a message below to begin</p>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/components/ChatInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ export const ChatInput: React.FC<ChatInputProps> = ({

return (
<div
className="bg-separator border-border-light relative flex flex-col gap-1 border-t px-[15px] pt-[5px] pb-[15px]"
className="relative flex flex-col gap-1 border-t border-gray-800 bg-gray-900 px-[15px] pt-[5px] pb-[15px]"
style={{ containerType: "inline-size" }}
data-component="ChatInputSection"
>
Expand Down Expand Up @@ -782,7 +782,7 @@ export const ChatInput: React.FC<ChatInputProps> = ({
<div className="max-@[700px]:hidden ml-auto flex items-center gap-1.5">
<div
className={cn(
"flex gap-0 bg-toggle-bg rounded",
"flex gap-0 bg-gray-900 rounded",
"[&>button:first-of-type]:rounded-l [&>button:last-of-type]:rounded-r",
mode === "exec" &&
"[&>button:first-of-type]:bg-exec-mode [&>button:first-of-type]:text-white [&>button:first-of-type]:hover:bg-exec-mode-hover",
Expand Down
8 changes: 4 additions & 4 deletions src/components/ChatInputToast.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import React, { useEffect, useCallback } from "react";
import { cn } from "@/lib/utils";

const toastTypeStyles: Record<"success" | "error", string> = {
success: "bg-toast-success-bg border border-accent-dark text-toast-success-text",
success: "bg-toast-success-bg border border-sky-700 text-toast-success-text",
error: "bg-toast-error-bg border border-toast-error-border text-toast-error-text",
};

Expand All @@ -22,7 +22,7 @@ interface ChatInputToastProps {
}

export const SolutionLabel: React.FC<{ children: ReactNode }> = ({ children }) => (
<div className="text-muted-light mb-1 text-[10px] uppercase">{children}</div>
<div className="text-gray-500-light mb-1 text-[10px] uppercase">{children}</div>
);

export const ChatInputToast: React.FC<ChatInputToastProps> = ({ toast, onDismiss }) => {
Expand Down Expand Up @@ -71,9 +71,9 @@ export const ChatInputToast: React.FC<ChatInputToastProps> = ({ toast, onDismiss
<span className="text-sm leading-none">⚠</span>
<div className="flex-1">
{toast.title && <div className="mb-1.5 font-semibold">{toast.title}</div>}
<div className="text-light mt-1.5 leading-[1.4]">{toast.message}</div>
<div className="mt-1.5 leading-[1.4] text-gray-200">{toast.message}</div>
{toast.solution && (
<div className="bg-dark font-monospace text-code-type mt-2 rounded px-2 py-1.5 text-[11px]">
<div className="font-monospace text-code-type mt-2 rounded bg-gray-950 px-2 py-1.5 text-[11px]">
{toast.solution}
</div>
)}
Expand Down
2 changes: 1 addition & 1 deletion src/components/ChatMetaSidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const ChatMetaSidebarComponent: React.FC<ChatMetaSidebarProps> = ({ workspaceId,
return (
<div
className={cn(
"bg-separator border-l border-border-light flex flex-col overflow-hidden transition-[width] duration-200 flex-shrink-0",
"bg-gray-900 border-l border-gray-800 flex flex-col overflow-hidden transition-[width] duration-200 flex-shrink-0",
showCollapsed ? "w-5 sticky right-0 z-10 shadow-[-2px_0_4px_rgba(0,0,0,0.2)]" : "w-80"
)}
role="complementary"
Expand Down
4 changes: 2 additions & 2 deletions src/components/CommandPalette.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,8 @@ type Story = StoryObj<typeof meta>;

export const Default: Story = {
render: () => (
<div className="bg-dark flex min-h-[600px] flex-col gap-5 p-5">
<div className="bg-separator border-border-light text-bright font-primary [&_kbd]:bg-dark [&_kbd]:border-border-light [&_kbd]:font-monospace rounded border p-4 text-[13px] leading-[1.6] [&_kbd]:rounded-[3px] [&_kbd]:border [&_kbd]:px-1.5 [&_kbd]:py-0.5 [&_kbd]:text-[11px]">
<div className="flex min-h-[600px] flex-col gap-5 bg-gray-950 p-5">
<div className="font-primary [&_kbd]:font-monospace rounded border border-gray-800 bg-gray-900 p-4 text-[13px] leading-[1.6] text-gray-300 [&_kbd]:rounded-[3px] [&_kbd]:border [&_kbd]:border-gray-800 [&_kbd]:bg-gray-950 [&_kbd]:px-1.5 [&_kbd]:py-0.5 [&_kbd]:text-[11px]">
<strong>Command Palette</strong>
<br />
<br />
Expand Down
12 changes: 6 additions & 6 deletions src/components/CommandPalette.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -364,12 +364,12 @@ export const CommandPalette: React.FC<CommandPaletteProps> = ({ getSlashContext
}}
>
<Command
className="bg-separator border-border text-lighter font-primary w-[min(720px,92vw)] overflow-hidden rounded-lg border shadow-[0_10px_40px_rgba(0,0,0,0.4)]"
className="text-lighter font-primary w-[min(720px,92vw)] overflow-hidden rounded-lg border border-gray-800 bg-gray-900 shadow-[0_10px_40px_rgba(0,0,0,0.4)]"
onMouseDown={(e: React.MouseEvent) => e.stopPropagation()}
shouldFilter={shouldUseCmdkFilter}
>
<Command.Input
className="bg-darker text-lighter border-hover w-full border-b border-none px-3.5 py-3 text-sm outline-none"
className="text-lighter border-hover w-full border-b border-none bg-gray-950 px-3.5 py-3 text-sm outline-none"
value={query}
onValueChange={handleQueryChange}
placeholder={
Expand Down Expand Up @@ -405,12 +405,12 @@ export const CommandPalette: React.FC<CommandPaletteProps> = ({ getSlashContext
<Command.Group
key={group.name}
heading={group.name}
className="[&[cmdk-group-heading]]:text-subdued [&[cmdk-group-heading]]:px-2.5 [&[cmdk-group-heading]]:py-1 [&[cmdk-group-heading]]:text-[11px] [&[cmdk-group-heading]]:tracking-[0.08em] [&[cmdk-group-heading]]:uppercase [&[cmdk-group]]:px-1.5 [&[cmdk-group]]:py-2"
className="[&[cmdk-group-heading]]:px-2.5 [&[cmdk-group-heading]]:py-1 [&[cmdk-group-heading]]:text-[11px] [&[cmdk-group-heading]]:tracking-[0.08em] [&[cmdk-group-heading]]:text-gray-400 [&[cmdk-group-heading]]:uppercase [&[cmdk-group]]:px-1.5 [&[cmdk-group]]:py-2"
>
{group.items.map((item) => (
<Command.Item
key={item.id}
className="hover:bg-hover aria-selected:bg-hover mx-1 my-0.5 grid cursor-pointer grid-cols-[1fr_auto] items-center gap-2 rounded-md px-3 py-2 text-[13px]"
className="mx-1 my-0.5 grid cursor-pointer grid-cols-[1fr_auto] items-center gap-2 rounded-md px-3 py-2 text-[13px] hover:bg-gray-900 aria-selected:bg-gray-900"
onSelect={() => {
if ("prompt" in item && item.prompt) {
addRecent(item.id);
Expand All @@ -435,12 +435,12 @@ export const CommandPalette: React.FC<CommandPaletteProps> = ({ getSlashContext
{"subtitle" in item && item.subtitle && (
<>
<br />
<span className="text-subdued text-xs">{item.subtitle}</span>
<span className="text-xs text-gray-400">{item.subtitle}</span>
</>
)}
</div>
{"shortcutHint" in item && item.shortcutHint && (
<span className="text-subdued font-monospace text-[11px]">
<span className="font-monospace text-[11px] text-gray-400">
{item.shortcutHint}
</span>
)}
Expand Down
8 changes: 4 additions & 4 deletions src/components/CommandSuggestions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export const CommandSuggestions: React.FC<CommandSuggestionsProps> = ({
activeSuggestion ? `${resolvedListId}-option-${activeSuggestion.id}` : undefined
}
data-command-suggestions
className="bg-separator border-border-light absolute right-0 bottom-full left-0 z-[100] mb-2 flex max-h-[200px] flex-col overflow-y-auto rounded border shadow-[0_-4px_12px_rgba(0,0,0,0.4)]"
className="absolute right-0 bottom-full left-0 z-[100] mb-2 flex max-h-[200px] flex-col overflow-y-auto rounded border border-gray-800 bg-gray-900 shadow-[0_-4px_12px_rgba(0,0,0,0.4)]"
>
{suggestions.map((suggestion, index) => (
<div
Expand All @@ -108,13 +108,13 @@ export const CommandSuggestions: React.FC<CommandSuggestionsProps> = ({
index === selectedIndex ? "bg-accent-darker" : "bg-transparent"
)}
>
<div className="text-accent font-monospace shrink-0 text-xs">{suggestion.display}</div>
<div className="text-medium truncate text-right text-[11px]">
<div className="font-monospace shrink-0 text-xs text-sky-600">{suggestion.display}</div>
<div className="truncate text-right text-[11px] text-gray-400">
{suggestion.description}
</div>
</div>
))}
<div className="border-border-light bg-dark text-placeholder [&_span]:text-medium shrink-0 border-t px-2.5 py-1 text-center text-[10px] [&_span]:font-medium">
<div className="shrink-0 border-t border-gray-800 bg-gray-950 px-2.5 py-1 text-center text-[10px] text-gray-500 [&_span]:font-medium [&_span]:text-gray-400">
<span>Tab</span> to complete β€’ <span>↑↓</span> to navigate β€’ <span>Esc</span> to dismiss
</div>
</div>
Expand Down
6 changes: 3 additions & 3 deletions src/components/Context1MCheckbox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@ export const Context1MCheckbox: React.FC<Context1MCheckboxProps> = ({ modelStrin

return (
<div className="ml-2 flex items-center gap-1.5">
<label className="text-foreground flex cursor-pointer items-center gap-1 truncate text-[10px] select-none hover:text-white">
<label className="flex cursor-pointer items-center gap-1 truncate text-[10px] text-gray-200 select-none hover:text-white">
<input
type="checkbox"
checked={use1M}
onChange={(e) => setUse1M(e.target.checked)}
className="border-border-light bg-dark hover:border-accent checked:bg-accent checked:border-accent relative m-0 h-[11px] w-3 cursor-pointer appearance-none rounded-sm border checked:after:absolute checked:after:top-0 checked:after:left-[3px] checked:after:h-[6px] checked:after:w-1 checked:after:rotate-45 checked:after:border-r-[1.5px] checked:after:border-b-[1.5px] checked:after:border-solid checked:after:border-white checked:after:content-['']"
className="checked:bg-accent relative m-0 h-[11px] w-3 cursor-pointer appearance-none rounded-sm border border-gray-800 bg-gray-950 checked:border-sky-600 checked:after:absolute checked:after:top-0 checked:after:left-[3px] checked:after:h-[6px] checked:after:w-1 checked:after:rotate-45 checked:after:border-r-[1.5px] checked:after:border-b-[1.5px] checked:after:border-solid checked:after:border-white checked:after:content-[''] hover:border-sky-600"
/>
1M Context
</label>
<TooltipWrapper inline>
<span className="text-muted flex cursor-help items-center text-[10px] leading-none">?</span>
<span className="flex cursor-help items-center text-[10px] leading-none text-gray-500">?</span>
<Tooltip className="tooltip" align="center" width="auto">
Enable 1M token context window (beta feature for Claude Sonnet 4/4.5)
</Tooltip>
Expand Down
2 changes: 1 addition & 1 deletion src/components/DirectorySelectModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export const DirectorySelectModal: React.FC = () => {
onKeyDown={handleKeyDown}
placeholder="/home/user/projects/my-project"
autoFocus
className="bg-modal-bg border-border-medium focus:border-accent placeholder:text-muted mb-5 w-full rounded border px-3 py-2 font-mono text-sm text-white focus:outline-none"
className="border-gray-800-medium mb-5 w-full rounded border bg-gray-900 px-3 py-2 font-mono text-sm text-white placeholder:text-gray-500 focus:border-sky-600 focus:outline-none"
/>
{error && <div className="text-error -mt-3 mb-3 text-xs">{error}</div>}
<ModalActions>
Expand Down
2 changes: 1 addition & 1 deletion src/components/ErrorBoundary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export class ErrorBoundary extends Component<Props, State> {
}

return (
<div className="bg-error-bg-dark border-danger-soft text-danger-soft m-5 rounded border p-5">
<div className="bg-error-bg-gray-950 border-danger-soft text-danger-soft m-5 rounded border p-5">
<h3 className="m-0 mb-2.5 text-base">
Something went wrong{this.props.workspaceInfo && ` in ${this.props.workspaceInfo}`}
</h3>
Expand Down
Loading
Loading