91244a5a2b
Brings the catalog to nine. Each is a single scoped [data-theme="..."] CSS file plus a registry entry — no markup changes. - ps1: charcoal BIOS, gray panels, uppercase letterspacing - ps3: animated XMB sky gradient + drifting wave, black glass - wii: white channels, rounded pills, soft blue glow - nds: silver shell with content framed as the touch screen - dreamcast: cream BIOS, conic-gradient orange swirl, lowercase blue - jv2002: dense boxy portal, Verdana 11px, red masthead, blue nav tabs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import { loginAction } from "../actions";
|
|
|
|
export default async function LoginPage({
|
|
searchParams,
|
|
}: {
|
|
searchParams: Promise<{ error?: string; next?: string }>;
|
|
}) {
|
|
const { error, next } = await searchParams;
|
|
|
|
return (
|
|
<div className="rb-admin-login">
|
|
<form className="rb-admin-card rb-login-card" action={loginAction}>
|
|
<h1 className="rb-admin-h1">RetroBlog Admin</h1>
|
|
<p className="rb-admin-muted">Sign in to manage posts and settings.</p>
|
|
|
|
{error && (
|
|
<p className="rb-admin-error">Incorrect password. Try again.</p>
|
|
)}
|
|
|
|
<label className="rb-field">
|
|
<span>Password</span>
|
|
<input
|
|
type="password"
|
|
name="password"
|
|
autoFocus
|
|
autoComplete="current-password"
|
|
/>
|
|
</label>
|
|
|
|
{next && <input type="hidden" name="next" value={next} />}
|
|
|
|
<button className="rb-btn rb-btn-primary" type="submit">
|
|
Sign in
|
|
</button>
|
|
</form>
|
|
</div>
|
|
);
|
|
}
|