How this page is built
Every fact on this page comes from build-manifest.json, which the build writes from the files it ships. Built .
Fonts
| Family | File | Size |
|---|---|---|
| Geist Variable | vendor/fonts/geist-latin-wght-normal.woff2 | 28,400 B |
| Geist Mono Variable | vendor/fonts/geist-mono-latin-wght-normal.woff2 | 31,368 B |
Colours
| Theme | Token | Value | Contrast |
|---|---|---|---|
| light | --paper | #f7f6f2 | background |
| light | --card | #ffffff | background |
| light | --sunk | #efede6 | background |
| light | --raised | #ffffff | background |
| light | --ink | #101114 | 17.46 on --paper, 18.88 on --card, 16.12 on --sunk, 18.88 on --raised |
| light | --ink-2 | #4b4f58 | 7.59 on --paper, 8.21 on --card, 7.01 on --sunk, 8.21 on --raised |
| light | --ink-3 | #62666e | 5.33 on --paper, 5.76 on --card, 4.92 on --sunk, 5.76 on --raised |
| light | --accent | #0b63c4 | 5.40 on --paper, 5.84 on --card, 4.99 on --sunk, 5.84 on --raised |
| light | --accent-hover | #0a57ad | 6.52 on --paper, 7.05 on --card, 6.02 on --sunk, 7.05 on --raised |
| light | --on-accent | #ffffff | 1.08 on --paper, 1.00 on --card, 1.17 on --sunk, 1.00 on --raised, 5.84 on --accent |
| light | --live | #157a3c | 5.00 on --paper, 5.41 on --card, 4.62 on --sunk, 5.41 on --raised |
| light | --beta | #6d3fc0 | 6.22 on --paper, 6.73 on --card, 5.74 on --sunk, 6.73 on --raised |
| light | --build | #a8520a | 5.01 on --paper, 5.42 on --card, 4.62 on --sunk, 5.42 on --raised |
| light | --proto | #5d6168 | 5.75 on --paper, 6.22 on --card, 5.31 on --sunk, 6.22 on --raised |
| light | --line | #d9d6cc | 1.34 on --paper, 1.45 on --card, 1.24 on --sunk, 1.45 on --raised |
| light | --line-strong | #83868e | 3.37 on --paper, 3.64 on --card, 3.11 on --sunk, 3.64 on --raised |
| light | --grad-from | #000000 | 19.42 on --paper, 21.00 on --card, 17.93 on --sunk, 21.00 on --raised |
| light | --grad-to | #666666 | 5.31 on --paper, 5.74 on --card, 4.90 on --sunk, 5.74 on --raised |
| dark | --paper | #131209 | background |
| dark | --card | #1f1f1f | background |
| dark | --sunk | #181818 | background |
| dark | --raised | #272727 | background |
| dark | --ink | #f3f1ea | 16.62 on --paper, 14.58 on --card, 15.71 on --sunk, 13.22 on --raised |
| dark | --ink-2 | #b3afa4 | 8.57 on --paper, 7.52 on --card, 8.10 on --sunk, 6.82 on --raised |
| dark | --ink-3 | #9a968c | 6.36 on --paper, 5.58 on --card, 6.02 on --sunk, 5.06 on --raised |
| dark | --accent | #5aa8f5 | 7.47 on --paper, 6.56 on --card, 7.06 on --sunk, 5.94 on --raised |
| dark | --accent-hover | #7ab9f7 | 9.04 on --paper, 7.94 on --card, 8.55 on --sunk, 7.19 on --raised |
| dark | --on-accent | #131209 | 1.00 on --paper, 1.14 on --card, 1.06 on --sunk, 1.26 on --raised, 7.47 on --accent |
| dark | --live | #4cc27a | 8.32 on --paper, 7.30 on --card, 7.87 on --sunk, 6.62 on --raised |
| dark | --beta | #b394f2 | 7.54 on --paper, 6.62 on --card, 7.13 on --sunk, 6.00 on --raised |
| dark | --build | #e8a24a | 8.67 on --paper, 7.61 on --card, 8.20 on --sunk, 6.90 on --raised |
| dark | --proto | #a3a7ae | 7.78 on --paper, 6.83 on --card, 7.35 on --sunk, 6.19 on --raised |
| dark | --line | #313131 | 1.44 on --paper, 1.27 on --card, 1.36 on --sunk, 1.15 on --raised |
| dark | --line-strong | #787878 | 4.25 on --paper, 3.73 on --card, 4.02 on --sunk, 3.38 on --raised |
| dark | --grad-from | #ffffff | 18.78 on --paper, 16.48 on --card, 17.76 on --sunk, 14.94 on --raised |
| dark | --grad-to | #9b9b9b | 6.76 on --paper, 5.93 on --card, 6.39 on --sunk, 5.37 on --raised |
Motion
| Token | Value |
|---|---|
--dur-swap | 140ms |
--dur-stamp | 220ms |
--dur-hover | 200ms |
--dur-half | 250ms |
--dur-stroke | 480ms |
--dur-beat | 500ms |
--dur-rise | 600ms |
--dur-reveal | 700ms |
--dur-flip | 600ms |
--dur-count | 800ms |
--dur-camera | 900ms |
--dur-print | 1200ms |
--ease-out | cubic-bezier(0.16, 1, 0.3, 1) |
--ease-rise | cubic-bezier(0.22, 1, 0.36, 1) |
--ease-camera | cubic-bezier(0.65, 0, 0.35, 1) |
--ease-flip | cubic-bezier(0.2, 0.8, 0.2, 1) |
--ease-exit | cubic-bezier(0.5, 0, 0.75, 0) |
--ease-spring | linear(0, 0.055, 0.179, 0.331, 0.482, 0.618, 0.732, 0.822, 0.89, 0.939, 0.972, 0.994, 1.006, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.007, 1.005, 1.003, 1.002, 1.001, 1) |
--ease-critical | linear(0, 0.045, 0.144, 0.264, 0.385, 0.496, 0.594, 0.677, 0.745, 0.801, 0.845, 0.881, 0.908, 0.93, 0.947, 0.96, 0.969, 0.977, 0.983, 0.987, 0.99, 0.993, 0.995, 0.996, 1) |
--stagger | 60ms |
--stagger-cap | 400ms |
Budgets
| File | Measured | Budget | Result |
|---|---|---|---|
js/scene.js | 126,304 B gzip | 160,000 B | Within |
js/main.js | 9,712 B gzip | 12,000 B | Within |
js/boot.js | 470 B raw | 1,000 B | Within |
css/site.css | 15,364 B gzip | 16,000 B | Within |
img/fury/tone.webp | 36,354 B raw | 48,000 B | Within |
img/fury/dots.bin | 15,856 B raw | 16,000 B | Within |
img/fury/engraving-light-1040.webp | 57,934 B raw | 115,000 B | Within |
img/fury/engraving-light-520.webp | 21,246 B raw | 40,000 B | Within |
img/fury/engraving-light-480.webp | 18,806 B raw | 35,000 B | Within |
img/fury/engraving-dark-1040.webp | 32,274 B raw | 55,000 B | Within |
img/fury/engraving-dark-520.webp | 12,738 B raw | 22,000 B | Within |
img/fury/engraving-dark-480.webp | 11,460 B raw | 20,000 B | Within |
img/fury/engraving-light-phone.webp | 8,822 B raw | 20,000 B | Within |
img/fury/engraving-dark-phone.webp | 5,172 B raw | 20,000 B | Within |
img/og.png | 79,334 B raw | 120,000 B | Within |
Security headers
Content-Security-Policy: default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; font-src 'self'; connect-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'Referrer-Policy: strict-origin-when-cross-originPermissions-Policy: camera=(), microphone=(), geolocation=()X-Content-Type-Options: nosniffCross-Origin-Opener-Policy: same-originStrict-Transport-Security: max-age=31536000
Set in this site's _headers file. Not yet checked on the live host.
Standards
W3C TAG Web Platform Design Principles, Group Note, 14 Sep 2026.
The target is WCAG level AA. This site's tests check contrast, focus, keyboard use and motion. They do not cover every AA criterion.