One profile, two consequences
A profile is a sourcing recipe, not an exported token. Choosing one does two things at once: it sets the nine Material corner values, and it re-maps which value each component part reaches for. That second half is what makes Sharp feel deliberate rather than just flat — pills become rectangles instead of staying pills at 0px.
The corner scale each profile produces
Selecting a profile here changes the live theme, exactly as the sidebar control does.
| Corner style | Sharp | Subtle | Standard | Rounded | Expressive |
|---|---|---|---|---|---|
| none | 0px | 0px | 0px | 0px | 0px |
| extra-small | 0px | 2px | 4px | 6px | 6px |
| small | 0px | 6px | 8px | 10px | 12px |
| medium | 0px | 8px | 12px | 16px | 18px |
| large | 0px | 10px | 16px | 20px | 24px |
| large-increased | 0px | 14px | 20px | 26px | 30px |
| extra-large | 0px | 18px | 28px | 36px | 42px |
| extra-large-increased | 0px | 20px | 32px | 40px | 48px |
| extra-extra-large | 0px | 32px | 48px | 60px | 72px |
| full | 9999px | 9999px | 9999px | 9999px | 9999px |
| Component values changed | 93 | active | 102 | 102 | 102 |
Why a recipe instead of a semantic corner token
Material's corner scale describes magnitude, not intent — nothing in corner-value.medium says "card". If Etesie exported a --et-shape-card token it would be inventing vocabulary Material already
covers a different way: the component token carries the semantics, and the profile decides which magnitude
it resolves to.
--md-sys-shape-corner-value-*Material scale → --et-comp-*-container-shapecomponent intentThe middle link is Material's, so a theme stays portable. The component layer is namespaced --et-comp-* because Material does not publish a web component-token
ledger.