quell Light v1.0.0
Overview & System Role
quell-light.css represents the lean, high-fidelity starter track within the Quell Series framework eco-system. Engineered specifically to minimize initial paint latency and prevent layout thrashing, its core objective is to map a consistent, highly structured design language with near-zero runtime processor overhead. By enforcing a strict set of architectural boundaries, it decouples the layout engine from presentation styling, acting as a clean, rigid wireframe that remains resilient under highly active user interaction.
Strict Architectural Boundaries & Constraints
- Mobile-First Principals: The stylesheet adheres strictly to progressive enhancement. The basic layout structures, typographic settings, and functional elements (such as buttons, form-controls, and navigation components) are declared first within a mobile-centric footprint (viewports < 768px). Responsive transformations are deferred entirely to the
--breakpoint-md(768px) media query block, keeping mobile parsing paths free of unused desktop rules. - Flat Specificity Footprint: To protect developers from technical style wars, cascading depth is kept deliberately shallow. Element-selector chains are isolated, class-level definitions remain single-depth where possible, and heavy selector nesting is avoided. Specificity is kept low, enabling seamless down-stream overrides.
- Intentional Asset Lean-ness:
quell-light.cssrestricts physical footprint by decoupling logic from external payload structures. It avoids complex visual decoration, relying instead on high-contrast system typography, mathematically calibrated layout gaps, and native CSS rendering capabilities. - Font Architecture Continuity: The stylesheet contains zero
@font-faceasset declarations. Reflecting a strict design design choice, font files are not loaded directly byquell-light.css. This keeps the CSS footprint pristine and ensures zero network drag from typography calls. Typography definitions utilize fallback font-stacks that delegate inheritance to the underlying client environment or active downstream theme configurations, allowing instant, layout-stable text rendering.
Architecture & Breakpoint Matrix
The architectural system of quell-light.css is structured into sequential processing layers. This organization establishes a predictable vertical flow, ensuring that variables, global overrides, UI components, and layout systems build cascading layouts deterministically.
| Framework Zone | Media Query Boundary | Native Specificity Cost | Core Layout Responsibility | Target Volume/Chapter Linkage |
|---|---|---|---|---|
| 0. layer order | None (CSS Comment Rule) | None (0) |
Documenting system load boundaries and load-order requirements for proper cascading resolution. | Vol. 1, Chapter 1: The Cascading Chain |
| 1. design tokens | :root selector, @supports (color: oklch(0% 0 0)) |
High element matching weight (:root is a pseudo-class, equivalent to a class 0-1-0) |
Defines the global custom properties, color palette (solid, RGB, and OKLCH), shadows, spacing ratios, and animation parameters. | Vol. 1, Chapter 2: Mathematically Programmed Tokens |
| 2. base styles | Element level (body, h1-h6, p, ul, ol, a, etc.) |
Low element selector weight (0-0-1) |
Defines standard global typographical inheritance, line heights, fluid heading scales, native focus mechanics, and body background colors. | Vol. 1, Chapter 3: Element Normalization |
| 3. base color utilities | Class level (.text-*, .bg-*, .border-*) |
Medium class selector weight (0-1-0) |
Maps semantic state and layout properties across the application canvas. Operates independently of viewport scale. | Vol. 1, Chapter 4: Static Utility Systems |
| 4. container & layout | Class level (.container, .container-fluid, .card, etc.) |
Medium class selector weight (0-1-0) |
Enforces structural boundaries, centering, max-width clamping, and padding gutters for cards, sections, and view layouts. | Vol. 1, Chapter 5: Structural Containment |
| 5. components | Class level (.navbar, .btn, .alert, .form-control, etc.) |
Medium class selector weight (0-1-0) |
Encapsulates visual behaviors, touch targets, state indicators, interactive transitions, and responsive navigation layouts. | Vol. 1, Chapter 6: Modular UI Paradigms |
| 6. utility spacing / typography | Class level (.mx-auto, .m-*, .p-*, .fs-*, .fw-*, etc.) |
Medium class selector weight (0-1-0) |
Controls explicit spacings, negative margins, paddings, display settings, alignment, and fine typographic shifts. | Vol. 1, Chapter 7: Utility Layout Override Engines |
| 7. single breakpoint (md:) | @media (min-width: 768px) override styles |
Medium class selector weight inside media query (0-1-0) |
Deploys flexbox alignment overrides, display changes, and triggers the mobile-first 12-column flexbox grid engine. | Vol. 1, Chapter 8: Breakpoint Thresholds & Grid Physics |
Rationale
The sequential execution flow resolves standard cascading conflicts natively. By establishing :root tokens first, elements mapped during base normalization are immediately bound to global constraints (e.g., body inherits var(--color-bg-light)). Color utilities are mapped prior to structural layouts, prioritizing general surface states before sizing constraints. Components are initialized using logical mobile definitions. Finally, spacing utilities and layout overrides behave as “last-priority wrappers”, resolving specific spacing constraints directly before breakpoint modifiers optimize the layout for tablets and desktops. By segregating responsive transformations entirely inside a single, unified @media (min-width: 768px) block, Quell Light avoids the visual jitter and specificity spikes caused by scattering scattered viewport rules across the stylesheet.
Token & System Deep-Dive
This section catalogs every CSS Custom Property defined within the global :root scope.
1. The Core Palette
Colors are declared with solid fallback Hex formats for older engines, paired with advanced OKLCH channels inside a modern @supports (color: oklch()) upgrade rule. This structural choice provides robust backward compatibility alongside precise, modern color rendering.
| Variable Name | Solid Hex Default | OKLCH Primitive/Channel | RGB Primitive Mapping | System Role & Visual Weight |
|---|---|---|---|---|
--color-primary |
#191970 |
28.813% 0.14368 272.778 |
25, 25, 112 |
Midnight Blue core theme color; primary brand focus. |
--color-primary-light |
#35428f |
41.252% 0.12747 272.402 |
53, 66, 143 |
Mid-spectrum blue; used for borders, hover states, navigation. |
--color-primary-dark |
#05052e |
15.77% 0.08029 272.364 |
5, 5, 46 |
Deep midnight blue; used for dark backgrounds, headers. |
--color-secondary |
#35454f |
38.062% 0.02673 235.901 |
53, 69, 79 |
Slate grey; base body text ink color, high WCAG legibility. |
--color-secondary-light |
#4d616e |
48.109% 0.03212 236.895 |
77, 97, 110 |
Muted slate; hover state background, outline styling. |
--color-accent |
#ff3d40 |
65.735% 0.2289 25.532 |
255, 61, 64 |
Bright accent red; high-energy focus, callout buttons, active. |
--color-matte-white |
#f8f9fa |
98.164% 0.00181 249.244 |
248, 249, 250 |
Soft high-value grey/white; clean backdrop, button ground. |
--color-matte-black |
#282828 |
27.685% 0.00003 271.152 |
40, 40, 40 |
Deep soft black; ensures highly readable dark contexts. |
--color-muted-grey |
#616b7e |
52.629% 0.03245 263.298 |
97, 107, 126 |
General mid-level neutral divider; borders. |
--color-text-inverse |
#f2f2f4 |
96.172% 0.00276 285.761 |
242, 242, 244 |
Contrast white ink; used over dark overlays, accents. |
--color-text-primary |
#191970 |
28.813% 0.14368 272.778 |
25, 25, 112 |
Midnight blue text; headings, strong emphasis. |
--color-text-body |
#35454f |
38.062% 0.02673 235.901 |
53, 69, 79 |
Slate grey text; default text readability. |
--color-text-muted |
#657085 |
54.364% 0.03556 263.367 |
101, 112, 133 |
Lighter slate grey; sub-headings, meta data output. |
--color-lighter-grey |
#eeeeee |
94.912% 0.00011 271.152 |
238, 238, 238 |
Very light grey; disabled elements, background panels. |
--color-light-grey |
#dddddd |
89.755% 0.0001 271.152 |
221, 221, 221 |
Light divider grey; system boundaries, borders. |
--color-grey |
#cccccc |
84.522% 0.0001 271.152 |
204, 204, 204 |
Standard mid-neutral border; default form outlines. |
--color-bg-light |
#f4f7f9 |
97.443% 0.00427 237.348 |
244, 247, 249 |
Deep soft off-white blue-tint fallback body background. |
--color-bg-dark |
#05052e |
15.77% 0.08029 272.364 |
5, 5, 46 |
Deep midnight blue; full panel/body inverse backgrounds. |
--color-surface |
#f2f2f4 |
96.172% 0.00276 285.761 |
242, 242, 249 |
Ice white surface color; card backdrops, lists, inputs. |
--color-surface-dark |
#121245 |
22.269% 0.09294 275.79 |
18, 18, 69 |
High-value deep blue surface; panels within dark grids. |
--shadow-black |
#1b1b1b (approx) |
10.668% 0.00001 271.152 |
4, 4, 4 |
Deep black foundation color for oklch-based alpha shadow logic. |
Rationale
The use of double :root allocations with progressive enhancements via @supports (color: oklch(0% 0 0)) guarantees cross-platform rendering consistency. Legacy layouts fall back cleanly to solid HEX declarations, while modern rendering contexts gain access to device-independent OKLCH color spaces. Dividing colors into Hex, OKLCH components, and RGB maps empowers Quell Light to build real-time transparencies using native CSS variables, preventing the need to duplicate variables or import heavy image files to achieve modern graphic overlays.
2. Spacing, Borders, Shadows, and Utilities
A rigorous, mathematically controlled hierarchy governs spacing, visual depth, and elevation layers.
Spacing, Borders, and Radii Metrics
| Variable Name | Calibrated Rem/Pixel Value | Math Formula/Scaling Factor | Operational Purpose within Layout Grid |
|---|---|---|---|
--spacing-xxs |
0.25rem (4px) |
Baseline Spacing Unit | Extra tight margins, inner padding, micro gaps. |
--spacing-xs |
0.375rem (6px) |
1.5 × Preceding Value |
Tight margins, close details, input padding. |
--spacing-sm |
0.5625rem (9px) |
1.5 × Preceding Value |
Light margins, section dividers, button vertical pad. |
--spacing-md |
0.843rem (13.5px) |
1.5 × Preceding Value |
Standard UI gaps, row gaps, flex spacing baseline. |
--spacing-lg |
1.265rem (20.24px) |
1.5 × Preceding Value |
Card vertical margins, general block padding. |
--spacing-xl |
1.898rem (30.36px) |
1.5 × Preceding Value |
Major layout separations, layout section containers. |
--spacing-xxl |
2.848rem (45.56px) |
1.5 × Preceding Value |
Dynamic grid paddings, landing page margins. |
--spacing-xxxl |
4.272rem (68.35px) |
1.5 × Preceding Value |
Extreme top-of-funnel hero section spacers. |
--spacing-neg-xxs |
-0.25rem |
Negative Offset | Pulling aligned layouts together by tight values. |
--spacing-neg-xs |
-0.375rem |
Negative Offset | Pulling adjacent headers Closer to parent cards. |
--spacing-neg-sm |
-0.5625rem |
Negative Offset | Modulating structural negative padding overlaps. |
--spacing-neg-md |
-0.843rem |
Negative Offset | Negative margin shifts on intermediate grid blocks. |
--spacing-neg-lg |
-1.265rem |
Negative Offset | Pulling cards closer to offset hero titles on mobile. |
--spacing-neg-xl |
-1.898rem |
Negative Offset | Significant layout overlap designs. |
--spacing-neg-xxl |
-2.848rem |
Negative Offset | Drastic offset placements on desktop viewport structures. |
--spacing-neg-xxxl |
-4.272rem |
Negative Offset | Extreme section overlap layouts. |
--border-width-sm |
0.0625rem (1px) |
Minimum physical render size | Subtle container dividers, card boundaries, table rules. |
--border-width-md |
0.125rem (2px) |
Focus Ring / Form Target | Default form inputs, active input lines, focus outline rings. |
--border-width-lg |
0.25rem (4px) |
Accent Highlight | Bold borders, card highlights, bottom focus trackers. |
--border-width-xl |
0.5rem (8px) |
Large Accent | Highly styled structural margins, framing layouts. |
--border-radius-sm |
0.25rem (4px) |
Basic rounded edge | Button wrappers, small badges, alert corners. |
--border-radius-md |
0.5rem (8px) |
Canonical radius | Default card layouts, inputs, alerts, image panels. |
--border-radius-lg |
0.75rem (12px) |
Intermediate radius | Floating panels, complex section wrappers. |
--border-radius-xl |
1rem (16px) |
High-radius accent | Outer card groupings, dialogs, responsive side panels. |
--border-radius-circle |
50% |
Complete Circle | User avatars, action icon backdrops, rounded pills. |
Visual Elevation, Shadows, and Durations
| Variable Name | Native CSS Value Mapping | Base Alpha Factor | Architectural Intent |
| :--- | :--- | :--- | :--- |
| `--shadow-sm` | `0 var(--spacing-xs) var(--spacing-sm) var(--spacing-neg-xxs) oklch(var(--shadow-black-oklch) / var(--alpha-xs))` | `--alpha-xs` (`0.1`) | Micro shadow for small buttons, alerts, subtle hover layouts. |
| `--shadow-md` | `0 var(--spacing-sm) var(--spacing-md) var(--spacing-neg-xs) oklch(var(--shadow-black-oklch) / var(--alpha-sm))` | `--alpha-sm` (`0.125`) | Canonical card depth shadow; safe for general app interfaces. |
| `--shadow-lg` | `0 var(--spacing-md) var(--spacing-lg) var(--spacing-neg-sm) oklch(var(--shadow-black-oklch) / var(--alpha-md))` | `--alpha-md` (`0.4`) | Heavy card depth; indicates floating, drag-n-drop objects. |
| `--shadow-xl` | `0 var(--spacing-lg) var(--spacing-xl) var(--spacing-neg-md) oklch(var(--shadow-black-oklch) / var(--alpha-lg))` | `--alpha-lg` (`0.6`) | Heavy popups, drop-downs, modal wrappers, sticky bars. |
| `--shadow-elevation-sm` | `0 var(--spacing-xxs) var(--spacing-xs) var(--spacing-neg-xxs) oklch(...)`, `0 var(--spacing-xs) var(--spacing-sm) var(--spacing-neg-xxs) oklch(...)` | Dual Alpha (`0.1` + `0.125`) | Dual layering for flat-looking buttons with highly real depth. |
| `--shadow-elevation-md`| `0 var(--spacing-xs) var(--spacing-sm) var(--spacing-neg-xxs) oklch(...)`, `0 var(--spacing-sm) var(--spacing-md) var(--spacing-neg-xs) oklch(...)` | Dual Alpha (`0.125` + `0.4`) | High visual depth; floating dashboard elements. |
| `--shadow-elevation-lg`| `0 var(--spacing-sm) var(--spacing-md) var(--spacing-neg-xs) oklch(...)`, `0 var(--spacing-md) var(--spacing-lg) var(--spacing-neg-sm) oklch(...)` | Dual Alpha (`0.4` + `0.6`) | Extremely heavy multi-layer shadow. Used on overlays. |
| `--shadow-elevation-xl`| `0 var(--spacing-md) var(--spacing-lg) var(--spacing-neg-sm) oklch(...)`, `0 var(--spacing-lg) var(--spacing-xl) var(--spacing-neg-md) oklch(...)` | Dual Alpha (`0.6` + `0.8`) | Peak elevation layer shadow for modal overlay layers. |
| `--shadow-inset-sm` | `inset 0 var(--spacing-xxs) var(--spacing-xs) oklch(...)` | `--alpha-xs` (`0.1`) | Micro concave surface layout; pressed state indicators. |
| `--shadow-inset-md` | `inset 0 var(--spacing-xs) var(--spacing-sm) oklch(...)` | `--alpha-sm` (`0.125`) | Input field active backgrounds, inner shadow fields. |
| `--shadow-inset-lg` | `inset 0 var(--spacing-sm) var(--spacing-md) oklch(...)` | `--alpha-md` (`0.4`) | Sunken panels, scroll track backdrops. |
| `--shadow-inset-xl` | `inset 0 var(--spacing-md) var(--spacing-lg) oklch(...)` | `--alpha-lg` (`0.6`) | Deep concave graphic zones, simulated frame outlines. |
| `--z-index-hide` | `-1` | Absolute Value | Force layers behind base container layout stacks. |
| `--z-index-default` | `1` | Absolute Value | Standard rendering context baseline. |
| `--z-index-elevated`| `10` | Absolute Value | Drops-downs, relative navbar indicators, alerts. |
| `--z-index-sticky` | `100` | Absolute Value | Non-scrolling layouts, top-level pinned headers. |
| `--z-index-overlay` | `1000` | Absolute Value | Modal backdrops, backdrop click zones. |
| `--z-index-modal` | `1010` | Absolute Value | Modal windows, toast trackers. |
| `--container-width` | `90rem` (1440px) | Maximum Constraint | Centered layout content bounding limit on horizontal displays. |
| `--container-fluid-width`| `100%` | Percent Fluid | Fluid spanning layout boundary. |
| `--one-twelfth` | `8.333333%` | Grid Decimal Constant | Mathematical foundation constant for building 12 column layouts. |
| `--card-width` | `22.5rem` (360px) | Card Fixed Limit | Base maximum boundary of isolated content cards. |
| `--card-fluid-width` | `100%` | Percent Fluid | Adaptive card expansion on mobile screens. |
| `--card-image` | `100%` | Percent Fluid | Locks card head images to maximum bounding parent width. |
| `--icon-base` | `10rem` (160px) | Icon Outer Box | Sizing baseline for decorative system icons. |
| `--transition-speed-fast`| `0.15s` | Time (Seconds) | Instant active changes (hover shifts, toggle clicks). |
| `--transition-speed-normal`| `0.3s` | Time (Seconds) | Default animation length (accordion panels, slide drawers). |
| `--transition-speed-slow`| `0.5s` | Time (Seconds) | Heavy layout transitions (fade overrides on modal display). |
| `--transition-ease` | `ease-in-out` | Cubic bezier curve | Smooth, organic acceleration and deceleration curve. |
| `--min-width-default` | `15rem` (240px) | Absolute Value | Safeguards site structure against shrinking on micro screens. |
Rationale
Spacing leverages a continuous, mathematically optimized 1.5× scale factor. This establishes a predictable rhythm for typographic alignment and layout grids, transforming spacing adjustments into deterministic layout moves. Border radii are normalized to prevent visual inconsistency. Shadows are designed with high semantic intent, pairing basic offsets with elevation variables to convey surface depth layers. Integrating OKLCH calculations directly with opacity metrics allows shadow depth to automatically adapt and scale depending on whether it sits on a light or dark background, preventing grey outlines on dark backgrounds.
3. Responsive Architecture Rules & Fluid Typography
Rather than using discrete breakpoints to snap fonts across viewports, Quell Light enforces clean responsive structures using smooth fluid clamp rules under :root.
| Variable Name | Fallback Rem Value | Native Dynamic Clamp Formula | Specificity Goal & Scaling Rules |
|---|---|---|---|
--font-size-h1 |
2.441rem |
clamp(2.441rem, 1.5rem + 3.2vw, 3.052rem) |
Anchored at 39px, scaling up to 48.8px via viewport scale. |
--font-size-h2 |
1.953rem |
clamp(1.953rem, 1.3rem + 2.5vw, 2.441rem) |
Anchored at 31.2px, scaling up to 39px via viewport scale. |
--font-size-h3 |
1.563rem |
clamp(1.563rem, 1.1rem + 1.9vw, 1.953rem) |
Anchored at 25px, scaling up to 31.2px via viewport scale. |
--font-size-h4 |
1.25rem |
clamp(1.25rem, 0.9rem + 1.4vw, 1.563rem) |
Anchored at 20px, scaling up to 25px via viewport scale. |
--font-size-h5 |
0.8rem |
clamp(0.8rem, 0.7rem + 0.8vw, 1rem) |
Anchored at 12.8px, scaling up to 16px via viewport scale. |
--font-size-h6 |
0.64rem |
clamp(0.64rem, 0.6rem + 0.4vw, 0.8rem) |
Anchored at 10.2px, scaling up to 12.8px via viewport scale. |
Rationale
CSS clamp() enables fluid typography scaling that dynamically responds to screen width changes without requiring multi-step media queries. By combining a fixed fallback (rem) with fluid viewport units (vw) and an upper ceiling, text scales smoothly on any device. This guarantees zoom-safe typography, preventing visual glitches and keeping layouts stable on everything from micro mobile devices to wide-aspect desktop monitors.
The 12-Column Responsive Grid Engine
This section lists the structural utility mechanics and mobile-first container engines that drive Quell Light layouts.
1. Container & Row Mechanics
Layout containment in quell-light.css is structured to ensure content blocks center and pad themselves elegantly across different screen sizes.
| Class Name | Target Property | CSS Rule Specification | Architectural and Gutter Math |
|---|---|---|---|
.container |
max-width |
max-width: var(--container-width); |
Anchored at a static max constraint of 90rem (1440px) to prevent layout lines from spilling too far on wide screens. |
.container |
margin |
margin: 0 auto; |
Natively centers structural blocks within standard browser windows. |
.container |
padding |
padding: 0 var(--spacing-md); |
Implements responsive gutter buffers of 0.843rem (13.5px) on the left and right margins to prevent content from touching screen edges. |
.container-fluid |
width |
width: var(--container-fluid-width); |
Extends layout elements fluidly to 100% viewport width. |
.container-fluid |
padding |
padding: 0 var(--spacing-md); |
Maintains consistent 0.843rem (13.5px) gutters to match container alignments. |
Rationale
Using a unified gutter standard based on var(--spacing-md) ensures that fluid elements align with fixed layouts. This simple containment layer provides maximum layout safety with a flat specificity cost.
2. Mobile-First Columns
Mobile styling in Quell Light uses full-width vertical stacking, keeping columns fluid on smaller devices.
| Class Name | Target Property | CSS Rule Specification | Grid Stacking Behavior on Viewports < 768px |
|---|---|---|---|
.flex-item |
flex |
flex: 0 0 100%; |
Prevents shrinking or growing, forcing column blocks to stack vertically at 100% parent container width. |
Rationale
Mobile-first vertical stacking prevents horizontal scrolling issues on narrow screens. It allows elements to span the full viewport width safely, postponing multi-column arrangements to the tablet/desktop breakpoint.
3. The Breakpoint Mutators
When the screen viewport reaches or passes the --breakpoint-md threshold of 768px (48rem), the responsive layout engine activates. Layouts shift from stacked to multi-column structures using the 12-column grid.
Alignment & Flex Direction Mutators (@media (min-width: 768px))
| Responsive Class Name | Targeted Layout Property | Output CSS Specification | Layout Alignment Mechanics |
|---|---|---|---|
.md\:justify-content-center |
justify-content |
justify-content: center; |
Centers child elements along the primary row axis. |
.md\:justify-content-between |
justify-content |
justify-content: space-between; |
Spreads elements evenly, anchoring the first and last to the grid edges. |
.md\:justify-content-end |
justify-content |
justify-content: flex-end; |
Aligns all child elements to the end of the line. |
.md\:align-items-center |
align-items |
align-items: center; |
Vertically centers child elements along the cross-axis. |
.md\:align-items-start |
align-items |
align-items: flex-start; |
Aligns child elements to the top of the container. |
.md\:align-items-end |
align-items |
align-items: flex-end; |
Aligns child elements to the bottom of the container. |
.md\:flex-row |
flex-direction |
flex-direction: row; |
Arranges child elements horizontally. |
.md\:flex-col |
flex-direction |
flex-direction: column; |
Reverts content to stacked vertical layouts. |
.md\:flex-wrap |
flex-wrap |
flex-wrap: wrap; |
Allows row items to wrap onto new lines. |
.md\:flex-nowrap |
flex-wrap |
flex-wrap: nowrap; |
Locks elements in a single row, forcing them to shrink if needed. |
12-Column Responsive Grid Mutators (@media (min-width: 768px))
| Responsive Class Name | Targeted Property | Output CSS Rule Specification | Calculated Grid Box Width |
|---|---|---|---|
.md\:flex-1-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 1); |
8.333333% |
.md\:flex-2-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 2); |
16.666666% |
.md\:flex-3-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 3); |
25.000000% |
.md\:flex-4-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 4); |
33.333333% |
.md\:flex-5-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 5); |
41.666666% |
.md\:flex-6-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 6); |
50.000000% |
.md\:flex-7-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 7); |
58.333333% |
.md\:flex-8-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 8); |
66.666666% |
.md\:flex-9-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 9); |
75.000000% |
.md\:flex-10-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 10); |
83.333333% |
.md\:flex-11-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 11); |
91.666666% |
.md\:flex-12-12 |
flex |
flex: 0 0 calc(var(--one-twelfth) * 12); |
100.000000% |
Display State Overrides (@media (min-width: 768px))
| Responsive Class Name | Targeted Property | Output CSS Rule Specification | Architectural Action & Specificity Control |
|---|---|---|---|
.md\:d-none |
display |
display: none !important; |
Completely hides elements from view on screen sizes above the breakpoint. |
.md\:d-block |
display |
display: block; |
Restores block layouts. |
.md\:d-flex |
display |
display: flex; |
Restures flexbox contexts. |
Rationale
Applying .md\: classes within the (min-width: 768px) media query ensures layout stability across varying display dimensions. Designing column widths via multiplication of --one-twelfth ensures that the 12-column system is perfectly predictable on any screen size. Using !important on .md\:d-none guarantees that desktop-hidden elements remain hidden, overriding normal display styling conflicts.
Technical Elements Specification
A clean, responsive layout needs structured, predictable styles for basic elements to maintain typography and layout rhythm.
1. Element Resets, Base Typographic Mechanics & Anchor Focus Rings
| Element Selector / Utility | Targeted Property | CSS Declaration Mapping | Visual Layout Strategy |
|---|---|---|---|
body |
font-family |
font-family: var(--font-fam-primary); |
Uses "Nunito", "Calibri", sans-serif stacks for clean readability. |
body |
font-size |
font-size: var(--font-size-base); |
Anchored to baseline 1rem (16px) for normal sizing standard. |
body |
line-height |
line-height: var(--line-height-base); |
Calibrated to 1.6 spacing ratio, optimizing paragraph readability. |
body |
color |
color: var(--color-text-body); |
Uses --color-text-body dark grey to reduce eye strain. |
body |
background-color |
background-color: var(--color-bg-light); |
Soft, off-white background to avoid bright glare. |
h1 - h6 (and .h1 - .h6 counterparts) |
font-family |
font-family: var(--font-fam-secondary); |
Uses "Fraunces", "Georgia", serif stacks to provide editorial heading contrast. |
h1 - h6 |
color |
color: var(--color-text-primary); |
Dark slate midnight blue to anchor heading typography. |
h1 - h6 |
margin-bottom |
margin-bottom: var(--spacing-sm); |
Keeps layout flow tight with a standard 0.5625rem bottom gap. |
p |
font-size / line-height |
font-size: var(--font-size-base); line-height: var(--line-height-base); |
Retains body typography baselines across content layout. |
p |
margin-bottom |
margin-bottom: var(--spacing-md); |
Drops standard 0.843rem gap to separate trailing text blocks cleanly. |
ul, ol |
margin / padding-left |
margin: 0; padding-left: var(--spacing-lg); |
Clears top/bottom list margins, introducing structured indentation. |
ul |
list-style |
list-style: disc; |
Traditional disc indentation markers. |
ol |
list-style |
list-style: decimal; |
Decimal list values. |
a |
color / text-decoration |
color: var(--color-primary-light); text-decoration: none; |
Muted brand blue anchors text links without underlines. |
a:hover |
color |
color: var(--color-accent); |
Moves to accent red, providing clear visual hover response. |
a:focus |
outline-offset / box-shadow / border-radius |
outline-offset: var(--spacing-xxs); box-shadow: 0 0 0 var(--border-radius-md) var(--color-primary-light); border-radius: var(--border-radius-sm); |
Custom focus shadow replaces default browser outlines with a clean, branded focus ring. |
2. Base Utility Layout Classes (Full Metric Manifest, No Placeholders)
These utilities enable precise layout spacing, typography styles, and color adjustments across the application.
Explicit Spacing Matrix (var(--spacing-*) Mapping)
| Class Name | Targeted Layout Properties | Applied Native Value |
|---|---|---|
| All-Margin Utilities | ||
.m-xxs |
margin |
0.25rem (4px) |
.m-xs |
margin |
0.375rem (6px) |
.m-sm |
margin |
0.5625rem (9px) |
.m-md |
margin |
0.843rem (13.5px) |
.m-lg |
margin |
1.265rem (20.24px) |
.m-xl |
margin |
1.898rem (30.36px) |
| Top-Margin Utilities | ||
.mt-xxs |
margin-top |
0.25rem |
.mt-xs |
margin-top |
0.375rem |
.mt-sm |
margin-top |
0.5625rem |
.mt-md |
margin-top |
0.843rem |
.mt-lg |
margin-top |
1.265rem |
.mt-xl |
margin-top |
1.898rem |
| Right-Margin Utilities | ||
.mr-xxs |
margin-right |
0.25rem |
.mr-xs |
margin-right |
0.375rem |
.mr-sm |
margin-right |
0.5625rem |
.mr-md |
margin-right |
0.843rem |
.mr-lg |
margin-right |
1.265rem |
.mr-xl |
margin-right |
1.898rem |
| Bottom-Margin Utilities | ||
.mb-xxs |
margin-bottom |
0.25rem |
.mb-xs |
margin-bottom |
0.375rem |
.mb-sm |
margin-bottom |
0.5625rem |
.mb-md |
margin-bottom |
0.843rem |
.mb-lg |
margin-bottom |
1.265rem |
.mb-xl |
margin-bottom |
1.898rem |
| Left-Margin Utilities | ||
.ml-xxs |
margin-left |
0.25rem |
.ml-xs |
margin-left |
0.375rem |
.ml-sm |
margin-left |
0.5625rem |
.ml-md |
margin-left |
0.843rem |
.ml-lg |
margin-left |
1.265rem |
.ml-xl |
margin-left |
1.898rem |
| Y-Axis Margin Utilities | ||
.my-xxs |
margin-top, margin-bottom |
0.25rem |
.my-xs |
margin-top, margin-bottom |
0.375rem |
.my-sm |
margin-top, margin-bottom |
0.5625rem |
.my-md |
margin-top, margin-bottom |
0.843rem |
.my-lg |
margin-top, margin-bottom |
1.265rem |
.my-xl |
margin-top, margin-bottom |
1.898rem |
| X-Axis Margin Utilities | ||
.mx-xxs |
margin-left, margin-right |
0.25rem |
.mx-xs |
margin-left, margin-right |
0.375rem |
.mx-sm |
margin-left, margin-right |
0.5625rem |
.mx-md |
margin-left, margin-right |
0.843rem |
.mx-lg |
margin-left, margin-right |
1.265rem |
.mx-xl |
margin-left, margin-right |
1.898rem |
Negative Overlap Marign Utilities
| Class Name | Targeted Layout Properties | Applied Negative Value |
|---|---|---|
.m-neg-xxs |
margin |
-0.25rem |
.m-neg-xs |
margin |
-0.375rem |
.m-neg-sm |
margin |
-0.5625rem |
.m-neg-md |
margin |
-0.843rem |
.m-neg-lg |
margin |
-1.265rem |
.m-neg-xl |
margin |
-1.898rem |
.mt-neg-xxs |
margin-top |
-0.25rem |
.mt-neg-xs |
margin-top |
-0.375rem |
.mt-neg-sm |
margin-top |
-0.5625rem |
.mt-neg-md |
margin-top |
-0.843rem |
.mt-neg-lg |
margin-top |
-1.265rem |
.mt-neg-xl |
margin-top |
-1.898rem |
.mr-neg-xxs |
margin-right |
-0.25rem |
.mr-neg-xs |
margin-right |
-0.375rem |
.mr-neg-sm |
margin-right |
-0.5625rem |
.mr-neg-md |
margin-right |
-0.843rem |
.mr-neg-lg |
margin-right |
-1.265rem |
.mr-neg-xl |
margin-right |
-1.898rem |
.mb-neg-xxs |
margin-bottom |
-0.25rem |
.mb-neg-xs |
margin-bottom |
-0.375rem |
.mb-neg-sm |
margin-bottom |
-0.5625rem |
.mb-neg-md |
margin-bottom |
-0.843rem |
.mb-neg-lg |
margin-bottom |
-1.265rem |
.mb-neg-xl |
margin-bottom |
-1.898rem |
.ml-neg-xxs |
margin-left |
-0.25rem |
.ml-neg-xs |
margin-left |
-0.375rem |
.ml-neg-sm |
margin-left |
-0.5625rem |
.ml-neg-md |
margin-left |
-0.843rem |
.ml-neg-lg |
margin-left |
-1.265rem |
.ml-neg-xl |
margin-left |
-1.898rem |
.my-neg-xxs |
margin-top, margin-bottom |
-0.25rem |
.my-neg-xs |
margin-top, margin-bottom |
-0.375rem |
.my-neg-sm |
margin-top, margin-bottom |
-0.5625rem |
.my-neg-md |
margin-top, margin-bottom |
-0.843rem |
.my-neg-lg |
margin-top, margin-bottom |
-1.265rem |
.my-neg-xl |
margin-top, margin-bottom |
-1.898rem |
.mx-neg-xxs |
margin-left, margin-right |
-0.25rem |
.mx-neg-xs |
margin-left, margin-right |
-0.375rem |
.mx-neg-sm |
margin-left, margin-right |
-0.5625rem |
.mx-neg-md |
margin-left, margin-right |
-0.843rem |
.mx-neg-lg |
margin-left, margin-right |
-1.265rem |
.mx-neg-xl |
margin-left, margin-right |
-1.898rem |
Padding & Gap Spacers Matrix
| Class Name | Targeted Layout Properties | Applied Native Value |
|---|---|---|
| All-Padding Utilities | ||
.p-xxs |
padding |
0.25rem |
.p-xs |
padding |
0.375rem |
.p-sm |
padding |
0.5625rem |
.p-md |
padding |
0.843rem |
.p-lg |
padding |
1.265rem |
.p-xl |
padding |
1.898rem |
| Top-Padding Utilities | ||
.pt-xxs |
padding-top |
0.25rem |
.pt-xs |
padding-top |
0.375rem |
.pt-sm |
padding-top |
0.5625rem |
.pt-md |
padding-top |
0.843rem |
.pt-lg |
padding-top |
1.265rem |
.pt-xl |
padding-top |
1.898rem |
| Right-Padding Utilities | ||
.pr-xxs |
padding-right |
0.25rem |
.pr-xs |
padding-right |
0.375rem |
.pr-sm |
padding-right |
0.5625rem |
.pr-md |
padding-right |
0.843rem |
.pr-lg |
padding-right |
1.265rem |
.pr-xl |
padding-right |
1.898rem |
| Bottom-Padding Utilities | ||
.pb-xxs |
padding-bottom |
0.25rem |
.pb-xs |
padding-bottom |
0.375rem |
.pb-sm |
padding-bottom |
0.5625rem |
.pb-md |
padding-bottom |
0.843rem |
.pb-lg |
padding-bottom |
1.265rem |
.pb-xl |
padding-bottom |
1.898rem |
| Left-Padding Utilities | ||
.pl-xxs |
padding-left |
0.25rem |
.pl-xs |
padding-left |
0.375rem |
.pl-sm |
padding-left |
0.5625rem |
.pl-md |
padding-left |
0.843rem |
.pl-lg |
padding-left |
1.265rem |
.pl-xl |
padding-left |
1.898rem |
| Y-Axis Padding Utilities | ||
.py-xxs |
padding-top, padding-bottom |
0.25rem |
.py-xs |
padding-top, padding-bottom |
0.375rem |
.py-sm |
padding-top, padding-bottom |
0.5625rem |
.py-md |
padding-top, padding-bottom |
0.843rem |
.py-lg |
padding-top, padding-bottom |
1.265rem |
.py-xl |
padding-top, padding-bottom |
1.898rem |
| X-Axis Padding Utilities | ||
.px-xxs |
padding-left, padding-right |
0.25rem |
.px-xs |
padding-left, padding-right |
0.375rem |
.px-sm |
padding-left, padding-right |
0.5625rem |
.px-md |
padding-left, padding-right |
0.843rem |
.px-lg |
padding-left, padding-right |
1.265rem |
.px-xl |
padding-left, padding-right |
1.898rem |
| Flex Gap Spacers | ||
.gap-xxs |
gap |
0.25rem |
.gap-xs |
gap |
0.375rem |
.gap-sm |
gap |
0.5625rem |
.gap-md |
gap |
0.843rem |
.gap-lg |
gap |
1.265rem |
.gap-xl |
gap |
1.898rem |
| Extended Padding & Gaps | ||
.py-2xl |
padding-top, padding-bottom |
var(--spacing-xxl) (2.848rem) |
.py-3xl |
padding-top, padding-bottom |
var(--spacing-xxxl) (4.272rem) |
.gap-2xl |
gap |
var(--spacing-xxl) (2.848rem) |
.gap-3xl |
gap |
var(--spacing-xxxl) (4.272rem) |
| Universal Clearing Utilities | ||
.mx-auto |
margin |
0 auto (Horizontal containment centering) |
.m-0 |
margin |
0 (Clear all outer margins) |
.p-0 |
padding |
0 (Clear all inner paddings) |
Static Colors & States Utilities
| Utility Class Name | Targeted Property | CSS Declaration | Visual Layout Intent |
| :--- | :--- | :--- | :--- |
| **Typography Ink Colors** | | | |
| `.text-heading` | `color` | `color: var(--color-primary);` | Forces dark midnight blue brand color. |
| `.text-body` | `color` | `color: var(--color-text-body);` | Forces base body dark grey tone. |
| `.text-on-accent` | `color` | `color: var(--color-text-inverse);` | Contrasts light text over deep color backdrops. |
| `.text-muted` | `color` | `color: var(--color-muted-grey);` | Subdued secondary info output. |
| `.text-success` | `color` | `color: var(--color-success);` | Green notification ink. |
| `.text-info` | `color` | `color: var(--color-info);` | Blue helper ink. |
| `.text-warning` | `color` | `color: var(--color-warning);` | Gold caution ink. |
| `.text-error` | `color` | `color: var(--color-error);` | Red error ink. |
| **Background Utilities** | | | |
| `.bg-light` | `background-color` | `background-color: var(--color-bg-light);` | Soft grey body background. |
| `.bg-dark` | `background-color` / `color` | `background-color: var(--color-primary-dark); color: var(--color-matte-white);` | Dark midnight canvas color backdrop. |
| `.bg-primary` | `background-color` / `color` | `background-color: var(--color-primary); color: var(--color-matte-white);` | Solid brand blue panel. |
| `.bg-accent` | `background-color` / `color` | `background-color: var(--color-accent); color: var(--color-matte-white);` | Bold brand accent highlight backdrop. |
| `.bg-surface` | `background-color` | `background-color: var(--color-surface);` | Grey surface canvas backdrop container. |
| `.bg-primary-light` | `background` / `color` | `background: var(--color-primary-light); color: var(--color-matte-white);` | Lighter blue panel backdrop. |
| `.bg-secondary` | `background-color` / `color` | `background-color: var(--color-secondary); color: var(--color-matte-white);` | Slate neutral backdrop panel. |
| **System States & Borders** | | | |
| `.bg-success` | `background-color` / `color` | `background-color: var(--color-success); color: var(--color-matte-white);` | Success notification block. |
| `.bg-success-light` | `background-color` | `background-color: var(--color-success-light);` | Medium-soft success border. |
| `.bg-success-lighter` | `background-color` | `background-color: var(--color-success-lighter);` | Soft tint panel (alert backdrops). |
| `.bg-success-accent` | `background-color` | `background-color: var(--color-success-accent);` | Solid focus boundary for green buttons. |
| `.bg-info` | `background-color` / `color` | `background-color: var(--color-info); color: var(--color-matte-white);` | Info highlight block. |
| `.bg-info-light` | `background-color` | `background-color: var(--color-info-light);` | Info boundary borders. |
| `.bg-info-lighter` | `background-color` | `background-color: var(--color-info-lighter);` | Soft tint informational panel backdrop. |
| `.bg-info-accent` | `background-color` | `background-color: var(--color-info-accent);` | Focus highlight for info tags. |
| `.bg-warning` | `background-color` / `color` | `background-color: var(--color-warning); color: var(--color-matte-black);` | Yellow alert box backdrop. Keeps black text for WCAG contrast. |
| `.bg-warning-light` | `background-color` | `background-color: var(--color-warning-light);` | Warning borders. |
| `.bg-warning-lighter` | `background-color` | `background-color: var(--color-warning-lighter);` | Soft yellow notice banner backdrop. |
| `.bg-warning-accent` | `background-color` | `background-color: var(--color-warning-accent);` | Solid highlight ring for caution zones. |
| `.bg-error` | `background-color` / `color` | `background-color: var(--color-error); color: var(--color-matte-white);` | Danger/alert background panel. |
| `.bg-error-light` | `background-color` | `background-color: var(--color-error-light);` | Urgent action boundaries. |
| `.bg-error-lighter` | `background-color` | `background-color: var(--color-error-lighter);` | Soft critical failure panel backdrop. |
| `.bg-error-accent` | `background-color` | `background-color: var(--color-error-accent);` | Red focus boundaries. |
| `.border-success` | `border-color` | `border-color: var(--color-success);` | Success state borders. |
| `.border-info` | `border-color` | `border-color: var(--color-info);` | Info state borders. |
| `.border-warning` | `border-color` | `border-color: var(--color-warning);` | Caution state borders. |
| `.border-error` | `border-color` | `border-color: var(--color-error);` | Failure state borders. |
Typography & Visual Sizing Override Utilities
| Class Name | Targeted Property | Applied Native Value |
|---|---|---|
| Font-Size Overrides | ||
.fs-xs |
font-size |
var(--font-size-xs) (0.64rem / 10.2px) |
.fs-sm |
font-size |
var(--font-size-sm) (0.8rem / 12.8px) |
.fs-base |
font-size |
var(--font-size-base) (1rem / 16px) |
.fs-md |
font-size |
var(--font-size-md) (1.25rem / 20px) |
.fs-lg |
font-size |
var(--font-size-lg) (1.563rem / 25px) |
.fs-xl |
font-size |
var(--font-size-xl) (1.953rem / 31.2px) |
.fs-xxl |
font-size |
var(--font-size-xxl) (2.441rem / 39px) |
.fs-xxxl |
font-size |
var(--font-size-xxxl) (3.052rem / 48.8px) |
| Font-Weight Overrides | ||
.fw-bold |
font-weight |
bold (Bold visual treatment) |
.fw-bolder |
font-weight |
bolder (Ultra heavy visual weight) |
.fw-lighter |
font-weight |
lighter (Thin modern styling) |
| Fine Typographic Controls | ||
.text-center |
text-align |
center; |
.text-left |
text-align |
left; |
.text-right |
text-align |
right; |
.text-justify |
text-align |
justify; |
.text-start |
text-align |
start; |
.text-end |
text-align |
end; |
.text-lowercase |
text-transform |
lowercase; |
.text-uppercase |
text-transform |
uppercase; |
.text-capitalize |
text-transform |
capitalize; |
.text-underline |
text-decoration |
underline; |
.text-no-underline |
text-decoration |
none; |
.text-italic |
font-style |
italic; |
.text-strike |
text-decoration |
line-through; |
| Structural / Fluid Sizing | ||
.w-full |
width |
100%; |
.h-full |
height |
100%; |
.pos-relative |
position |
relative; |
.pos-absolute |
position |
absolute; |
.overflow-hide |
overflow |
hidden; |
.overflow-auto |
overflow |
auto; |
| Grid / Flex Display States | ||
.d-block |
display |
block; |
.d-inline |
display |
inline; |
.d-inline-block |
display |
inline-block; |
.d-none |
display |
none !important; (Strict visibility override) |
.d-flex |
display |
flex; |
.d-inline-flex |
display |
inline-flex; |
.d-grid |
display |
grid; |
.d-inline-grid |
display |
inline-grid; |
Mobile-First Flexbox Layout Engine
These utilities establish the core flexbox layout system before responsive breakpoint modifiers scale them on larger viewports.
| Class Name | Targeted Property | Applied Native CSS Value |
|---|---|---|
| Flex Direction Controls | ||
.flex-row |
flex-direction |
row; |
.flex-row-reverse |
flex-direction |
row-reverse; |
.flex-col |
flex-direction |
column; |
.flex-col-reverse |
flex-direction |
column-reverse; |
| Wrapping Logic | ||
.flex-wrap |
flex-wrap |
wrap; |
.flex-nowrap |
flex-wrap |
nowrap; |
| Axis Justification | ||
.justify-content-center |
justify-content |
center; |
.justify-content-between |
justify-content |
space-between; |
.justify-content-around |
justify-content |
space-around; |
.justify-content-evenly |
justify-content |
space-evenly; |
.flex-start |
justify-content |
flex-start; |
.flex-end |
justify-content |
flex-end; |
| Cross-Axis Alignment | ||
.align-items-center |
align-items |
center; |
.align-items-start |
align-items |
flex-start; |
.align-items-end |
align-items |
flex-end; |
.align-items-baseline |
align-items |
baseline; |
.align-items-stretch |
align-items |
stretch; |
| Flex Sizing Rules | ||
.flex-grow-1 |
flex-grow |
1; |
.flex-shrink-0 |
flex-shrink |
0; |
.flex-fill |
flex |
1 1 auto; (Fills space based on content) |
Rationale
Exposing all utility classes explicitly ensures technical clarity, allowing down-stream ingestion engines like NotebookLM to model Quell Light’s visual layout behavior accurately. These properties map structural relationships directly, creating a stable design system free of layout gaps.
3. Core Component Layout Rules
The structural definitions of Quell Light’s baseline interactive elements.
Complete Component Specifications
/* Card Component Block */
.card {
width: var(--card-width); /* 22.5rem / 360px limit */
background-color: var(--color-surface); /* Soft white surface */
border-radius: var(--border-radius-md); /* 0.5rem curves */
padding: var(--spacing-lg); /* Generous padding */
box-shadow: var(--shadow-md); /* Soft shadow profile */
}
.card-header {
padding: var(--spacing-xs); /* Tight spacing */
margin-bottom: var(--spacing-md); /* Gaps below header */
border-bottom: var(--border-width-sm) solid var(--color-primary-light); /* Clean divider line */
}
.card-body {
padding: var(--spacing-md); /* Baseline internal spacing */
}
.card-img {
width: var(--card-image); /* Lock images of card tightly */
height: auto;
display: block;
border-top-left-radius: var(--border-radius-md); /* Match top corners */
border-top-right-radius: var(--border-radius-md);
}
/* Alert Notification Engines */
.alert {
padding: var(--spacing-md); /* Outer gutters */
margin-bottom: var(--spacing-md);
border: var(--border-width-sm) solid transparent;
border-radius: var(--border-radius-sm);
display: flex; /* Horizon alignment */
align-items: center;
justify-content: space-between;
}
.alert-message {
flex-grow: 1; /* Expands text area */
}
.alert-close {
background: none;
border: none;
font-size: var(--font-size-lg);
cursor: pointer;
margin-left: var(--spacing-md);
}
.alert-success {
color: var(--color-matte-white);
background-color: var(--color-success); /* High-contrast green background */
border-color: var(--color-success);
}
.alert-info {
color: var(--color-matte-white);
background-color: var(--color-info); /* Informational cyan/blue background */
border-color: var(--color-info);
}
/* Note: .alert-warning uses a dark-slate foreground color (--color-secondary).
This is an intentional layout choice to guarantee WCAG AA contrast ratios,
as standard white text fails readability tests when paired with soft gold/yellow backdrops. */
.alert-warning {
color: var(--color-secondary);
background-color: var(--color-warning);
border-color: var(--color-warning);
font-weight: bolder;
}
.alert-error {
color: var(--color-matte-white);
background-color: var(--color-error); /* High-alert red background */
border-color: var(--color-error);
}
/* Form Controls & Inputs */
.form-control {
display: block;
width: 100%;
padding: var(--spacing-sm); /* Comfort target size */
font-size: var(--font-size-base);
line-height: var(--line-height-base);
color: var(--color-text-body);
background-color: var(--color-surface);
background-clip: padding-box;
border: var(--border-width-md) solid var(--color-grey); /* Baseline 2px border */
border-radius: var(--border-radius-sm);
appearance: none; /* Strip browser defaults */
transition: border-color var(--transition-speed-normal) var(--transition-ease),
box-shadow var(--transition-speed-normal) var(--transition-ease);
}
.form-control:focus {
border-color: var(--color-primary-light); /* Switch outline on hover/focus */
outline: none;
box-shadow: 0 0 0 3px oklch(var(--color-primary-light-oklch) / var(--alpha-sm)); /* Focus glow */
}
.form-control:disabled {
background-color: var(--color-lighter-grey); /* Muted disabled state */
cursor: not-allowed;
}
.form-control-sm {
padding: var(--spacing-xs) var(--spacing-sm);
font-size: var(--font-size-sm);
}
.form-control-lg {
padding: var(--spacing-md) var(--spacing-lg);
font-size: var(--font-size-lg);
}
/* Base Navbars */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--spacing-xs) var(--spacing-md);
background-color: var(--color-primary-light);
position: relative;
}
.navbar-brand {
font-weight: bold;
font-size: var(--font-size-h5);
text-decoration: none;
color: var(--color-matte-white);
}
/* Hamburger menu - builds three line toggle through layout spans */
.nav-toggle {
display: flex;
flex-direction: column;
justify-content: space-between;
width: var(--spacing-lg);
height: var(--spacing-lg);
padding: 0;
border: none;
background: transparent;
cursor: pointer;
gap: 4px;
}
.nav-toggle span {
display: block;
width: 100%;
height: var(--spacing-xxs);
background-color: var(--color-surface);
border-radius: 2px;
transition: transform var(--transition-speed-fast) var(--transition-ease),
opacity var(--transition-speed-fast) var(--transition-ease);
}
.navbar-nav {
display: none; /* Hidden by default on mobile dimensions */
list-style: none;
margin: 0;
padding: 0;
flex-direction: column;
background-color: var(--color-primary-dark);
width: 100%;
position: absolute; /* Dynamic drop-down overlay setup */
top: 100%;
left: 0;
z-index: var(--z-index-elevated);
box-shadow: var(--shadow-md);
}
.navbar-nav.is-open {
display: flex; /* Interactive toggle via JS */
}
.nav-item {
padding: var(--spacing-sm);
}
.nav-link {
color: var(--color-matte-white);
text-decoration: none;
transition: color var(--transition-speed-fast) var(--transition-ease);
}
.nav-link:hover,
.nav-link:focus {
color: var(--color-accent);
}
/* Interactive Button Normalization & Sizing */
.btn {
display: inline-block;
font-family: var(--font-fam-primary);
font-size: var(--font-size-base);
line-height: var(--line-height-h5);
text-align: center;
text-decoration: none;
vertical-align: middle;
cursor: pointer;
user-select: none;
border: var(--border-width-sm) solid transparent;
padding: var(--spacing-sm) var(--spacing-md);
border-radius: var(--border-radius-sm);
transition: background-color var(--transition-speed-fast),
border-color var(--transition-speed-fast),
color var(--transition-speed-fast),
box-shadow var(--transition-speed-fast);
}
.btn:hover { background-color: var(--color-primary-light); color: var(--color-matte-white); }
.btn:active { background-color: var(--color-primary); }
.btn:focus { outline: var(--border-width-md) solid var(--color-accent); }
.btn:disabled { opacity: 0.6; cursor: not-allowed; pointer-events: none; }
.btn-sm { padding: var(--spacing-xs) var(--spacing-sm); font-size: var(--font-size-sm); }
.btn-md { padding: var(--spacing-sm) var(--spacing-md); font-size: var(--font-size-base); }
.btn-lg { padding: var(--spacing-md) var(--spacing-lg); font-size: var(--font-size-md); }
/* Solid Interactive Variants */
.btn-primary { background-color: var(--color-primary); color: var(--color-matte-white); border-color: var(--color-primary); }
.btn-primary:hover { background-color: var(--color-primary-light); border-color: var(--color-primary-light); }
.btn-secondary { background-color: var(--color-secondary); color: var(--color-matte-white); border-color: var(--color-secondary); }
.btn-secondary:hover { background-color: var(--color-secondary-light); border-color: var(--color-secondary-light); }
.btn-accent { background-color: var(--color-accent); color: var(--color-matte-white); border-color: var(--color-accent); }
.btn-accent:hover { background-color: oklch(var(--color-accent-oklch) / var(--alpha-lg)); border-color: oklch(var(--color-accent-oklch) / var(--alpha-xl)); }
.btn-success { background-color: var(--color-success); color: var(--color-matte-white); border-color: var(--color-success); }
.btn-success:hover { background-color: oklch(var(--color-success-oklch) / var(--alpha-xl)); border-color: oklch(var(--color-success-oklch) / var(--alpha-xl)); }
.btn-info { background-color: var(--color-info); color: var(--color-matte-white); border-color: var(--color-info); }
.btn-info:hover { background-color: oklch(var(--color-info-oklch) / var(--alpha-xl)); border-color: oklch(var(--color-info-oklch) / var(--alpha-xl)); }
/* Warning utilizes dark contrast text to maintain accessibility standards */
.btn-warning { background-color: var(--color-warning); color: var(--color-secondary); font-weight: bold; border-color: var(--color-warning); }
.btn-warning:hover { background-color: oklch(var(--color-warning-oklch) / var(--alpha-xl)); border-color: oklch(var(--color-warning-oklch) / var(--alpha-xl)); }
.btn-error { background-color: var(--color-error); color: var(--color-matte-white); border-color: var(--color-error); }
.btn-error:hover { background-color: oklch(var(--color-error-oklch) / var(--alpha-xl)); border-color: oklch(var(--color-error-oklch) / var(--alpha-xl)); }
/* Outline Design Variants */
.btn-outline {
background-color: transparent;
border: var(--border-width-sm) solid var(--color-primary);
color: var(--color-primary);
transition: all var(--transition-speed-normal) var(--transition-ease);
}
.btn-outline:hover { background-color: var(--color-primary); color: var(--color-text-inverse); }
.btn-outline:focus { outline: var(--border-width-md) solid var(--color-accent); outline-offset: var(--border-width-md); }
.btn-outline-primary { border-color: var(--color-primary); color: var(--color-primary); }
.btn-outline-primary:hover { background-color: var(--color-primary); color: var(--color-text-inverse); }
.btn-outline-primary:focus { outline: var(--border-width-md) solid var(--color-primary); outline-offset: var(--border-width-md); }
.btn-outline-secondary { border-color: var(--color-secondary); color: var(--color-secondary); }
.btn-outline-secondary:hover { background-color: var(--color-secondary); color: var(--color-text-inverse); }
.btn-outline-secondary:focus { outline: var(--border-width-md) solid var(--color-secondary); outline-offset: var(--border-width-md); }
.btn-outline-accent { border-color: var(--color-accent); color: var(--color-accent); }
.btn-outline-accent:hover { background-color: var(--color-accent); color: var(--color-text-inverse); }
.btn-outline-accent:focus { outline: var(--border-width-md) solid var(--color-accent); outline-offset: var(--border-width-md); }
.btn-outline-success { border-color: var(--color-success); color: var(--color-success); }
.btn-outline-success:hover { background-color: var(--color-success); color: var(--color-text-inverse); }
.btn-outline-success:focus { outline: var(--border-width-md) solid var(--color-success); outline-offset: var(--border-width-md); }
.btn-outline-info { border-color: var(--color-info); color: var(--color-info); }
.btn-outline-info:hover { background-color: var(--color-info); color: var(--color-text-inverse); }
.btn-outline-info:focus { outline: var(--border-width-md) solid var(--color-info); outline-offset: var(--border-width-md); }
.btn-outline-warning { border-color: var(--color-warning); color: var(--color-warning); }
.btn-outline-warning:hover { background-color: var(--color-warning); color: var(--color-secondary); font-weight: bold; }
.btn-outline-warning:focus { outline: var(--border-width-md) solid var(--color-warning); outline-offset: var(--border-width-md); }
.btn-outline-error { border-color: var(--color-error); color: var(--color-error); }
.btn-outline-error:hover { background-color: var(--color-error); color: var(--color-text-inverse); }
.btn-outline-error:focus { outline: var(--border-width-md) solid var(--color-error); outline-offset: var(--border-width-md); }
Rationale
Exhibiting components directly alongside their underlying variables allows structural integration tools to trace user-interaction paths cleanly. Normalizing form-controls with standard padding targets (var(--spacing-sm)) and keeping button heights consistent across border widths guarantees high visual polish and cohesive alignment.
Key Architectural Decisions
To conclude, the design methodology of the quell-light.css layout system is summarized in these core structural choices:
- Mobile-First Layout Dominance: Desktop layouts are treated as progressive overrides. By declaring 100% full-width column stacking as the mobile baseline and placing multi-column settings inside an isolated
@media (min-width: 768px)media query block, Quell Light guarantees instant mobile painting and complete layout stability across small devices. - Defensive Structural Defaults: Every element normalization rule is designed defensively to protect downstream content formatting. Default list clearings, normalized margins (
margin-bottom: var(--spacing-md)on paragraph blocks), and custom anchor focus shadows are deployed universally to establish structured layout defaults. - Typographic Contrast with Zero Asset Weight: Eliminating physical
@font-facenetwork calls ensures a lightweight CSS footprint and immediate rendering. Setting fluid heading sizes via CSSclamp()enables zoom-safe typographic contrast across different viewports, maintaining a beautiful editorial layout without requiring asset-generation pipelines or heavy font layers. - Clean System Parity with
quell-light.js: Component styles (such as the drop-down behavior of.navbar-navand toggle action of.nav-toggle) map directly to states managed byquell-light.js(using selectors under.is-open). This strict alignment ensures seamless handoffs between CSS states and JavaScript interactions, eliminating visual bugs and visual stutter.
© 2026 Ortiz Design Studio. | quell system documentation.