--- description: Enforces strict separation of concerns — no inline CSS, JS, or template strings in Python, tests, or HTML alwaysApply: true --- # Strict Separation of Concerns MuseHub uses a three-layer architecture. Each layer must stay in its own file type. Crossing boundaries is always an anti-pattern. | What | Where | Never in | |------|-------|----------| | Markup (structure) | Jinja2 `.html` templates | Python, TypeScript | | Styles | SCSS `_*.scss` partials → compiled `app.css` | `style=""` attributes, `