-
+
Important Account Emails
@@ -95,7 +95,7 @@ function UnsubscribeContent() {
return (
-
+
Successfully Unsubscribed
@@ -118,7 +118,7 @@ function UnsubscribeContent() {
return (
-
+
Email Preferences
@@ -206,7 +206,7 @@ export default function Unsubscribe() {
fallback={
-
Loading
+
Loading
Validating your unsubscribe link…
diff --git a/apps/sim/app/workspace/[workspaceId]/components/error/error.tsx b/apps/sim/app/workspace/[workspaceId]/components/error/error.tsx
index 392c085baae..13ae488488e 100644
--- a/apps/sim/app/workspace/[workspaceId]/components/error/error.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/components/error/error.tsx
@@ -43,10 +43,10 @@ export function ErrorShell({ title, description, icon, children }: ErrorShellPro
-
+
{title}
-
+
{description}
diff --git a/apps/sim/app/workspace/[workspaceId]/components/resource/resource-not-found.tsx b/apps/sim/app/workspace/[workspaceId]/components/resource/resource-not-found.tsx
index fa6007c8e02..bf99da51fa5 100644
--- a/apps/sim/app/workspace/[workspaceId]/components/resource/resource-not-found.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/components/resource/resource-not-found.tsx
@@ -19,7 +19,7 @@ export function ResourceNotFound({ icon: Icon, title, description }: ResourceNot
-
{title}
+
{title}
{description}
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/chart-preview.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/chart-preview.tsx
index c99164e58e0..762b82c0391 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/chart-preview.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/chart-preview.tsx
@@ -24,8 +24,8 @@ function ChartErrorCard({ message, content }: { message: string; content: string
return (
- chart
- {message}
+ chart
+ {message}
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.css b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.css
index 43e6809375e..43c821a2ce0 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.css
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.css
@@ -54,14 +54,14 @@
padding: 0.5rem 0.75rem;
text-align: left;
vertical-align: top;
- font-size: 14px;
+ font-size: var(--text-sm);
line-height: 1.5rem;
}
.rich-markdown-prose th,
.document-table th {
background: var(--surface-4);
- font-weight: 600;
+ font-weight: var(--font-weight-semibold);
}
/* Cell editors are invisible until focused: they take the cell's own typography and color. */
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.test.ts b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.test.ts
index fda1bbb36da..ff2c67485b5 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.test.ts
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/document-table.test.ts
@@ -141,8 +141,8 @@ describe('document-table chrome is shared with markdown tables', () => {
const { th, td } = mountTable('document-table')
expect(getComputedStyle(td).getPropertyValue('padding-left')).toBe('0.75rem')
- expect(getComputedStyle(td).getPropertyValue('font-size')).toBe('14px')
- expect(getComputedStyle(th).getPropertyValue('font-weight')).toBe('600')
+ expect(getComputedStyle(td).getPropertyValue('font-size')).toBe('var(--text-sm)')
+ expect(getComputedStyle(th).getPropertyValue('font-weight')).toBe('var(--font-weight-semibold)')
})
it('one rule draws the cell border for both roots', () => {
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/file-viewer.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/file-viewer.tsx
index 52407bbf750..c30a44d78d8 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/file-viewer.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/file-viewer.tsx
@@ -427,7 +427,7 @@ const MediaPreview = memo(function MediaPreview({
-
{file.name}
+
{file.name}
{blobUrl && (
// biome-ignore lint/a11y/useMediaCaption: audio from workspace files
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/mermaid-diagram.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/mermaid-diagram.tsx
index 10019822f72..81d2f981af1 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/mermaid-diagram.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/mermaid-diagram.tsx
@@ -49,9 +49,9 @@ function MermaidSourcePreview({
return (
-
mermaid
+
mermaid
{(isRendering || status) && (
-
+
{isRendering ? 'Rendering…' : status}
)}
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/pdf-viewer.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/pdf-viewer.tsx
index 598e330ca5a..3b255d082a1 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/pdf-viewer.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/pdf-viewer.tsx
@@ -43,7 +43,7 @@ interface PdfViewerCoreProps {
function PdfError({ error }: { error: string }) {
return (
-
Failed to preview PDF
+
Failed to preview PDF
{error}
)
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/preview-shared.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/preview-shared.tsx
index ed585e4c382..1b5ca5f1932 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/preview-shared.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/preview-shared.tsx
@@ -18,7 +18,7 @@ export const UnsupportedPreview = memo(function UnsupportedPreview({ name }: { n
return (
-
+
Preview not available{ext ? ` for .${ext} files` : ' for this file'}
@@ -31,7 +31,9 @@ export const UnsupportedPreview = memo(function UnsupportedPreview({ name }: { n
export function PreviewError({ label, error }: { label: string; error: string }) {
return (
-
Failed to preview {label}
+
+ Failed to preview {label}
+
{error}
)
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/link-mark-precedence.test.ts b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/link-mark-precedence.test.ts
index a2edbbae3e5..f5fae887e8f 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/link-mark-precedence.test.ts
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/link-mark-precedence.test.ts
@@ -102,11 +102,11 @@ describe('mark WRAPPING a link (`
text `) — link color still
})
describe('each mark keeps its own non-color styling even when link-colored', () => {
- it('bold link keeps font-weight 600', () => {
+ it('bold link keeps the central semibold weight', () => {
const root = mount('
bold link ')
const strong = root.querySelector('strong') as HTMLElement
expect(colorOf(strong)).toBe(LINK_COLOR)
- expect(getComputedStyle(strong).fontWeight).toBe('600')
+ expect(getComputedStyle(strong).fontWeight).toBe('var(--font-weight-semibold)')
})
it('italic link keeps font-style italic', () => {
@@ -144,7 +144,7 @@ describe('multiple marks stacked together with a link', () => {
expect(colorOf(em)).toBe(LINK_COLOR)
expect(colorOf(strong)).toBe(LINK_COLOR)
expect(getComputedStyle(em).fontStyle).toBe('italic')
- expect(getComputedStyle(strong).fontWeight).toBe('600')
+ expect(getComputedStyle(strong).fontWeight).toBe('var(--font-weight-semibold)')
})
it('bold + italic + strikethrough + link: link color wins at every nesting level', () => {
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/raw-markdown-snippet.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/raw-markdown-snippet.tsx
index ea4058895e7..0713cf189c4 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/raw-markdown-snippet.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/raw-markdown-snippet.tsx
@@ -3,7 +3,7 @@ import { NodeViewContent, NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap
import { FootnoteDef, RawHtmlBlock } from './raw-markdown-snippet-schema'
const BLOCK_CONTROL_CLASS =
- 'pointer-events-none absolute top-1.5 right-2 select-none rounded-md bg-[var(--surface-4)] px-1.5 py-0.5 text-[10px] text-[var(--text-muted)] uppercase tracking-wide opacity-0 transition-opacity group-focus-within:opacity-100 group-hover:opacity-100'
+ 'pointer-events-none absolute top-1.5 right-2 select-none rounded-md bg-[var(--surface-4)] px-1.5 py-0.5 text-micro text-[var(--text-muted)] uppercase tracking-wide opacity-0 transition-opacity group-focus-within:opacity-100 group-hover:opacity-100'
/** Badge text per block node type name — kept here rather than threaded through node options since
* {@link NodeViewProps} exposes no options/extension reference to the rendering component. */
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/rich-markdown-editor.css b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/rich-markdown-editor.css
index 3b6cc3f2b85..46a0d3c13d8 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/rich-markdown-editor.css
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/rich-markdown-editor.css
@@ -18,8 +18,8 @@
outline: none;
color: var(--text-primary);
font-family: var(--font-inter);
- font-size: 15px;
- font-weight: 400;
+ font-size: var(--text-base);
+ font-weight: var(--font-weight-normal);
line-height: 25px;
letter-spacing: 0;
overflow-wrap: anywhere;
@@ -73,7 +73,7 @@
.rich-markdown-prose h4,
.rich-markdown-prose h5,
.rich-markdown-prose h6 {
- font-weight: 600;
+ font-weight: var(--font-weight-semibold);
line-height: 1.3;
color: var(--text-primary);
}
@@ -117,7 +117,7 @@
* the surrounding color, not reset it; omitting `color` here lets normal CSS inheritance do that
* correctly in every context, including ones this file doesn't know about yet. */
.rich-markdown-prose strong {
- font-weight: 600;
+ font-weight: var(--font-weight-semibold);
}
.rich-markdown-prose em {
@@ -317,7 +317,7 @@
.rich-markdown-prose pre code {
background: none;
padding: 0;
- font-size: 13px;
+ font-size: var(--text-small);
line-height: 21px;
}
@@ -458,8 +458,8 @@
* set their own 600, so only body text and the placeholder are affected.
*/
.rich-markdown-field-prose {
- font-size: 14px;
- font-weight: 400;
+ font-size: var(--text-sm);
+ font-weight: var(--font-weight-normal);
line-height: 22px;
}
@@ -553,8 +553,8 @@
padding: 0.1rem 0.35rem;
border-radius: 2px 2px 2px 0;
/* 11px = the `text-xs` the canvas/tables presence tags use, for pixel parity. */
- font-size: 11px;
- font-weight: 500;
+ font-size: var(--text-xs);
+ font-weight: var(--font-weight-medium);
line-height: 1.2;
white-space: nowrap;
text-overflow: ellipsis;
diff --git a/apps/sim/app/workspace/[workspaceId]/files/files.tsx b/apps/sim/app/workspace/[workspaceId]/files/files.tsx
index 5c98c2aaeba..ec82f86e1dc 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/files.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/files.tsx
@@ -2060,7 +2060,7 @@ function FilesContent() {
Clear all filters
diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/chat-content/chat-content.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/chat-content/chat-content.tsx
index ef9edea0bc2..8ffbfe24157 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/chat-content/chat-content.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/chat-content/chat-content.tsx
@@ -58,7 +58,7 @@ const LANG_ALIASES: Record
= {
const PROSE_CLASSES = cn(
'prose prose-base dark:prose-invert max-w-none',
- 'font-[family-name:var(--font-inter)] antialiased break-words tracking-[0]',
+ 'font-inter antialiased break-words tracking-[0]',
'prose-headings:font-semibold prose-headings:tracking-[0] prose-headings:text-[var(--text-primary)]',
'prose-headings:mb-3 prose-headings:mt-6 first:prose-headings:mt-0',
'prose-p:text-base prose-p:leading-[25px] prose-p:text-[var(--text-primary)]',
diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/options/options.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/options/options.tsx
index 080edad2af7..33d543ace0e 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/options/options.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/options/options.tsx
@@ -15,7 +15,7 @@ export function Options({ items, onSelect }: OptionsProps) {
key={item.id}
type='button'
onClick={() => onSelect?.(item.id)}
- className='rounded-full border border-[var(--border)] bg-[var(--bg)] px-3.5 py-1.5 font-[family-name:var(--font-inter)] text-[var(--text-primary)] text-sm leading-5 transition-colors hover-hover:bg-[var(--surface-5)]'
+ className='rounded-full border border-[var(--border)] bg-[var(--bg)] px-3.5 py-1.5 font-inter text-[var(--text-primary)] text-sm leading-5 transition-colors hover-hover:bg-[var(--surface-5)]'
>
{item.label}
diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/message-content/message-content.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/message-content/message-content.tsx
index fdd9ed5c7ee..6f39702465d 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/components/message-content/message-content.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/home/components/message-content/message-content.tsx
@@ -1095,7 +1095,9 @@ function MessageContentInner({
<>
- Stopped by user
+
+ Stopped by user
+
{actions && {actionsRow}
}
>
diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-content/resource-content.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-content/resource-content.tsx
index 5b6560b4eae..ed9ac8e2711 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-content/resource-content.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-content/resource-content.tsx
@@ -669,7 +669,9 @@ function EmbeddedWorkflow({ workspaceId, workflowId }: EmbeddedWorkflowProps) {
-
Workflow not found
+
+ Workflow not found
+
This workflow may have been deleted or moved
@@ -732,7 +734,7 @@ function EmbeddedFile({
-
File not found
+
File not found
This file may have been deleted or moved
@@ -783,7 +785,7 @@ function EmbeddedFolder({ workspaceId, folderId }: EmbeddedFolderProps) {
-
Folder not found
+
Folder not found
This folder may have been deleted or moved
@@ -794,7 +796,7 @@ function EmbeddedFolder({ workspaceId, folderId }: EmbeddedFolderProps) {
return (
-
{folder.name}
+
{folder.name}
{folderWorkflows.length === 0 ? (
No workflows in this folder
) : (
@@ -841,7 +843,7 @@ function EmbeddedLog({ workspaceId, logId, onNotFound }: EmbeddedLogProps) {
-
Log not found
+
Log not found
This log may have been deleted or is no longer available
diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/user-input/components/constants.ts b/apps/sim/app/workspace/[workspaceId]/home/components/user-input/components/constants.ts
index 088064324b1..32cfd395b83 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/components/user-input/components/constants.ts
+++ b/apps/sim/app/workspace/[workspaceId]/home/components/user-input/components/constants.ts
@@ -59,12 +59,12 @@ export interface PlusMenuHandle {
* Box and typography shared by the textarea and its mirror overlay — both must
* produce identical line wrapping so the overlay text sits exactly over the
* (transparent) textarea text. The scale is the chat input's native prompt
- * scale (`text-[14px]`, `-0.015em` tracking); the task modal's body inherits it
+ * scale (`text-sm`, 14px at the default root, `-0.015em` tracking); the task modal's body inherits it
* so the editor reads the same whether it's the chat input or inside the modal.
*/
const FIELD_MIRROR_CLASSES = cn(
'm-0 box-border min-h-[24px] w-full [overflow-wrap:anywhere] border-0 bg-transparent',
- 'px-1 py-1 font-body text-[14px] leading-[24px] tracking-[-0.015em]'
+ 'px-1 py-1 font-body text-sm leading-[24px] tracking-[-0.015em]'
)
/**
diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/user-message-content/user-message-content.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/user-message-content/user-message-content.tsx
index d807f00a5be..67359e00939 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/components/user-message-content/user-message-content.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/home/components/user-message-content/user-message-content.tsx
@@ -8,10 +8,10 @@ import type { ChatMessageContext } from '@/app/workspace/[workspaceId]/home/type
import { getIntegrationMatcher } from '@/blocks/integration-matcher'
const USER_MESSAGE_CLASSES =
- 'whitespace-pre-wrap [overflow-wrap:anywhere] font-[family-name:var(--font-inter)] text-base text-[var(--text-primary)] leading-[23px] tracking-[0] antialiased'
+ 'whitespace-pre-wrap [overflow-wrap:anywhere] font-inter text-base text-[var(--text-primary)] leading-[23px] tracking-[0] antialiased'
const COMPACT_CLASSES =
- 'truncate text-small leading-[20px] font-[family-name:var(--font-inter)] text-[var(--text-primary)] tracking-[0] antialiased'
+ 'truncate text-small leading-[20px] font-inter text-[var(--text-primary)] tracking-[0] antialiased'
interface UserMessageContentProps {
content: string
diff --git a/apps/sim/app/workspace/[workspaceId]/home/home.tsx b/apps/sim/app/workspace/[workspaceId]/home/home.tsx
index be6316624d4..cc387d5367e 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/home.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/home/home.tsx
@@ -675,7 +675,7 @@ function HomeContent({ chatId, userName, userId }: HomeProps) {
{/* Asymmetric padding biases the group up so the full cluster (heading + input + suggestions) sits at the optical center */}
-
+
What should we get done{firstName ? `, ${firstName}` : ''}?
diff --git a/apps/sim/app/workspace/[workspaceId]/settings/components/admin/admin.tsx b/apps/sim/app/workspace/[workspaceId]/settings/components/admin/admin.tsx
index 77303d43160..cc03ba5be29 100644
--- a/apps/sim/app/workspace/[workspaceId]/settings/components/admin/admin.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/settings/components/admin/admin.tsx
@@ -445,7 +445,7 @@ export function Admin() {
setAdminParams((prev) => ({
offset: Math.max(0, prev.offset - PAGE_SIZE),
@@ -457,7 +457,7 @@ export function Admin() {
setAdminParams((prev) => ({ offset: prev.offset + PAGE_SIZE }))
}
diff --git a/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/run-status-control/run-status-control.tsx b/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/run-status-control/run-status-control.tsx
index b71c689b2ae..9ac898f6c0d 100644
--- a/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/run-status-control/run-status-control.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/run-status-control/run-status-control.tsx
@@ -38,12 +38,7 @@ export const RunStatusControl = memo(function RunStatusControl({
>
)}
-
+
{isStopping ? 'Stopping…' : 'Stop all'}
diff --git a/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-filter/table-filter.tsx b/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-filter/table-filter.tsx
index d069f93c6fa..6e110502e4d 100644
--- a/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-filter/table-filter.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-filter/table-filter.tsx
@@ -322,7 +322,7 @@ const FilterRuleRow = memo(function FilterRuleRow({
) : (
onToggleLogical(rule.id)}
- className='w-[42px] shrink-0 rounded-full py-0.5 text-right text-[10px] text-[var(--text-muted)] uppercase tracking-wide transition-colors hover:text-[var(--text-secondary)]'
+ className='w-[42px] shrink-0 rounded-full py-0.5 text-right text-[var(--text-muted)] text-micro uppercase tracking-wide transition-colors hover:text-[var(--text-secondary)]'
>
{rule.logicalOperator}
diff --git a/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-grid/table-grid.tsx b/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-grid/table-grid.tsx
index f040e922466..0578a08a50d 100644
--- a/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-grid/table-grid.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-grid/table-grid.tsx
@@ -4698,7 +4698,9 @@ export function TableGrid({
-
Table not found
+
+ Table not found
+
This table may have been deleted or moved
diff --git a/apps/sim/app/workspace/[workspaceId]/tables/components/import-progress-menu/import-progress-menu.tsx b/apps/sim/app/workspace/[workspaceId]/tables/components/import-progress-menu/import-progress-menu.tsx
index 070ec159db8..191cf06b34d 100644
--- a/apps/sim/app/workspace/[workspaceId]/tables/components/import-progress-menu/import-progress-menu.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/tables/components/import-progress-menu/import-progress-menu.tsx
@@ -64,7 +64,7 @@ export function ImportProgressMenu({ workspaceId, tableId }: ImportProgressMenuP
return (
-
+
{/* Aggregate state, mirroring the row iconography: spinner while anything runs, then
alert if any job failed, else a check. */}
{anyRunning ? (
diff --git a/apps/sim/app/workspace/[workspaceId]/upgrade/components/plan-card/plan-card.tsx b/apps/sim/app/workspace/[workspaceId]/upgrade/components/plan-card/plan-card.tsx
index c14dfdeeda4..90e13df381c 100644
--- a/apps/sim/app/workspace/[workspaceId]/upgrade/components/plan-card/plan-card.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/upgrade/components/plan-card/plan-card.tsx
@@ -78,13 +78,15 @@ export function UpgradePlanCard({
>
-
{name}
+ {name}
{bannerText && {bannerText} }
- {price}
+
+ {price}
+
{discountLabel && {discountLabel} }
{priceSubtext ?? '\u00A0'}
diff --git a/apps/sim/app/workspace/[workspaceId]/upgrade/upgrade.tsx b/apps/sim/app/workspace/[workspaceId]/upgrade/upgrade.tsx
index 7ec5cadb581..a69dd3eea4f 100644
--- a/apps/sim/app/workspace/[workspaceId]/upgrade/upgrade.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/upgrade/upgrade.tsx
@@ -192,7 +192,7 @@ export function Upgrade({ workspaceId }: UpgradeProps) {
-
+
{header}
{state.showUpgradePlans && (
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/chat/chat.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/chat/chat.tsx
index d6a91f24477..ab22cdac69f 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/chat/chat.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/chat/chat.tsx
@@ -131,7 +131,7 @@ function ChatFilePreview({ file, onRemove }: ChatFilePreviewProps) {
) : (
{file.name}
-
{formatFileSize(file.size)}
+
{formatFileSize(file.size)}
)}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/command-list/command-list.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/command-list/command-list.tsx
index 3d2e7e8b88a..f8cc36b1ef6 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/command-list/command-list.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/command-list/command-list.tsx
@@ -208,7 +208,7 @@ export function CommandList() {
{/* Right side: Keyboard Shortcut */}
⌘
@@ -216,7 +216,7 @@ export function CommandList() {
{shortcuts.map((shortcut) => (
{shortcut}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx
index 5f894cfc5f3..37a47029032 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx
@@ -854,7 +854,7 @@ export const Panel = memo(function Panel() {
{isCopilotTabAvailable && (
)}
- V
+ V
- E
+ E
{!isNoteBlock && (
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/sidebar-footer/sidebar-footer.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/sidebar-footer/sidebar-footer.tsx
index 1da14a9bf22..8896f96f435 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/sidebar-footer/sidebar-footer.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/sidebar-footer/sidebar-footer.tsx
@@ -155,7 +155,7 @@ export function SidebarFooter({
/>
) : (
{name.charAt(0).toUpperCase()}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx
index 02d119714c3..8ef6f8ef7ab 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx
@@ -1560,7 +1560,7 @@ export const Sidebar = memo(function Sidebar() {
}
onKeyDown={chatFlyoutRename.handleKeyDown}
onBlur={handleChatRenameBlur}
- className='min-w-0 flex-1 border-none bg-transparent text-[14px] text-[var(--text-body)] outline-hidden'
+ className='min-w-0 flex-1 border-none bg-transparent text-[var(--text-body)] text-sm leading-[inherit] outline-hidden'
/>
)
diff --git a/apps/sim/components/auth/public-auth-header.tsx b/apps/sim/components/auth/public-auth-header.tsx
index d3f1fa8a5d7..31c151205a9 100644
--- a/apps/sim/components/auth/public-auth-header.tsx
+++ b/apps/sim/components/auth/public-auth-header.tsx
@@ -9,7 +9,7 @@ interface PublicAuthHeaderProps {
export function PublicAuthHeader({ title, description }: PublicAuthHeaderProps) {
return (
-
+
{title}
diff --git a/apps/sim/components/emails/_styles/base.tokens.test.ts b/apps/sim/components/emails/_styles/base.tokens.test.ts
index 5e607c8553a..18a44579376 100644
--- a/apps/sim/components/emails/_styles/base.tokens.test.ts
+++ b/apps/sim/components/emails/_styles/base.tokens.test.ts
@@ -79,9 +79,9 @@ describe('email type scale mirrors the globals.css @theme scale', () => {
)
})
- it('sm is Tailwind stock 14px — the size text-sm resolves to in chip chrome', () => {
+ it('sm adopts Tailwind stock 0.875rem, matching 14px email text at the default root', () => {
expect(typography.fontSize.sm).toBe('14px')
- expect(tailwindFontSize.sm).toBeUndefined()
+ expect(tailwindFontSize.sm).toBe('0.875rem')
expect(chipGeometryClass).toContain('text-sm')
})
diff --git a/apps/sim/components/ui/thinking-loader.module.css b/apps/sim/components/ui/thinking-loader.module.css
index 52703157b5e..8a884235143 100644
--- a/apps/sim/components/ui/thinking-loader.module.css
+++ b/apps/sim/components/ui/thinking-loader.module.css
@@ -85,14 +85,14 @@
is 400, never medium. */
.label {
composes: shimmer from "./shimmer-text.module.css";
- font-size: var(--tl-label-size, 14px);
- font-weight: 400;
+ font-size: var(--tl-label-size, var(--text-sm));
+ font-weight: var(--font-weight-normal);
}
/* Static label (shimmer off): the phrase in solid body ink, no gradient sweep. */
.labelStatic {
- font-size: var(--tl-label-size, 14px);
- font-weight: 400;
+ font-size: var(--tl-label-size, var(--text-sm));
+ font-weight: var(--font-weight-normal);
color: var(--text-body);
}
diff --git a/apps/sim/ee/sso/components/sso-form.tsx b/apps/sim/ee/sso/components/sso-form.tsx
index 5bc2e346594..9d9f39d10d1 100644
--- a/apps/sim/ee/sso/components/sso-form.tsx
+++ b/apps/sim/ee/sso/components/sso-form.tsx
@@ -237,7 +237,7 @@ function SSOFormContent({
{emailEnabled && (
<>
-
+
@@ -259,7 +259,7 @@ function SSOFormContent({
)}
{emailEnabled && !registrationDisabled && (
-
+
Don't have an account?
{
['text-base text-md', 'text-md'],
['text-md text-base', 'text-base'],
['text-small text-md text-micro', 'text-micro'],
+ ['text-sm text-title', 'text-title'],
+ ['text-title-lg text-xl', 'text-xl'],
+ ['text-title text-title-lg text-display', 'text-display'],
])('%s -> %s', (input, expected) => {
expect(cn(input)).toBe(expected)
})
- it('keeps a font size and a text colour together', () => {
- expect(cn('text-small text-[var(--text-body)]')).toBe('text-small text-[var(--text-body)]')
- })
+ it.each(['small', 'title', 'title-lg', 'display'])(
+ 'keeps text-%s and a text colour together in either order',
+ (size) => {
+ const fontSize = `text-${size}`
+ const colour = 'text-[var(--text-body)]'
+ expect(cn(fontSize, colour)).toBe(`${fontSize} ${colour}`)
+ expect(cn(colour, fontSize)).toBe(`${colour} ${fontSize}`)
+ }
+ )
it('conflicts an arbitrary size with a named one', () => {
expect(cn('text-[13px] text-small')).toBe('text-small')
diff --git a/packages/emcn/src/lib/cn.ts b/packages/emcn/src/lib/cn.ts
index 44b68c24039..63f87a80c53 100644
--- a/packages/emcn/src/lib/cn.ts
+++ b/packages/emcn/src/lib/cn.ts
@@ -14,7 +14,7 @@ import { extendTailwindMerge } from 'tailwind-merge'
const twMerge = extendTailwindMerge({
extend: {
classGroups: {
- 'font-size': [{ text: ['micro', 'caption', 'small', 'md'] }],
+ 'font-size': [{ text: ['micro', 'caption', 'small', 'md', 'title', 'title-lg', 'display'] }],
},
},
})
diff --git a/packages/workflow-renderer/src/note/note-block-view.tsx b/packages/workflow-renderer/src/note/note-block-view.tsx
index d47a556d391..90c3a8a9523 100644
--- a/packages/workflow-renderer/src/note/note-block-view.tsx
+++ b/packages/workflow-renderer/src/note/note-block-view.tsx
@@ -1017,7 +1017,7 @@ export function NoteBlockView({
}
}}
className={cn(
- 'nodrag nopan nowheel h-7 w-full min-w-0 select-text border-none bg-transparent px-0 text-[17px] text-current caret-current outline-hidden focus-visible:outline-hidden',
+ 'nodrag nopan nowheel h-7 w-full min-w-0 select-text border-none bg-transparent px-0 text-current text-md caret-current outline-hidden focus-visible:outline-hidden',
colorOption.selectionClassName,
!isEnabled && 'opacity-50'
)}
@@ -1033,14 +1033,14 @@ export function NoteBlockView({
!isEnabled && 'opacity-50'
)}
>
-
+
{renderMarkedName(name ?? '', nameSearchRange)}
) : (
{renderMarkedName(name ?? '', nameSearchRange)}
diff --git a/packages/workflow-renderer/src/subflow/subflow-node-view.tsx b/packages/workflow-renderer/src/subflow/subflow-node-view.tsx
index 4886960c4fb..8fe376b8a8e 100644
--- a/packages/workflow-renderer/src/subflow/subflow-node-view.tsx
+++ b/packages/workflow-renderer/src/subflow/subflow-node-view.tsx
@@ -620,7 +620,7 @@ export function SubflowNodeView({
>
diff --git a/packages/workflow-renderer/src/workflow-block/workflow-block-view.tsx b/packages/workflow-renderer/src/workflow-block/workflow-block-view.tsx
index cae87070f2f..8cd8d87a2ce 100644
--- a/packages/workflow-renderer/src/workflow-block/workflow-block-view.tsx
+++ b/packages/workflow-renderer/src/workflow-block/workflow-block-view.tsx
@@ -772,7 +772,7 @@ export function WorkflowBlockView({
diff --git a/packages/workflow-renderer/src/workflow-type.tsx b/packages/workflow-renderer/src/workflow-type.tsx
index 22ed75db83e..80f8f11b9c9 100644
--- a/packages/workflow-renderer/src/workflow-type.tsx
+++ b/packages/workflow-renderer/src/workflow-type.tsx
@@ -169,7 +169,7 @@ export function BlockTileView({
/>
) : (
fallbackLabel && (
- {fallbackLabel}
+ {fallbackLabel}
)
)}