feat(app): align interface typography to base size

Treat the appearance setting as the rendered base size so the type ramp scales predictably. Native starts one pixel larger while web and desktop preserve the authored 14px base, with legacy values migrated on load.
This commit is contained in:
Mohamed Boudra
2026-08-17 22:55:46 +02:00
parent df3e646fbe
commit 5ec26f0c09
171 changed files with 709 additions and 645 deletions
@@ -228,8 +228,8 @@ const styles = StyleSheet.create((theme) => ({
opacity: 0.6,
},
splitButtonText: {
fontSize: theme.fontSize.sm,
lineHeight: theme.fontSize.sm * 1.5,
fontSize: theme.fontSize.base,
lineHeight: theme.fontSize.base * 1.5,
color: theme.colors.foreground,
fontWeight: theme.fontWeight.normal,
},
@@ -77,7 +77,7 @@ const styles = StyleSheet.create((theme) => ({
gap: theme.spacing[1],
},
shortSha: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontFamily: theme.fontFamily.mono,
color: theme.colors.foregroundMuted,
width: 70,
@@ -86,12 +86,12 @@ const styles = StyleSheet.create((theme) => ({
subject: {
flex: 1,
minWidth: 0,
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
color: theme.colors.foreground,
},
timestamp: {
flexShrink: 0,
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
caret: {
@@ -180,11 +180,11 @@ const styles = StyleSheet.create((theme) => ({
transform: [{ rotate: "90deg" }],
},
title: {
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
color: theme.colors.foreground,
},
count: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
flex: 1,
},
@@ -203,11 +203,11 @@ const styles = StyleSheet.create((theme) => ({
paddingBottom: theme.spacing[2],
},
noWorkspaceCommitsText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
errorRow: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.statusDanger,
paddingLeft: theme.spacing[2],
paddingRight: theme.spacing[3],
+1 -1
View File
@@ -214,7 +214,7 @@ const styles = StyleSheet.create((theme: Theme) => ({
gap: theme.spacing[1],
},
folderName: {
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
fontWeight: theme.fontWeight.normal,
color: theme.colors.foreground,
flexShrink: 1,
+6 -6
View File
@@ -1540,8 +1540,8 @@ const styles = StyleSheet.create((theme) => ({
backgroundColor: theme.colors.surface2,
},
diffStatusText: {
fontSize: theme.fontSize.xs,
lineHeight: theme.fontSize.xs * 1.25,
fontSize: theme.fontSize.sm,
lineHeight: theme.fontSize.sm * 1.25,
color: theme.colors.foregroundMuted,
},
diffStatusIconHidden: {
@@ -1588,7 +1588,7 @@ const styles = StyleSheet.create((theme) => ({
actionErrorText: {
paddingHorizontal: theme.spacing[3],
paddingBottom: theme.spacing[1],
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.destructive,
},
forgeSetupCallout: {
@@ -1602,7 +1602,7 @@ const styles = StyleSheet.create((theme) => ({
backgroundColor: theme.colors.surface1,
},
forgeSetupCalloutText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
diffContainer: {
@@ -1651,11 +1651,11 @@ const styles = StyleSheet.create((theme) => ({
paddingTop: theme.spacing[16],
},
emptyText: {
fontSize: theme.fontSize.lg,
fontSize: theme.fontSize.base,
color: theme.colors.foregroundMuted,
},
tooltipText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foreground,
},
}));
@@ -43,7 +43,7 @@ const styles = StyleSheet.create((theme) => ({
},
description: {
color: theme.colors.foregroundMuted,
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
textAlign: "center",
},
}));
+3 -3
View File
@@ -382,7 +382,7 @@ const styles = StyleSheet.create((theme) => ({
justifyContent: "center",
},
name: {
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
fontWeight: theme.fontWeight.normal,
color: theme.colors.foreground,
flexShrink: 1,
@@ -390,7 +390,7 @@ const styles = StyleSheet.create((theme) => ({
userSelect: "none",
},
directory: {
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
fontWeight: theme.fontWeight.normal,
color: theme.colors.foregroundMuted,
flex: 1,
@@ -398,5 +398,5 @@ const styles = StyleSheet.create((theme) => ({
userSelect: "none",
},
directorySpacer: { flex: 1, minWidth: 0 },
tooltip: { color: theme.colors.popoverForeground, fontSize: theme.fontSize.sm },
tooltip: { color: theme.colors.popoverForeground, fontSize: theme.fontSize.base },
}));
+2 -2
View File
@@ -294,7 +294,7 @@ const styles = StyleSheet.create((theme) => ({
gap: theme.spacing[1],
},
approvalsText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
hoverable: {
@@ -309,7 +309,7 @@ const styles = StyleSheet.create((theme) => ({
paddingBottom: theme.spacing[1],
},
pipelineStageName: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.medium,
color: theme.colors.foregroundMuted,
textTransform: "uppercase",
@@ -253,12 +253,12 @@ const styles = StyleSheet.create((theme) => ({
gap: theme.spacing[0.5],
},
headline: {
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
fontWeight: theme.fontWeight.medium,
color: theme.colors.foreground,
},
detail: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
list: {
@@ -276,7 +276,7 @@ const styles = StyleSheet.create((theme) => ({
paddingBottom: theme.spacing[1],
},
groupLabel: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.medium,
color: theme.colors.foregroundMuted,
},
@@ -32,7 +32,7 @@ const styles = StyleSheet.create((theme) => ({
backgroundColor: theme.colors.surfaceSidebar,
},
message: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
textAlign: "center",
},
@@ -82,7 +82,7 @@ const styles = StyleSheet.create((theme) => ({
paddingVertical: theme.spacing[2],
},
sectionTitle: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.medium,
color: theme.colors.foregroundMuted,
paddingHorizontal: theme.spacing[3],
@@ -1202,27 +1202,27 @@ const styles = StyleSheet.create((theme) => ({
minHeight: 16,
},
stateLabelOpen: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.statusSuccess,
},
stateLabelDraft: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.foregroundMuted,
},
stateLabelMerged: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.statusMerged,
},
stateLabelClosed: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.statusDanger,
},
repoRef: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
flexShrink: 1,
marginLeft: theme.spacing[1],
@@ -1299,7 +1299,7 @@ const styles = StyleSheet.create((theme) => ({
gap: theme.spacing[1],
},
filterHiddenCount: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
eventRow: {
@@ -1330,7 +1330,7 @@ const styles = StyleSheet.create((theme) => ({
gap: theme.spacing[2],
},
authorText: {
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
fontWeight: theme.fontWeight.normal,
color: theme.colors.foreground,
flexShrink: 1,
@@ -1341,19 +1341,19 @@ const styles = StyleSheet.create((theme) => ({
gap: theme.spacing[1],
},
verbMuted: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
verbSuccess: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.statusSuccess,
},
verbDanger: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.statusDanger,
},
ageText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
kebabSlot: {
@@ -1407,7 +1407,7 @@ const styles = StyleSheet.create((theme) => ({
backgroundColor: theme.colors.surface1,
},
threadPath: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontFamily: theme.fontFamily.mono,
color: theme.colors.foreground,
flexShrink: 1,
@@ -101,7 +101,7 @@ export const sectionKitStyles = StyleSheet.create((theme) => ({
paddingVertical: theme.spacing[2],
},
sectionTitle: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.medium,
color: theme.colors.foregroundMuted,
},
@@ -120,27 +120,27 @@ export const sectionKitStyles = StyleSheet.create((theme) => ({
gap: 3,
},
summaryPillSuccessText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.statusSuccess,
},
summaryPillDangerText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.statusDanger,
},
summaryPillWarningText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.statusWarning,
},
summaryPillMutedText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
fontWeight: theme.fontWeight.normal,
color: theme.colors.foregroundMuted,
},
emptyText: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
paddingHorizontal: theme.spacing[3],
paddingVertical: theme.spacing[2],
@@ -157,13 +157,13 @@ export const sectionKitStyles = StyleSheet.create((theme) => ({
height: CONTROL_HEIGHTS.compact,
},
checkName: {
fontSize: theme.fontSize.sm,
fontSize: theme.fontSize.base,
fontWeight: theme.fontWeight.normal,
color: theme.colors.foreground,
flexShrink: 1,
},
checkWorkflow: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
flexShrink: 1,
},
@@ -174,7 +174,7 @@ export const sectionKitStyles = StyleSheet.create((theme) => ({
gap: theme.spacing[2],
},
checkDuration: {
fontSize: theme.fontSize.xs,
fontSize: theme.fontSize.sm,
color: theme.colors.foregroundMuted,
},
}));