feat(ui): Serverseitig gerenderte Oberflaeche ohne Build-Schritt
Eigenes CSS statt Framework, Vanilla-JavaScript, heller und dunkler Modus. Ohne JavaScript bleibt alles bedienbar; das Liniendiagramm faellt auf eine selbst gezeichnete Balkendarstellung zurueck, wenn das CDN nicht erreichbar ist. Chart.js ist auf eine Version festgelegt und per Subresource Integrity an seinen Hash gebunden. Die Domain-Seite enthaelt eine Schritt-fuer-Schritt-Anleitung fuer DNS, Hosting-Panel und Zertifikat samt Fehlersuche.
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Schlankes Layout ohne Navigation: Login, Setup, Fehlerseiten.
|
||||
*
|
||||
* @var string $content
|
||||
* @var list<array{type:string,message:string}> $flashes
|
||||
*/
|
||||
|
||||
$title = $pageTitle ?? 'Kurzlinks';
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<title><?= $e($title) ?> · Kurzlinks</title>
|
||||
<link rel="stylesheet" href="<?= $e($url('assets/app.css')) ?>">
|
||||
<link rel="icon" href="<?= $e($url('assets/favicon.svg')) ?>" type="image/svg+xml">
|
||||
</head>
|
||||
<body class="body--centered">
|
||||
<main class="centered">
|
||||
<?php foreach ($flashes ?? [] as $flash): ?>
|
||||
<div class="alert alert--<?= $e($flash['type']) ?>" role="status"><?= $e($flash['message']) ?></div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
<?= $content ?>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user