Applies the fix round from the finish-reviewer's disposition on commit
4b19cbd, in one batch:
- System's disk table is unreadable below 560px: horizontal-scrolling a
6-column table hid the usage bar and the temperature, the two
readings that matter most (discipline 3 — one shared ruler — was
unauditable as a result). Added a disk_row() macro and a phone-only
.tt-disk-rows reflow (name + full 20-cell bar + temp on one line,
device/free/total beneath), CSS-toggled against the existing table
at the same breakpoint.
- Contrast failure on the highest-severity state: white text on the
red .tt-field.crit/.tt-toast.error/.tt-btn.armed reversals measured
4.0:1, under the 4.5:1 floor. Switched to black text (5.25:1),
matching the black-on-yellow .warn pattern already in use — and
fixed a second instance of the same bug: .tt-field.crit had no
.tt-field-meta override, unlike .warn.
- Two type families where the direction contract names one blocky
monospace: unified on a single self-hosted face (Space Mono, one
weight, no bold) for both body and the double-height row.
- FIRST VIEWPORT proportion: an unpromised 6-item Just Added grid was
competing with NOW SHOWING for the fold instead of the contract's
"lower two-thirds in double-height cyan." Cut to a fixed 3-item,
fixed-3-column row, which also fixes the orphaned-tile grid defect
as a side effect (a fixed count can't leave a lone tile beside empty
tracks).
- Three flat mid-grey fills contradicted discipline 1 (no in-between
tone): .tt-tile-art, .tt-btn:disabled, and .tt-err pre all painted a
solid --ink-dimmer background. Centralized the dither .tt-tile-art
already used correctly into a shared --dither-mid generator and
applied it to all three.
- Google Fonts dependency on a LAN-only home server: a dropped webfont
request was a silent identity change, not a graceful fallback.
Self-hosted Space Mono under static/fonts/ via @font-face; dropped
the <link> tags from _shell.html and login.html.
- Deliberately deferred: "pages differ in stock" (discipline 5) still
fires on only one band service-wide. Every other finding was a
bounded fix to existing code; this one asks for a new mechanism (an
aggregate status band on P100) rather than a correction, so it's
flagged for a follow-up rather than rushed into this batch.
Recaptured desktop.png, mobile.png, desktop-system.png and
mobile-system.png (the four files the reviewer's findings cited)
through the same true-390px iframe method as the prior round, and
returned them for the fix round's verdict pass.
Known follow-up: DESIGN.md's typography section (written by the
documenter before this batch) still names the old two-family pairing
and needs a re-run now that the font system changed under it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBw1QodG8ZMYHrGeQfqyDS
59 lines
2.2 KiB
HTML
59 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Media Centre</title>
|
|
<meta name="theme-color" content="#000000">
|
|
<link rel="icon" href="{{ url_for('static', filename='favicon.svg') }}">
|
|
{#- Space Mono is self-hosted — see base.css's @font-face. -#}
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/base.css') }}">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/teletext.css') }}">
|
|
</head>
|
|
<body class="tt-login">
|
|
|
|
{#- The service's start-up page: the header row it always carries, the
|
|
masthead, and the one thing it wants before it will transmit. -#}
|
|
<header class="tt-head">
|
|
<span class="tt-head-num">P000</span>
|
|
<span class="tt-head-name">Sign In</span>
|
|
</header>
|
|
|
|
<main class="tt-page">
|
|
<h1 class="tt-dh bloom tt-masthead">MEDIA CENTRE</h1>
|
|
|
|
<div class="tt-field"><span>Access</span></div>
|
|
|
|
{% if error %}
|
|
<div class="tt-err" role="alert"><div class="tt-err-cause">{{ error }}</div></div>
|
|
{% endif %}
|
|
|
|
<form class="tt-form" method="POST" action="{{ url_for('login', next=request.args.get('next', '')) }}">
|
|
{# The username field only appears once accounts exist in
|
|
settings.json. A single-password install never sees a box it
|
|
would have to leave blank. #}
|
|
{% if multi_user %}
|
|
<div class="tt-field-row">
|
|
<label class="tt-label" for="username">Username</label>
|
|
<input class="tt-input" type="text" id="username" name="username"
|
|
autofocus autocomplete="username"
|
|
autocapitalize="none" autocorrect="off" spellcheck="false">
|
|
</div>
|
|
{% endif %}
|
|
<div class="tt-field-row">
|
|
<label class="tt-label" for="password">Password</label>
|
|
<input class="tt-input" type="password" id="password" name="password"
|
|
{% if not multi_user %}autofocus{% endif %}
|
|
autocomplete="current-password">
|
|
</div>
|
|
<button class="tt-btn" type="submit">Sign In</button>
|
|
</form>
|
|
</main>
|
|
|
|
<footer class="tt-foot">
|
|
<span>MEDIA CENTRE</span>
|
|
<span class="v">v{{ app_version }} · {{ app_version_date }}</span>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|