Give the landing the app's theme and language switches

The blueprint page was dark-only and English-only. It now carries the same
two controls the workspace TopBar has, in the nav's top-right cluster: ◐ flips
light/dark (a paper palette for the same funnel — surfaces and ink flip, the
amber/red accents stay) and VI/EN flips the language, with the whole page of
copy, the FAQ, the pricing tables and the VIP badge all following it. Amber
text switches to a darker #a16207 on the light theme so it keeps ~4.9:1 on
white.

The register account is back as the old landing had it: a "ĐĂNG KÝ" button
pointing at /app?auth=1, and that URL now actually opens the auth dialog on
its sign-up tab (AuthModal takes an initialMode). The nav also collapses to
the hamburger below 1160px now, and the logo/tools shrink below 680px, so the
row still fits a 360px phone.
This commit is contained in:
2026-09-17 18:40:05 +07:00
parent 340f0374fc
commit f2e5e9abc9
4 changed files with 262 additions and 154 deletions
+3 -1
View File
@@ -6,14 +6,16 @@ import { api } from '../api';
// just drives it. The demo is always one click away — the app is usable signed
// out, and only export resolution / saving are gated (see config/tiers.ts).
export function AuthModal({
initialMode = 'login',
onClose,
onDone,
}: {
initialMode?: 'login' | 'signup';
onClose: () => void;
onDone: () => void;
}) {
const { t } = useI18n();
const [mode, setMode] = useState<'login' | 'signup'>('login');
const [mode, setMode] = useState<'login' | 'signup'>(initialMode);
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [busy, setBusy] = useState(false);