{
  "id": "sprint-board-timing",
  "name": "Timing Console",
  "theme": "sprint-board",
  "category": "App Shell",
  "description": "A timing operator’s frame where mat status is a filled block per mat, so a failed mat is visible before anyone notices missing splits downstream.",
  "layout": "A 200px mat rail, a filled live-finishers pane at numeral scale, and a discrepancy well; flat surfaces separated by the ground showing through.",
  "modules": [
    {
      "key": "rail",
      "name": "Mat rail",
      "html": "\n<nav class=\"mr\"><span class=\"brand\">Timing</span>\n<span class=\"k\">Mats</span>\n<ul>\n  <li class=\"ok\"><a href=\"#\">Start <b class=\"n\">1,500</b></a></li>\n  <li class=\"ok\"><a href=\"#\">3 km <b class=\"n\">1,488</b></a></li>\n  <li class=\"bad\"><a href=\"#\">5 km <b class=\"n\">1,204</b></a></li>\n  <li class=\"ok\"><a href=\"#\">7 km <b class=\"n\">1,472</b></a></li>\n  <li class=\"ok on\"><a href=\"#\">Finish <b class=\"n\">412</b></a></li>\n</ul>\n<div class=\"al\"><span class=\"k\">Alert</span><p>5 km mat dropped 284 reads between 08:41 and 08:46.</p></div></nav>"
    },
    {
      "key": "live",
      "name": "Live finishers",
      "html": "\n<section class=\"lf\"><header><h1>Finish</h1><span class=\"k\">Last read 3 seconds ago</span></header>\n<ol>\n  <li><span class=\"rk n\">412</span><div><b>Anwen Prys</b><span class=\"cl\">A-311 · Beckton AC</span></div><span class=\"tm n\">38:14</span></li>\n  <li><span class=\"rk n\">411</span><div><b>Douglas Ferrier</b><span class=\"cl\">A-208 · Unattached</span></div><span class=\"tm n\">38:12</span></li>\n  <li><span class=\"rk n\">410</span><div><b>Priya Raghunathan</b><span class=\"cl\">A-144 · Mill Bridge Runners</span></div><span class=\"tm n\">38:09</span></li>\n  <li><span class=\"rk n\">409</span><div><b>Bertie Nwachukwu</b><span class=\"cl\">A-402 · Kilcarn Harriers</span></div><span class=\"tm n\">38:07</span></li>\n</ol></section>"
    },
    {
      "key": "disc",
      "name": "Discrepancy well",
      "html": "\n<aside class=\"dw\"><h2>Discrepancies</h2>\n<ol>\n  <li class=\"note\"><span class=\"cd n\">A-104</span><div><b>Missing 5 km split</b><span>Reconstructed from 7 km mat. Provisional.</span></div></li>\n  <li class=\"note\"><span class=\"cd n\">A-288</span><div><b>Missing 5 km split</b><span>Reconstructed from 7 km mat. Provisional.</span></div></li>\n  <li><span class=\"cd n\">A-901</span><div><b>Finish before 7 km</b><span>Almost certainly a chip swap. Held for review.</span></div></li>\n  <li><span class=\"cd n\">A-455</span><div><b>No start read</b><span>Started from the wrong pen. Time taken from gun.</span></div></li>\n</ol>\n<div class=\"ac\"><button type=\"button\" class=\"pri\">Reconstruct all</button><button type=\"button\" class=\"sec\">Export exceptions</button></div></aside>"
    }
  ],
  "moduleCount": 3,
  "reorderable": false,
  "meta": {
    "id": "sprint-board-timing",
    "model": "Claude Opus 5",
    "author": "Claude Code",
    "createdAt": "2026-09-02T00:00:34+09:00",
    "updatedAt": "2026-09-02T00:00:34+09:00",
    "version": "1.0.0",
    "isNew": false
  },
  "link": "/api/v1/designs/sprint-board-timing.json",
  "structure": "A 200px mat rail, a filled live-finishers pane at numeral scale, and a discrepancy well; flat surfaces separated by the ground showing through.",
  "html": "<div class=\"dz dz-sprint-board-timing\" data-design=\"sprint-board-timing\" data-theme=\"sprint-board\">\n<section class=\"dz-mod\" data-mod=\"rail\" aria-label=\"Mat rail\">\n<nav class=\"mr\"><span class=\"brand\">Timing</span>\n<span class=\"k\">Mats</span>\n<ul>\n  <li class=\"ok\"><a href=\"#\">Start <b class=\"n\">1,500</b></a></li>\n  <li class=\"ok\"><a href=\"#\">3 km <b class=\"n\">1,488</b></a></li>\n  <li class=\"bad\"><a href=\"#\">5 km <b class=\"n\">1,204</b></a></li>\n  <li class=\"ok\"><a href=\"#\">7 km <b class=\"n\">1,472</b></a></li>\n  <li class=\"ok on\"><a href=\"#\">Finish <b class=\"n\">412</b></a></li>\n</ul>\n<div class=\"al\"><span class=\"k\">Alert</span><p>5 km mat dropped 284 reads between 08:41 and 08:46.</p></div></nav></section><section class=\"dz-mod\" data-mod=\"live\" aria-label=\"Live finishers\">\n<section class=\"lf\"><header><h1>Finish</h1><span class=\"k\">Last read 3 seconds ago</span></header>\n<ol>\n  <li><span class=\"rk n\">412</span><div><b>Anwen Prys</b><span class=\"cl\">A-311 · Beckton AC</span></div><span class=\"tm n\">38:14</span></li>\n  <li><span class=\"rk n\">411</span><div><b>Douglas Ferrier</b><span class=\"cl\">A-208 · Unattached</span></div><span class=\"tm n\">38:12</span></li>\n  <li><span class=\"rk n\">410</span><div><b>Priya Raghunathan</b><span class=\"cl\">A-144 · Mill Bridge Runners</span></div><span class=\"tm n\">38:09</span></li>\n  <li><span class=\"rk n\">409</span><div><b>Bertie Nwachukwu</b><span class=\"cl\">A-402 · Kilcarn Harriers</span></div><span class=\"tm n\">38:07</span></li>\n</ol></section></section><section class=\"dz-mod\" data-mod=\"disc\" aria-label=\"Discrepancy well\">\n<aside class=\"dw\"><h2>Discrepancies</h2>\n<ol>\n  <li class=\"note\"><span class=\"cd n\">A-104</span><div><b>Missing 5 km split</b><span>Reconstructed from 7 km mat. Provisional.</span></div></li>\n  <li class=\"note\"><span class=\"cd n\">A-288</span><div><b>Missing 5 km split</b><span>Reconstructed from 7 km mat. Provisional.</span></div></li>\n  <li><span class=\"cd n\">A-901</span><div><b>Finish before 7 km</b><span>Almost certainly a chip swap. Held for review.</span></div></li>\n  <li><span class=\"cd n\">A-455</span><div><b>No start read</b><span>Started from the wrong pen. Time taken from gun.</span></div></li>\n</ol>\n<div class=\"ac\"><button type=\"button\" class=\"pri\">Reconstruct all</button><button type=\"button\" class=\"sec\">Export exceptions</button></div></aside></section>\n</div>",
  "css": "\n.dz-sprint-board-timing { background: var(--background); color: var(--foreground); font-family: var(--pv-body); display: grid; grid-template-columns: 200px 1fr 300px; gap: 14px; padding: 14px; min-height: 620px; }\n.dz-sprint-board-timing .k { text-transform: uppercase; letter-spacing: .16em; font-size: 10.5px; font-weight: 700; color: var(--muted-foreground); display: block; }\n.dz-sprint-board-timing .n { font-family: var(--pv-mono); font-variant-numeric: tabular-nums; letter-spacing: -.04em; }\n.dz-sprint-board-timing .mr { background: var(--card); border-radius: var(--pv-radius-md); padding: 18px 16px; }\n.dz-sprint-board-timing .brand { font-family: var(--pv-display); text-transform: uppercase; font-weight: 800; letter-spacing: -.02em; font-size: 22px; display: block; margin-bottom: 20px; }\n.dz-sprint-board-timing .mr ul { list-style: none; margin: 8px 0 20px; padding: 0; display: grid; gap: 5px; }\n.dz-sprint-board-timing .mr a { display: flex; justify-content: space-between; align-items: center; padding: 10px 12px; text-decoration: none; color: var(--foreground); font-size: 13.5px; background: var(--secondary); border-radius: var(--pv-radius-sm); }\n.dz-sprint-board-timing .mr .bad a { background: var(--destructive); color: var(--destructive-foreground); }\n.dz-sprint-board-timing .mr .on a { background: var(--primary); color: var(--primary-foreground); }\n.dz-sprint-board-timing .al { border-left: 4px solid var(--accent); padding-left: 12px; }\n.dz-sprint-board-timing .al p { margin: 6px 0 0; font-size: 12.5px; line-height: 1.5; }\n.dz-sprint-board-timing .lf { background: var(--card); border-radius: var(--pv-radius-md); padding: 20px; }\n.dz-sprint-board-timing .lf header { display: flex; align-items: baseline; gap: 16px; margin-bottom: 16px; }\n.dz-sprint-board-timing h1 { font-family: var(--pv-display); text-transform: uppercase; font-weight: 800; letter-spacing: -.02em; font-size: 38px; margin: 0; }\n.dz-sprint-board-timing .lf ol { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }\n.dz-sprint-board-timing .lf li { display: grid; grid-template-columns: 96px 1fr 150px; align-items: center; height: 76px; background: var(--secondary); border-radius: var(--pv-radius-sm); padding: 0 18px; }\n.dz-sprint-board-timing .rk { font-size: 40px; font-weight: 700; }\n.dz-sprint-board-timing .lf b { display: block; font-family: var(--pv-display); text-transform: uppercase; font-weight: 800; letter-spacing: -.02em; font-size: 20px; }\n.dz-sprint-board-timing .cl { font-size: 12.5px; color: var(--muted-foreground); }\n.dz-sprint-board-timing .tm { font-size: 40px; font-weight: 700; text-align: right; }\n.dz-sprint-board-timing .dw { background: var(--card); border-radius: var(--pv-radius-md); padding: 20px; }\n.dz-sprint-board-timing h2 { font-family: var(--pv-display); text-transform: uppercase; font-weight: 800; letter-spacing: -.02em; font-size: 22px; margin: 0 0 12px; }\n.dz-sprint-board-timing .dw ol { list-style: none; margin: 0 0 18px; padding: 0; }\n.dz-sprint-board-timing .dw li { display: grid; grid-template-columns: 62px 1fr; gap: 12px; padding: 11px 0; border-bottom: 1px solid var(--border); }\n.dz-sprint-board-timing .dw .note { border-left: 4px solid var(--accent); padding-left: 10px; }\n.dz-sprint-board-timing .cd { font-size: 14px; font-weight: 700; }\n.dz-sprint-board-timing .dw b { display: block; font-size: 13.5px; }\n.dz-sprint-board-timing .dw span:not(.cd) { font-size: 12px; color: var(--muted-foreground); }\n.dz-sprint-board-timing .ac { display: grid; gap: 8px; }\n.dz-sprint-board-timing button { font: inherit; text-transform: uppercase; letter-spacing: .16em; font-size: 10.5px; font-weight: 700; color: var(--muted-foreground); font-family: var(--pv-body); color: var(--foreground); padding: 12px; border-radius: var(--pv-radius-sm); cursor: pointer; }\n.dz-sprint-board-timing .pri { background: var(--primary); color: var(--primary-foreground); border: 0; }\n.dz-sprint-board-timing .sec { background: var(--secondary); border: 0; }\n",
  "requiredTheme": "/api/v1/themes/sprint-board.json",
  "googleFontsHref": "https://fonts.googleapis.com/css2?family=League+Spartan:wght@400;500;600;700&family=Epilogue:wght@400;500;600;700&family=Chivo+Mono:wght@400;500;600;700&display=swap"
}