added on local at 2026-07-01 13:48:04
| 1 | <!-- Marketing nav header is rendered by webstls_marketing.html (the | |
| 2 | shell). Do not re-add it here -- duplication breaks the single- | |
| 3 | source-of-truth pattern and was the cause of pages disagreeing on | |
| 4 | whether they had a header at all. --> | |
| 5 | <div class="auth-shell"> | |
| 6 | <aside class="auth-side"> | |
| 7 | <div class="auth-side-glow"></div> | |
| 8 | <div class="auth-side-content"> | |
| 9 | <div class="hero-pill" style="margin-bottom:18px"><span class="dot"></span> Affiliate-program software for growth teams</div> | |
| 10 | <div class="auth-quote"> | |
| 11 | Launch a referral program, hand out tracking links, and watch conversions land in real time. Without standing up your own attribution stack. | |
| 12 | </div> | |
| 13 | <div class="auth-quote-attr">AffSoft · v0.6</div> | |
| 14 | </div> | |
| 15 | </aside> | |
| 16 | ||
| 17 | <main class="auth-main"> | |
| 18 | <div style="display:flex;justify-content:flex-end"> | |
| 19 | <a href="/signup.cgi" class="text-sm text-secondary">Don't have an account? <span class="text-brand fw-600">Sign up</span></a> | |
| 20 | </div> | |
| 21 | ||
| 22 | <div class="auth-form-wrap"> | |
| 23 | <h1 class="auth-title">Welcome back</h1> | |
| 24 | <p class="auth-sub">Sign in to your account.</p> | |
| 25 | ||
| 26 | [if:$error_msg] | |
| 27 | <div class="banner danger" style="margin-bottom:18px"> | |
| 28 | <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg> | |
| 29 | <div class="text-xs">$error_msg</div> | |
| 30 | </div> | |
| 31 | [/if] | |
| 32 | ||
| 33 | [if:$has_flash] | |
| 34 | <div class="banner" style="margin-bottom:18px;background:rgba(34,197,94,0.10);border:1px solid rgba(34,197,94,0.35);color:#86efac"> | |
| 35 | <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="20,6 9,17 4,12"/></svg> | |
| 36 | <div class="text-xs">$flash_msg</div> | |
| 37 | </div> | |
| 38 | [/if] | |
| 39 | ||
| 40 | <form method="POST" action="/login.cgi" autocomplete="on"> | |
| 41 | <div class="form-group"> | |
| 42 | <label class="form-label">Email</label> | |
| 43 | <input class="input" type="email" name="email" value="$email_val" placeholder="you\@studio.com" autocomplete="email" required autofocus> | |
| 44 | </div> | |
| 45 | <div class="form-group"> | |
| 46 | <label class="form-label">Password</label> | |
| 47 | <input class="input" type="password" name="password" placeholder="••••••••" autocomplete="current-password" required> | |
| 48 | </div> | |
| 49 | ||
| 50 | <!-- Keep-me-signed-in + Forgot-password row. The forgot link | |
| 51 | used to sit inside the password label, which put it in | |
| 52 | the document tab order BETWEEN email and password and | |
| 53 | stole focus on the user's first Tab. Moving it down here | |
| 54 | restores the natural email -> password tab sequence. --> | |
| 55 | <div class="flex items-center justify-between" style="margin-bottom:18px;gap:12px"> | |
| 56 | <label class="checkbox" style="margin-bottom:0"> | |
| 57 | <input type="checkbox" name="remember" value="1" checked> Keep me signed in on this device | |
| 58 | </label> | |
| 59 | <a href="/forgot_password.cgi" class="text-xs text-brand fw-600" style="white-space:nowrap">Forgot password?</a> | |
| 60 | </div> | |
| 61 | ||
| 62 | <button type="submit" class="btn btn-primary btn-block btn-lg">Sign in</button> | |
| 63 | </form> | |
| 64 | ||
| 65 | <div class="auth-foot"> | |
| 66 | By signing in you agree to our <a href="#">Terms</a> and <a href="#">Privacy Policy</a>. | |
| 67 | </div> | |
| 68 | </div> | |
| 69 | ||
| 70 | <div class="text-center text-xs text-dim">2FA supported · session keys rotated · audit logged</div> | |
| 71 | </main> | |
| 72 | </div> | |
| 73 | ||
| 74 | <footer class="site-foot"> | |
| 75 | <div class="foot-grid"> | |
| 76 | <div class="foot-col"> | |
| 77 | <div class="flex items-center gap-3 mb-2"><div class="brand-mark" style="width:32px;height:32px;font-size:15px">A<span style="color:#a78bfa">S</span></div><div class="brand-text"><span class="brand-name">AffSoft</span></div></div> | |
| 78 | <p class="text-sm text-secondary" style="max-width:340px">The operating system for growth teams.</p> | |
| 79 | </div> | |
| 80 | <div class="foot-col"><h5>Platform</h5><ul><li><a href="features.cgi">Features</a></li><li><a href="tour.cgi">Tour</a></li><li><a href="why.cgi">Why AffSoft</a></li><li><a href="pricing.cgi">Pricing</a></li><li><a href="faq.cgi">FAQ</a></li></ul></div> | |
| 81 | <div class="foot-col"><h5>Company</h5><ul><li><a href="about.cgi">About</a></li><li><a href="contact.cgi">Contact</a></li></ul></div> | |
| 82 | <div class="foot-col"><h5>Legal & Trust</h5><ul><li><a href="privacy.cgi">Privacy</a></li><li><a href="terms.cgi">Terms of Service</a></li></ul></div> | |
| 83 | </div> | |
| 84 | <div class="foot-bottom"><span>© 2026 AffSoft All rights reserved.</span><span>Made for teams scaling referrals.</span></div> | |
| 85 | </footer> |