added on local at 2026-07-01 13:48:00
| 1 | <!DOCTYPE html> | |
| 2 | <html lang="en"> | |
| 3 | <head> | |
| 4 | <meta charset="UTF-8"> | |
| 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| 6 | <title>Sign up · $store_name</title> | |
| 7 | <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| 8 | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
| 9 | <link href="https://fonts.googleapis.com/css2?family=Inter:wght\@400;500;600;700&family=Space+Grotesk:wght\@500;600;700&display=swap" rel="stylesheet"> | |
| 10 | <!-- site.css gives the StoreChrome header buttons (.btn, .btn-primary, | |
| 11 | .btn-secondary) their proper styling. Without it Sign in / Cart | |
| 12 | render as bare underlined text links. --> | |
| 13 | <link rel="stylesheet" href="/assets/css/site.css"> | |
| 14 | <style> | |
| 15 | :root { $theme_css_vars } | |
| 16 | /* Chrome at top, auth card centered in the remaining space. The | |
| 17 | old display:grid on body centered EVERYTHING including the | |
| 18 | chrome, pushing it into the middle of the page. */ | |
| 19 | body { background: var(--col-bg, #050a1c); color: var(--col-text, #e6ecf6); font-family: 'Inter', system-ui, sans-serif; margin: 0; min-height: 100vh; display: flex; flex-direction: column; } | |
| 20 | .auth-wrap { flex: 1; display: grid; place-items: center; padding: 40px 20px; } | |
| 21 | .auth-card { background: var(--col-surface-1); border: 1px solid var(--col-border); border-radius: 16px; padding: 36px 36px 32px; max-width: 460px; width: 100%; box-shadow: 0 24px 60px rgba(0,0,0,0.35); } | |
| 22 | .auth-eyebrow { font-size: 11px; letter-spacing: 1.5px; text-transform: uppercase; color: var(--col-text-3); margin-bottom: 8px; } | |
| 23 | .auth-title { font-family: 'Space Grotesk', sans-serif; font-size: 26px; font-weight: 700; margin: 0 0 6px; color: #fff; } | |
| 24 | .auth-sub { font-size: 14px; color: var(--col-text-2); margin: 0 0 24px; line-height: 1.5; } | |
| 25 | .auth-form .field { margin-bottom: 14px; } | |
| 26 | .auth-form label { display: block; font-size: 12px; letter-spacing: 1px; text-transform: uppercase; color: var(--col-text-3); margin-bottom: 6px; font-weight: 600; } | |
| 27 | .auth-form input { width: 100%; background: var(--col-surface-2); border: 1px solid var(--col-border); color: var(--col-text); padding: 12px 14px; border-radius: 10px; font-size: 14px; font-family: inherit; box-sizing: border-box; } | |
| 28 | .auth-form input:focus { outline: none; border-color: var(--col-accent); } | |
| 29 | .auth-submit { width: 100%; padding: 13px 18px; background: var(--grad-brand, linear-gradient(135deg,#7c3aed,#3b82f6)); color: #fff; border: none; border-radius: 10px; font-weight: 700; font-size: 14px; cursor: pointer; letter-spacing: 0.4px; margin-top: 8px; } | |
| 30 | .auth-error { background: rgba(239,68,68,0.10); border: 1px solid rgba(239,68,68,0.40); color: #fca5a5; border-radius: 8px; padding: 10px 14px; font-size: 13px; margin-bottom: 18px; } | |
| 31 | .auth-foot { margin-top: 22px; font-size: 13px; color: var(--col-text-2); text-align: center; } | |
| 32 | .auth-foot a { color: var(--col-accent-bright); text-decoration: none; font-weight: 600; } | |
| 33 | .auth-back { display: inline-block; margin-top: 14px; font-size: 12px; color: var(--col-text-3); text-decoration: none; } | |
| 34 | .auth-back:hover { color: var(--col-text-2); } | |
| 35 | </style> | |
| 36 | </head> | |
| 37 | <body> | |
| 38 | $store_chrome_html | |
| 39 | <div class="auth-wrap"> | |
| 40 | <div class="auth-card"> | |
| 41 | <div class="auth-eyebrow">$store_name</div> | |
| 42 | <h1 class="auth-title">Create a buyer account</h1> | |
| 43 | <p class="auth-sub">Sign up to track your downloads, see your order history, and re-grab files anytime.</p> | |
| 44 | ||
| 45 | [if:$has_error] | |
| 46 | <div class="auth-error">$error_message</div> | |
| 47 | [/if] | |
| 48 | ||
| 49 | <form class="auth-form" method="POST" action="/buyer_signup.cgi"> | |
| 50 | <input type="hidden" name="id" value="$store_id"> | |
| 51 | <div class="field"> | |
| 52 | <label>Display name</label> | |
| 53 | <input type="text" name="display_name" value="$name_value" maxlength="120" placeholder="What should we call you?"> | |
| 54 | </div> | |
| 55 | <div class="field"> | |
| 56 | <label>Email</label> | |
| 57 | <input type="email" name="email" value="$email_value" required maxlength="191" autocomplete="email"> | |
| 58 | </div> | |
| 59 | <div class="field"> | |
| 60 | <label>Password</label> | |
| 61 | <input type="password" name="password" required minlength="8" autocomplete="new-password" placeholder="At least 8 characters"> | |
| 62 | </div> | |
| 63 | <button type="submit" class="auth-submit">Create account</button> | |
| 64 | </form> | |
| 65 | ||
| 66 | <div class="auth-foot"> | |
| 67 | Already have an account? <a href="$login_href">Sign in</a> | |
| 68 | </div> | |
| 69 | <div style="text-align:center"><a href="$back_href" class="auth-back">← Back to store</a></div> | |
| 70 | </div> | |
| 71 | </div> | |
| 72 | </body> | |
| 73 | </html> |