Global
The global layer is feo.css' baseline: a modern reset plus sensible defaults on bare HTML elements. It is what makes feo.css usable without a single class — write plain markup and it already looks reasonable. Everything here is styled with :where(), so every rule has zero specificity and is trivially overridden by your own tokens, layouts, components, and utilities further up the cascade.
@layer tokens, global, layout, components, utilities;
/* ^^^^^^ reset.css + global.css live here */
Because it reads from the tokens layer below it, anything you define there (fonts, colors, sizing) flows into these defaults automatically.
Reset
A light, opinionated reset applied before any element styling.
| Rule | Effect |
|---|---|
box-sizing: border-box | On every element and pseudo-element. |
margin: 0 | Removes default margins from all elements (except replaced media like img/svg). |
ul, ol | List styles and inline padding removed. |
img, picture, svg | display: block, fluid up to 100% of their container, with intrinsic height preserved. |
input, button, textarea, select | Inherit font-family and font-size instead of the UA defaults. |
| Focus handling | Outlines are removed for mouse users and restored as a 1px solid currentColor ring for :focus-visible (keyboard) users. |
[hidden] / [tabindex="-1"] | [hidden] is forced to display: none; [tabindex="-1"] loses its outline. |
Element defaults
The global.css baseline styles the elements you use on every page.
- Document —
color-scheme: light dark(so it respects the user's theme), horizontal overflow hidden, smooth scrolling on:focus-within,hanging-punctuation, andinterpolate-size: allow-keywords(enabling animation to/from keyword sizes) when motion is allowed. - Body —
min-block-size: 100dvh, a20remminimum width,system-uifont stack,font-size: 1rem,line-height: 1.5, and antialiased text rendering. - Headings —
h1–h3are bold and sized on a1.25modular scale viapow()(h1=1rem × 1.25³,h2=²,h3=¹). Headings and interactive elements get a tighter1.2line-height, andh1–h4usetext-wrap: balance. - Links — unclassed links (
a:not([class])) inherit their color, with a smart underline (text-underline-offset, ink-skipping, and a half-transparent decoration color). - Code —
codeuses a monospace stack; inline code stays on one line, whilepre > codescrolls horizontally with a0.75rempadding andtab-size: 2. - Cursors —
:disabled/[disabled]shownot-allowed;[aria-controls]showspointer. - Dialogs — when a
<dialog open>is present, background scrolling is locked.
Progressive & accessible defaults
- View transitions — cross-document view transitions are enabled (
@view-transition { navigation: auto }) where supported. - Reduced motion — under
prefers-reduced-motion: reduce, animations and transitions are near-instant, smooth scrolling is disabled, and view transitions are turned off.
Overriding
Every rule uses :where() (specificity 0,0,0), so you never need !important or high-specificity selectors to change a default — a single class, or a rule in a higher layer, always wins. Set your own values through the tokens layer to reskin the baseline project-wide.