# 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 (
{children}
); } ``` ```css @layer components { .ComponentName--root { padding: var(--component-padding, var(--space-2)); background: var(--component-bg, var(--color-surface)); color: var(--component-color, var(--color-text)); } /* Variants ONLY set variable values, never repeat properties */ .ComponentName--primary { --component-bg: var(--color-primary); --component-color: white; } } @layer component-overrides { .ComponentName--sm { --component-padding: var(--space-1); } .ComponentName--lg { --component-padding: var(--space-4); } } ``` Rules: base styles use CSS variables with fallbacks; variants only set variable values; sizes/states go in `component-overrides`; always support a `mixin` prop; use `classNames` for composition. ## 3. Layout Utility Classes Import: `import 'cascade-kit-tools/layoutUtils/styles';` (uses `:where()` for low specificity). - Display: `d-flex`, `d-grid`, `col-container` - Flex: `dir-col`, `f-wrap`, `min-0` - Column grid: `col-num-2`, `col-num-3`, `col-num-4`, `col-num-auto`, `with-divider` - Align items: `ali-start`, `ali-center`, `ali-end`, `ali-baseline`, `ali-stretch` - Justify content: `jc-start`, `jc-center`, `jc-end`, `jc-sb`, `jc-se` - Gap: `gap-0_25` ... `gap-10`, `no-gap` Example: `
` and `
`. ## 4. Mixin System Import: `import { getMixin, type MixinProps } from 'cascade-kit-tools/mixin';` plus `import 'cascade-kit-tools/mixin/styles';`. Numbers multiply `--base-size`; strings are used as-is. Generates classes (in `component-overrides`) + CSS variables, so values stay in the cascade (not inline). - Spacing: `m, mt, mr, mb, ml, mx, my` and `p, pt, pr, pb, pl, px, py` - Layout: `display, opacity, position, inset, top, right, bottom, left` - Flex/grid: `flexDirection, flexWrap, alignItems, justifyContent, gap, gridColTemplate, gridRowTemplate, gridColumn, gridRow` - Responsive: `smallScreen` (<768px), `mediumScreen` (768-1024px), `bigScreen` (>1024px) - Container queries: `smallContainer` (<400px), `mediumContainer` (400-800px), `bigContainer` (>800px). Requires parent with `inline-container`. Example: ``. ## 5. Scoped Styles (per-instance overrides) `scopedStyle` renders a real `