v0.11.0

 ## Added
 - A Scoring page for staff, replacing the empty placeholder. It shows the top three teams, a
   score graph, and a breakdown table with each team's uptime, inject, IR report and adjustment
   totals and their sum. The table sorts on any column and the page refreshes every 30 seconds.
   If a refresh fails, the last loaded scores stay on screen with the error above them
 - A score graph over time, switchable between total, uptime, inject, IR report and adjustment
   scores, on a linear or symmetric log axis. Lines step instead of sloping, since a score holds
   until the next event changes it. Dots mark each grade and adjustment, and hovering names the
   team, the event, the score and the time
 - The graph starts on the top eight teams, each in its own colour. Teams can be toggled, all
   selected or cleared. Past eight, teams draw in grey underneath, and a team keeps its colour
   while others are added or removed
 - The graph only asks for as much uptime history as it can draw. `GET /api/scores/history`
   takes the chart's width in points (50 to 2000) and returns at most that many uptime events per
   team, keeping the last round in each time bucket. A pause between rounds stays a gap. The
   browser fetches and shapes the history in a web worker, so a long competition does not block
   the page
 - Score adjustments. Staff add a bonus or penalty to a blue team with a reason, and edit or
   delete it later. WHITE can read them, BLACK and up can change them. An adjustment cannot be
   moved to another team or round, since that would rewrite the other team's history. Deleting
   one keeps its history
 - An audit log of every adjustment change, recording who made it, when, the adjustment before
   and after, and the team's total before and after. Each adjustment has a History button, and
   the adjustments page lists recent changes across all teams, including deleted adjustments.
   Both page back through older entries
 - `GET /api/scores/dashboard`, `GET /api/scores/history`, and `GET`, `POST`, `PATCH` and
   `DELETE` on `/api/scores/adjustments`, plus `GET /api/scores/adjustments/audit`
 - Score requests in the Bruno collection, under "admin actions/scores"

 ## Changed
 - A team's inject total counts only the latest graded submission for each inject. A graded
   resubmission replaces the earlier grade, and an ungraded one leaves it standing. Before, every
   graded submission was added, so a regraded resubmission counted twice. Existing cached
   totals keep the old sum until `POST /api/scores/recalculate` runs or the team is graded again
 - The admin nav's "Scores" link is nashboard is titled "Engine
   Dashboard"
 - The frontend depends on `d3-scale` scales
 - Schema changes for an existing database, which `setup_db.go` does not touch: the new
   `Score_Adjustment_Audit` table and)` index