V3Xengine works for Victoria 3

Unofficial · not affiliated with Paradox Interactive

Design system

How this site is drawn

Every value on this page is read from src/design/tokens.ts, the same file that writes the site's CSS, so the page and the screen cannot disagree. Ratios are computed at build time, not typed in.

A ledger, a broadsheet, a drawing

Victoria 3 runs from 1836 to 1936: the century of the account book, the daily paper and the engineering drawing. V3X is engine work with numbers attached, so the site borrows from all three and from nothing later.

SourceWhat it lendsWhere you see it
The ledgerColumns of figures that line up; a double rule under the total; before and after side by side.The front-page table, every table's last row.
The broadsheetA nameplate, a thick-over-thin rule, a dateline strip; questions set in ruled columns; run-in heads.The masthead, § 1 and § 6 of the front page.
The engineering drawingNumbered plates with captions; numbered callouts for a procedure; a title block in the corner; hairline grids.Diagrams, install steps, the footer of every page, figures.

What it refuses: gradients, glass, glow, rounded cards, emoji, stock charts, a centred hero. Corners are square. The only shadow is the brass offset under the primary button, a print register mark, which closes when pressed.

Ink and paper, blueprint by night

12 tokens, two schemes. Light is ledger paper and iron-gall ink, taken from the repo's own diagrams (docs/assets/banner.svg: paper, navy, teal, brass, red). Dark is a blueprint: the same navy as ground, paper as ink. The scheme follows the system setting; there is no switch to load.

TokenLightDarkRole
--paper #f4ecd8 #13202fPage ground. Ledger paper by day, blueprint by night. The light value is the banner card of the repo's banner.svg.
--paper-2 #ece2c8 #1a2b3fPanels, table heads, the masthead strip.
--paper-3 #e3d5b2 #22364dCode ground, bar tracks, selected rows.
--ink #14202e #efe6d0Body text, rules under totals, figure bars.
--ink-2 #46505c #bdb6a4Secondary text: captions, dates, footnotes.
--link #1f3550 #a8c8e8Links and the primary button. Navy of the V3X banner.
--on #2a6467 #86c9c6'On by default', results with V3X. Teal of the repo diagrams, darkened 10 % for text.
--brass #b98b3e #c9a35aOrnament only: double rules, the section numerals' hairline. Never text.
--brass-ink #6f5220 #dcbb78Brass you can read: kickers and small-caps labels.
--alarm #9b2d20 #ec9a8bWarnings and 'before' values. Red of the repo diagrams.
--rule #bfb398 #3c516aHairlines between rows and columns. Decorative, so no contrast floor.
--focus #2f6f73 #86c9c6Keyboard focus ring, 2 px, offset 2 px.

Contrast, computed

WCAG 2 contrast for every pair a text token is allowed on. Body text needs 4.5:1; the focus ring, a UI mark, needs 3:1. The build fails below the floor.

TextOnSchemeRatioFloor
inkpaperlight13.98:14.5:1
inkpaperdark13.25:14.5:1
inkpaper-2light12.76:14.5:1
inkpaper-2dark11.57:14.5:1
inkpaper-3light11.31:14.5:1
inkpaper-3dark9.92:14.5:1
ink-2paperlight6.96:14.5:1
ink-2paperdark8.15:14.5:1
ink-2paper-2light6.35:14.5:1
ink-2paper-2dark7.11:14.5:1
linkpaperlight10.60:14.5:1
linkpaperdark9.48:14.5:1
linkpaper-2light9.67:14.5:1
linkpaper-2dark8.28:14.5:1
linkpaper-3light8.57:14.5:1
linkpaper-3dark7.10:14.5:1
onpaperlight5.72:14.5:1
onpaperdark8.77:14.5:1
onpaper-2light5.22:14.5:1
onpaper-2dark7.65:14.5:1
brass-inkpaperlight6.14:14.5:1
brass-inkpaperdark8.96:14.5:1
brass-inkpaper-2light5.61:14.5:1
brass-inkpaper-2dark7.82:14.5:1
alarmpaperlight6.39:14.5:1
alarmpaperdark7.50:14.5:1
alarmpaper-2light5.83:14.5:1
alarmpaper-2dark6.54:14.5:1
focuspaperlight4.90:13:1
focuspaperdark8.77:13:1

Three faces, nine sizes

Display: Old Standard TT 400, 400 italic, 700 (OFL). A revival of the 'Modern' romans of the late 19th century: the face of the period's newspapers, statute books and engineering catalogues.

Text: Source Serif 4 variable, optical sizes 8-60, weights 200-900 (OFL). A transitional serif with optical sizes, so 15 px captions stay sturdy and 21 px ledes stay fine. Readable for long docs.

Mono: IBM Plex Mono 400, 500 (OFL). Tabular figures by construction: every digit is the same width, so columns of seconds and megabytes line up like a ledger.

All three are served from this site (/fonts/, latin subset, SIL Open Font License). No font CDN. If they fail, the stacks fall back to Georgia and Consolas, which the repo's diagrams already use.

display · 66/72 · 42/48 narrow
Engine works
One per page: the headline.
h1 · 48/54 · 36/42 narrow
The players' guide
Page titles of inner pages.
h2 · 30/36
Measured, not promised
Section heads, after a numeral.
h3 · 21/30
What setup puts on your PC
Sub-heads, set in the text face, semibold.
lede · 21/36
V3X runs underneath the game and keeps your playset as it is.
The paragraph under a headline.
body · 18/30
Every fix went the same way: measure, find the cause, fix it in a plugin, check it offline, measure again.
Running text. Measure 64 characters.
small · 15/24
Measured on the author's PC (16 GB RAM, integrated GPU, Victoria 3 1.15.1).
Captions, footnotes, table text.
mono · 15/24
37.5 s 6.7 s 156 MB 26 MB
Numbers, code, file names, labels.
label · 12/18
On by default
Small caps substitutes: uppercase, +0.08 em tracking.

Text uses old-style figures, which sit in a sentence like lower-case letters. Tables, code and figures switch to lining, tabular figures so that digits stack in columns.

The module: 6 px, a nonpareil

Printers of the period named their type sizes; six-point type was nonpareil, the size of footnotes and the width of a column rule. The site's module is 6 px. Every margin, gap and line height is a whole number of modules, so text in neighbouring columns sits on the same lines.

72 modules of 6 px, a major mark every 36 px.

TokenpxmodulesLength
--s161
--s2122
--s3183
--s4244
--s6366
--s8488
--s127212
--s169616

Twelve columns and a margin for numerals

The page is at most 1176 px wide: 12 columns with 24 px gutters. Sections give two columns to their numeral, as a statute book gives its margin to section numbers, and ten to the text. Running text stops at 64ch, about twelve words a line. Below 900 px the margin folds above the text; below 720 px everything is one column.

Rules, in the printer's sense

RuleDrawnMeans
Hairline 1 px --ruleBetween rows and items. Separates, never encloses.
Head rule 1 px --inkUnder table heads and page titles.
Oxford rule 3 + 1 pxUnder the nameplate only.
Total rule doubleUnder the last row of a table: the account is closed.
Brass hairline 1 px --brassOver section numerals. Ornament, never text.
Warning bar 3 px --alarmLeft of a note that can cost you something.

Data set as type

A figure is a table first: label, value, unit, readable by a screen reader and by search. The bar is decoration drawn from the same number. Before is hatched in red, like an engraver's shading; with V3X is solid teal. Hairlines mark each quarter of the scale. The caption names the machine.

Fig. 1. The loading pass over all 3D models, in seconds
Before37.5 s
With V3X6.7 s
Measured on the author's PC (16 GB RAM, integrated GPU, Victoria 3 1.15.1).

Components

PartExampleUse
Stampon optional noA state, in the margin of an item. Text, not colour alone.
ButtonPrimary SecondaryOne primary action per screen: download.
KickerPlayers' guideAbove a headline: where you are.
LabelFile datedTable heads, captions of the title block.
Note

Single player only.

A caveat that can cost the reader something.
PlateNumbered figure: Plate I, caption, source.The repo's SVG diagrams. Illustrations say they are not screenshots.
Title blockProject · Sheet · Source · RevisedThe footer of every page: what this sheet is and where its content came from.

Words

  • Plain, short, sentence case. Write for a player who has never heard of a DLL; put the technical word second, in code.
  • Numbers only from the V3X repository, always with the machine they were measured on. Say what is optional and off by default next to its number.
  • Say what is not done yet. An illustration says it is not a screenshot.
  • Portuguese is Brazilian Portuguese; the docs for modders stay in English and links to them say so.

Rules, and what checks them

RuleChecked by
No colour literal outside src/design/tokens.ts.scripts/check-tokens.ts, fails the build.
Every text pair meets its contrast floor, in both schemes.scripts/check-tokens.ts, from the table in § 2.
Every internal link and #anchor resolves.scripts/check-links.ts over dist/, fails the build.
Content needs no JavaScript; nothing loads from another host.scripts/check-links.ts: no script but JSON-LD, no external stylesheet, font or image.
Every image has an alt; every page has one h1, a title and a description.scripts/check-links.ts.
Motion only where it explains: a pressed button, smooth scrolling to an anchor. Both removed under prefers-reduced-motion.CSS media query; review.
Docs are the repo's, not a fork.scripts/sync-docs.ts copies them at build and records the source file date.