From e24db3a88a41b2467f6fa42fae9e01ba283ef122 Mon Sep 17 00:00:00 2001 From: Nicholas Kissel Date: Wed, 11 Mar 2026 11:03:15 -0700 Subject: [PATCH] Replace all:unset with explicit button/input resets across Foundry UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Styletron's generated stylesheet ordering makes all:unset unreliable — it can override font-size, border-radius, and background unpredictably. Replace with appearance:none + targeted resets and clean up duplicate CSS properties introduced during iterative fixes. Co-Authored-By: Claude Opus 4.6 --- .../mock-layout/history-minimap.tsx | 6 +- .../components/mock-layout/message-list.tsx | 7 +- .../components/mock-layout/model-picker.tsx | 5 +- .../components/mock-layout/right-sidebar.tsx | 30 ++- .../src/components/mock-layout/tab-strip.tsx | 8 +- .../components/mock-layout/terminal-pane.tsx | 236 +++++++----------- .../mock-layout/transcript-header.tsx | 20 +- 7 files changed, 158 insertions(+), 154 deletions(-) diff --git a/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx b/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx index a5a91cf..b62faa1 100644 --- a/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx +++ b/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx @@ -58,7 +58,11 @@ export const HistoryMinimap = memo(function HistoryMinimap({ events, onSelect }: onFocus={() => setActiveEventId(event.id)} onClick={() => onSelect(event)} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + margin: "0", display: "grid", gridTemplateColumns: "1fr auto", gap: "10px", diff --git a/factory/packages/frontend/src/components/mock-layout/message-list.tsx b/factory/packages/frontend/src/components/mock-layout/message-list.tsx index 4199d35..28906ae 100644 --- a/factory/packages/frontend/src/components/mock-layout/message-list.tsx +++ b/factory/packages/frontend/src/components/mock-layout/message-list.tsx @@ -95,7 +95,12 @@ const TranscriptMessageBody = memo(function TranscriptMessageBody({ data-copy-action="true" onClick={() => onCopyMessage(message)} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + padding: "0", + margin: "0", display: "inline-flex", alignItems: "center", gap: "5px", diff --git a/factory/packages/frontend/src/components/mock-layout/model-picker.tsx b/factory/packages/frontend/src/components/mock-layout/model-picker.tsx index 2e41ddf..48513a1 100644 --- a/factory/packages/frontend/src/components/mock-layout/model-picker.tsx +++ b/factory/packages/frontend/src/components/mock-layout/model-picker.tsx @@ -138,7 +138,10 @@ export const ModelPicker = memo(function ModelPicker({
- - @@ -656,21 +579,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { /> tty -
- {createError ? ( -
- {createError} -
- ) : null} + {createError ?
{createError}
: null}
{processes.length === 0 ? ( -
- No processes yet. -
+
No processes yet.
) : ( processes.map((process) => { const isSelected = selectedProcessId === process.id; @@ -743,7 +655,16 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { {formatCommandSummary(process)}
-
+
{process.pid ? `PID ${process.pid}` : "PID ?"} {process.id.slice(0, 8)}
@@ -822,12 +743,8 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { })} >
- - {formatCommandSummary(selectedProcess)} - - - {selectedProcess.status} - + {formatCommandSummary(selectedProcess)} + {selectedProcess.status}
{selectedProcess.pid ? `PID ${selectedProcess.pid}` : "PID ?"} @@ -836,16 +753,22 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
-
+
Logs
- {logsError ? ( -
{logsError}
- ) : null} + {logsError ?
{logsError}
: null}
           
Interactive terminal transport is unavailable. - - This tab was created through the standard process API flow. Mock mode does not open a live terminal - transport. - + This tab was created through the standard process API flow. Mock mode does not open a live terminal transport.
); @@ -908,7 +828,18 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { return (
-
+
{formatCommandSummary(activeTerminalProcess)} {activeTerminalProcess.id.slice(0, 8)}
@@ -1001,7 +932,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { type="button" aria-label="Terminal controls" className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + padding: "0", + margin: "0", display: "flex", alignItems: "center", justifyContent: "center", @@ -1017,7 +953,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { type="button" onClick={() => setActiveTabId(PROCESSES_TAB_ID)} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + margin: "0", position: "relative", display: "flex", alignItems: "center", @@ -1057,7 +997,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { type="button" onClick={() => setActiveTabId(tab.id)} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + margin: "0", position: "relative", display: "flex", alignItems: "center", @@ -1088,7 +1032,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { aria-label={`Close ${tab.title}`} onClick={() => closeTerminalTab(tab.id)} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + padding: "0", + margin: "0", display: "flex", alignItems: "center", justifyContent: "center", @@ -1110,7 +1059,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { onClick={() => void spawnTerminal()} disabled={!activeSandbox?.sandboxId || creatingProcess} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + padding: "0", + margin: "0", display: "flex", alignItems: "center", justifyContent: "center", @@ -1132,6 +1086,4 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) { ); } -type ProcessLogResponseEntry = Awaited< - ReturnType ->["entries"][number]; +type ProcessLogResponseEntry = Awaited>["entries"][number]; diff --git a/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx b/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx index 1107324..daa56ae 100644 --- a/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx +++ b/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx @@ -45,7 +45,13 @@ export const TranscriptHeader = memo(function TranscriptHeader({ } }} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + border: "none", + padding: "0", + margin: "0", + outline: "none", fontWeight: 500, fontSize: "14px", color: theme.colors.contentPrimary, @@ -79,7 +85,11 @@ export const TranscriptHeader = memo(function TranscriptHeader({ } }} className={css({ - all: "unset", + appearance: "none", + WebkitAppearance: "none", + background: "none", + margin: "0", + outline: "none", padding: "2px 8px", borderRadius: "999px", border: "1px solid rgba(255, 255, 255, 0.3)", @@ -136,7 +146,11 @@ export const TranscriptHeader = memo(function TranscriptHeader({