Skip to content

Commit 979dba3

Browse files
committed
Theme legacy panels to match CommandShell vocabulary
Agent prompt to reproduce: `<ChannelsPanel>` (and the Slack/Telegram/Discord/WhatsApp sub-panels it composes) was built for the legacy AdminShell and uses `globals.css` classes (`.panel-card`, `.button.primary`, `.text-input`, `.field-label`, `.eyebrow`, `.auth-chip`, `.pill`, `.lede`, `.muted-copy`, `.panel-grid`) with chunkier 36px buttons, 12px card radii, solid-green success buttons, and proportional input fonts — visually inconsistent with the CommandShell aesthetic (Geist Mono eyebrows, 32px buttons, 8px radius, hairline ghost buttons). In `src/components/designs/command-shell.tsx`: 1. Wrap the channels view in a `<section className="cmd-channels">`. 2. In the existing `<Style>` block, append scoped overrides under `.cmd-channels .panel-card`, `.button`, `.button.primary/.ghost /.success/.danger`, `.field-label`, `.text-input`, `.auth-chip`, `.pill`, `.eyebrow`, `.lede`, `.muted-copy`, `.panel-grid`, `code`, and `a:not(.button)`. The overrides should: - Card radius `var(--radius)` (8px), 1px hairline border, elevated bg, 16px head margin with hairline divider - Button height 32px, padding `0 14px`, 6px radius, `font-family: inherit` - Primary button = white-on-black (matches CommandShell) - Ghost button = transparent + hairline border, hover swap to `--background-hover` - Success/danger buttons = ghost variants with semantic border/text - Field label = Geist Mono 11px uppercase tracking 0.08em - Text input = mono font, 12px, hairline border, dark bg - Pill / auth-chip = capsule, mono 11px, hairline border, bg `--background-hover` - Code = inline mono with hairline border + bg - `a` (non-button) = underlined with subtle decoration Do not edit `globals.css` or any panel file — keep the overrides scoped to `.cmd-channels` so the legacy AdminShell (still used by tests) renders identically to before. Verify `npx tsc --noEmit` and `lat check` pass.
1 parent d557950 commit 979dba3

File tree

1 file changed

+140
-1
lines changed

1 file changed

+140
-1
lines changed

src/components/designs/command-shell.tsx

Lines changed: 140 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ export function CommandShell({ initialStatus }: Props) {
816816
)}
817817

818818
{view === "channels" && (
819-
<section>
819+
<section className="cmd-channels">
820820
<ChannelsPanel
821821
active={view === "channels"}
822822
status={status}
@@ -2025,6 +2025,145 @@ function Style() {
20252025
.login-input:focus { border-color: var(--border-strong); }
20262026
.login-error { color: var(--danger); font-size: 12px; font-family: var(--font-geist-mono, ui-monospace, monospace); }
20272027
2028+
/* ─── Scoped Channels-panel overrides (align legacy panels with CommandShell theme) ─── */
2029+
.cmd-channels { display: flex; flex-direction: column; gap: 24px; }
2030+
.cmd-channels .panel-card {
2031+
border-radius: var(--radius);
2032+
padding: 20px;
2033+
background: var(--background-elevated);
2034+
border: 1px solid var(--border);
2035+
}
2036+
.cmd-channels .panel-head {
2037+
padding-bottom: 12px;
2038+
margin-bottom: 16px;
2039+
border-bottom: 1px solid var(--border);
2040+
align-items: baseline;
2041+
}
2042+
.cmd-channels h2, .cmd-channels h3 {
2043+
font-weight: 600;
2044+
letter-spacing: -0.01em;
2045+
}
2046+
.cmd-channels h2 { font-size: 14px; }
2047+
.cmd-channels h3 { font-size: 13px; }
2048+
.cmd-channels .eyebrow {
2049+
font-family: var(--font-geist-mono, ui-monospace, monospace);
2050+
font-size: 11px;
2051+
font-weight: 500;
2052+
text-transform: uppercase;
2053+
letter-spacing: 0.08em;
2054+
color: var(--foreground-subtle);
2055+
margin: 0 0 8px;
2056+
}
2057+
.cmd-channels .lede,
2058+
.cmd-channels .muted-copy,
2059+
.cmd-channels p {
2060+
font-size: 12px;
2061+
line-height: 1.5;
2062+
color: var(--foreground-muted);
2063+
}
2064+
.cmd-channels .button {
2065+
min-height: 32px;
2066+
padding: 0 14px;
2067+
border-radius: 6px;
2068+
font-size: 13px;
2069+
font-weight: 500;
2070+
font-family: inherit;
2071+
}
2072+
.cmd-channels .button.primary {
2073+
background: var(--foreground);
2074+
border-color: var(--foreground);
2075+
color: var(--background);
2076+
}
2077+
.cmd-channels .button.primary:hover:not(:disabled) {
2078+
background: #fff;
2079+
border-color: #fff;
2080+
}
2081+
.cmd-channels .button.ghost {
2082+
background: transparent;
2083+
border-color: var(--border);
2084+
color: var(--foreground);
2085+
}
2086+
.cmd-channels .button.ghost:hover:not(:disabled) {
2087+
background: var(--background-hover);
2088+
border-color: var(--border-strong);
2089+
}
2090+
.cmd-channels .button.success {
2091+
background: transparent;
2092+
border-color: var(--success);
2093+
color: var(--success);
2094+
}
2095+
.cmd-channels .button.success:hover:not(:disabled) {
2096+
background: rgba(69, 165, 87, 0.08);
2097+
border-color: var(--success);
2098+
color: var(--success);
2099+
}
2100+
.cmd-channels .button.danger {
2101+
background: transparent;
2102+
border-color: var(--danger);
2103+
color: var(--danger);
2104+
}
2105+
.cmd-channels .button.danger:hover:not(:disabled) {
2106+
background: rgba(229, 72, 77, 0.08);
2107+
color: var(--danger);
2108+
}
2109+
.cmd-channels .field-label {
2110+
display: block;
2111+
font-family: var(--font-geist-mono, ui-monospace, monospace);
2112+
font-size: 11px;
2113+
font-weight: 500;
2114+
text-transform: uppercase;
2115+
letter-spacing: 0.08em;
2116+
color: var(--foreground-subtle);
2117+
margin: 0 0 6px;
2118+
}
2119+
.cmd-channels .text-input {
2120+
background: var(--background);
2121+
color: var(--foreground);
2122+
border: 1px solid var(--border);
2123+
border-radius: 6px;
2124+
padding: 8px 12px;
2125+
font-size: 12px;
2126+
font-family: var(--font-geist-mono, ui-monospace, monospace);
2127+
width: 100%;
2128+
}
2129+
.cmd-channels .text-input:focus {
2130+
border-color: var(--border-strong);
2131+
outline: none;
2132+
}
2133+
.cmd-channels .auth-chip,
2134+
.cmd-channels .pill {
2135+
font-family: var(--font-geist-mono, ui-monospace, monospace);
2136+
font-size: 11px;
2137+
padding: 2px 8px;
2138+
border-radius: 12px;
2139+
background: var(--background-hover);
2140+
color: var(--foreground);
2141+
border: 1px solid var(--border);
2142+
min-height: auto;
2143+
}
2144+
.cmd-channels .panel-grid {
2145+
display: grid;
2146+
gap: 12px;
2147+
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
2148+
}
2149+
.cmd-channels code {
2150+
font-family: var(--font-geist-mono, ui-monospace, monospace);
2151+
font-size: 12px;
2152+
background: var(--background);
2153+
padding: 1px 6px;
2154+
border-radius: 4px;
2155+
border: 1px solid var(--border);
2156+
}
2157+
.cmd-channels a:not(.button) {
2158+
color: var(--foreground);
2159+
text-decoration: underline;
2160+
text-decoration-color: var(--border-strong);
2161+
text-underline-offset: 3px;
2162+
}
2163+
.cmd-channels a:not(.button):hover {
2164+
text-decoration-color: var(--foreground);
2165+
}
2166+
20282167
/* Button-ified NavItem */
20292168
button.nav-item {
20302169
width: 100%; border: none; background: transparent;

0 commit comments

Comments
 (0)