// ============================================================
// auth-style-b.jsx — Dark split-hero auth (Vercel / Stripe school).
// Two-column: marketing/storytelling on the left, form on the right.
// Inverts gracefully for onboarding (single dark surface, full width).
// ============================================================
const b = {
bg: "#0a0a0a", left: "#0f0f14",
surface: "#101015", surface2: "#16161d",
border: "#1f1f25", borderStrong: "#2a2a32",
text: "#fafafa", subtext: "#a8a8b0", muted: "#6a6a72",
accent: "#ffffff", accentText: "#0a0a0a",
brandA: "#5e5cff", brandB: "#b15bff",
};
const fontB = "'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif";
// Local icon helper (kept independent of other auth files)
const IcnB = ({ d, size = 16, sw = 1.6 }) => (
);
const PB = {
check: ,
eye: <>>,
arrow: ,
bolt: ,
spark: ,
star: ,
};
const MarkB = ({ size = 22 }) => (
);
const BField = ({ label, value, placeholder, type, icon, hint, optional, autofocus }) => (
{label && (
{label}
{optional && optional}
)}
{icon && {icon}}
{value || placeholder}
{type === "password" && }
{hint &&
{hint}
}
);
const BSocial = ({ children, glyph }) => (
);
const BPrimary = ({ children, full = true }) => (
);
// LEFT hero panel — short storytelling
const HeroPanel = ({ headline, sub, badge }) => (
{/* Decorative grid + glow */}
{/* Brand */}
Lattice
{/* Mid */}
{badge && (
NEW
{badge}
)}
{headline}
{sub}
{/* Trust row */}
Used by teams at
Halcyon·Kestrel
·Mossbank·Verra
{/* Bottom quote */}
"Replaced three tools in our first week. Lattice is what every
CRM should have been."
DP
Devi Patel
Head of Sales, Halcyon
);
// 2-col shell: hero on left, form on right
const BSplitShell = ({ hero, children }) => (
{hero}
Need help? support
PrivacyTermsSecurity
v4.2.1
);
const BSignIn = () => (
}>
Sign in to Lattice
Welcome back. Pick how you'd like to continue.
}>Continue with Google
}>Continue with Microsoft
}>Continue with Apple
Password
Forgot?
••••••••••
Sign in
SAML / SSO for your company?
Use SSO →
New here?
Create an account
);
const BSignUp = () => (
}>
Create your account
You'll set up your workspace in the next step.
}>Continue with Google
}>Continue with Microsoft
I agree to the Terms and{" "}
Privacy Policy.
Create account
Already have an account?
Sign in
);
const BOnboarding = () => {
// Full-bleed dark onboarding screen (workspace customization step)
const Step = ({ n, label, state }) => (
{state === "done" ? : n}
{label}
);
const ColorSwatch = ({ color, selected }) => (
);
const Template = ({ title, sub, icon, selected, color }) => (
{icon}
{title}
{sub}
{selected && (
)}
);
return (
{/* Decorative aurora */}
{/* Top stepper bar */}
Step 3 of 5 · Personalise
Pick a template to get going.
We'll pre-fill your workspace with the right objects, views and
fields. Everything is editable later.
{/* Template grid */}
} selected color="#5e5cff" />
} color="#22c55e" />
} color="#f6c560" />
} color="#b15bff" />
{/* Theme + accent strip */}
Theme
Light, dark, or follow the system.
{[
["Light", "#fafaf9", "#111"],
["Dark", "#0f0f14", "#fafafa"],
["System", "linear-gradient(135deg, #fafaf9 50%, #0f0f14 50%)", "#888"],
].map(([n, bg, ink], i) => (
))}
Accent
The color of your CTAs, links and focus rings.
);
};
Object.assign(window, { BSignIn, BSignUp, BOnboarding });