// No styles applied!
+
+ This is a common mistake when following general web conventions where
+ BEM uses kebab-case. In RSX, component class names are PascalCase,
+ so BEM children must also be PascalCase.
+
NO EXEMPTIONS
There are NO exemptions to this rule for files in rsx/app/ or
diff --git a/docs/CLAUDE.dist.md b/docs/CLAUDE.dist.md
index 72def22ad..da63048f9 100644
--- a/docs/CLAUDE.dist.md
+++ b/docs/CLAUDE.dist.md
@@ -440,6 +440,8 @@ The process involves creating Action classes with @route decorators and converti
**Enforcement**: SCSS in `rsx/app/` and `rsx/theme/components/` must wrap in a single component class matching the jqhtml/blade file. This works because all jqhtml components, SPA actions/layouts, and Blade views with `@rsx_id` automatically render with `class="Component_Name"` on their root element. `rsx/lib/` is for non-visual plumbing (validators, utilities). `rsx/theme/` (outside components/) holds primitives, variables, Bootstrap overrides.
+**BEM Child Classes**: When using BEM notation, child element classes must use the component's exact class name as prefix. SCSS `.Component_Name { &__element }` compiles to `.Component_Name__element`, so HTML must match: `
` not `
`. No kebab-case conversion.
+
**Variables**: Define shared values (colors, spacing, border-radius) in `rsx/theme/variables.scss` or similar. These must be explicitly included before directory includes in bundle definitions. Component-local variables can be defined within the scoped rule.
**Supplemental files**: Multiple SCSS files can target the same component (e.g., breakpoint-specific styles) if a primary file with matching filename exists.