docs: import TRM design handoff + defer adoption to phase 3.8
A design handoff bundle generated by Claude Design (claude.ai/design) on 2026-05-02. Defines the Bloomberg/F1-pit-wall aesthetic for TRM: - ink-on-paper base + race-flag red accent (#E8412B) - square-edged everything, sharp printed offset shadows - mono numerics (JetBrains Mono) for any changing value - Goldplay (real licensed font, three weights in bundle fonts/) - four surfaces designed: dashboard / leaderboard / mobile / marketing (SPA scope is the first two) The bundle is committed in-tree at TRM_Design_System-handoff/ so 3.8 has the full source material when it picks the work up. Includes: - Top-level + project READMEs (the design spec) - chats/chat1.md (intent + iteration history) - colors_and_type.css (token set, drop-in for Tailwind 4 @theme) - fonts/ (Goldplay regular/semibold/bold) - ui_kits/ (HTML prototypes per surface) - preview/ (per-token visual reference cards) Updated phase-3-dogfood-readiness/README.md task 3.8 row to point at the bundle and document the recommended approach (retheme shadcn via CSS variable overrides + Tailwind 4 @theme, not replace). Why deferred: foundational tokens are non-blocking for Phase 1 (login + placeholder home) and Phase 2 (live map without chrome). Applying them now would either delay dogfood-blocking work or land partial styling that gets reworked when 3.8 lands the full pass.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
function RaceControl({ leaders, alerts, mats }) {
|
||||
return (
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '1.4fr 1fr', gap: 16 }}>
|
||||
<div className="card">
|
||||
<div className="card-head">
|
||||
<h3>Live leaderboard · Coastline 10K</h3>
|
||||
<span className="pill live" style={{ marginLeft: 'auto' }}><span className="dot"></span>LIVE</span>
|
||||
<span style={{ fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums', fontSize: 14, fontWeight: 600 }}>00:42:18.4</span>
|
||||
</div>
|
||||
<table className="lb">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style={{ width: 36 }}>POS</th>
|
||||
<th style={{ width: 50 }}>BIB</th>
|
||||
<th>NAME</th>
|
||||
<th>WAVE</th>
|
||||
<th className="num">SPLIT 3</th>
|
||||
<th className="num">GAP</th>
|
||||
<th className="num">PACE</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{leaders.map(l => (
|
||||
<tr key={l.pos}>
|
||||
<td style={{ fontWeight: 700, color: l.pos === 1 ? 'var(--flag)' : 'var(--ink)' }}>{l.pos}</td>
|
||||
<td>{l.bib}</td>
|
||||
<td className="name">{l.name}</td>
|
||||
<td>{l.wave}</td>
|
||||
<td className="num">{l.split}</td>
|
||||
<td className={'num ' + (l.gap === '—' ? '' : 'loss')}>{l.gap}</td>
|
||||
<td className="num">{l.pace}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
||||
<div className="card">
|
||||
<div className="card-head"><h3>Timing mats</h3></div>
|
||||
<div style={{ padding: 14, display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 8 }}>
|
||||
{mats.map(m => (
|
||||
<div key={m.id} style={{ border: '1px solid var(--hairline)', padding: '8px 10px', display: 'flex', alignItems: 'center', gap: 10 }}>
|
||||
<span className="dot" style={{ width: 8, height: 8, borderRadius: 999, background: m.online ? 'var(--green)' : 'var(--flag)', display: 'inline-block' }}></span>
|
||||
<div style={{ flex: 1 }}>
|
||||
<div style={{ fontFamily: 'var(--font-display)', fontSize: 12, fontWeight: 600 }}>{m.name}</div>
|
||||
<div style={{ fontFamily: 'var(--font-mono)', fontSize: 10, color: 'var(--ink-4)' }}>{m.id} · {m.km} km</div>
|
||||
</div>
|
||||
<span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, color: 'var(--ink-3)' }}>{m.reads}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<AlertFeed alerts={alerts} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
window.RaceControl = RaceControl;
|
||||
Reference in New Issue
Block a user