Skip to content

Krigsvold · Design system specification

Build with Krigsvold.

Core 2.2.1 · Astro 1.2.1

Krigsvold’s reusable design comes from krigsvold.org. The core package defines its visual vocabulary; the Astro package supplies layouts and components using those definitions. Your content, identity, navigation, and site behavior belong to your project.

This reference is built from the exact npm releases installed by this website. Token values and font roles below come directly from those packages.

The UI language beyond the package reference

The source audit, experimental grammar, contents/sidebar distinction, independent footer anatomy, interaction obligations and framework support now have a consolidated language reference. Core 2.2.1 and Astro 1.2.1 are experimental releases under the npm next tag; the package versions reported on this page remain the exact installed releases.

Choose what to adopt

For colors or styles in any web project, install the core. Add the Astro package when you want its reusable components.

npm install @krigsvold/theme
ImportEffect
@krigsvold/theme/cssLight and Dark semantic color variables only.
@krigsvold/theme/foundation.cssNamespaced typography, spacing, shape, depth, and interaction variables.
@krigsvold/theme/typography.cssText styles inside .krigsvold; requires foundation variables.
@krigsvold/theme/components.cssOptional interface primitives; requires color and foundation variables.
@krigsvold/theme/fonts.cssLocal font assets through the package’s pinned Fontsource dependencies.
@krigsvold/theme/full.cssColors, foundation, typography, and components. Load fonts separately.
import '@krigsvold/theme/full.css';
import '@krigsvold/theme/fonts.css';
<section class="krigsvold" data-krigsvold="dark">
  <h2>Your content</h2>
</section>

Color scopes can coexist on a page. Add class="krigsvold" to opt into typography and component styling. The core also exports ESM, CommonJS, TypeScript declarations, per-mode JSON, and highlight.js styles. The color reference shows both semantic palettes. Use purpose-based roles such as --krigsvold-text, --krigsvold-bg, and --krigsvold-on-accent together; source colors and semantic roles serve different purposes.

Typography

RoleFamily and weightsUse
--krigsvold-font-serifRoboto Slab
400, 700
Editorial headings, ledes, quotations
--krigsvold-font-displayRoboto Slab
400, 700
Hero and page titles, section headings
--krigsvold-font-sansRoboto
400, 500, 700
Body prose, navigation, controls, tables, metadata
--krigsvold-font-monoRoboto Mono
400, 500, 700
Code, terminal text, keyboard notation

Display and serif are separate roles even where they use the same family. Monospace changes affect code and terminal roles. Optional font loading uses locally bundled open-source assets; Berkeley Mono is a personal licensed override and is not distributed.

Foundation tokens

These are the installed core’s exact defaults, including text sizes, line heights, spacing, widths, corners, shadows, focus dimensions, and motion. Responsive expressions are preserved as CSS values. Breakpoint tokens, where present, document the scale; ordinary CSS custom properties cannot be substituted directly into media-query conditions.

CSS variableDefault
--krigsvold-color-navy-950#061325
--krigsvold-color-navy-900#0a1d35
--krigsvold-color-navy-800#123456
--krigsvold-color-blue-600#286a9d
--krigsvold-color-ice-400#9ed5e6
--krigsvold-color-ice-200#d9eef4
--krigsvold-color-ice-100#eef8fa
--krigsvold-color-paper#fbfaf7
--krigsvold-color-ink#17202a
--krigsvold-color-muted#56616c
--krigsvold-color-rule#d9dee2
--krigsvold-color-gold#b58a3b
--krigsvold-font-serif'Roboto Slab', Georgia, serif
--krigsvold-font-display'Roboto Slab', Georgia, serif
--krigsvold-font-sans'Roboto', Arial, sans-serif
--krigsvold-font-mono'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace
--krigsvold-space-1.25rem
--krigsvold-space-2.5rem
--krigsvold-space-3.75rem
--krigsvold-space-41rem
--krigsvold-space-61.5rem
--krigsvold-space-82rem
--krigsvold-space-123rem
--krigsvold-space-164rem
--krigsvold-space-246rem
--krigsvold-reading-width760px
--krigsvold-content-width1320px
--krigsvold-archive-width1320px
--krigsvold-radius-sm.15rem
--krigsvold-radius-md.3rem
--krigsvold-radius-lg.4rem
--krigsvold-radius-control.15rem
--krigsvold-radius-card0
--krigsvold-shadow-sm0 10px 35px rgb(0 0 0 / 12%)
--krigsvold-shadow-md0 18px 44px rgb(6 19 37 / 18%)
--krigsvold-shadow-lg0 24px 65px rgb(10 29 53 / 12%)
--krigsvold-shadow-cardnone
--krigsvold-transition-ui.15s ease-in
--krigsvold-motion-duration.15s
--krigsvold-text-body1.06rem
--krigsvold-text-h1clamp(2.8rem, 6vw, 5.5rem)
--krigsvold-text-h22.1rem
--krigsvold-text-h31.42rem
--krigsvold-text-displayclamp(3.4rem, 7vw, 6.8rem)
--krigsvold-text-sectionclamp(2rem, 4vw, 3.5rem)
--krigsvold-leading-body1.65
--krigsvold-leading-heading1.13
--krigsvold-leading-display.98
--krigsvold-weight-heading700
--krigsvold-tracking-heading-.025em
--krigsvold-tracking-display-.045em
--krigsvold-tracking-label.16em
--krigsvold-tracking-button.035em
--krigsvold-border-width1px
--krigsvold-focus-width3px
--krigsvold-focus-gap3px
--krigsvold-gutter.75rem
--krigsvold-section-spaceclamp(4.5rem, 8vw, 7.5rem)
--krigsvold-control-height2.75rem
--krigsvold-control-padding.9rem
--krigsvold-button-padding.625rem 1.5rem
--krigsvold-text-button.75rem
--krigsvold-leading-button1.667
--krigsvold-divider-width3rem
--krigsvold-divider-thickness3px
--krigsvold-link-underline-offset.18em
--krigsvold-hero-overlaylinear-gradient(90deg, rgba(3,15,30,.93) 0%, rgba(6,27,51,.76) 52%, rgba(7,28,48,.42) 100%)
--krigsvold-breakpoint-sm576px
--krigsvold-breakpoint-md768px
--krigsvold-breakpoint-lg992px
--krigsvold-breakpoint-xl1200px
--krigsvold-breakpoint-xxl1400px
--krigsvold-layout-gap2rem
--krigsvold-layout-gap-small1rem
--krigsvold-layout-gap-large3rem
--krigsvold-layout-sidebar-width20rem
--krigsvold-layout-main-min30rem
--krigsvold-layout-grid-min20rem
--krigsvold-layout-split-min22rem
--krigsvold-layout-section-spaceclamp(4.5rem, 8vw, 7.5rem)

Source provenance: basuhoward/krigsvold.org at e92e989. The JSON specification also includes grouped design definitions, both semantic color modes, and host capabilities.

Astro components and starter

The installed wrapper supports astro ^5.14.0 || ^6.0.0 || ^7.0.0 with @krigsvold/theme ^2.2.1. Install both peer packages in an existing Astro project:

npm install @krigsvold/theme @krigsvold/astro
---
import { Layout, Container, SectionHeading, Card, Button } from '@krigsvold/astro';
---
<Layout title="Your website" mode="light">
  <Container width="reading">
    <h1>Your own identity</h1>
    <SectionHeading title="Start here" />
    <Card>
      <p>Your content, using shared design definitions.</p>
      <Button href="/about/">About</Button>
    </Card>
  </Container>
</Layout>
ComponentContract
LayoutRequired title; optional description, lang, mode, mainId, mainTabindex, class, bodyClass, and skipLabel. Defaults to Light. Slots: head, header, footer, and body-end. Includes a skip link and the core styles and fonts.
Containerwidth selects content, reading, or archive; content is the default. Accepts class and a default content slot.
SectionHeadingRequired title. Optional id, eyebrow, description, level (h2 or h3), align (left or center), and class hooks. Includes default and divider slots.
CardAn article wrapper with a class hook and a default content slot.
ButtonWith href, renders a link. Otherwise renders a button, defaulting to type="button". Accepts native attributes, including disabled on buttons, and a default content slot.

Import components from @krigsvold/astro or use direct paths such as @krigsvold/astro/Card.astro. To retain your own document shell, import @krigsvold/astro/styles.css and apply the core’s class and appearance attributes.

Start a new site

The npm package includes a neutral starter/ directory. From an existing project or a temporary setup directory, install the packages and copy the starter to a new directory. The example below uses a POSIX shell; other systems can copy the same folder with their file manager.

npm install @krigsvold/theme @krigsvold/astro
cp -R node_modules/@krigsvold/astro/starter ./my-krigsvold-site
cd my-krigsvold-site
npm install
npm run dev

The starter currently uses Astro 7, so use Node 24 or another runtime supported by that Astro release. The starter supplies initial files; the packages supply updates afterward. Replace the sample content and metadata with your own.

Interaction and accessibility

The optional core components provide hover, disabled, and visible keyboard-focus styling. Motion tokens reduce to zero when prefers-reduced-motion: reduce is active. Use native links for navigation and native buttons for actions; retain labels, heading order, and the document skip link.

Pair foreground and background tokens deliberately. Existing contrast checks cover defined pairs, not every possible combination or application. Check normal, hover, focus, and disabled states in both appearances, with enlarged text, narrow viewports, keyboard navigation, and reduced motion. Use labels or symbols as well as color to communicate status.

Layouts and components supply primitives. Menus, dialogs, consent controls, analytics, and their behavior remain the responsibility of the consuming site. A themed page still needs application-level accessibility review.

What each integration applies

IntegrationAppliedOptional or host-specific
web-corecolors, typography variables, spacing, shape, depth, interaction variables, layout primitives

Optional: font loading, element typography, components.

astroweb-core, document shell, container, section heading, card, button, page header, site header, site footer, article layout, landing layout, documentation layout

Site-owned: navigation, content, consent, analytics, personal identity.

vimcolors, syntax

Configure separately: monospace font.

Outside this integration: web layout, proportional typography.

emacscolors, syntax

Configure separately: font roles.

Outside this integration: web layout.

terminalcolors

Configure separately: monospace font.

Outside this integration: web layout, serif, sans.

firefoxbrowser chrome colors

Outside this integration: fonts, website content, spacing, components.

chromebrowser chrome colors

Outside this integration: fonts, website content, spacing, components.

Browser themes apply browser interface colors. Editor and terminal ports map the roles their hosts support. They do not all reproduce a web layout or change typography automatically.

Customization and releases

Override namespaced variables within your own site scope, loaded after the package styles. This changes your installation without creating another authoritative copy of the theme.

.my-site {
  --krigsvold-reading-width: 44rem;
  --krigsvold-font-mono: 'Your licensed font', monospace;
}

The core and Astro packages are versioned independently. The release policy is semantic versioning: compatible fixes are patches, compatible additions are minor releases, and breaking changes to exports, tokens, component APIs, or documented behavior require a major release. Keep a lockfile and review updates against your application. This website pins the versions shown above; the reference changes when those pins change.

Propose shared visual changes in the core repository, with corresponding documentation and verification. Theme software uses the MIT license; fonts retain their bundled license notices. Heraldic artwork, personal identity, and site content are separate from the reusable design system.

When you make a choice, this site remembers it in a first-party preference cookie for up to a year. About cookies and storage.