All notable changes to MinimaCSS are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Sass module system (
@use/@forward): every file imports tokens via@use "../core" as *;. No more deprecated@import. Build emits zero deprecation warnings on Dart Sass 1.100+. - Theme tokens consolidated into a single
themes/_theme.scssusinglight-dark(...)andcolor-scheme. Light and dark are now defined once;[data-theme="dark"]simply flipscolor-scheme: dark. - Hover/focus tones derived via
color-mix(in oklch, var(--accent) 88%, light-dark(black, white))instead of hand-tuned hex pairs — change the brand colour once, every state updates.
- Grid system rewritten as native CSS Grid +
gap. No more negative-margin / per-column-padding gutters..col-{N}still works (nowgrid-column: span N). New.row-autofor equal-width auto-flow. New.grid-auto-fit/.grid-auto-fillusingrepeat(auto-fit, minmax(...))— responsive grids without media queries. - Container queries: new
.cq/.cq-named/.cq-sizeutilities..cardis now its own query container and adapts its padding to its parent's width via@container.
- Modal open + close animate from
display: noneviatransition-behavior: allow-discrete+@starting-style. The page-load flash is gone. - Toast uses
@starting-stylefor entry; dismissal is a CSS transition (noanimation-fill-modegames).
accent-color: var(--accent-color)+caret-color: var(--accent-color)on:root— native checkboxes, radios, range, and text carets pick up the brand.:user-invalid/:user-validstyling: validation feedback appears only after the user interacts — no JS class toggling needed..textarea { field-sizing: content; }— textareas auto-grow as you type.:focus-visibleeverywhere (replaces:focusso mouse clicks don't show the ring).
text-wrap: balanceonh1–h6for orphan-free headlines.text-wrap: prettyonpfor orphan-free body copy.scrollbar-gutter: stableonhtmlso opening a modal doesn't shift layout.caret-color: var(--accent-color).
- Expanded
$spacersto include half-steps (0.5,1.5,2.5,3.5) and larger sizes (11,12,14,16,20,24,32,48,64). Class names with half-steps use the standard escaped-period convention (class="p-1.5"matches.p-1\.5). - New
$spacers-fluidscale (sm,md,lg,xl,2xl) usingclamp()for hero-section breathing room. Exposed as.p-fluid-lg,.py-fluid-xl, etc.
- Margin / padding utilities now ship both physical (
.mt-3,.pl-2) and logical (.mbs-3,.ps-2,.mi-4,.pblock-3) variants for RTL and vertical writing modes. .inset-{N},.inset-x-{N},.inset-y-{N}utilities.
- Legacy padding-trick
.aspect-{16-9, 4-3, 1-1}classes. Use the modern.ratio-{video, 4-3, square}(CSSaspect-ratioproperty). - Unused
%clearfixplaceholder. - Unused
$grid-columns-rowvariable. themes/_light.scss,themes/_dark.scss,themes/_apply.scss→ merged intothemes/_theme.scss..colwithout a number now spans 1 (was: flexbox auto-fill). Use.row-autofor the old behaviour.live-server(abandoned) replaced withbrowser-sync@3.npm run devnow reloads on file change without the vulnerabilities.
- Refreshed to current:
sass@1.100,cssnano@8,stylelint@17,stylelint-config-standard-scss@17,postcss-cli@11,concurrently@9,prettier@3.8,autoprefixer@10.5. npm audit: 0 vulnerabilities (was 44).- node_modules: 444 packages (was 715).
MinimaCSS 0.3 targets browsers shipped from early 2024 onward — that's Safari 17.5+, Chrome 117+, Firefox 121+. The framework relies on light-dark(), @starting-style, transition-behavior: allow-discrete, :user-invalid, field-sizing, color-mix(), container queries, cascade layers, and text-wrap: balance/pretty. For older browsers, MinimaCSS 0.2 remains available on npm.
- CSS cascade layers (
@layer reset, base, components, utilities). Utilities now reliably override component styles without!important. - Progress component (
.progress/.progress-bar) with sm/lg sizes, color variants, striped / animated / indeterminate states. - Toast component (
.toast,.toast-container) with six positions, color variants, and an exit animation hook. - Pagination component (
.pagination,.page-link) with sm/lg sizes and a joined variant. - Print stylesheet (
base/_print.scss) — strips interactive chrome, surfaces link URLs, ink-friendly typography. - Utility classes:
.line-clamp-1..6,.line-clamp-none,.ratio-{square,video,4-3,3-2,21-9}(modernaspect-ratio),.pointer-events-{none,auto,all},.select-{none,text,all,auto}. docs/accessibility.md— what the framework guarantees, what you still need to do, testing checklist.- GitHub Actions workflow (
.github/workflows/build.yml) — lint + build on every push and PR. - Stylelint config (
.stylelintrc.json) withstylelint-config-standard-scss. npm run dev— concurrent Sass watcher + live-server on port 4200.
- Removed the Inter CDN
@importfrom typography (SPOF). The framework now uses a system font stack by default and exposes--font-family-base/--font-family-monofor opt-in customisation. autoprefixeris now in the build pipeline (was installed but unused). Vendor prefixes ship indist/minimacss.cssanddist/minimacss.min.css.- Stripped
~140 !importantdeclarations from utility files. Layer order handles cascade priority now. - Light theme text contrast improved (
--text-primary-color: gray-700,--text-secondary-color: gray-500) so both pass WCAG AA against light surfaces. - Dark theme
btn-lightvariant repainted to usegray-600/gray-500rather than near-white, so it stays visible on dark backgrounds. .btnminimum height is now 2.5 rem (.btn-sm1.75 rem,.btn-lg3 rem) for comfortable touch targets.- Button focus now uses
:focus-visibleso the ring only appears on keyboard interaction. - Container max-widths moved from a deeply-nested
if()chain to a$container-max-widthsmap. - Modal
@keyframesare now complete (bothfromandtodefined forshowModalandhideModal). - Accordion content no longer caps at
max-height: 1000px; tall content is no longer clipped. code/pretypography refined with padding, mono variable, and small radius.
- Invalid hex
#ccccin_inputs.scss. "transparent"string (instead of the keyword) for--button-highlight-border-colorin the light theme.- Trailing typo commas (
,,,) in variable-map comments. - Input focus ring sizing inconsistent with buttons (now both
0.25rem).
npm run lint,npm run lint:fix,npm run format,npm run test(lint + build) scripts added.package.jsonnow declares abrowserslist(modern targets — last 2 versions, no IE 11).- Author field updated from placeholder.
- Initial component and utility set, light/dark themes, docs site.