Skip to content

Instantly share code, notes, and snippets.

@rgstephens
Created September 7, 2026 03:26
Show Gist options
  • Select an option

  • Save rgstephens/731278973cc5b4b0db0022432eaee7c3 to your computer and use it in GitHub Desktop.

Select an option

Save rgstephens/731278973cc5b4b0db0022432eaee7c3 to your computer and use it in GitHub Desktop.
Drill Tracker issue 15 — three drill-run UI design options
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Issue 15 — Drill run UI options</title>
<style>
:root {
--paper: #f6f1e4;
--raised: #ede6d3;
--ink: #2b2b28;
--pencil: #7a7365;
--blue: #3b5b7a;
--red: #b23a2e;
--rule: #c9bfa8;
--bright: #fbf8f0;
--grid: #e3dbc6;
--board: #d8d0bf;
}
* { box-sizing: border-box; }
html, body { width: 100%; height: 100%; margin: 0; }
body {
background: var(--board);
color: var(--ink);
font-family: Georgia, "Times New Roman", serif;
}
button { font: inherit; color: inherit; }
.board {
display: none;
width: 1600px;
height: 1000px;
padding: 34px 42px 42px;
overflow: hidden;
background:
linear-gradient(90deg, transparent 41px, rgb(43 43 40 / 0.09) 42px, transparent 43px),
var(--board);
}
body[data-option="1"] .option-1,
body[data-option="2"] .option-2,
body[data-option="3"] .option-3 { display: block; }
.board-head {
height: 82px;
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.eyebrow, .label, .mono, .status, .metric-label, .serial, .run-count {
font-family: "Courier New", monospace;
text-transform: uppercase;
letter-spacing: 0.08em;
}
.eyebrow { margin: 0 0 4px; color: var(--blue); font-size: 13px; font-weight: 700; }
.board h1 { margin: 0; font-size: 30px; line-height: 1; }
.thesis { width: 470px; margin: 2px 0 0; color: #5f594e; font-size: 15px; line-height: 1.35; }
.stage {
height: 842px;
display: grid;
grid-template-columns: 1090px 390px;
gap: 26px;
align-items: start;
}
.desktop {
height: 842px;
background: var(--paper);
border: 1px solid #aaa18f;
box-shadow: 0 14px 34px rgb(43 43 40 / 0.13);
overflow: hidden;
}
.desktop-shell { display: grid; grid-template-columns: 180px 1fr; height: 100%; }
.rail { background: var(--raised); border-right: 1px solid var(--rule); padding: 24px 18px; }
.brand { font-weight: 700; font-size: 19px; margin-bottom: 30px; }
.rail-link { padding: 12px 8px; font-weight: 700; border-radius: 4px; }
.rail-link.active { color: var(--blue); background: rgb(59 91 122 / 0.1); }
.desktop-main { min-width: 0; }
.appbar {
height: 64px;
padding: 0 24px;
display: flex;
align-items: center;
justify-content: space-between;
background: var(--raised);
border-bottom: 1px solid var(--rule);
}
.appbar strong { font-size: 19px; }
.appbar span { color: var(--pencil); font-size: 13px; }
.content { padding: 22px 26px 28px; }
.content-head { display: flex; align-items: end; justify-content: space-between; margin-bottom: 18px; }
.content h2 { margin: 0 0 4px; font-size: 25px; }
.sub { color: var(--pencil); margin: 0; font-size: 14px; }
.stamp {
min-height: 46px;
padding: 0 18px;
background: transparent;
color: var(--blue);
border: 2px solid var(--blue);
border-radius: 3px;
font-family: "Courier New", monospace;
text-transform: uppercase;
letter-spacing: 0.06em;
font-weight: 700;
transform: rotate(-1deg);
}
.ghost { min-height: 40px; padding: 0 12px; background: transparent; border: 1px solid var(--pencil); border-radius: 4px; }
.link { min-height: 38px; padding: 0; background: none; border: 0; color: var(--blue); text-decoration: underline; font-weight: 700; }
.danger { color: var(--red); }
.status { font-size: 11px; font-weight: 700; }
.status.progress { color: var(--blue); }
.status.complete { color: var(--red); }
.kebab { border: 0; background: transparent; font-size: 22px; width: 36px; height: 40px; }
.phone-wrap { position: relative; padding-top: 30px; }
.phone-label { position: absolute; top: 0; left: 14px; font: 12px "Courier New", monospace; letter-spacing: .08em; text-transform: uppercase; color: #5f594e; }
.phone {
width: 390px;
height: 780px;
overflow: hidden;
border: 8px solid #373632;
border-radius: 34px;
background: var(--paper);
box-shadow: 0 14px 34px rgb(43 43 40 / 0.2);
}
.phone-top { height: 25px; background: var(--raised); position: relative; }
.phone-top::after { content: ""; position: absolute; width: 76px; height: 5px; border-radius: 5px; background: #373632; left: 50%; top: 8px; transform: translateX(-50%); }
.phone .appbar { height: 54px; padding: 0 14px; }
.phone .appbar strong { font-size: 17px; }
.phone-content { padding: 16px 14px 22px; }
.phone h2 { font-size: 22px; margin: 0 0 4px; }
.bottom-tabs { height: 52px; border-top: 1px solid var(--rule); background: var(--raised); display: flex; }
.bottom-tabs span { flex: 1; text-align: center; padding-top: 15px; font-weight: 700; }
.bottom-tabs .active { color: var(--blue); box-shadow: inset 0 -3px var(--blue); }
/* Option 1: Ledger Register */
.register { border-top: 2px solid var(--ink); }
.register-head, .register-row {
display: grid;
grid-template-columns: 20px 180px 126px 86px 80px 90px 112px 28px;
gap: 10px;
align-items: center;
}
.register-head { min-height: 34px; color: var(--pencil); font: 10px "Courier New", monospace; text-transform: uppercase; letter-spacing: .05em; }
.register-row { position: relative; min-height: 72px; border-top: 1px solid var(--rule); }
.register-row.active { background: linear-gradient(90deg, rgb(59 91 122 / .09), transparent 72%); }
.margin-mark { width: 14px; height: 34px; border-left: 3px solid var(--blue); position: relative; }
.margin-mark::after { content: ""; width: 8px; height: 8px; background: var(--blue); border-radius: 50%; position: absolute; left: -5px; top: 13px; }
.seal { width: 18px; height: 18px; border: 2px double var(--red); border-radius: 50%; color: var(--red); display: grid; place-items: center; font: 11px "Courier New", monospace; transform: rotate(-6deg); }
.date strong { display: block; font-size: 15px; }
.date small { color: var(--pencil); }
.num { font-family: "Courier New", monospace; font-weight: 700; }
.resume-mini { border: 1.5px solid var(--blue); color: var(--blue); min-height: 38px; padding: 0 10px; background: transparent; border-radius: 3px; font-weight: 700; }
.register-detail { margin-top: 18px; display: grid; grid-template-columns: 250px 1fr; border: 1px solid var(--rule); background: var(--bright); }
.detail-summary { padding: 18px; border-right: 1px solid var(--rule); }
.detail-summary h3 { margin: 5px 0 14px; font-size: 19px; }
.big-percent { font: 700 54px/1 "Courier New", monospace; color: var(--blue); }
.metric-pair { display: flex; gap: 22px; margin: 10px 0 18px; }
.metric-pair strong { display: block; font: 700 19px "Courier New", monospace; }
.detail-lines { padding: 12px 18px; }
.drill-line { display: grid; grid-template-columns: 1fr 68px 58px 90px; min-height: 42px; align-items: center; border-bottom: 1px solid var(--grid); font-size: 13px; }
.partial { color: var(--blue); font-style: italic; }
.not-reached { color: var(--pencil); }
.phone-register { border-top: 2px solid var(--ink); margin-top: 16px; }
.phone-run { padding: 13px 0 14px 16px; border-bottom: 1px solid var(--rule); position: relative; }
.phone-run.active::before { content: ""; position: absolute; left: 0; top: 12px; bottom: 12px; width: 3px; background: var(--blue); }
.phone-run .topline { display: flex; justify-content: space-between; align-items: center; }
.phone-run .metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 10px; }
.phone-run .metrics span { color: var(--pencil); font-size: 11px; }
.phone-run .metrics strong { display: block; color: var(--ink); font: 700 17px "Courier New", monospace; }
.phone-actions { display: flex; gap: 8px; margin-top: 11px; }
.phone-actions button { flex: 1; }
/* Option 2: Detachable Scorecard */
.slip-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.slip {
display: grid;
grid-template-columns: 1fr 132px;
min-height: 170px;
border: 1px solid var(--rule);
background: var(--bright);
box-shadow: 3px 4px 0 rgb(122 115 101 / .12);
position: relative;
}
.slip.active { border-color: var(--blue); }
.slip-main { padding: 18px 20px; }
.slip-stub { border-left: 1px dashed var(--pencil); padding: 17px 14px; background: repeating-linear-gradient(0deg, transparent 0 27px, var(--grid) 28px); }
.serial { font-size: 10px; color: var(--pencil); }
.slip h3 { margin: 8px 0 3px; font-size: 19px; }
.slip p { margin: 0; color: var(--pencil); font-size: 13px; }
.slip-actions { position: absolute; left: 20px; bottom: 14px; display: flex; gap: 16px; }
.stub-score { font: 700 31px "Courier New", monospace; display: block; }
.stub-percent { font: 700 23px "Courier New", monospace; color: var(--blue); display: block; margin-top: 8px; }
.stub-done { font: 700 13px "Courier New", monospace; display: block; margin-top: 12px; }
.expanded-slip { margin-top: 18px; border: 1px solid var(--rule); background: var(--bright); display: grid; grid-template-columns: 1fr 252px; }
.score-grid { padding: 14px 20px 18px; display: grid; grid-template-columns: repeat(2, 1fr); column-gap: 24px; }
.score-grid .drill-line { grid-template-columns: 1fr 54px 50px; }
.resume-panel { border-left: 1px dashed var(--pencil); padding: 18px; display: flex; flex-direction: column; justify-content: space-between; }
.resume-panel h3 { margin: 4px 0; }
.resume-panel p { color: var(--pencil); font-size: 13px; }
.resume-panel .stamp { width: 100%; }
.phone-slip { margin-top: 14px; border: 1px solid var(--rule); background: var(--bright); }
.phone-slip .slip-main { padding: 14px 16px 12px; }
.phone-slip .stub-mobile { display: grid; grid-template-columns: repeat(3,1fr); border-top: 1px dashed var(--pencil); padding: 12px 16px; }
.phone-slip .stub-mobile strong { font: 700 18px "Courier New", monospace; display: block; }
.phone-slip .stub-mobile span { font-size: 10px; color: var(--pencil); text-transform: uppercase; }
.phone-slip .phone-actions { padding: 0 16px 14px; }
/* Option 3: Dated Folio */
.folio { height: 690px; display: grid; grid-template-columns: 284px 1fr; border-top: 2px solid var(--ink); border-bottom: 1px solid var(--rule); }
.folio-index { border-right: 1px solid var(--rule); background: var(--raised); overflow: hidden; }
.folio-entry { display: grid; grid-template-columns: 64px 1fr; gap: 12px; padding: 16px 14px; min-height: 112px; border-bottom: 1px solid var(--rule); }
.folio-entry.selected { background: var(--bright); box-shadow: inset 3px 0 var(--blue); }
.date-block { text-align: center; border-right: 1px solid var(--rule); padding-right: 10px; }
.date-block strong { display: block; font: 700 31px/1 "Courier New", monospace; }
.date-block span { font: 11px "Courier New", monospace; text-transform: uppercase; }
.folio-copy strong { display: block; margin: 2px 0 7px; }
.folio-copy p { margin: 0; color: var(--pencil); font: 12px "Courier New", monospace; }
.folio-detail { padding: 22px 24px; background: var(--bright); }
.folio-detail-head { display: flex; justify-content: space-between; align-items: flex-start; padding-bottom: 16px; border-bottom: 1px solid var(--rule); }
.folio-date { display: grid; grid-template-columns: 78px 1fr; gap: 18px; align-items: center; }
.folio-date .day { font: 700 60px/1 "Courier New", monospace; color: var(--blue); border-right: 1px solid var(--rule); }
.folio-date h3 { margin: 0 0 4px; font-size: 22px; }
.folio-actions { display: flex; gap: 10px; }
.folio-metrics { display: grid; grid-template-columns: repeat(3,1fr); margin: 18px 0; border: 1px solid var(--rule); }
.folio-metric { padding: 13px 16px; border-right: 1px solid var(--rule); }
.folio-metric:last-child { border: 0; }
.folio-metric strong { font: 700 25px "Courier New", monospace; display: block; }
.sequence { display: grid; gap: 0; }
.sequence-row { min-height: 50px; display: grid; grid-template-columns: 28px 1fr 72px 58px 88px; align-items: center; border-bottom: 1px solid var(--grid); font-size: 13px; }
.sequence-no { color: var(--pencil); font: 12px "Courier New", monospace; }
.sequence-row.current { background: rgb(59 91 122 / .08); box-shadow: inset 3px 0 var(--blue); padding-left: 8px; margin-left: -8px; }
.phone-folio-head { display: grid; grid-template-columns: 76px 1fr; align-items: center; margin: 14px 0; }
.phone-folio-head .day { font: 700 56px/1 "Courier New", monospace; color: var(--blue); border-right: 1px solid var(--rule); }
.phone-folio-head div:last-child { padding-left: 14px; }
.phone-folio-metrics { display: grid; grid-template-columns: repeat(3,1fr); border-block: 1px solid var(--rule); }
.phone-folio-metrics div { padding: 10px 6px; text-align: center; border-right: 1px solid var(--rule); }
.phone-folio-metrics div:last-child { border: 0; }
.phone-folio-metrics strong { display: block; font: 700 18px "Courier New", monospace; }
.phone-sequence { margin-top: 12px; }
.phone-sequence .sequence-row { grid-template-columns: 25px 1fr 42px 54px; min-height: 48px; }
@media (max-width: 900px) {
.board { transform-origin: top left; transform: scale(.55); }
}
</style>
</head>
<body data-option="1">
<section class="board option-1">
<header class="board-head">
<div><p class="eyebrow">Issue 15 · Option A</p><h1>Ledger Register</h1></div>
<p class="thesis">A ruled run register optimized for quick comparison. The scorekeeper’s margin marks the unfinished run, while a compact detail ledger keeps every drill inspectable.</p>
</header>
<div class="stage">
<div class="desktop">
<div class="desktop-shell">
<aside class="rail"><div class="brand">Drill Tracker</div><div class="rail-link active">Lists</div><div class="rail-link">Charts</div></aside>
<main class="desktop-main">
<header class="appbar"><strong>Book of Snooker Shots</strong><span>Add passkey &nbsp; Sign out</span></header>
<div class="content">
<div class="content-head"><div><h2>Run history</h2><p class="sub">4 runs · newest first</p></div><button class="stamp">Run set</button></div>
<div class="register">
<div class="register-head"><span></span><span>Started</span><span>Status</span><span>Total</span><span>Success</span><span>Drills</span><span>Action</span><span></span></div>
<div class="register-row active"><span class="margin-mark"></span><span class="date"><strong>6 Sep 2026</strong><small>7:42 pm</small></span><span class="status progress">In progress</span><span class="num">38</span><span class="num">63%</span><span class="num">8 / 12</span><button class="resume-mini">Resume</button><button class="kebab">⋮</button></div>
<div class="register-row"><span class="seal">✓</span><span class="date"><strong>3 Sep 2026</strong><small>6:15 pm</small></span><span class="status complete">Complete</span><span class="num">51</span><span class="num">84%</span><span class="num">12 / 12</span><button class="link">Details</button><button class="kebab">⋮</button></div>
<div class="register-row"><span class="seal">✓</span><span class="date"><strong>30 Aug 2026</strong><small>10:08 am</small></span><span class="status complete">Complete</span><span class="num">46</span><span class="num">77%</span><span class="num">12 / 12</span><button class="link">Details</button><button class="kebab">⋮</button></div>
</div>
<div class="register-detail">
<section class="detail-summary"><span class="status progress">Selected · In progress</span><h3>6 Sep · 7:42 pm</h3><div class="big-percent">63%</div><div class="metric-pair"><div><strong>38</strong><span class="metric-label">Total</span></div><div><strong>8 / 12</strong><span class="metric-label">Drills</span></div></div><button class="stamp">Resume run</button></section>
<section class="detail-lines">
<div class="drill-line"><strong>Potting the Yellow</strong><span class="num">4 / 6</span><span class="num">67%</span><span class="status complete">Complete</span></div>
<div class="drill-line"><strong>Black–Red–Black</strong><span class="num">11 / 15</span><span class="num">73%</span><span class="status complete">Complete</span></div>
<div class="drill-line partial"><strong>Long pot routine</strong><span class="num">2 / 5</span><span>—</span><span>Partial</span></div>
<div class="drill-line not-reached"><strong>Safety escape</strong><span>—</span><span>—</span><span>Not reached</span></div>
</section>
</div>
</div>
</main>
</div>
</div>
<aside class="phone-wrap"><span class="phone-label">390 px mobile</span><div class="phone"><div class="phone-top"></div><header class="appbar"><strong>Run history</strong><span>Sign out</span></header><div class="phone-content"><h2>Book of Snooker Shots</h2><p class="sub">4 runs · newest first</p><div class="phone-register"><article class="phone-run active"><div class="topline"><div><strong>6 Sep · 7:42 pm</strong><div class="status progress">In progress</div></div><button class="kebab">⋮</button></div><div class="metrics"><span><strong>38</strong>Total</span><span><strong>63%</strong>Success</span><span><strong>8 / 12</strong>Drills</span></div><div class="phone-actions"><button class="stamp">Resume run</button><button class="ghost">Details</button></div></article><article class="phone-run"><div class="topline"><div><strong>3 Sep · 6:15 pm</strong><div class="status complete">Complete</div></div><button class="kebab">⋮</button></div><div class="metrics"><span><strong>51</strong>Total</span><span><strong>84%</strong>Success</span><span><strong>12 / 12</strong>Drills</span></div><div class="phone-actions"><button class="ghost">View details</button></div></article><article class="phone-run"><div class="topline"><div><strong>30 Aug · 10:08 am</strong><div class="status complete">Complete</div></div></div><div class="metrics"><span><strong>46</strong>Total</span><span><strong>77%</strong>Success</span><span><strong>12 / 12</strong>Drills</span></div></article></div></div><div class="bottom-tabs"><span class="active">Lists</span><span>Charts</span></div></div></aside>
</div>
</section>
<section class="board option-2">
<header class="board-head">
<div><p class="eyebrow">Issue 15 · Option B</p><h1>Detachable Scorecard</h1></div>
<p class="thesis">Each run is a physical score slip. A perforated tally stub makes score, success, and completion instantly scannable; the selected card unfolds into its drill results.</p>
</header>
<div class="stage">
<div class="desktop"><div class="desktop-shell"><aside class="rail"><div class="brand">Drill Tracker</div><div class="rail-link active">Lists</div><div class="rail-link">Charts</div></aside><main class="desktop-main"><header class="appbar"><strong>Book of Snooker Shots</strong><span>Add passkey &nbsp; Sign out</span></header><div class="content"><div class="content-head"><div><h2>Past scorecards</h2><p class="sub">Choose a run to unfold its results</p></div><button class="stamp">Run set</button></div><div class="slip-grid">
<article class="slip active"><div class="slip-main"><span class="serial">Run 0042</span><h3>6 Sep 2026 · 7:42 pm</h3><span class="status progress">In progress</span><p>Paused at Long pot routine</p><div class="slip-actions"><button class="link">View details</button><button class="link danger">Delete…</button></div></div><aside class="slip-stub"><span class="stub-score">38</span><span class="metric-label">Total</span><span class="stub-percent">63%</span><span class="metric-label">Success</span><span class="stub-done">8 / 12 drills</span></aside></article>
<article class="slip"><div class="slip-main"><span class="serial">Run 0041</span><h3>3 Sep 2026 · 6:15 pm</h3><span class="status complete">Complete</span><p>All drills recorded</p><div class="slip-actions"><button class="link">View details</button><button class="kebab">⋮</button></div></div><aside class="slip-stub"><span class="stub-score">51</span><span class="metric-label">Total</span><span class="stub-percent">84%</span><span class="metric-label">Success</span><span class="stub-done">12 / 12 drills</span></aside></article>
</div><div class="expanded-slip"><section class="score-grid"><div class="drill-line"><strong>Potting the Yellow</strong><span class="num">4</span><span class="num">67%</span></div><div class="drill-line"><strong>Black–Red–Black</strong><span class="num">11</span><span class="num">73%</span></div><div class="drill-line"><strong>Line-up clearance</strong><span class="num">6</span><span class="num">60%</span></div><div class="drill-line"><strong>Cushion control</strong><span class="num">5</span><span class="num">71%</span></div><div class="drill-line partial"><strong>Long pot routine</strong><span class="num">2/5</span><span>—</span></div><div class="drill-line not-reached"><strong>Safety escape</strong><span>—</span><span>—</span></div></section><aside class="resume-panel"><div><span class="serial">Continue run 0042</span><h3>Drill 9 of 12</h3><p>Your two recorded attempts are waiting. Continue where you stopped.</p></div><button class="stamp">Resume run</button></aside></div></div></main></div></div>
<aside class="phone-wrap"><span class="phone-label">390 px mobile</span><div class="phone"><div class="phone-top"></div><header class="appbar"><strong>Past scorecards</strong><span>Sign out</span></header><div class="phone-content"><h2>Book of Snooker Shots</h2><p class="sub">4 scorecards</p><article class="phone-slip"><div class="slip-main"><span class="serial">Run 0042</span><h3>6 Sep · 7:42 pm</h3><span class="status progress">In progress</span><p>Paused at Long pot routine</p></div><div class="stub-mobile"><span><strong>38</strong>Total</span><span><strong>63%</strong>Success</span><span><strong>8 / 12</strong>Drills</span></div><div class="phone-actions"><button class="stamp">Resume</button><button class="ghost">Details</button></div></article><article class="phone-slip"><div class="slip-main"><span class="serial">Run 0041</span><h3>3 Sep · 6:15 pm</h3><span class="status complete">Complete</span></div><div class="stub-mobile"><span><strong>51</strong>Total</span><span><strong>84%</strong>Success</span><span><strong>12 / 12</strong>Drills</span></div><div class="phone-actions"><button class="ghost">View details</button></div></article></div><div class="bottom-tabs"><span class="active">Lists</span><span>Charts</span></div></div></aside>
</div>
</section>
<section class="board option-3">
<header class="board-head">
<div><p class="eyebrow">Issue 15 · Option C</p><h1>Dated Folio</h1></div>
<p class="thesis">A chronological index and reading pane for deeper review. Oversized date blocks turn every run into a memorable practice-ledger entry without sacrificing dense drill detail.</p>
</header>
<div class="stage">
<div class="desktop"><div class="desktop-shell"><aside class="rail"><div class="brand">Drill Tracker</div><div class="rail-link active">Lists</div><div class="rail-link">Charts</div></aside><main class="desktop-main"><header class="appbar"><strong>Book of Snooker Shots</strong><span>Add passkey &nbsp; Sign out</span></header><div class="content"><div class="content-head"><div><h2>Run folio</h2><p class="sub">Review or continue a practice run</p></div><button class="stamp">Run set</button></div><div class="folio"><aside class="folio-index"><article class="folio-entry selected"><div class="date-block"><strong>06</strong><span>Sep<br>2026</span></div><div class="folio-copy"><span class="status progress">In progress</span><strong>7:42 pm</strong><p>63% · 8 / 12 drills</p></div></article><article class="folio-entry"><div class="date-block"><strong>03</strong><span>Sep<br>2026</span></div><div class="folio-copy"><span class="status complete">Complete</span><strong>6:15 pm</strong><p>84% · 12 / 12 drills</p></div></article><article class="folio-entry"><div class="date-block"><strong>30</strong><span>Aug<br>2026</span></div><div class="folio-copy"><span class="status complete">Complete</span><strong>10:08 am</strong><p>77% · 12 / 12 drills</p></div></article></aside><section class="folio-detail"><header class="folio-detail-head"><div class="folio-date"><div class="day">06</div><div><span class="status progress">In progress</span><h3>September 2026 · 7:42 pm</h3><span class="sub">Paused at drill 9</span></div></div><div class="folio-actions"><button class="stamp">Resume run</button><button class="kebab">⋮</button></div></header><div class="folio-metrics"><div class="folio-metric"><strong>38</strong><span class="metric-label">Total score</span></div><div class="folio-metric"><strong>63%</strong><span class="metric-label">Success</span></div><div class="folio-metric"><strong>8 / 12</strong><span class="metric-label">Completed</span></div></div><div class="sequence"><div class="sequence-row"><span class="sequence-no">01</span><strong>Potting the Yellow</strong><span class="num">4 / 6</span><span class="num">67%</span><span class="status complete">Complete</span></div><div class="sequence-row"><span class="sequence-no">02</span><strong>Black–Red–Black</strong><span class="num">11 / 15</span><span class="num">73%</span><span class="status complete">Complete</span></div><div class="sequence-row"><span class="sequence-no">08</span><strong>Cushion control</strong><span class="num">5 / 7</span><span class="num">71%</span><span class="status complete">Complete</span></div><div class="sequence-row current"><span class="sequence-no">09</span><strong>Long pot routine</strong><span class="num">2 / 5</span><span>—</span><span class="status progress">Current</span></div><div class="sequence-row not-reached"><span class="sequence-no">10</span><strong>Safety escape</strong><span>—</span><span>—</span><span>Not reached</span></div></div></section></div></div></main></div></div>
<aside class="phone-wrap"><span class="phone-label">390 px mobile · detail</span><div class="phone"><div class="phone-top"></div><header class="appbar"><strong>← Run history</strong><button class="kebab">⋮</button></header><div class="phone-content"><div class="phone-folio-head"><div class="day">06</div><div><span class="status progress">In progress</span><h2>September</h2><span class="sub">7:42 pm</span></div></div><div class="phone-folio-metrics"><div><strong>38</strong><span class="metric-label">Total</span></div><div><strong>63%</strong><span class="metric-label">Success</span></div><div><strong>8 / 12</strong><span class="metric-label">Drills</span></div></div><div class="phone-actions"><button class="stamp">Resume run</button><button class="ghost danger">Delete…</button></div><div class="phone-sequence"><div class="sequence-row"><span class="sequence-no">01</span><strong>Potting Yellow</strong><span class="num">4</span><span class="num">67%</span></div><div class="sequence-row"><span class="sequence-no">02</span><strong>Black–Red–Black</strong><span class="num">11</span><span class="num">73%</span></div><div class="sequence-row"><span class="sequence-no">08</span><strong>Cushion control</strong><span class="num">5</span><span class="num">71%</span></div><div class="sequence-row current"><span class="sequence-no">09</span><strong>Long pot routine</strong><span class="num">2/5</span><span class="status progress">Current</span></div><div class="sequence-row not-reached"><span class="sequence-no">10</span><strong>Safety escape</strong><span>—</span><span>—</span></div></div></div><div class="bottom-tabs"><span class="active">Lists</span><span>Charts</span></div></div></aside>
</div>
</section>
<script>
const option = new URLSearchParams(location.search).get("option");
document.body.dataset.option = ["1", "2", "3"].includes(option) ? option : "1";
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment