// Winkz Designs 2026, CLIENT PORTAL LOGIN
(function () {
const { useState } = React;
const { Icon, Reveal } = window;
const GRAD = 'linear-gradient(120deg,#F23BFE,#79BAFF,#2DE3EA)';
const PERKS = [
['LayoutDashboard', 'Live project board', 'Every milestone, deliverable and open question in one place, updated as we build.'],
['MessageSquare', 'Direct line to your team', 'Thread comments straight onto designs and pages. No email chains, no lost feedback.'],
['FileText', 'Invoices & contracts', 'Scope, agreements and payment history, always downloadable.'],
['Activity', 'Site health & analytics', 'Uptime, Core Web Vitals and traffic for the sites we maintain.'],
];
function Field({ label, type, name, autoComplete, placeholder, trailing }) {
const [focus, setFocus] = useState(false);
return (
);
}
function Toggle({ on, onChange, children }) {
return (
);
}
function CardShell({ children }) {
return (
If you're an active client, your account manager sends credentials when your project kicks off. Can't find them? Email design@winkzdesigns.com and we'll resend in minutes.
{backLink('Back to sign in', () => setView('signin'))}
);
if (view === 'sent') return (
If {resetTo} matches a portal account, a reset link is in your inbox within a minute or two. The link expires after 30 minutes for security.
Nothing after five minutes? Check spam, then email design@winkzdesigns.com and we'll reset it by hand.
{backLink('Back to sign in', () => setView('signin'))}
);
if (view === 'forgot') return (
Enter the email on your portal account and we'll send a secure link to set a new password.
{backLink('Back to sign in', () => setView('signin'))}
);
return (
);
}
function LoginPage({ onNavigate }) {
return (
{window.WinkzStreams && }
Client portal
Your project, in plain sight.
Sign in to track your build, review work, leave feedback and handle the paperwork, without chasing anyone for an update.
{PERKS.map(([icon, title, body]) => (
{title}
{body}
))}
Sessions are encrypted end to end. We never store card details in the portal.