ReviewOS

also looking at this

stacks/lastsoulultra

LSU's own coaching surface, and what auditing the site turned up

#12
Merged glennmichael123 wants to merge claude/last-soul-ultra-web-6e0718 into main
86 files +3943 -1190

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

scripts/audit-html.tsmodified+18-8
Changes to scripts/audit-html.ts
@@ -213,16 +213,26 @@ export function auditPage(page: string, raw: string, served: Set<string>): Findi
213213 * nothing errors. Read against the BUILT css, so the generated utilities
214214 * count as defined.
215215 *
216 * The allowlist is a ratchet, not an exemption. Each entry is markup whose
217 * class carries no styling today; listing them stops the set growing while
218 * leaving what is already there visible.
216 * The allowlist is a ratchet, not an exemption: it stops the set growing
217 * while leaving what is already there visible. Every entry was opened in a
218 * browser and checked to render correctly, with the note saying what carries
219 * the styling instead - an unverified allowlist is how the next one of these
220 * gets waved through.
219221 */
220222const UNSTYLED_ALLOWED = new Set([
221 // Structural or scripting hooks with nothing to paint.
222 'race-board', 'lap-link', 'carousel', 'seg-count', 'enter-count',
223 'ls-cmp-yr', 'edon-l', 'ws-soon',
224 // Wrappers whose typography comes from the block around them.
225 'sr-lead', 'ws-lead', 'ws-apply', 'tiers-title', 'begin-band',
223 // Hooks with nothing of their own to paint: a sibling class or a child
224 // carries the look. .seg-count and .enter-count wrap a .seg segment
225 // display, .lap-link also carries .btn, .ls-cmp-yr is painted by a rule on
226 // .ls-cmp-row, and .race-board and .carousel are scripting targets.
227 'race-board', 'lap-link', 'carousel', 'seg-count', 'enter-count', 'ls-cmp-yr',
228 // State modifiers the design does not act on: on /world-series the open
229 // event is told apart by its red entry button against the others' "coming
230 // soon" pill, not by the list item around it.
231 'ws-soon', 'ws-apply',
232 // Blocks whose typography comes from what is around them: the three leads
233 // from .phero, .tiers-title from .h2 beside it, .begin-band from .band,
234 // and .edon-l is a caption under a stat rather than a label.
235 'sr-lead', 'ws-lead', 'tiers-title', 'begin-band', 'edon-l',
226236 // Utilities inside @stacksjs/components' Dialog, generated from that
227237 // package's own source rather than from this app's markup.
228238 'bg-black/25', 'dark:bg-black/50',