From c7857fdfc97bce01d870a7e2c63074aeb1af8fc7 Mon Sep 17 00:00:00 2001 From: Forbes Date: Sat, 14 Feb 2026 13:36:07 -0600 Subject: [PATCH 1/2] fix(web): standardize font sizes to style guide scale MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Map fontWeight: 700 → 600 in non-title contexts (LoginPage, FileDropZone). Align FileDropZone badge padding to 4px grid. Closes #70 --- web/src/components/items/FileDropZone.tsx | 10 +++++----- web/src/pages/LoginPage.tsx | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/src/components/items/FileDropZone.tsx b/web/src/components/items/FileDropZone.tsx index a327796..f1b0acb 100644 --- a/web/src/components/items/FileDropZone.tsx +++ b/web/src/components/items/FileDropZone.tsx @@ -143,8 +143,8 @@ function FileRow({ display: "flex", alignItems: "center", gap: "0.5rem", - padding: "0.25rem 0.4rem", - borderRadius: "0.375rem", + padding: "0.25rem 0.5rem", + borderRadius: "0.25rem", position: "relative", }} > @@ -153,14 +153,14 @@ function FileRow({ style={{ width: 28, height: 28, - borderRadius: "0.375rem", + borderRadius: "0.25rem", backgroundColor: color, opacity: 0.8, display: "flex", alignItems: "center", justifyContent: "center", fontSize: "var(--font-xs)", - fontWeight: 700, + fontWeight: 600, color: "var(--ctp-crust)", flexShrink: 0, }} @@ -239,7 +239,7 @@ function FileRow({ cursor: "pointer", fontSize: "var(--font-table)", color: hovered ? "var(--ctp-red)" : "var(--ctp-overlay0)", - padding: "0 0.2rem", + padding: "0 0.25rem", flexShrink: 0, transition: "all 0.15s ease", }} diff --git a/web/src/pages/LoginPage.tsx b/web/src/pages/LoginPage.tsx index 899756d..f15add4 100644 --- a/web/src/pages/LoginPage.tsx +++ b/web/src/pages/LoginPage.tsx @@ -116,7 +116,7 @@ const titleStyle: React.CSSProperties = { color: "var(--ctp-mauve)", textAlign: "center", fontSize: "2rem", - fontWeight: 700, + fontWeight: 600, marginBottom: "0.25rem", }; @@ -164,7 +164,7 @@ const btnPrimaryStyle: React.CSSProperties = { display: "block", width: "100%", padding: "0.75rem 1.5rem", - borderRadius: "0.375rem", + borderRadius: "0.25rem", fontWeight: 500, fontSize: "0.75rem", cursor: "pointer", @@ -189,7 +189,7 @@ const btnOidcStyle: React.CSSProperties = { display: "block", width: "100%", padding: "0.75rem 1.5rem", - borderRadius: "0.375rem", + borderRadius: "0.25rem", fontWeight: 500, fontSize: "0.75rem", cursor: "pointer", -- 2.49.1 From ba92dd363ce614432cc99c4dcf20f1a8093fa4e1 Mon Sep 17 00:00:00 2001 From: Forbes Date: Sat, 14 Feb 2026 13:36:22 -0600 Subject: [PATCH 2/2] fix(web): align all spacing values to 4px grid MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Standardize all spacing to multiples of 4px (0.25rem): - 0.15rem (2.4px) → 0.25rem (4px) - 0.35rem (5.6px) → 0.25rem (4px) - 0.375rem (6px) → 0.25rem (4px) for borderRadius - 0.4rem (6.4px) → 0.5rem (8px) - 0.6rem (9.6px) → 0.5rem (8px) Updated theme.css density variables, silo-base.css focus ring, and all TSX component inline styles. Closes #71 --- web/src/components/AppShell.tsx | 8 +-- web/src/components/ContextMenu.tsx | 2 +- web/src/components/PageFooter.tsx | 68 +++++++++++-------- web/src/components/TagInput.tsx | 8 +-- web/src/components/audit/AuditDetailPanel.tsx | 8 +-- web/src/components/audit/AuditSummaryBar.tsx | 2 +- web/src/components/audit/AuditTable.tsx | 2 +- web/src/components/audit/AuditToolbar.tsx | 4 +- web/src/components/items/BOMTab.tsx | 28 ++++---- web/src/components/items/CategoryPicker.tsx | 8 +-- web/src/components/items/CreateItemPane.tsx | 18 ++--- web/src/components/items/DeleteItemPane.tsx | 10 +-- web/src/components/items/EditItemPane.tsx | 12 ++-- web/src/components/items/ImportItemsPane.tsx | 20 +++--- web/src/components/items/ItemDetail.tsx | 6 +- web/src/components/items/ItemTable.tsx | 6 +- web/src/components/items/ItemsToolbar.tsx | 14 ++-- web/src/components/items/MainTab.tsx | 16 ++--- web/src/components/items/PropertiesTab.tsx | 12 ++-- web/src/components/items/RevisionsTab.tsx | 12 ++-- web/src/pages/ProjectsPage.tsx | 20 +++--- web/src/pages/SchemasPage.tsx | 10 +-- web/src/pages/SettingsPage.tsx | 24 +++---- web/src/styles/silo-base.css | 6 +- web/src/styles/theme.css | 34 +++++----- 25 files changed, 186 insertions(+), 172 deletions(-) diff --git a/web/src/components/AppShell.tsx b/web/src/components/AppShell.tsx index 843bc68..2d19da2 100644 --- a/web/src/components/AppShell.tsx +++ b/web/src/components/AppShell.tsx @@ -100,7 +100,7 @@ export function AppShell() { void; } -export function PageFooter({ stats, page, pageSize, itemCount, onPageChange }: PageFooterProps) { +export function PageFooter({ + stats, + page, + pageSize, + itemCount, + onPageChange, +}: PageFooterProps) { const hasPagination = page !== undefined && onPageChange !== undefined; return ( -
-
+
+
{stats}
{hasPagination && ( -
+
@@ -202,7 +202,7 @@ export function TagInput({ marginTop: "0.25rem", backgroundColor: "var(--ctp-surface0)", border: "1px solid var(--ctp-surface1)", - borderRadius: "0.375rem", + borderRadius: "0.25rem", maxHeight: "160px", overflowY: "auto", }} diff --git a/web/src/components/audit/AuditDetailPanel.tsx b/web/src/components/audit/AuditDetailPanel.tsx index 6e013c6..6dec717 100644 --- a/web/src/components/audit/AuditDetailPanel.tsx +++ b/web/src/components/audit/AuditDetailPanel.tsx @@ -218,7 +218,7 @@ export function AuditDetailPanel({ Export CSV @@ -256,7 +256,7 @@ export function BOMTab({ partNumber, isEditor }: BOMTabProps) { ...toolBtnStyle, display: "inline-flex", alignItems: "center", - gap: "0.35rem", + gap: "0.25rem", }} > Add @@ -267,9 +267,9 @@ export function BOMTab({ partNumber, isEditor }: BOMTabProps) { {isEditor && assemblyCount > 0 && (
{title} @@ -636,7 +636,7 @@ function MetaRow({ label, value }: { label: string; value: string }) { display: "flex", justifyContent: "space-between", fontSize: "var(--font-table)", - padding: "0.15rem 0", + padding: "0.25rem 0", }} > {label} @@ -686,7 +686,7 @@ const actionBtnStyle: React.CSSProperties = { fontSize: "0.75rem", fontWeight: 500, border: "none", - borderRadius: "0.375rem", + borderRadius: "0.25rem", color: "var(--ctp-crust)", cursor: "pointer", }; @@ -698,17 +698,17 @@ const cancelBtnStyle: React.CSSProperties = { color: "var(--ctp-subtext1)", fontSize: "0.75rem", fontWeight: 500, - padding: "0.25rem 0.4rem", - borderRadius: "0.375rem", + padding: "0.25rem 0.5rem", + borderRadius: "0.25rem", }; const inputStyle: React.CSSProperties = { width: "100%", - padding: "0.35rem 0.5rem", + padding: "0.25rem 0.5rem", fontSize: "var(--font-body)", backgroundColor: "var(--ctp-base)", border: "1px solid var(--ctp-surface1)", - borderRadius: "0.375rem", + borderRadius: "0.25rem", color: "var(--ctp-text)", boxSizing: "border-box", }; @@ -723,7 +723,7 @@ const errorStyle: React.CSSProperties = { color: "var(--ctp-red)", backgroundColor: "rgba(243,139,168,0.1)", padding: "0.5rem", - borderRadius: "0.375rem", + borderRadius: "0.25rem", marginBottom: "0.5rem", fontSize: "var(--font-body)", }; diff --git a/web/src/components/items/DeleteItemPane.tsx b/web/src/components/items/DeleteItemPane.tsx index 99e4711..b34c769 100644 --- a/web/src/components/items/DeleteItemPane.tsx +++ b/web/src/components/items/DeleteItemPane.tsx @@ -73,7 +73,7 @@ export function DeleteItemPane({ color: "var(--ctp-red)", backgroundColor: "rgba(243,139,168,0.1)", padding: "0.5rem 1rem", - borderRadius: "0.375rem", + borderRadius: "0.25rem", fontSize: "var(--font-body)", width: "100%", textAlign: "center", @@ -125,7 +125,7 @@ export function DeleteItemPane({ fontSize: "0.75rem", fontWeight: 500, border: "none", - borderRadius: "0.375rem", + borderRadius: "0.25rem", backgroundColor: "var(--ctp-surface1)", color: "var(--ctp-text)", cursor: "pointer", @@ -141,7 +141,7 @@ export function DeleteItemPane({ fontSize: "0.75rem", fontWeight: 500, border: "none", - borderRadius: "0.375rem", + borderRadius: "0.25rem", backgroundColor: "var(--ctp-red)", color: "var(--ctp-crust)", cursor: "pointer", @@ -163,6 +163,6 @@ const headerBtnStyle: React.CSSProperties = { color: "var(--ctp-subtext1)", fontSize: "0.75rem", fontWeight: 500, - padding: "0.25rem 0.4rem", - borderRadius: "0.375rem", + padding: "0.25rem 0.5rem", + borderRadius: "0.25rem", }; diff --git a/web/src/components/items/EditItemPane.tsx b/web/src/components/items/EditItemPane.tsx index 5f6fa7e..acbbeda 100644 --- a/web/src/components/items/EditItemPane.tsx +++ b/web/src/components/items/EditItemPane.tsx @@ -93,7 +93,7 @@ export function EditItemPane({ fontSize: "0.75rem", fontWeight: 500, border: "none", - borderRadius: "0.375rem", + borderRadius: "0.25rem", backgroundColor: "var(--ctp-blue)", color: "var(--ctp-crust)", cursor: "pointer", @@ -114,7 +114,7 @@ export function EditItemPane({ color: "var(--ctp-red)", backgroundColor: "rgba(243,139,168,0.1)", padding: "0.5rem", - borderRadius: "0.375rem", + borderRadius: "0.25rem", marginBottom: "0.5rem", fontSize: "var(--font-body)", }} @@ -208,11 +208,11 @@ function FormGroup({ const inputStyle: React.CSSProperties = { width: "100%", - padding: "0.35rem 0.5rem", + padding: "0.25rem 0.5rem", fontSize: "var(--font-body)", backgroundColor: "var(--ctp-base)", border: "1px solid var(--ctp-surface1)", - borderRadius: "0.375rem", + borderRadius: "0.25rem", color: "var(--ctp-text)", }; @@ -223,6 +223,6 @@ const headerBtnStyle: React.CSSProperties = { color: "var(--ctp-subtext1)", fontSize: "0.75rem", fontWeight: 500, - padding: "0.25rem 0.4rem", - borderRadius: "0.375rem", + padding: "0.25rem 0.5rem", + borderRadius: "0.25rem", }; diff --git a/web/src/components/items/ImportItemsPane.tsx b/web/src/components/items/ImportItemsPane.tsx index 726509f..51c0177 100644 --- a/web/src/components/items/ImportItemsPane.tsx +++ b/web/src/components/items/ImportItemsPane.tsx @@ -90,7 +90,7 @@ export function ImportItemsPane({ color: "var(--ctp-red)", backgroundColor: "rgba(243,139,168,0.1)", padding: "0.5rem", - borderRadius: "0.375rem", + borderRadius: "0.25rem", marginBottom: "0.5rem", fontSize: "var(--font-body)", }} @@ -164,7 +164,7 @@ export function ImportItemsPane({ style={{ display: "flex", alignItems: "center", - gap: "0.4rem", + gap: "0.5rem", fontSize: "var(--font-body)", color: "var(--ctp-subtext1)", marginBottom: "0.75rem", @@ -187,11 +187,11 @@ export function ImportItemsPane({ onClick={() => void doImport(true)} disabled={!file || importing} style={{ - padding: "0.4rem 0.75rem", + padding: "0.5rem 0.75rem", fontSize: "0.75rem", fontWeight: 500, border: "none", - borderRadius: "0.375rem", + borderRadius: "0.25rem", backgroundColor: "var(--ctp-yellow)", color: "var(--ctp-crust)", cursor: "pointer", @@ -205,11 +205,11 @@ export function ImportItemsPane({ onClick={() => void doImport(false)} disabled={importing || (result?.error_count ?? 0) > 0} style={{ - padding: "0.4rem 0.75rem", + padding: "0.5rem 0.75rem", fontSize: "0.75rem", fontWeight: 500, border: "none", - borderRadius: "0.375rem", + borderRadius: "0.25rem", backgroundColor: "var(--ctp-green)", color: "var(--ctp-crust)", cursor: "pointer", @@ -227,7 +227,7 @@ export function ImportItemsPane({ style={{ padding: "0.5rem", backgroundColor: "var(--ctp-surface0)", - borderRadius: "0.4rem", + borderRadius: "0.5rem", fontSize: "var(--font-table)", }} > @@ -262,7 +262,7 @@ export function ImportItemsPane({ style={{ color: "var(--ctp-red)", fontSize: "0.75rem", - padding: "0.15rem 0", + padding: "0.25rem 0", }} > Row {err.row} @@ -296,6 +296,6 @@ const headerBtnStyle: React.CSSProperties = { color: "var(--ctp-subtext1)", fontSize: "0.75rem", fontWeight: 500, - padding: "0.25rem 0.4rem", - borderRadius: "0.375rem", + padding: "0.25rem 0.5rem", + borderRadius: "0.25rem", }; diff --git a/web/src/components/items/ItemDetail.tsx b/web/src/components/items/ItemDetail.tsx index 8c2d640..92f72ef 100644 --- a/web/src/components/items/ItemDetail.tsx +++ b/web/src/components/items/ItemDetail.tsx @@ -103,7 +103,7 @@ export function ItemDetail({ setActiveTab(tab.key)} style={{ - padding: "0.4rem 0.75rem", + padding: "0.5rem 0.75rem", fontSize: "var(--font-table)", border: "none", borderBottom: @@ -205,5 +205,5 @@ const headerBtnStyle: React.CSSProperties = { cursor: "pointer", color: "var(--ctp-subtext1)", fontSize: "var(--font-table)", - padding: "0.25rem 0.4rem", + padding: "0.25rem 0.5rem", }; diff --git a/web/src/components/items/ItemTable.tsx b/web/src/components/items/ItemTable.tsx index 6caabbe..d178dd0 100644 --- a/web/src/components/items/ItemTable.tsx +++ b/web/src/components/items/ItemTable.tsx @@ -268,7 +268,7 @@ export function ItemTable({ @@ -159,7 +159,7 @@ export function ItemsToolbar({ ...toolBtnStyle, display: "inline-flex", alignItems: "center", - gap: "0.35rem", + gap: "0.25rem", }} title="Import CSV" > @@ -177,7 +177,7 @@ export function ItemsToolbar({ color: "var(--ctp-crust)", display: "inline-flex", alignItems: "center", - gap: "0.35rem", + gap: "0.25rem", }} > New @@ -191,7 +191,7 @@ const selectStyle: React.CSSProperties = { padding: "var(--d-input-py) var(--d-input-px)", backgroundColor: "var(--ctp-surface0)", border: "1px solid var(--ctp-surface1)", - borderRadius: "0.4rem", + borderRadius: "0.5rem", color: "var(--ctp-text)", fontSize: "var(--d-input-font)", }; @@ -200,7 +200,7 @@ const toolBtnStyle: React.CSSProperties = { padding: "var(--d-input-py) var(--d-input-px)", backgroundColor: "var(--ctp-surface1)", border: "none", - borderRadius: "0.375rem", + borderRadius: "0.25rem", color: "var(--ctp-text)", fontSize: "0.75rem", fontWeight: 500, diff --git a/web/src/components/items/MainTab.tsx b/web/src/components/items/MainTab.tsx index 57a6798..9eafec6 100644 --- a/web/src/components/items/MainTab.tsx +++ b/web/src/components/items/MainTab.tsx @@ -134,7 +134,7 @@ export function MainTab({ item, onReload, isEditor }: MainTabProps) { marginTop: "0.75rem", padding: "0.5rem", backgroundColor: "var(--ctp-surface0)", - borderRadius: "0.4rem", + borderRadius: "0.5rem", fontSize: "var(--font-body)", }} > @@ -177,7 +177,7 @@ export function MainTab({ item, onReload, isEditor }: MainTabProps) { display: "inline-flex", alignItems: "center", gap: "0.25rem", - padding: "0.15rem 0.5rem", + padding: "0.25rem 0.5rem", borderRadius: "1rem", backgroundColor: "rgba(203,166,247,0.15)", color: "var(--ctp-mauve)", @@ -208,11 +208,11 @@ export function MainTab({ item, onReload, isEditor }: MainTabProps) { value={addProject} onChange={(e) => setAddProject(e.target.value)} style={{ - padding: "0.15rem 0.25rem", + padding: "0.25rem 0.25rem", fontSize: "0.75rem", backgroundColor: "var(--ctp-surface0)", border: "1px solid var(--ctp-surface1)", - borderRadius: "0.375rem", + borderRadius: "0.25rem", color: "var(--ctp-text)", }} > @@ -229,12 +229,12 @@ export function MainTab({ item, onReload, isEditor }: MainTabProps) {