51ee4ecb5a
Finished the planner end to end. Corrected rollover and yearly accounting, recurring targets, savings rules, and targeted dormant restorations. Added editing/deletion for income, expenses, targets, and categories. Rebuilt dashboard, analytics, calendar, settings, exports, authentication, and responsive mobile UI. Added original artwork at [financial-flow.png](/Users/tyemeclifford/Documents/GH/budget/public/assets/images/financial-flow.png), generated with built-in Imagegen using an abstract financial-momentum landscape prompt. Added [self-test.php](/Users/tyemeclifford/Documents/GH/budget/scripts/self-test.php). Verification passed: automated accounting/export tests, full browser workflow, responsive 390px layout, light/dark themes, and no console errors. Tested with FrankenPHP v1.12.4. Live Mailgun delivery was not attempted without credentials.
34 lines
1.4 KiB
PHP
34 lines
1.4 KiB
PHP
<?php $appName = (string) $settings->get('app.name', 'Neon Ledger'); ?>
|
|
<!doctype html>
|
|
<html lang="en" data-theme="dark">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="color-scheme" content="dark">
|
|
<title><?= h($title ?? 'Welcome') ?> · <?= h($appName) ?></title>
|
|
<link rel="stylesheet" href="/assets/app.css?v=<?= (int) filemtime(APP_ROOT . '/public/assets/app.css') ?>">
|
|
</head>
|
|
<body class="auth-body">
|
|
<main class="auth-shell">
|
|
<section class="auth-story">
|
|
<div class="brand auth-brand"><span class="brand-mark">NL</span><strong><?= h($appName) ?></strong></div>
|
|
<div>
|
|
<p class="eyebrow">Plan forward. Compare backward.</p>
|
|
<h1>Your money, with a memory.</h1>
|
|
<p>Build monthly budgets, carry unused funds forward, track bill progress, and move money out of sight without losing the paper trail.</p>
|
|
</div>
|
|
<div class="auth-orbit" aria-hidden="true">
|
|
<span class="orbit-one"></span><span class="orbit-two"></span><span class="orbit-three"></span>
|
|
<strong>$</strong>
|
|
</div>
|
|
</section>
|
|
<section class="auth-panel">
|
|
<?php foreach ($flashes as $flash): ?>
|
|
<div class="flash <?= h($flash['type']) ?>"><span>!</span><?= h($flash['message']) ?></div>
|
|
<?php endforeach; ?>
|
|
<?= $content ?>
|
|
</section>
|
|
</main>
|
|
</body>
|
|
</html>
|