Harshit Ghosh
favicon
ae34acf
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Create Account β€” ICH Screening</title>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}" />
<link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-192.png') }}" />
<link rel="apple-touch-icon" sizes="180x180" href="{{ url_for('static', filename='apple-touch-icon.png') }}" />
<meta name="description" content="Register for the ICH Screening AI platform."/>
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"/>
<link rel="stylesheet" href="{{ url_for('static', filename='css/base.css') }}"/>
<link rel="stylesheet" href="{{ url_for('static', filename='css/auth.css') }}"/>
</head>
<body>
<div class="auth-page">
<!-- ── Left brand panel ── -->
<aside class="auth-brand">
<div class="auth-brand-logo">
<div class="auth-brand-icon">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M22 12h-4l-3 9L9 3l-3 9H2"/>
</svg>
</div>
<span class="auth-brand-name">ICH Screening</span>
</div>
<div class="auth-headline">
<h2>Start Your <span class="grad">AI Screening</span> Journey</h2>
<p>Join clinicians and researchers using AI-powered CT analysis for faster, more accurate hemorrhage detection.</p>
</div>
<ul class="auth-features">
<li>
<span class="feat-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
</span>
Free to get started β€” no credit card needed
</li>
<li>
<span class="feat-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
</span>
Your scans are private and isolated
</li>
<li>
<span class="feat-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg>
</span>
Full calibration metrics and PDF reports
</li>
<li>
<span class="feat-icon">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
</span>
AI results delivered in seconds
</li>
</ul>
<!-- Scan-Complete Illustration -->
<div class="auth-illustration">
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="regGlow" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#34d399" stop-opacity=".15"/>
<stop offset="100%" stop-color="#34d399" stop-opacity="0"/>
</radialGradient>
<clipPath id="regClip">
<circle cx="100" cy="100" r="96"/>
</clipPath>
</defs>
<!-- Scanner frame -->
<circle cx="100" cy="100" r="96" fill="#07101f" stroke="#243356" stroke-width="2"/>
<!-- Brain tissue layers -->
<circle cx="100" cy="100" r="80" fill="#0b1f1a"/>
<circle cx="100" cy="100" r="64" fill="#0d2420"/>
<circle cx="100" cy="100" r="46" fill="#0f2822"/>
<circle cx="100" cy="100" r="26" fill="#091a14"/>
<!-- Layer stroke rings -->
<circle cx="100" cy="100" r="80" stroke="#163830" stroke-width="1"/>
<circle cx="100" cy="100" r="64" stroke="#1a4035" stroke-width=".75"/>
<!-- Crosshair guide lines (clipped) -->
<g clip-path="url(#regClip)" opacity=".2">
<line x1="4" y1="100" x2="196" y2="100" stroke="#34d399" stroke-width=".75"/>
<line x1="100" y1="4" x2="100" y2="196" stroke="#34d399" stroke-width=".75"/>
<line x1="29" y1="29" x2="171" y2="171" stroke="#34d399" stroke-width=".4"/>
<line x1="171" y1="29" x2="29" y2="171" stroke="#34d399" stroke-width=".4"/>
</g>
<!-- Full scan ring (all 360Β° β€” scan complete) -->
<circle cx="100" cy="100" r="80" fill="none" stroke="#34d399" stroke-width="1.5" opacity=".35"/>
<!-- Cardinal tick marks (green = complete) -->
<line x1="100" y1="4" x2="100" y2="14" stroke="#34d399" stroke-width="2" stroke-linecap="round" opacity=".8"/>
<line x1="100" y1="186" x2="100" y2="196" stroke="#34d399" stroke-width="2" stroke-linecap="round" opacity=".8"/>
<line x1="4" y1="100" x2="14" y2="100" stroke="#34d399" stroke-width="2" stroke-linecap="round" opacity=".8"/>
<line x1="186" y1="100" x2="196" y2="100" stroke="#34d399" stroke-width="2" stroke-linecap="round" opacity=".8"/>
<!-- Outer scanner ring overlay -->
<circle cx="100" cy="100" r="96" fill="none" stroke="#34d399" stroke-width="1" opacity=".35"/>
<!-- Center reticle circle -->
<circle cx="100" cy="100" r="22" fill="rgba(52,211,153,.1)" stroke="#34d399" stroke-width="1.5"/>
<circle cx="100" cy="100" r="32" stroke="#34d399" stroke-width=".75" fill="none" opacity=".2"/>
<!-- Checkmark inside reticle -->
<polyline points="89,100 97,109 114,88"
stroke="#34d399" stroke-width="2.5"
stroke-linecap="round" stroke-linejoin="round"/>
<!-- Glow overlay -->
<circle cx="100" cy="100" r="96" fill="url(#regGlow)"/>
</svg>
</div>
</aside>
<!-- ── Right form panel ── -->
<main class="auth-form-panel">
<div class="auth-card">
<div class="auth-card-header">
<h2>Create your account</h2>
<p>Takes less than a minute to get started</p>
</div>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<div class="auth-alerts">
{% for category, message in messages %}
<div class="alert alert-{{ category }}">
{% if category == 'error' %}
<svg width="15" height="15" 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>
{% else %}
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
{% endif %}
{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
{% endwith %}
<form method="POST" class="auth-form" id="registerForm">
<!-- Username -->
<div class="form-group">
<label for="username">Username</label>
<div class="input-wrap">
<svg class="input-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
<input type="text" id="username" name="username" required autofocus
placeholder="3–80 chars, letters/numbers/-/_" autocomplete="username"/>
</div>
<span class="form-hint">Letters, numbers, hyphens and underscores only (3–80 characters)</span>
</div>
<!-- Email -->
<div class="form-group">
<label for="email">Email</label>
<div class="input-wrap">
<svg class="input-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
<input type="email" id="email" name="email" required
placeholder="your@email.com" autocomplete="email"/>
</div>
</div>
<!-- Full Name (optional) -->
<div class="form-group">
<label for="full_name">Full Name <span style="color:#3d5482;font-weight:500;text-transform:none;letter-spacing:0">(optional)</span></label>
<div class="input-wrap">
<svg class="input-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
<input type="text" id="full_name" name="full_name"
placeholder="Dr. Jane Smith" autocomplete="name"/>
</div>
</div>
<!-- Password -->
<div class="form-group">
<label for="password">Password</label>
<div class="input-wrap">
<svg class="input-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
<input type="password" id="password" name="password" required
class="has-toggle" placeholder="Min. 8 chars with uppercase, lowercase &amp; number" autocomplete="new-password"/>
<button type="button" class="btn-pw-toggle" id="togglePw" aria-label="Toggle password visibility">
<svg id="eyeIcon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>
</button>
</div>
<div class="pw-strength-bar"><div class="pw-strength-fill" id="pwBar"></div></div>
<span class="pw-strength-text" id="pwText"></span>
</div>
<!-- Confirm Password -->
<div class="form-group">
<label for="confirm_password">Confirm Password</label>
<div class="input-wrap">
<svg class="input-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
<input type="password" id="confirm_password" name="confirm_password" required
class="has-toggle" placeholder="Re-enter your password" autocomplete="new-password"/>
<button type="button" class="btn-pw-toggle" id="togglePw2" aria-label="Toggle confirm password">
<svg id="eyeIcon2" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>
</button>
</div>
</div>
<button type="submit" class="btn-auth-submit">Create Account</button>
</form>
<div class="auth-footer">
Already have an account? <a href="{{ url_for('auth.login') }}">Sign in instead</a>
</div>
</div>
</main>
</div>
<script src="{{ url_for('static', filename='js/auth-shared.js') }}" defer></script>
<script src="{{ url_for('static', filename='js/register.js') }}" defer></script>
</body>
</html>