# CascadeKit - Full Distilled Documentation > Zero-runtime CSS architecture for component-based web apps. Native cascade layers, design tokens, co-located styles, layout utilities, a mixin system, and `@scope` per-instance overrides. No specificity wars, no generated hashes, no runtime cost. ## 1. Core Principles ### Layered Cascade All styles live in explicit layers, declared once in order: ```css @layer base, utils, components, pages, component-overrides, user-overrides; ``` - base: design tokens, resets, root variables - utils: reusable layout utilities (d-flex, col-container, gap-*) - components: component base styles + variants - pages: page-specific compositions - component-overrides: modifiers, sizes, states, mixins - user-overrides: consumer customizations (always win) Higher layers beat lower layers regardless of selector specificity. ### No Inline Styles, No Unnecessary CSS Style via classes, never inline `style` for layout/theming (inline breaks cascade control). CSS variables in `style` are OK - they are inputs to class rules, not rules themselves. Do not hand-write CSS for things the tools already handle: - Layout (flex/grid) -> layout util classes - Spacing between composed elements -> `mixin={{ mt: 2 }}` or `gap-*` on parent - Dynamic per-instance styles -> `scopedStyle` - Responsive changes -> `mixin={{ smallScreen: { ... } }}` ### Naming Convention Single `--` delimiter: `.ComponentName--root`, `.ComponentName--variant`, `.ComponentName--element`. ### Co-located Component CSS Each component imports its own CSS file; tree-shaking removes unused CSS. ### Token-Driven Values All values derive from `--base-size: clamp(8px, .5vw, 12px)`, e.g. `--space-2: calc(var(--base-size) * 2)`. ## 2. Component Pattern ```tsx import { classNames } from 'cascade-kit-tools/classNames'; import { getMixin, type MixinProps } from 'cascade-kit-tools/mixin'; import './ComponentName.css'; interface ComponentProps { variant?: 'primary' | 'secondary'; size?: 'sm' | 'md' | 'lg'; className?: string; mixin?: MixinProps; children: React.ReactNode; } export function ComponentName({ variant = 'primary', size = 'md', className = '', mixin, children }: ComponentProps) { const { className: mixinClassName, style: mixinStyle } = getMixin(mixin); return (