Add MOT/insurance renewal hints, table service card, and favicon

- Renewal tracking: compute due/overdue status from the most recent
  mot/insurance event (renewal_months, renewal_due_soon_days settings),
  surfaced on the service card and dashboard.
- Service-status card metrics now render as a two-column label/value
  table with row separators instead of wrapping auto-fill grid cells.
- Add a bicycle favicon (favicon.svg) to base + login templates.

Co-Authored-By: opencode <opencode@users.noreply.github.com>
This commit is contained in:
2026-09-10 10:01:17 +01:00
co-authored by opencode
parent 99c15e23bb
commit aced0a1a3b
10 changed files with 225 additions and 1 deletions
@@ -20,4 +20,16 @@
<dt>Records</dt><dd>{{ summary.event_count }}</dd>
<dt>Cost to date</dt><dd>{{ summary.total_cost | money }}</dd>
</dl>
<div class="renewals">
<div class="renewal">
<span class="renewal-label">MOT</span>
<span class="badge {{ renewal_class(summary.mot) }} {{ summary.mot.status }}">{{ renewal_text(summary.mot) }}</span>
<span class="muted">due {{ summary.mot.due_date if summary.mot.due_date else 'n/a' }}</span>
</div>
<div class="renewal">
<span class="renewal-label">Insurance</span>
<span class="badge {{ renewal_class(summary.insurance) }} {{ summary.insurance.status }}">{{ renewal_text(summary.insurance) }}</span>
<span class="muted">due {{ summary.insurance.due_date if summary.insurance.due_date else 'n/a' }}</span>
</div>
</div>
</div>