diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx index 06e06b83ead..91eeb72f972 100644 --- a/apps/docs/app/layout.tsx +++ b/apps/docs/app/layout.tsx @@ -8,8 +8,6 @@ export default function RootLayout({ children }: { children: ReactNode }) { export const viewport: Viewport = { width: 'device-width', initialScale: 1, - maximumScale: 1, - userScalable: false, themeColor: [ { media: '(prefers-color-scheme: light)', color: '#ffffff' }, { media: '(prefers-color-scheme: dark)', color: '#0c0c0c' }, diff --git a/apps/sim/app/(auth)/auth-layout-client.tsx b/apps/sim/app/(auth)/auth-layout-client.tsx index fe4c524ecab..3aee420922f 100644 --- a/apps/sim/app/(auth)/auth-layout-client.tsx +++ b/apps/sim/app/(auth)/auth-layout-client.tsx @@ -14,8 +14,8 @@ export default function AuthLayoutClient({ children }: { children: React.ReactNo return ( -
-
+
+
diff --git a/apps/sim/app/(auth)/components/auth-background.tsx b/apps/sim/app/(auth)/components/auth-background.tsx index 1291c151de8..dc284dbd66e 100644 --- a/apps/sim/app/(auth)/components/auth-background.tsx +++ b/apps/sim/app/(auth)/components/auth-background.tsx @@ -9,7 +9,7 @@ type AuthBackgroundProps = { export default function AuthBackground({ className, children }: AuthBackgroundProps) { return (
-
+
{children}
diff --git a/apps/sim/app/(auth)/components/branded-button.tsx b/apps/sim/app/(auth)/components/branded-button.tsx index 245cd7c9c6e..9f1756627e5 100644 --- a/apps/sim/app/(auth)/components/branded-button.tsx +++ b/apps/sim/app/(auth)/components/branded-button.tsx @@ -55,9 +55,9 @@ export const BrandedButton = forwardRef( onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} className={cn( - 'group inline-flex h-[32px] items-center justify-center gap-[8px] rounded-[5px] border px-[10px] font-[430] font-season text-[14px] transition-colors disabled:cursor-not-allowed disabled:opacity-50', + 'group inline-flex h-[32px] items-center justify-center gap-2 rounded-[5px] border px-2.5 font-[430] font-season text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50', !hasCustomColor && - 'border-[#FFFFFF] bg-[#FFFFFF] text-black hover:border-[#E0E0E0] hover:bg-[#E0E0E0]', + 'border-[var(--white)] bg-[var(--white)] text-black hover:border-[var(--border-1)] hover:bg-[var(--border-1)]', fullWidth && 'w-full', className )} diff --git a/apps/sim/app/(auth)/components/sso-login-button.tsx b/apps/sim/app/(auth)/components/sso-login-button.tsx index c373942becb..e8e25955efc 100644 --- a/apps/sim/app/(auth)/components/sso-login-button.tsx +++ b/apps/sim/app/(auth)/components/sso-login-button.tsx @@ -35,7 +35,7 @@ export function SSOLoginButton({ const primaryBtnClasses = cn( primaryClassName || 'branded-button-gradient', - 'flex w-full items-center justify-center gap-2 rounded-[10px] border font-medium text-[15px] text-white transition-all duration-200' + 'flex w-full items-center justify-center gap-2 rounded-[10px] border font-medium text-base text-white transition-all duration-200' ) const outlineBtnClasses = cn('w-full rounded-[10px]') diff --git a/apps/sim/app/(auth)/components/status-page-layout.tsx b/apps/sim/app/(auth)/components/status-page-layout.tsx index 7e353e0f19d..3929a564618 100644 --- a/apps/sim/app/(auth)/components/status-page-layout.tsx +++ b/apps/sim/app/(auth)/components/status-page-layout.tsx @@ -20,8 +20,8 @@ export function StatusPageLayout({ }: StatusPageLayoutProps) { return ( -
-
+
+
@@ -31,7 +31,7 @@ export function StatusPageLayout({

{title}

-

+

{description}

diff --git a/apps/sim/app/(auth)/components/support-footer.tsx b/apps/sim/app/(auth)/components/support-footer.tsx index 5b9dc64fba2..6ccb0a82011 100644 --- a/apps/sim/app/(auth)/components/support-footer.tsx +++ b/apps/sim/app/(auth)/components/support-footer.tsx @@ -11,12 +11,12 @@ export function SupportFooter({ position = 'fixed' }: SupportFooterProps) { return (
Need help?{' '} Contact support diff --git a/apps/sim/app/(auth)/login/login-form.tsx b/apps/sim/app/(auth)/login/login-form.tsx index 9dd5cc78dbc..a6ad383556f 100644 --- a/apps/sim/app/(auth)/login/login-form.tsx +++ b/apps/sim/app/(auth)/login/login-form.tsx @@ -356,7 +356,7 @@ export default function LoginPage({

Sign in

-

+

Enter your details

@@ -374,7 +374,7 @@ export default function LoginPage({ {/* Password reset success message */} {resetSuccessMessage && ( -
+

{resetSuccessMessage}

)} @@ -387,29 +387,41 @@ export default function LoginPage({
- 0 && - 'border-red-500 focus:border-red-500' - )} - /> - {showEmailValidationError && emailErrors.length > 0 && ( -
- {emailErrors.map((error, index) => ( -

{error}

- ))} +
+ 0 && + 'border-red-500 focus:border-red-500' + )} + /> +
0 + ? 'grid-rows-[1fr]' + : 'grid-rows-[0fr]' + )} + aria-live='polite' + > +
+
+ {emailErrors.map((error, index) => ( +

{error}

+ ))} +
+
- )} +
@@ -417,46 +429,58 @@ export default function LoginPage({
- + 0 && + 'border-red-500 focus:border-red-500' + )} + /> + +
+
0 && - 'border-red-500 focus:border-red-500' + 'absolute right-0 left-0 z-10 grid transition-[grid-template-rows] duration-200 ease-out', + showValidationError && passwordErrors.length > 0 + ? 'grid-rows-[1fr]' + : 'grid-rows-[0fr]' )} - /> - -
- {showValidationError && passwordErrors.length > 0 && ( -
- {passwordErrors.map((error, index) => ( -

{error}

- ))} +
+
+ {passwordErrors.map((error, index) => ( +

{error}

+ ))} +
+
- )} +
@@ -465,6 +489,7 @@ export default function LoginPage({ disabled={isLoading} loading={isLoading} loadingText='Signing in' + className='!mt-6' > Sign in @@ -475,10 +500,12 @@ export default function LoginPage({ {showDivider && (
-
+
- Or continue with + + Or continue with +
)} @@ -504,24 +531,24 @@ export default function LoginPage({ {/* Only show signup link if email/password signup is enabled */} {!isFalsy(getEnv('NEXT_PUBLIC_EMAIL_PASSWORD_SIGNUP_ENABLED')) && ( -
+
Don't have an account? Sign up
)} -
+
By signing in, you agree to our{' '} Terms of Service {' '} @@ -530,7 +557,7 @@ export default function LoginPage({ href='/privacy' target='_blank' rel='noopener noreferrer' - className='text-[#999] underline-offset-4 transition hover:text-[#ECECEC] hover:underline' + className='text-[var(--text-subtle)] underline-offset-4 transition hover:text-[var(--landing-text)] hover:underline' > Privacy Policy @@ -558,17 +585,33 @@ export default function LoginPage({ resetStatus.type === 'error' && 'border-red-500 focus:border-red-500' )} /> - {resetStatus.type === 'error' && ( -
-

{resetStatus.message}

+
+
+
+

{resetStatus.message}

+
- )} +
- {resetStatus.type === 'success' && ( -
-

{resetStatus.message}

+
+
+
+

{resetStatus.message}

+
- )} +
Authorize Application -

+

Loading application details...

@@ -145,7 +145,7 @@ export default function OAuthConsentPage() {

Authorization Error

-

+

{error}

@@ -170,11 +170,11 @@ export default function OAuthConsentPage() { className='rounded-[10px]' /> ) : ( -
+
{(clientName ?? '?').charAt(0).toUpperCase()}
)} - + Sim Authorize Application -

- {clientName} is requesting access to - your account +

+ {clientName} is requesting + access to your account

{session?.user && ( -
+
{session.user.image ? ( ) : ( -
+
{(session.user.name ?? session.user.email ?? '?').charAt(0).toUpperCase()}
)}
{session.user.name && ( -

{session.user.name}

+

{session.user.name}

)} -

{session.user.email}

+

{session.user.email}

@@ -229,10 +229,13 @@ export default function OAuthConsentPage() { {scopes.length > 0 && (
-

This will allow the application to:

+

This will allow the application to:

    {scopes.map((s) => ( -
  • +
  • {SCOPE_DESCRIPTIONS[s] ?? s}
  • diff --git a/apps/sim/app/(auth)/reset-password/reset-password-content.tsx b/apps/sim/app/(auth)/reset-password/reset-password-content.tsx index a48eedc5f8a..9cca124e3f5 100644 --- a/apps/sim/app/(auth)/reset-password/reset-password-content.tsx +++ b/apps/sim/app/(auth)/reset-password/reset-password-content.tsx @@ -72,7 +72,7 @@ function ResetPasswordContent() {

    Reset your password

    -

    +

    Enter a new password for your account

@@ -87,10 +87,10 @@ function ResetPasswordContent() { />
-
+
Back to login diff --git a/apps/sim/app/(auth)/reset-password/reset-password-form.tsx b/apps/sim/app/(auth)/reset-password/reset-password-form.tsx index 8f5ef10aafc..c017326f590 100644 --- a/apps/sim/app/(auth)/reset-password/reset-password-form.tsx +++ b/apps/sim/app/(auth)/reset-password/reset-password-form.tsx @@ -46,7 +46,7 @@ export function RequestResetForm({ disabled={isSubmitting} required /> -

+

We'll send a password reset link to this email address.

@@ -54,7 +54,10 @@ export function RequestResetForm({ {/* Status message display */} {statusType && statusMessage && (

{statusMessage}

@@ -162,7 +165,7 @@ export function SetNewPasswordForm({ +
+
+ {showEmailValidationError && emailErrors.length > 0 ? ( + emailErrors.map((error, index) =>

{error}

) + ) : emailError && !showEmailValidationError ? ( +

{emailError}

+ ) : null} +
+
+
+
+
+
+
+
- {showValidationError && passwordErrors.length > 0 && ( -
- {passwordErrors.map((error, index) => ( -

{error}

- ))} +
+
+ 0 && + 'border-red-500 focus:border-red-500' + )} + /> + +
+
0 + ? 'grid-rows-[1fr]' + : 'grid-rows-[0fr]' + )} + aria-live='polite' + > +
+
+ {passwordErrors.map((error, index) => ( +

{error}

+ ))} +
+
- )} +
@@ -458,6 +492,7 @@ function SignupFormContent({ disabled={isLoading} loading={isLoading} loadingText='Creating account' + className='!mt-6' > Create account @@ -476,10 +511,12 @@ function SignupFormContent({ })() && (
-
+
- Or continue with + + Or continue with +
)} @@ -514,23 +551,23 @@ function SignupFormContent({
)} -
+
Already have an account? Sign in
-
+
By creating an account, you agree to our{' '} Terms of Service {' '} @@ -539,7 +576,7 @@ function SignupFormContent({ href='/privacy' target='_blank' rel='noopener noreferrer' - className='text-[#999] underline-offset-4 transition hover:text-[#ECECEC] hover:underline' + className='text-[var(--text-subtle)] underline-offset-4 transition hover:text-[var(--landing-text)] hover:underline' > Privacy Policy diff --git a/apps/sim/app/(auth)/verify/verify-content.tsx b/apps/sim/app/(auth)/verify/verify-content.tsx index 392811ff2ed..53821a8d37f 100644 --- a/apps/sim/app/(auth)/verify/verify-content.tsx +++ b/apps/sim/app/(auth)/verify/verify-content.tsx @@ -62,7 +62,7 @@ function VerificationForm({

{isVerified ? 'Email Verified!' : 'Verify Your Email'}

-

+

{isVerified ? 'Your email has been verified. Redirecting to dashboard...' : !isEmailVerificationEnabled @@ -78,7 +78,7 @@ function VerificationForm({ {!isVerified && isEmailVerificationEnabled && (

-

+

Enter the 6-digit code to verify your account. {hasEmailService ? " If you don't see it in your inbox, check your spam folder." : ''}

@@ -122,15 +122,16 @@ function VerificationForm({ {hasEmailService && (
-

+

Didn't receive a code?{' '} {countdown > 0 ? ( - Resend in {countdown}s + Resend in{' '} + {countdown}s ) : (

)} -
+
@@ -166,8 +167,8 @@ function VerificationFormFallback() { return (
-
-
+
+
) diff --git a/apps/sim/app/(home)/components/collaboration/collaboration.tsx b/apps/sim/app/(home)/components/collaboration/collaboration.tsx index e9e760a8525..0ab87a49645 100644 --- a/apps/sim/app/(home)/components/collaboration/collaboration.tsx +++ b/apps/sim/app/(home)/components/collaboration/collaboration.tsx @@ -25,7 +25,7 @@ function DotGrid({ className, cols, rows, gap = 0 }: DotGridProps) { }} > {Array.from({ length: cols * rows }, (_, i) => ( -
+
))}
) @@ -89,7 +89,7 @@ function VikhyathCursor() {
-
+
Vikhyath
@@ -113,7 +113,7 @@ function AlexaCursor() {
-
+
Alexa
@@ -143,7 +143,7 @@ function YouCursor({ x, y, visible }: YouCursorProps) { -
+
You
@@ -212,7 +212,7 @@ export default function Collaboration() { ref={sectionRef} id='collaboration' aria-labelledby='collaboration-heading' - className='bg-[#1C1C1C]' + className='bg-[var(--landing-bg)]' style={{ cursor: isHovering ? 'none' : 'auto' }} onMouseMove={handleMouseMove} onMouseEnter={handleMouseEnter} @@ -222,7 +222,7 @@ export default function Collaboration() {
@@ -1126,14 +1126,14 @@ function PreviewEditorContent({ if (!blockConfig) { return (
-
-
- +
+
+ {block.name || 'Unknown Block'}
-
-

Block configuration not found.

+
+

Block configuration not found.

) @@ -1180,10 +1180,10 @@ function PreviewEditorContent({ return (
{/* Header - styled like editor */} -
+
{block.type !== 'note' && (
)} - + {block.name || blockConfig.name} {onClose && ( - )} @@ -1209,7 +1209,7 @@ function PreviewEditorContent({
{/* Not Executed Banner - shown when in execution mode but block wasn't executed */} {isBlockNotExecuted && ( -
+
Not Executed @@ -1220,14 +1220,14 @@ function PreviewEditorContent({ {/* Execution Status & Duration Header */} {executionData && (executionData.status || executionData.durationMs !== undefined) && ( -
+
{executionData.status && ( {executionData.status} )} {executionData.durationMs !== undefined && ( - + {formatDuration(executionData.durationMs, { precision: 2 })} )} @@ -1253,7 +1253,7 @@ function PreviewEditorContent({ {/* Action buttons overlay */} {!isSearchActive && ( -
+
@@ -1323,7 +1323,7 @@ function PreviewEditorContent({ code={formatValueAsJson(executionData.output)} language='json' className={cn( - '!bg-[var(--surface-3)] max-h-[300px] min-h-0 max-w-full rounded-[6px] border-0 [word-break:break-all]', + '!bg-[var(--surface-3)] max-h-[300px] min-h-0 max-w-full rounded-md border-0 [word-break:break-all]', executionData.status === 'error' && 'text-[var(--text-error)]' )} wrapText={wrapText} @@ -1333,7 +1333,7 @@ function PreviewEditorContent({ /> {/* Action buttons overlay */} {!isSearchActive && ( -
+
@@ -1380,12 +1380,12 @@ function PreviewEditorContent({ {/* Workflow Preview - only for workflow blocks with a selected child workflow */} {isWorkflowBlock && childWorkflowId && ( -
+
-
+
Workflow Preview
-
+
{resolvedIsLoadingChildWorkflow ? (
{isExecutionMode && onDrillDown ? ( @@ -1434,7 +1434,7 @@ function PreviewEditorContent({ ) : (
- + {isBlockNotExecuted ? 'Not Executed' : isMissingChildWorkflow @@ -1445,7 +1445,7 @@ function PreviewEditorContent({ )}
-
+
+
{visibleSubBlocks.length > 0 ? (
@@ -1476,7 +1476,7 @@ function PreviewEditorContent({ disabled={true} /> {index < visibleSubBlocks.length - 1 && ( -
+
) : ( -
-

+

+

No configurable fields for this block.

@@ -1521,7 +1521,7 @@ function PreviewEditorContent({ {/* Search Overlay */} {isSearchActive && (
e.stopPropagation()} > setSearchQuery(e.target.value)} placeholder='Search...' - className='mr-[2px] h-[23px] w-[94px] text-[12px]' + className='mr-0.5 h-[23px] w-[94px] text-caption' /> 0 ? 'text-[var(--text-secondary)]' : 'text-[var(--text-tertiary)]' )} > diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/preview/components/preview-workflow/components/block/block.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/preview/components/preview-workflow/components/block/block.tsx index a55934a0e29..7f0ea834440 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/preview/components/preview-workflow/components/block/block.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/preview/components/preview-workflow/components/block/block.tsx @@ -29,8 +29,8 @@ interface SubBlockValueEntry { * Extracted to avoid recreating style objects on each render. */ const HANDLE_STYLES = { - horizontal: '!border-none !bg-[var(--surface-7)] !h-5 !w-[7px] !rounded-[2px]', - vertical: '!border-none !bg-[var(--surface-7)] !h-[7px] !w-5 !rounded-[2px]', + horizontal: '!border-none !bg-[var(--surface-7)] !h-5 !w-[7px] !rounded-xs', + vertical: '!border-none !bg-[var(--surface-7)] !h-[7px] !w-5 !rounded-xs', right: '!z-[10] !border-none !bg-[var(--workflow-edge)] !h-5 !w-[7px] !rounded-r-[2px] !rounded-l-none', error: @@ -243,16 +243,16 @@ const SubBlockRow = memo(function SubBlockRow({ const displayValue = maskedValue || hydratedName || (isSelectorType && value ? '-' : value) return ( -
+
{title} {displayValue !== undefined && ( {displayValue} @@ -432,18 +432,18 @@ function WorkflowPreviewBlockInner({ data }: NodeProps const hasSuccess = executionStatus === 'success' return ( -
+
{/* Selection ring overlay (takes priority over execution rings) */} {isPreviewSelected && ( -
+
)} {/* Success ring overlay (only shown if not selected) */} {!isPreviewSelected && hasSuccess && ( -
+
)} {/* Error ring overlay (only shown if not selected) */} {!isPreviewSelected && hasError && ( -
+
)} {/* Target handle - not shown for triggers/starters */} @@ -463,19 +463,19 @@ function WorkflowPreviewBlockInner({ data }: NodeProps {/* Header - matches WorkflowBlock structure */}
-
+
{!isNoteBlock && (
)} {name} @@ -485,7 +485,7 @@ function WorkflowPreviewBlockInner({ data }: NodeProps {/* Content area with subblocks */} {hasContentBelowHeader && ( -
+
{type === 'condition' ? ( conditionRows.map((cond) => ( {/* Selection ring overlay (takes priority over execution rings) */} {isPreviewSelected && ( -
+
)} {/* Success ring overlay (only shown if not selected) */} {!isPreviewSelected && hasSuccess && ( -
+
)} {/* Error ring overlay (only shown if not selected) */} {!isPreviewSelected && hasError && ( -
+
)} {/* Target handle on left (input to the subflow) */} @@ -92,19 +92,16 @@ function WorkflowPreviewSubflowInner({ data }: NodeProps {/* Header - matches actual subflow header structure */} -
-
+
+
{blockName} @@ -115,12 +112,12 @@ function WorkflowPreviewSubflowInner({ data }: NodeProps {/* Subflow Start - connects to first block in subflow */} -
- Start +
+ Start {isNested && ( -
+
Go back to parent workflow {currentWorkflowName && ( -
- +
+ {currentWorkflowName}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/collapsed-sidebar-menu/collapsed-sidebar-menu.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/collapsed-sidebar-menu/collapsed-sidebar-menu.tsx index ff61e2ed52b..970e263a118 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/collapsed-sidebar-menu/collapsed-sidebar-menu.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/collapsed-sidebar-menu/collapsed-sidebar-menu.tsx @@ -32,7 +32,7 @@ export function CollapsedSidebarMenu({ className, }: CollapsedSidebarMenuProps) { return ( -
+
{ @@ -46,7 +46,7 @@ export function CollapsedSidebarMenu({