Epic: #113 · Milestone: MC7 — TV shell
Why
crosswind (= ts-css) generates CSS and has a parser/walker but no layout/paint engine; on device we have Craft's layout and HIG tokens (docs/design/hig-tokens.home, TV profile from #50). The bridge lets designers keep writing class="p-6 text-title bg-surface rounded-xl" while the emitter turns that into token references — anything not expressible as a token is a compile error, which is also how the HIG stays enforced.
Tasks
- Token map: crosswind theme (spacing scale, font sizes, colours, radii, shadows, durations) generated from
hig-tokens.home(single source of truth) via a small script intools/hig/. - In the stx
homeemitter: class list → Craft style struct; layout classes (flex,grid-cols-N,gap-N,items-center) → Craft layout params; responsive/hover/dark variants rejected or mapped (focus:→ Craft focus style,dark:ignored — TV is dark-only). crosswind'scss.create()typed objects supported the same way for component-scoped styles.- Lint rule in
pickierconfig forapps/tv/**/*.stx: raw hex/px values are errors.
Acceptance
All classes used by the v1 screens resolve; a PR introducing bg-[#123456] fails CI with a pointer to the token doc.