Replace all:unset with explicit button/input resets across Foundry UI

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 <noreply@anthropic.com>
This commit is contained in:
Nicholas Kissel 2026-03-11 11:03:15 -07:00
parent e03484848e
commit e24db3a88a
7 changed files with 158 additions and 154 deletions

View file

@ -58,7 +58,11 @@ export const HistoryMinimap = memo(function HistoryMinimap({ events, onSelect }:
onFocus={() => setActiveEventId(event.id)} onFocus={() => setActiveEventId(event.id)}
onClick={() => onSelect(event)} onClick={() => onSelect(event)}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
display: "grid", display: "grid",
gridTemplateColumns: "1fr auto", gridTemplateColumns: "1fr auto",
gap: "10px", gap: "10px",

View file

@ -95,7 +95,12 @@ const TranscriptMessageBody = memo(function TranscriptMessageBody({
data-copy-action="true" data-copy-action="true"
onClick={() => onCopyMessage(message)} onClick={() => onCopyMessage(message)}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
padding: "0",
margin: "0",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
gap: "5px", gap: "5px",

View file

@ -138,7 +138,10 @@ export const ModelPicker = memo(function ModelPicker({
<div className={css({ display: "inline-flex" })}> <div className={css({ display: "inline-flex" })}>
<button <button
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
margin: "0",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
gap: "4px", gap: "4px",

View file

@ -150,7 +150,11 @@ export const RightSidebar = memo(function RightSidebar({
onPublishPr(); onPublishPr();
}} }}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
boxSizing: "border-box", boxSizing: "border-box",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
@ -171,7 +175,11 @@ export const RightSidebar = memo(function RightSidebar({
</button> </button>
<button <button
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
boxSizing: "border-box", boxSizing: "border-box",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
@ -192,7 +200,11 @@ export const RightSidebar = memo(function RightSidebar({
<button <button
onClick={onArchive} onClick={onArchive}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
boxSizing: "border-box", boxSizing: "border-box",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
@ -230,7 +242,11 @@ export const RightSidebar = memo(function RightSidebar({
<button <button
onClick={() => setRightTab("changes")} onClick={() => setRightTab("changes")}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
boxSizing: "border-box", boxSizing: "border-box",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
@ -277,7 +293,11 @@ export const RightSidebar = memo(function RightSidebar({
<button <button
onClick={() => setRightTab("files")} onClick={() => setRightTab("files")}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
boxSizing: "border-box", boxSizing: "border-box",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",

View file

@ -130,7 +130,13 @@ export const TabStrip = memo(function TabStrip({
} }
}} }}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
padding: "0",
margin: "0",
outline: "none",
minWidth: "72px", minWidth: "72px",
maxWidth: "180px", maxWidth: "180px",
fontSize: "11px", fontSize: "11px",

View file

@ -48,10 +48,7 @@ function canOpenTerminal(process: SandboxProcessRecord | null | undefined): bool
function defaultShellRequest(cwd?: string | null) { function defaultShellRequest(cwd?: string | null) {
return { return {
command: "/bin/bash", command: "/bin/bash",
args: [ args: ["-lc", 'if [ -n "$SHELL" ] && [ -x "$SHELL" ]; then exec "$SHELL" -l; fi; if [ -x /bin/zsh ]; then exec /bin/zsh -l; fi; exec /bin/bash -l'],
"-lc",
'if [ -n "$SHELL" ] && [ -x "$SHELL" ]; then exec "$SHELL" -l; fi; if [ -x /bin/zsh ]; then exec /bin/zsh -l; fi; exec /bin/bash -l',
],
cwd: cwd ?? undefined, cwd: cwd ?? undefined,
interactive: true, interactive: true,
tty: true, tty: true,
@ -105,13 +102,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
}, [handoffQuery.data]); }, [handoffQuery.data]);
const connectionQuery = useQuery({ const connectionQuery = useQuery({
queryKey: [ queryKey: ["mock-layout", "sandbox-agent-connection", workspaceId, activeSandbox?.providerId ?? "", activeSandbox?.sandboxId ?? ""],
"mock-layout",
"sandbox-agent-connection",
workspaceId,
activeSandbox?.providerId ?? "",
activeSandbox?.sandboxId ?? "",
],
enabled: Boolean(activeSandbox?.sandboxId), enabled: Boolean(activeSandbox?.sandboxId),
staleTime: 30_000, staleTime: 30_000,
refetchOnWindowFocus: false, refetchOnWindowFocus: false,
@ -120,22 +111,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
throw new Error("Cannot load a sandbox connection without an active sandbox."); throw new Error("Cannot load a sandbox connection without an active sandbox.");
} }
return await backendClient.getSandboxAgentConnection( return await backendClient.getSandboxAgentConnection(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId);
workspaceId,
activeSandbox.providerId,
activeSandbox.sandboxId,
);
}, },
}); });
const processesQuery = useQuery({ const processesQuery = useQuery({
queryKey: [ queryKey: ["mock-layout", "sandbox-processes", workspaceId, activeSandbox?.providerId ?? "", activeSandbox?.sandboxId ?? ""],
"mock-layout",
"sandbox-processes",
workspaceId,
activeSandbox?.providerId ?? "",
activeSandbox?.sandboxId ?? "",
],
enabled: Boolean(activeSandbox?.sandboxId), enabled: Boolean(activeSandbox?.sandboxId),
staleTime: 0, staleTime: 0,
refetchOnWindowFocus: true, refetchOnWindowFocus: true,
@ -145,11 +126,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
throw new Error("Cannot load processes without an active sandbox."); throw new Error("Cannot load processes without an active sandbox.");
} }
return await backendClient.listSandboxProcesses( return await backendClient.listSandboxProcesses(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId);
workspaceId,
activeSandbox.providerId,
activeSandbox.sandboxId,
);
}, },
}); });
@ -158,14 +135,9 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
return; return;
} }
return backendClient.subscribeSandboxProcesses( return backendClient.subscribeSandboxProcesses(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, () => {
workspaceId, void processesQuery.refetch();
activeSandbox.providerId, });
activeSandbox.sandboxId,
() => {
void processesQuery.refetch();
},
);
}, [activeSandbox?.providerId, activeSandbox?.sandboxId, processesQuery, workspaceId]); }, [activeSandbox?.providerId, activeSandbox?.sandboxId, processesQuery, workspaceId]);
useEffect(() => { useEffect(() => {
@ -241,10 +213,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
}, [handoffId]); }, [handoffId]);
const processes = processesQuery.data?.processes ?? []; const processes = processesQuery.data?.processes ?? [];
const selectedProcess = useMemo( const selectedProcess = useMemo(() => processes.find((process) => process.id === selectedProcessId) ?? null, [processes, selectedProcessId]);
() => processes.find((process) => process.id === selectedProcessId) ?? null,
[processes, selectedProcessId],
);
useEffect(() => { useEffect(() => {
if (!processes.length) { if (!processes.length) {
@ -270,21 +239,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
setLogsLoading(true); setLogsLoading(true);
setLogsError(null); setLogsError(null);
try { try {
const response = await backendClient.getSandboxProcessLogs( const response = await backendClient.getSandboxProcessLogs(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, selectedProcess.id, {
workspaceId, stream: selectedProcess.tty ? "pty" : "combined",
activeSandbox.providerId, tail: 200,
activeSandbox.sandboxId, });
selectedProcess.id, setLogsText(response.entries.map((entry: ProcessLogResponseEntry) => decodeBase64Utf8(entry.data)).join(""));
{
stream: selectedProcess.tty ? "pty" : "combined",
tail: 200,
},
);
setLogsText(
response.entries
.map((entry: ProcessLogResponseEntry) => decodeBase64Utf8(entry.data))
.join(""),
);
} catch (error) { } catch (error) {
setLogsText(""); setLogsText("");
setLogsError(error instanceof Error ? error.message : String(error)); setLogsError(error instanceof Error ? error.message : String(error));
@ -386,17 +345,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
} finally { } finally {
setCreatingProcess(false); setCreatingProcess(false);
} }
}, [ }, [activeSandbox, argsText, command, cwdOverride, interactive, openTerminalTab, processesQuery, tty, workspaceId]);
activeSandbox,
argsText,
command,
cwdOverride,
interactive,
openTerminalTab,
processesQuery,
tty,
workspaceId,
]);
const handleProcessAction = useCallback( const handleProcessAction = useCallback(
async (processId: string, action: "stop" | "kill" | "delete") => { async (processId: string, action: "stop" | "kill" | "delete") => {
@ -407,32 +356,13 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
setActingProcessId(`${action}:${processId}`); setActingProcessId(`${action}:${processId}`);
try { try {
if (action === "stop") { if (action === "stop") {
await backendClient.stopSandboxProcess( await backendClient.stopSandboxProcess(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, processId, { waitMs: 2_000 });
workspaceId,
activeSandbox.providerId,
activeSandbox.sandboxId,
processId,
{ waitMs: 2_000 },
);
} else if (action === "kill") { } else if (action === "kill") {
await backendClient.killSandboxProcess( await backendClient.killSandboxProcess(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, processId, { waitMs: 2_000 });
workspaceId,
activeSandbox.providerId,
activeSandbox.sandboxId,
processId,
{ waitMs: 2_000 },
);
} else { } else {
await backendClient.deleteSandboxProcess( await backendClient.deleteSandboxProcess(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, processId);
workspaceId,
activeSandbox.providerId,
activeSandbox.sandboxId,
processId,
);
setProcessTabs((current) => current.filter((tab) => tab.processId !== processId)); setProcessTabs((current) => current.filter((tab) => tab.processId !== processId));
setActiveTabId((current) => setActiveTabId((current) => (current.startsWith("terminal:") && current === `terminal:${processId}` ? PROCESSES_TAB_ID : current));
current.startsWith("terminal:") && current === `terminal:${processId}` ? PROCESSES_TAB_ID : current,
);
} }
await processesQuery.refetch(); await processesQuery.refetch();
} catch (error) { } catch (error) {
@ -445,9 +375,9 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
); );
const processTabsById = useMemo(() => new Map(processTabs.map((tab) => [tab.id, tab])), [processTabs]); const processTabsById = useMemo(() => new Map(processTabs.map((tab) => [tab.id, tab])), [processTabs]);
const activeProcessTab = activeTabId === PROCESSES_TAB_ID ? null : processTabsById.get(activeTabId) ?? null; const activeProcessTab = activeTabId === PROCESSES_TAB_ID ? null : (processTabsById.get(activeTabId) ?? null);
const activeTerminalProcess = useMemo( const activeTerminalProcess = useMemo(
() => (activeProcessTab ? processes.find((process) => process.id === activeProcessTab.processId) ?? null : null), () => (activeProcessTab ? (processes.find((process) => process.id === activeProcessTab.processId) ?? null) : null),
[activeProcessTab, processes], [activeProcessTab, processes],
); );
@ -473,7 +403,10 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
}); });
const smallButtonClassName = css({ const smallButtonClassName = css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
margin: "0",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",
gap: "6px", gap: "6px",
@ -545,21 +478,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
</span> </span>
</div> </div>
<div className={css({ display: "flex", alignItems: "center", gap: "8px" })}> <div className={css({ display: "flex", alignItems: "center", gap: "8px" })}>
<button <button type="button" className={smallButtonClassName} onClick={() => void processesQuery.refetch()} disabled={processesQuery.isFetching}>
type="button"
className={smallButtonClassName}
onClick={() => void processesQuery.refetch()}
disabled={processesQuery.isFetching}
>
{processesQuery.isFetching ? <Loader2 size={12} className={css({ animation: "hf-spin 0.8s linear infinite" })} /> : <RefreshCw size={12} />} {processesQuery.isFetching ? <Loader2 size={12} className={css({ animation: "hf-spin 0.8s linear infinite" })} /> : <RefreshCw size={12} />}
Refresh Refresh
</button> </button>
<button <button type="button" className={smallButtonClassName} onClick={() => void spawnTerminal()} disabled={creatingProcess}>
type="button"
className={smallButtonClassName}
onClick={() => void spawnTerminal()}
disabled={creatingProcess}
>
{creatingProcess ? <Loader2 size={12} className={css({ animation: "hf-spin 0.8s linear infinite" })} /> : <SquareTerminal size={12} />} {creatingProcess ? <Loader2 size={12} className={css({ animation: "hf-spin 0.8s linear infinite" })} /> : <SquareTerminal size={12} />}
New Terminal New Terminal
</button> </button>
@ -656,21 +579,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
/> />
tty tty
</label> </label>
<button <button type="button" className={smallButtonClassName} onClick={() => void createCustomProcess()} disabled={creatingProcess}>
type="button"
className={smallButtonClassName}
onClick={() => void createCustomProcess()}
disabled={creatingProcess}
>
Create Process Create Process
</button> </button>
</div> </div>
{createError ? ( {createError ? <div className={css({ fontSize: "11px", color: "#fda4af" })}>{createError}</div> : null}
<div className={css({ fontSize: "11px", color: "#fda4af" })}>
{createError}
</div>
) : null}
</div> </div>
<div <div
@ -688,9 +602,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
})} })}
> >
{processes.length === 0 ? ( {processes.length === 0 ? (
<div className={css({ padding: "16px", fontSize: "12px", color: "rgba(255,255,255,0.56)" })}> <div className={css({ padding: "16px", fontSize: "12px", color: "rgba(255,255,255,0.56)" })}>No processes yet.</div>
No processes yet.
</div>
) : ( ) : (
processes.map((process) => { processes.map((process) => {
const isSelected = selectedProcessId === process.id; const isSelected = selectedProcessId === process.id;
@ -743,7 +655,16 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
{formatCommandSummary(process)} {formatCommandSummary(process)}
</span> </span>
</div> </div>
<div className={css({ display: "flex", alignItems: "center", justifyContent: "space-between", gap: "10px", fontSize: "10px", color: "rgba(255,255,255,0.5)" })}> <div
className={css({
display: "flex",
alignItems: "center",
justifyContent: "space-between",
gap: "10px",
fontSize: "10px",
color: "rgba(255,255,255,0.5)",
})}
>
<span>{process.pid ? `PID ${process.pid}` : "PID ?"}</span> <span>{process.pid ? `PID ${process.pid}` : "PID ?"}</span>
<span>{process.id.slice(0, 8)}</span> <span>{process.id.slice(0, 8)}</span>
</div> </div>
@ -822,12 +743,8 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
})} })}
> >
<div className={css({ display: "flex", alignItems: "center", justifyContent: "space-between", gap: "10px" })}> <div className={css({ display: "flex", alignItems: "center", justifyContent: "space-between", gap: "10px" })}>
<strong className={css({ fontSize: "12px", color: "#f4f4f5" })}> <strong className={css({ fontSize: "12px", color: "#f4f4f5" })}>{formatCommandSummary(selectedProcess)}</strong>
{formatCommandSummary(selectedProcess)} <span className={css({ fontSize: "10px", color: "rgba(255,255,255,0.56)" })}>{selectedProcess.status}</span>
</strong>
<span className={css({ fontSize: "10px", color: "rgba(255,255,255,0.56)" })}>
{selectedProcess.status}
</span>
</div> </div>
<div className={css({ display: "flex", flexWrap: "wrap", gap: "10px", fontSize: "10px", color: "rgba(255,255,255,0.5)" })}> <div className={css({ display: "flex", flexWrap: "wrap", gap: "10px", fontSize: "10px", color: "rgba(255,255,255,0.5)" })}>
<span>{selectedProcess.pid ? `PID ${selectedProcess.pid}` : "PID ?"}</span> <span>{selectedProcess.pid ? `PID ${selectedProcess.pid}` : "PID ?"}</span>
@ -836,16 +753,22 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
</div> </div>
</div> </div>
<div className={css({ minHeight: 0, flex: 1, display: "flex", flexDirection: "column" })}> <div className={css({ minHeight: 0, flex: 1, display: "flex", flexDirection: "column" })}>
<div className={css({ display: "flex", alignItems: "center", justifyContent: "space-between", padding: "10px 14px", borderBottom: "1px solid rgba(255,255,255,0.08)" })}> <div
className={css({
display: "flex",
alignItems: "center",
justifyContent: "space-between",
padding: "10px 14px",
borderBottom: "1px solid rgba(255,255,255,0.08)",
})}
>
<span className={css({ fontSize: "11px", color: "rgba(255,255,255,0.68)" })}>Logs</span> <span className={css({ fontSize: "11px", color: "rgba(255,255,255,0.68)" })}>Logs</span>
<button type="button" className={smallButtonClassName} onClick={() => void refreshLogs()} disabled={logsLoading}> <button type="button" className={smallButtonClassName} onClick={() => void refreshLogs()} disabled={logsLoading}>
{logsLoading ? <Loader2 size={11} className={css({ animation: "hf-spin 0.8s linear infinite" })} /> : <RefreshCw size={11} />} {logsLoading ? <Loader2 size={11} className={css({ animation: "hf-spin 0.8s linear infinite" })} /> : <RefreshCw size={11} />}
Refresh Refresh
</button> </button>
</div> </div>
{logsError ? ( {logsError ? <div className={css({ padding: "14px", fontSize: "11px", color: "#fda4af" })}>{logsError}</div> : null}
<div className={css({ padding: "14px", fontSize: "11px", color: "#fda4af" })}>{logsError}</div>
) : null}
<pre <pre
className={css({ className={css({
flex: 1, flex: 1,
@ -897,10 +820,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
<div className={emptyBodyClassName}> <div className={emptyBodyClassName}>
<div className={emptyCopyClassName}> <div className={emptyCopyClassName}>
<strong>Interactive terminal transport is unavailable.</strong> <strong>Interactive terminal transport is unavailable.</strong>
<span> <span>This tab was created through the standard process API flow. Mock mode does not open a live terminal transport.</span>
This tab was created through the standard process API flow. Mock mode does not open a live terminal
transport.
</span>
</div> </div>
</div> </div>
); );
@ -908,7 +828,18 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
return ( return (
<div className={css({ flex: 1, minHeight: 0, display: "flex", flexDirection: "column", backgroundColor: "#080506" })}> <div className={css({ flex: 1, minHeight: 0, display: "flex", flexDirection: "column", backgroundColor: "#080506" })}>
<div className={css({ display: "flex", alignItems: "center", justifyContent: "space-between", gap: "10px", padding: "10px 14px", borderBottom: "1px solid rgba(255,255,255,0.08)", fontSize: "11px", color: "rgba(255,255,255,0.56)" })}> <div
className={css({
display: "flex",
alignItems: "center",
justifyContent: "space-between",
gap: "10px",
padding: "10px 14px",
borderBottom: "1px solid rgba(255,255,255,0.08)",
fontSize: "11px",
color: "rgba(255,255,255,0.56)",
})}
>
<span>{formatCommandSummary(activeTerminalProcess)}</span> <span>{formatCommandSummary(activeTerminalProcess)}</span>
<span>{activeTerminalProcess.id.slice(0, 8)}</span> <span>{activeTerminalProcess.id.slice(0, 8)}</span>
</div> </div>
@ -1001,7 +932,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
type="button" type="button"
aria-label="Terminal controls" aria-label="Terminal controls"
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
padding: "0",
margin: "0",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
@ -1017,7 +953,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
type="button" type="button"
onClick={() => setActiveTabId(PROCESSES_TAB_ID)} onClick={() => setActiveTabId(PROCESSES_TAB_ID)}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
position: "relative", position: "relative",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
@ -1057,7 +997,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
type="button" type="button"
onClick={() => setActiveTabId(tab.id)} onClick={() => setActiveTabId(tab.id)}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
position: "relative", position: "relative",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
@ -1088,7 +1032,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
aria-label={`Close ${tab.title}`} aria-label={`Close ${tab.title}`}
onClick={() => closeTerminalTab(tab.id)} onClick={() => closeTerminalTab(tab.id)}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
padding: "0",
margin: "0",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
@ -1110,7 +1059,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
onClick={() => void spawnTerminal()} onClick={() => void spawnTerminal()}
disabled={!activeSandbox?.sandboxId || creatingProcess} disabled={!activeSandbox?.sandboxId || creatingProcess}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
padding: "0",
margin: "0",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
@ -1132,6 +1086,4 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
); );
} }
type ProcessLogResponseEntry = Awaited< type ProcessLogResponseEntry = Awaited<ReturnType<typeof backendClient.getSandboxProcessLogs>>["entries"][number];
ReturnType<typeof backendClient.getSandboxProcessLogs>
>["entries"][number];

View file

@ -45,7 +45,13 @@ export const TranscriptHeader = memo(function TranscriptHeader({
} }
}} }}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
padding: "0",
margin: "0",
outline: "none",
fontWeight: 500, fontWeight: 500,
fontSize: "14px", fontSize: "14px",
color: theme.colors.contentPrimary, color: theme.colors.contentPrimary,
@ -79,7 +85,11 @@ export const TranscriptHeader = memo(function TranscriptHeader({
} }
}} }}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
margin: "0",
outline: "none",
padding: "2px 8px", padding: "2px 8px",
borderRadius: "999px", borderRadius: "999px",
border: "1px solid rgba(255, 255, 255, 0.3)", border: "1px solid rgba(255, 255, 255, 0.3)",
@ -136,7 +146,11 @@ export const TranscriptHeader = memo(function TranscriptHeader({
<button <button
onClick={() => onSetActiveTabUnread(!activeTab.unread)} onClick={() => onSetActiveTabUnread(!activeTab.unread)}
className={css({ className={css({
all: "unset", appearance: "none",
WebkitAppearance: "none",
background: "none",
border: "none",
margin: "0",
boxSizing: "border-box", boxSizing: "border-box",
display: "inline-flex", display: "inline-flex",
alignItems: "center", alignItems: "center",