Spaces:
Runtime error
Runtime error
File size: 5,882 Bytes
4b63522 a9dd227 fc21e5c a9dd227 4b63522 a9dd227 6c153c2 a9dd227 4b63522 a9dd227 4b63522 a9dd227 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | {% extends "base.html" %}
{% block title %}Login β Resume Ranker API{% endblock %}
{% block extra_head %}
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{ url_for('static', filename='css/login.css') }}">
{% endblock %}
{% block content %}
<header class="container sticky-header">
<div class="logo">ResumeRanker<span style="color:var(--accent)">.API</span></div>
<nav class="nav-links" id="navLinks">
<a href="{{ url_for('auth.landing') }}">Home</a>
<a href="{{ url_for('auth.landing') }}#how">How it works</a>
<a href="{{ url_for('auth.landing') }}#demo">Live Demo</a>
<a href="{{ url_for('auth.landing') }}#docs">Docs</a>
<a href="{{ url_for('auth.landing') }}#pricing">Pricing</a>
</nav>
<button class="theme-toggle" id="themeToggle" aria-label="Toggle dark mode">π</button>
<button class="hamburger" id="hamburger" aria-label="Open menu">
<span></span><span></span><span></span>
</button>
</header>
<main class="login-container">
<div class="login-card">
<div class="login-header">
<h1 class="login-title">Welcome back</h1>
<p class="login-subtitle">Sign in to your ResumeRanker account</p>
</div>
{% if error %}
<div class="error-message">{{ error }}</div>
{% endif %}
{% if success %}
<div class="success-message">{{ success }}</div>
{% endif %}
<form method="POST">
<div class="form-group">
<label for="email" class="form-label">Email address</label>
<input type="email" id="email" name="email" class="form-input" placeholder="Enter your email" required>
</div>
<div class="form-group">
<label for="password" class="form-label">Password</label>
<input type="password" id="password" name="password" class="form-input" placeholder="Enter your password" required>
</div>
<div class="form-row">
<div class="checkbox-group">
<input type="checkbox" id="remember" name="remember">
<label for="remember">Remember me</label>
</div>
<a href="#" class="forgot-link">Forgot password?</a>
</div>
<button type="submit" class="login-btn">Sign in</button>
</form>
<div class="divider">
<span>or continue with</span>
</div>
<button class="social-btn" onclick="signInWithGoogle()">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
<path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/>
<path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
<path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/>
<path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/>
</svg>
Continue with Google
</button>
<button class="social-btn" onclick="signInWithGitHub()">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
Continue with GitHub
</button>
<div class="verification-link">
Didn't get the verification email?
<a href="{{ url_for('auth.resend_verification') }}">Resend it</a>
</div>
<div class="signup-link">
Don't have an account? <a href="{{ url_for('auth.register') }}">Register</a>
</div>
</div>
</main>
{% endblock %}
{% block extra_scripts %}
<script>
// Light/Dark mode toggle
const themeToggle = document.getElementById('themeToggle');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
function setTheme(theme) {
document.documentElement.setAttribute('data-theme', theme);
localStorage.setItem('theme', theme);
themeToggle.textContent = theme === 'dark' ? 'βοΈ' : 'π';
}
const savedTheme = localStorage.getItem('theme');
setTheme(savedTheme || (prefersDark ? 'dark' : 'light'));
themeToggle.onclick = () => {
const current = document.documentElement.getAttribute('data-theme');
setTheme(current === 'dark' ? 'light' : 'dark');
};
// Hamburger menu toggle
const hamburger = document.getElementById('hamburger');
const navLinks = document.getElementById('navLinks');
hamburger.onclick = function() {
navLinks.classList.toggle('open');
hamburger.classList.toggle('open');
};
// Close menu when clicking a link (on mobile)
Array.from(navLinks.getElementsByTagName('a')).forEach(link => {
link.onclick = () => {
if (window.innerWidth <= 900) {
navLinks.classList.remove('open');
hamburger.classList.remove('open');
}
};
});
// Social login functions
function signInWithGoogle() {
// Implement Google OAuth
console.log('Google sign-in clicked');
}
function signInWithGitHub() {
// Implement GitHub OAuth
console.log('GitHub sign-in clicked');
}
</script>
{% endblock %} |