// ============================================================ // auth-screens.jsx — Sign-in / Sign-up / Onboarding for the // Lattice brand, in three aesthetic directions that match the // three nav styles from the prior file: // // A · Light minimal ← Sidebar / Notion school // B · Dark split-hero ← Topbar / Vercel school // C · Glass aurora ← Floating-pill marketing school // // Each style ships all three screens. Shared , // , components keep the family resemblance. // ============================================================ // ── Shared atoms ──────────────────────────────────────────── // Branded "G" / "MS" social logos drawn inline as little glyphs // so there are no missing-asset placeholders. They're recognizable // without using actual brand marks. const GoogleGlyph = () => ( ); const MicrosoftGlyph = () => ( ); const AppleGlyph = () => ( ); const sansAuth = "'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif"; // Tiny stroke icon helper (re-defining locally so this file is standalone) const Icn = ({ d, size = 16, sw = 1.6 }) => ( {d} ); const Pa = { eye: <>, check: , arrow: , chevR: , chevL: , star: , spark: , bolt: , shield: , briefcase: <>, }; // Brand mark (gradient triangle), shared const Mark = ({ size = 20, mono }) => ( {mono ? ( ) : ( <> )} ); // ============================================================ // STYLE A — LIGHT MINIMAL (Notion / Linear school) // Centered card on warm neutral, no flourish, lots of air. // ============================================================ const a = { bg: "#f5f5f2", surface: "#ffffff", border: "#e8e8e3", borderStrong: "#d8d8d2", text: "#111", subtext: "#5a5a5e", muted: "#8a8a90", accent: "#5e5cff", accentText: "#fff", }; const fontA = sansAuth; const AFieldLabel = ({ children, optional }) => (
{children} {optional && optional}
); const AField = ({ label, value, placeholder, hint, type = "text", icon, optional }) => (
{label && {label}}
{icon && {icon}} {value || placeholder} {type === "password" && }
{hint &&
{hint}
}
); const ASocial = ({ children, glyph }) => ( ); const APrimary = ({ children, full = true }) => ( ); const ACardShell = ({ children, foot }) => (
{/* Top bar: brand on left, support on right */}
Lattice
Status Docs Sign in ↗
{/* Centered card */}
{children}
{/* Footer band */}
© 2026 Lattice Studio · Made in Copenhagen
PrivacyTermsSecurity
); const ASignIn = () => (

Welcome back

Sign in to your Lattice workspace.

}>Google }>Microsoft }>Apple
or with email
Password Forgot?
••••••••••
Keep me signed in for 30 days
Sign in →
New here? Create an account
); const ASignUp = () => (

Create your workspace

Free for up to 10 people. No card needed.

}>Continue with Google }>Microsoft
or with email
I agree to Lattice's Terms and{" "} Privacy Policy.
Create workspace →
Already have one? Sign in
); const AOnboarding = () => { const Step = ({ n, label, state }) => (
{state === "done" ? : n}
{label}
); const Tile = ({ title, sub, selected, icon }) => (
{icon}
{title}
{sub}
); return (
Lattice
Step 2 of 4 · ⌘. to skip
{/* Stepper */}

Tell us about your work

We'll tailor your workspace based on this. You can change it later.

What do you do?
} /> } /> } /> } /> } />
How big is your team?
{["Just me", "2–10", "11–50", "51–200", "200+"].map((s, i) => (
{s}
))}
Continue
); }; Object.assign(window, { ASignIn, ASignUp, AOnboarding });