feat(web): dark Gitea UI, systemd installer, WEB-UI docs (W7)

Restyles every template with a hand-written dark Gitea-style theme
(web/static/app.css, ~270 lines: badges, buttons, cards, focus rings,
prefers-reduced-motion) and completes the htmx polling wiring for all
four dashboard cards. Adds the repeatable setup-web-linux.sh installer
(idempotent: pip install '[web]' non-editable, render ci-web.service,
template [web]/[web.oidc] into config.toml, prompt for keyring secrets,
print Gitea OIDC registration steps, enable/restart the unit) plus
deploy/systemd/ci-web.service and docs/WEB-UI.md.
This commit is contained in:
2026-07-23 18:36:15 +02:00
parent 43925e6746
commit 60cee5418e
14 changed files with 953 additions and 128 deletions
@@ -6,30 +6,40 @@
<section class="card" id="audit-card">
<h2>Audit log</h2>
{% if entries %}
<table>
<thead>
<tr>
<th>Time</th>
<th>User</th>
<th>Action</th>
<th>Target</th>
<th>Result</th>
<th>Detail</th>
</tr>
</thead>
<tbody>
{% for e in entries %}
<tr class="{{ 'row-alert' if e.result == 'error' else '' }}">
<td>{{ e.ts }}</td>
<td>{{ e.user }}</td>
<td>{{ e.action }}</td>
<td><code>{{ e.target }}</code></td>
<td>{{ e.result }}</td>
<td>{{ e.detail }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>Time</th>
<th>User</th>
<th>Action</th>
<th>Target</th>
<th>Result</th>
<th>Detail</th>
</tr>
</thead>
<tbody>
{% for e in entries %}
<tr class="{{ 'row-alert' if e.result == 'error' else '' }}">
<td>{{ e.ts }}</td>
<td>{{ e.user }}</td>
<td>{{ e.action }}</td>
<td><code>{{ e.target }}</code></td>
<td>
{% if e.result == "ok" %}
<span class="badge badge-success">ok</span>
{% elif e.result == "error" %}
<span class="badge badge-danger">error</span>
{% else %}
<span class="badge badge-warn">{{ e.result }}</span>
{% endif %}
</td>
<td>{{ e.detail }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<p>No audit entries yet.</p>
{% endif %}