Slate — Minimal Login
A clean, centered minimal login with email and password, a password visibility toggle, remember-me, forgot-password and a sign-up switch. Calm neutral palette, sharp focus states.
<main class="sl-wrap"><div class="sl-card">
<div class="sl-logo" aria-hidden="true">◧</div>
<h1 class="sl-h1">Sign in to Slate</h1>
<p class="sl-sub">Welcome back. Please enter your details.</p>
<form data-auth novalidate>
<div class="sl-field"><label for="sl-email">Email</label><input id="sl-email" name="email" type="email" autocomplete="email" placeholder="you@company.com" required></div>
<div class="sl-field"><label for="sl-pw">Password</label><div class="sl-pw"><input id="sl-pw" name="password" type="password" autocomplete="current-password" placeholder="••••••••" required><button type="button" class="sl-toggle" data-pw-toggle="sl-pw" aria-pressed="false" aria-label="Toggle password visibility">Show</button></div></div>
<div class="sl-row"><label class="sl-check"><input type="checkbox"> Remember me</label><a href="#" class="sl-link">Forgot password?</a></div>
<button type="submit" class="sl-btn">Sign in</button>
</form>
<div class="sl-div"><span>or</span></div>
<button type="button" class="sl-sso"><i aria-hidden="true">G</i> Continue with Google</button>
<p class="sl-foot-t">Don't have an account? <a href="#" class="sl-link">Sign up</a></p>
<footer class="sl-foot"><span class="x-by">Built with <a href="https://convertatlas.org" rel="noopener">convertatlas.org</a></span></footer>
</div></main>*{box-sizing:border-box}
.sl-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:28px 20px;background:#f9fafb;color:#111827;font-family:'Inter',system-ui,sans-serif}
.sl-card{width:100%;max-width:400px;background:#fff;border:1px solid #e5e7eb;border-radius:18px;padding:38px 32px;box-shadow:0 12px 40px rgba(17,24,39,.06)}
.sl-logo{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;background:#111827;color:#fff;font-size:1.3rem;margin-bottom:22px}
.sl-h1{font-family:'Sora',sans-serif;font-weight:800;font-size:1.5rem;margin:0 0 6px}
.sl-sub{color:#6b7280;font-size:.94rem;margin:0 0 26px}
.sl-field{margin-bottom:16px}
.sl-field label{display:block;font-size:.84rem;font-weight:600;margin-bottom:6px;color:#374151}
.sl-field input{width:100%;padding:12px 14px;border:1.5px solid #d1d5db;border-radius:10px;font:inherit;font-size:.96rem;color:#111827;background:#fff}
.sl-field input::placeholder{color:#9ca3af}
.sl-field input:focus{outline:none;border-color:#111827;box-shadow:0 0 0 3px rgba(17,24,39,.12)}
.sl-field input[aria-invalid=true]{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,.14)}
.sl-pw{position:relative}
.sl-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:0;background:transparent;color:#6b7280;font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;padding:6px 8px}
.sl-toggle:hover{color:#111827}.sl-toggle:focus-visible{outline:2px solid #111827;outline-offset:1px;border-radius:6px}
.sl-row{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:4px 0 22px;font-size:.86rem}
.sl-check{display:flex;align-items:center;gap:7px;color:#374151;cursor:pointer}
.sl-check input{width:15px;height:15px;accent-color:#111827}
.sl-link{color:#111827;font-weight:600;text-decoration:none}.sl-link:hover{text-decoration:underline}
.sl-btn{width:100%;padding:13px;border:0;border-radius:11px;background:#111827;color:#fff;font:inherit;font-weight:700;cursor:pointer;transition:transform .15s,background .15s}
.sl-btn:hover{background:#1f2937;transform:translateY(-1px)}.sl-btn:focus-visible{outline:3px solid #9ca3af;outline-offset:2px}
.sl-div{display:flex;align-items:center;gap:12px;margin:22px 0;color:#9ca3af;font-size:.82rem}
.sl-div::before,.sl-div::after{content:'';flex:1;height:1px;background:#e5e7eb}
.sl-sso{width:100%;padding:12px;border:1.5px solid #d1d5db;border-radius:11px;background:#fff;font:inherit;font-weight:600;color:#374151;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:9px;transition:.15s}
.sl-sso:hover{border-color:#9ca3af;background:#f9fafb}.sl-sso:focus-visible{outline:3px solid #9ca3af;outline-offset:2px}
.sl-sso i{font-style:normal;font-weight:800;color:#4285f4}
.sl-foot-t{text-align:center;font-size:.88rem;color:#6b7280;margin:22px 0 0}
.sl-foot{text-align:center;margin-top:24px;padding-top:18px;border-top:1px solid #f1f3f5}
.x-by{font-size:.8rem;color:#9ca3af}.x-by a{color:#111827;text-decoration:none;font-weight:600}.x-by a:hover{text-decoration:underline}
@media(prefers-reduced-motion:reduce){.sl-btn{transition:none}}(function(){document.querySelectorAll('[data-pw-toggle]').forEach(function(b){b.addEventListener('click',function(){var inp=document.getElementById(b.getAttribute('data-pw-toggle'));if(!inp)return;var show=inp.type==='password';inp.type=show?'text':'password';b.setAttribute('aria-pressed',show?'true':'false');b.textContent=show?'Hide':'Show';});});var f=document.querySelector('form[data-auth]');if(f){f.addEventListener('submit',function(e){e.preventDefault();var ok=true;f.querySelectorAll('input[required]').forEach(function(i){if(!i.value||!i.checkValidity()){ok=false;i.setAttribute('aria-invalid','true');}else{i.removeAttribute('aria-invalid');}});if(!ok)return;var btn=f.querySelector('[type=submit]');if(btn){btn.textContent='Signing in…';setTimeout(function(){btn.textContent='✓ Signed in';},700);}});}})();.html file with all CDN links included, or copy the HTML and drop it into your project.What's included in this template
The Slate — Minimal Login is a complete login & auth design with realistic demo content — ready to preview, copy or download as a single responsive HTML file. Key features:
- Centered card
- Password show/hide toggle
- Remember me + forgot link
- Sign-up switch
- Accessible labels & focus
- Responsive
How to use it
Open the live preview above to see the full design at desktop, tablet and mobile widths. When you are happy with it, use Download to save a single slate-minimal-auth.html file, or Copy to grab the source. All required libraries load from public CDNs, so the file works the moment you open it — just replace the demo content with your own and publish.