A medium macOS widget (~360×170pt) that plots remaining usage budget against an ideal steady-burn line — the agile-sprint burn-down, applied to a 5-hour or 7-day LLM limit. This doc captures the model, the exact contrast rules, and the two rendering modes the widget must support.
Y axis = budget remaining, 100 → 0. X axis = the usage window (start → reset).
A point above the ideal line means you're conserving; below means you're burning too fast.
2.4px solid, gradient fill beneath (hue → transparent, ~30% top). Highest-contrast object on the chart.100% → 0% across the window: the pace that lands exactly at reset. A reference, not data — 1.4px dashed, knocked-back to ~50% luminance so it recedes.0.5/3.5) so it never reads as real data. If it crosses 0 inside the window, the user runs dry before reset.macOS renders desktop widgets in full color, but the moment an app is foregrounded the system desaturates them into a vibrant monochrome material. The widget must be fully legible in both — this is where the previous build broke.
Pace drives the accent color (see §4). Translucent solid material, gradient background, brand dot in the LLM's hue.
System strips all hue. Single ink color (white on dark, black on light) over a blurred vibrant material. Pace is carried by geometry + labels only.
▼ over pace, Runs out in ~1h 10m) must carry the full story on their own.
Validate every layer at ≥3:1 contrast against the material in both appearance modes —
the dark + monochrome combination is the one that failed before.
The six rules that keep all four layers separable, including single-ink monochrome mode.
1.4px, 2.5/3 dash, knocked-back lightness. It must recede behind the actual line.0.5/3.5 so it never competes with real data. It is the one element allowed a red cue in monochrome mode when over pace.2px ring of the material color punches the dot off any line it overlaps.In full-color mode the accent (actual line, hero number, pace badge) is driven entirely by pace:
margin > +4%)
On pace (±4%)
Over pace — burning too fast (margin < −4%)
Brand identity is a single dot next to the LLM name in the upper-left, always in the model's hue (Claude clay, Codex teal, Gemini indigo — placeholders; swap for official tokens). It is the only brand-colored element; everything else is pace-driven. In monochrome mode the dot desaturates with everything else, true to macOS.
Hero metric = % budget remaining. The LLM name + window label (“5-hour limit” / “7-day limit”) sit top-left; pace badge top-right.
| Quantity | Definition |
|---|---|
idealNow | Budget you should have left = 100 × (1 − tNow), where tNow ∈ [0,1] is position through the window. |
margin | actual − idealNow. Positive = conserving, negative = over pace. Drives the badge and accent color. |
slope | Recent burn rate (%/window) from the last two samples. Projection = extend this to 0%. |
runsOut | True when the projection reaches 0% before reset. Only then does the widget show a red “Runs out in ~Xh Ym”; otherwise “Runs out: after reset”. |
Reset countdown always shows (“Resets in 2h 06m” / “Resets in 3d 4h”). The estimated run-out time is surfaced only when it lands before reset, since that's the actionable case.
| State | Behavior |
|---|---|
| Fresh — window just reset | Hero 100%, badge “full” (◆), now-node near the left edge, “Runs out: after reset”. Neutral, no alarm. |
| Depleted — budget spent before reset | Hero 0% in red, badge “spent” (■), actual line resting flat on the baseline, “Ran out: budget spent” in red. Reset countdown keeps running. |
| Now at window edges | Node clamps inside the plot; axis labels (start / now / reset) never overlap — “now” hides if within ~12% of an end label. |
| Element | Size / weight | Notes |
|---|---|---|
| Hero % remaining | 41px / 660, -1.2 tracking | tabular-nums; red when depleted |
| LLM name | 14.5px / 680 | with brand dot |
| Pace badge (±%) | 14px / 680 | pace color + ▲▼● glyph |
| Stat rows / labels | 12.5px / 11.5px | tabular-nums values |
| Window label / axis | 11px / 9.5px | sub color |
| Corner radius | 24px | container; 13–15px padding |
All colors authored in OKLCH so luminance is tunable independently of hue — essential for hitting contrast targets across the four mode combinations.
The canonical render set — the complete target. Every other arrangement in the exploration canvas is superseded by this list. Widgets shown on a colorful desktop scene so the monochrome desaturation is visible.
Seen in the exploration canvas; do not implement. Kept only as a record of directions considered.