/* Shared component styles — the house recipes, in one place. * =========================================================================== * * WHY THIS FILE EXISTS * * `.btn-primary` was defined five times, in five scoped stylesheets, and all * five had drifted: three paddings, three font sizes, three disabled opacities, * and one view with no disabled style at all (#2273). Nothing detected that, * because a scoped duplicate is invisible to every tool — it isn't a rule * violation, isn't a broken reference, and isn't a recorded snippet. * * GEOMETRY LIVES HERE. Every value is a design-system token, so a palette or * scale change moves the buttons rather than stranding a copy that no longer * matches. * * A button is `variant + size`, composed in the template: * btn-primary a page action * btn-primary btn-compact a row action * btn-ghost btn-inline an affordance inside a card * btn-primary btn-block a form's single submitting action * Semantic per-view names (.btn-save, .btn-delete-task, …) were the thing that * drifted, because a name says what a button is FOR and nothing about what it * should look like — so two buttons doing the same job in two views had no * reason to match, and didn't. * * MIGRATION NOTE — this file is deliberately safe to land ahead of the removals. * These are plain selectors (specificity 0,1,0); a Vue `