All checks were successful
Deploy / deploy (push) Successful in 23s
The palette lived in a :root block duplicated across all three templates, so every reshade meant three edits — and drifted twice in practice (the favicon hardcoded its own hex; stale danger-border rgba literals survived two palette changes). Move tokens to a single static/css/base.css, derive every dim/border tint from the four source hues with color-mix, and point the favicon at one static/favicon.svg. Also splits the 1558-line dashboard.html into template + static assets: 662 lines of CSS and 396 of JS were re-sent uninlined on every load with no browser caching, which costs real time on the remote/cellular access this app is built for. Templates drop to 501/42/107 lines. Server-rendered config (timezone, script_root) now arrives via <body data-*>; wiring URL_BASE to request.script_root also fixes /api/* fetches for a future subpath mount, which the hardcoded "" would break. Header service pills now wrap instead of scrolling — they were clipped at narrow widths, and a hidden pill is a service whose status you cannot see. Verified 0 clipped and no page overflow at 320/375/700/1280. Footer gains a version and date so the running build is identifiable without trusting the Unraid Docker tab's cached container IDs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
1.5 KiB
HTML
42 lines
1.5 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Sign in — Media Centre</title>
|
|
<link rel="icon" href="{{ url_for('static', filename='favicon.svg') }}">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/base.css') }}">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/login.css') }}">
|
|
</head>
|
|
<body>
|
|
|
|
<div class="wrap">
|
|
|
|
<div class="brand">
|
|
<svg width="30" height="30" viewBox="0 0 100 100" aria-hidden="true">
|
|
<rect width="100" height="100" rx="22" fill="var(--accent)"/>
|
|
<path d="M40 32 L72 50 L40 68 Z" fill="var(--bg)"/>
|
|
</svg>
|
|
<h1>Media Centre</h1>
|
|
</div>
|
|
|
|
<div class="card">
|
|
{% if error %}
|
|
<div class="error-msg" role="alert">{{ error }}</div>
|
|
{% endif %}
|
|
|
|
<form method="POST" action="{{ url_for('login', next=request.args.get('next', '')) }}">
|
|
<label for="password">Password</label>
|
|
<input type="password" id="password" name="password"
|
|
placeholder="Enter password" autofocus autocomplete="current-password">
|
|
<button type="submit">Sign in</button>
|
|
</form>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|