spirewise 1.7.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -15
- package/bin/cli.js +65 -37
- package/install.sh +3 -3
- package/package.json +2 -4
- package/skills/README.md +0 -1
- package/skills/ai-agent-os-design-system/README.md +105 -0
- package/skills/ai-agent-os-design-system/SKILL.md +195 -0
- package/skills/ai-agent-os-design-system/accessibility-system.md +67 -0
- package/skills/ai-agent-os-design-system/color-system.md +102 -0
- package/skills/ai-agent-os-design-system/component-library.md +147 -0
- package/skills/ai-agent-os-design-system/design-principles.md +79 -0
- package/skills/ai-agent-os-design-system/example-page-structures.md +93 -0
- package/skills/ai-agent-os-design-system/layout-system.md +74 -0
- package/skills/ai-agent-os-design-system/motion-system.md +85 -0
- package/skills/ai-agent-os-design-system/spacing-system.md +87 -0
- package/skills/ai-agent-os-design-system/typography-system.md +91 -0
- package/skills/ai-agent-os-design-system/website-generation-rules.md +192 -0
- package/skills/ai-dark-futuristic-design-system/README.md +91 -0
- package/skills/ai-dark-futuristic-design-system/SKILL.md +179 -0
- package/skills/ai-dark-futuristic-design-system/accessibility-system.md +61 -0
- package/skills/ai-dark-futuristic-design-system/color-system.md +99 -0
- package/skills/ai-dark-futuristic-design-system/component-library.md +140 -0
- package/skills/ai-dark-futuristic-design-system/design-principles.md +66 -0
- package/skills/ai-dark-futuristic-design-system/example-page-structures.md +124 -0
- package/skills/ai-dark-futuristic-design-system/layout-system.md +85 -0
- package/skills/ai-dark-futuristic-design-system/motion-system.md +76 -0
- package/skills/ai-dark-futuristic-design-system/spacing-system.md +73 -0
- package/skills/ai-dark-futuristic-design-system/typography-system.md +89 -0
- package/skills/ai-dark-futuristic-design-system/website-generation-rules.md +220 -0
- package/skills/apple-premium-minimal-design-system/README.md +95 -0
- package/skills/apple-premium-minimal-design-system/SKILL.md +166 -0
- package/skills/apple-premium-minimal-design-system/accessibility-system.md +60 -0
- package/skills/apple-premium-minimal-design-system/color-system.md +100 -0
- package/skills/apple-premium-minimal-design-system/component-library.md +136 -0
- package/skills/apple-premium-minimal-design-system/design-principles.md +65 -0
- package/skills/apple-premium-minimal-design-system/example-page-structures.md +90 -0
- package/skills/apple-premium-minimal-design-system/layout-system.md +89 -0
- package/skills/apple-premium-minimal-design-system/motion-system.md +75 -0
- package/skills/apple-premium-minimal-design-system/spacing-system.md +73 -0
- package/skills/apple-premium-minimal-design-system/typography-system.md +86 -0
- package/skills/apple-premium-minimal-design-system/website-generation-rules.md +207 -0
- package/skills/bento-grid-design-system/README.md +97 -0
- package/skills/bento-grid-design-system/SKILL.md +185 -0
- package/skills/bento-grid-design-system/accessibility-system.md +54 -0
- package/skills/bento-grid-design-system/color-system.md +98 -0
- package/skills/bento-grid-design-system/component-library.md +138 -0
- package/skills/bento-grid-design-system/design-principles.md +72 -0
- package/skills/bento-grid-design-system/example-page-structures.md +91 -0
- package/skills/bento-grid-design-system/layout-system.md +93 -0
- package/skills/bento-grid-design-system/motion-system.md +81 -0
- package/skills/bento-grid-design-system/spacing-system.md +77 -0
- package/skills/bento-grid-design-system/typography-system.md +85 -0
- package/skills/bento-grid-design-system/website-generation-rules.md +193 -0
- package/skills/brutalist-tech-design-system/README.md +100 -0
- package/skills/brutalist-tech-design-system/SKILL.md +185 -0
- package/skills/brutalist-tech-design-system/accessibility-system.md +61 -0
- package/skills/brutalist-tech-design-system/color-system.md +101 -0
- package/skills/brutalist-tech-design-system/component-library.md +117 -0
- package/skills/brutalist-tech-design-system/design-principles.md +73 -0
- package/skills/brutalist-tech-design-system/example-page-structures.md +92 -0
- package/skills/brutalist-tech-design-system/layout-system.md +74 -0
- package/skills/brutalist-tech-design-system/motion-system.md +80 -0
- package/skills/brutalist-tech-design-system/spacing-system.md +86 -0
- package/skills/brutalist-tech-design-system/typography-system.md +94 -0
- package/skills/brutalist-tech-design-system/website-generation-rules.md +195 -0
- package/skills/crunchbase-profile-generator/README.md +64 -0
- package/skills/crunchbase-profile-generator/SKILL.md +189 -0
- package/skills/editorial-luxury-design-system/README.md +98 -0
- package/skills/editorial-luxury-design-system/SKILL.md +187 -0
- package/skills/editorial-luxury-design-system/accessibility-system.md +63 -0
- package/skills/editorial-luxury-design-system/color-system.md +95 -0
- package/skills/editorial-luxury-design-system/component-library.md +131 -0
- package/skills/editorial-luxury-design-system/design-principles.md +77 -0
- package/skills/editorial-luxury-design-system/example-page-structures.md +94 -0
- package/skills/editorial-luxury-design-system/layout-system.md +80 -0
- package/skills/editorial-luxury-design-system/motion-system.md +82 -0
- package/skills/editorial-luxury-design-system/spacing-system.md +77 -0
- package/skills/editorial-luxury-design-system/typography-system.md +107 -0
- package/skills/editorial-luxury-design-system/website-generation-rules.md +194 -0
- package/skills/enterprise-data-viz-design-system/README.md +98 -0
- package/skills/enterprise-data-viz-design-system/SKILL.md +195 -0
- package/skills/enterprise-data-viz-design-system/accessibility-system.md +68 -0
- package/skills/enterprise-data-viz-design-system/color-system.md +112 -0
- package/skills/enterprise-data-viz-design-system/component-library.md +142 -0
- package/skills/enterprise-data-viz-design-system/design-principles.md +75 -0
- package/skills/enterprise-data-viz-design-system/example-page-structures.md +89 -0
- package/skills/enterprise-data-viz-design-system/layout-system.md +75 -0
- package/skills/enterprise-data-viz-design-system/motion-system.md +86 -0
- package/skills/enterprise-data-viz-design-system/spacing-system.md +85 -0
- package/skills/enterprise-data-viz-design-system/typography-system.md +100 -0
- package/skills/enterprise-data-viz-design-system/website-generation-rules.md +196 -0
- package/skills/f6s-copywriting/README.md +16 -6
- package/skills/f6s-copywriting/SKILL.md +162 -46
- package/skills/glassmorphism-design-system/README.md +98 -0
- package/skills/glassmorphism-design-system/SKILL.md +190 -0
- package/skills/glassmorphism-design-system/accessibility-system.md +62 -0
- package/skills/glassmorphism-design-system/color-system.md +128 -0
- package/skills/glassmorphism-design-system/component-library.md +120 -0
- package/skills/glassmorphism-design-system/design-principles.md +77 -0
- package/skills/glassmorphism-design-system/example-page-structures.md +92 -0
- package/skills/glassmorphism-design-system/layout-system.md +81 -0
- package/skills/glassmorphism-design-system/motion-system.md +86 -0
- package/skills/glassmorphism-design-system/spacing-system.md +73 -0
- package/skills/glassmorphism-design-system/typography-system.md +90 -0
- package/skills/glassmorphism-design-system/website-generation-rules.md +195 -0
- package/skills/linkedin-copywriting/README.md +15 -8
- package/skills/linkedin-copywriting/SKILL.md +129 -51
- package/skills/motion-storytelling-design-system/README.md +100 -0
- package/skills/motion-storytelling-design-system/SKILL.md +191 -0
- package/skills/motion-storytelling-design-system/accessibility-system.md +71 -0
- package/skills/motion-storytelling-design-system/color-system.md +101 -0
- package/skills/motion-storytelling-design-system/component-library.md +122 -0
- package/skills/motion-storytelling-design-system/design-principles.md +81 -0
- package/skills/motion-storytelling-design-system/example-page-structures.md +91 -0
- package/skills/motion-storytelling-design-system/layout-system.md +79 -0
- package/skills/motion-storytelling-design-system/motion-system.md +116 -0
- package/skills/motion-storytelling-design-system/spacing-system.md +83 -0
- package/skills/motion-storytelling-design-system/typography-system.md +89 -0
- package/skills/motion-storytelling-design-system/website-generation-rules.md +200 -0
- package/skills/nvidia-inception-idea-booster/README.md +43 -24
- package/skills/nvidia-inception-idea-booster/SKILL.md +260 -116
- package/skills/nvidia-inception-starter/README.md +6 -5
- package/skills/nvidia-inception-starter/SKILL.md +80 -43
- package/skills/nvidia-product-inventor/README.md +44 -40
- package/skills/nvidia-product-inventor/SKILL.md +265 -247
- package/skills/nvidia-startup-idea-founder/README.md +66 -26
- package/skills/nvidia-startup-idea-founder/SKILL.md +245 -189
- package/skills/product-demo-first-design-system/README.md +96 -0
- package/skills/product-demo-first-design-system/SKILL.md +185 -0
- package/skills/product-demo-first-design-system/accessibility-system.md +58 -0
- package/skills/product-demo-first-design-system/color-system.md +109 -0
- package/skills/product-demo-first-design-system/component-library.md +142 -0
- package/skills/product-demo-first-design-system/design-principles.md +66 -0
- package/skills/product-demo-first-design-system/example-page-structures.md +95 -0
- package/skills/product-demo-first-design-system/layout-system.md +76 -0
- package/skills/product-demo-first-design-system/motion-system.md +82 -0
- package/skills/product-demo-first-design-system/spacing-system.md +74 -0
- package/skills/product-demo-first-design-system/typography-system.md +87 -0
- package/skills/product-demo-first-design-system/website-generation-rules.md +194 -0
- package/skills/website-design-skills/01-proof/README.md +0 -47
- package/skills/website-design-skills/01-proof/SKILL.md +0 -303
- package/skills/website-design-skills/02-kajabi/README.md +0 -42
- package/skills/website-design-skills/02-kajabi/SKILL.md +0 -272
- package/skills/website-design-skills/03-lattice/README.md +0 -42
- package/skills/website-design-skills/03-lattice/SKILL.md +0 -271
- package/skills/website-design-skills/04-petal/README.md +0 -42
- package/skills/website-design-skills/04-petal/SKILL.md +0 -271
- package/skills/website-design-skills/05-dropbox-sign/README.md +0 -42
- package/skills/website-design-skills/05-dropbox-sign/SKILL.md +0 -271
- package/skills/website-design-skills/06-distributional/README.md +0 -42
- package/skills/website-design-skills/06-distributional/SKILL.md +0 -271
- package/skills/website-design-skills/07-appcues/README.md +0 -42
- package/skills/website-design-skills/07-appcues/SKILL.md +0 -271
- package/skills/website-design-skills/08-memberstack/README.md +0 -42
- package/skills/website-design-skills/08-memberstack/SKILL.md +0 -271
- package/skills/website-design-skills/09-flank/README.md +0 -42
- package/skills/website-design-skills/09-flank/SKILL.md +0 -275
- package/skills/website-design-skills/10-slidebean/README.md +0 -42
- package/skills/website-design-skills/10-slidebean/SKILL.md +0 -275
- package/skills/website-design-skills/11-formstack/README.md +0 -42
- package/skills/website-design-skills/11-formstack/SKILL.md +0 -275
- package/skills/website-design-skills/12-thalamus/README.md +0 -42
- package/skills/website-design-skills/12-thalamus/SKILL.md +0 -275
- package/skills/website-design-skills/13-grow/README.md +0 -42
- package/skills/website-design-skills/13-grow/SKILL.md +0 -275
- package/skills/website-design-skills/14-gemnote/README.md +0 -42
- package/skills/website-design-skills/14-gemnote/SKILL.md +0 -275
- package/skills/website-design-skills/15-draftbit/README.md +0 -42
- package/skills/website-design-skills/15-draftbit/SKILL.md +0 -275
- package/skills/website-design-skills/16-payman/README.md +0 -42
- package/skills/website-design-skills/16-payman/SKILL.md +0 -273
- package/skills/website-design-skills/17-effortel/README.md +0 -42
- package/skills/website-design-skills/17-effortel/SKILL.md +0 -272
- package/skills/website-design-skills/18-adopt/README.md +0 -42
- package/skills/website-design-skills/18-adopt/SKILL.md +0 -273
- package/skills/website-design-skills/19-kraftful/README.md +0 -42
- package/skills/website-design-skills/19-kraftful/SKILL.md +0 -273
- package/skills/website-design-skills/20-greenhouse/README.md +0 -42
- package/skills/website-design-skills/20-greenhouse/SKILL.md +0 -273
- package/skills/website-design-skills/21-weavy/README.md +0 -42
- package/skills/website-design-skills/21-weavy/SKILL.md +0 -273
- package/skills/website-design-skills/22-safetykit/README.md +0 -42
- package/skills/website-design-skills/22-safetykit/SKILL.md +0 -273
- package/skills/website-design-skills/23-modulify/README.md +0 -42
- package/skills/website-design-skills/23-modulify/SKILL.md +0 -270
- package/skills/website-design-skills/24-realm/README.md +0 -42
- package/skills/website-design-skills/24-realm/SKILL.md +0 -270
- package/skills/website-design-skills/25-modyfi/README.md +0 -42
- package/skills/website-design-skills/25-modyfi/SKILL.md +0 -269
- package/skills/website-design-skills/26-altitude/README.md +0 -42
- package/skills/website-design-skills/26-altitude/SKILL.md +0 -270
- package/skills/website-design-skills/27-way/README.md +0 -42
- package/skills/website-design-skills/27-way/SKILL.md +0 -270
- package/skills/website-design-skills/28-zentail/README.md +0 -42
- package/skills/website-design-skills/28-zentail/SKILL.md +0 -270
- package/skills/website-design-skills/29-zams/README.md +0 -42
- package/skills/website-design-skills/29-zams/SKILL.md +0 -270
- package/skills/website-design-skills/30-user-interviews/README.md +0 -44
- package/skills/website-design-skills/30-user-interviews/SKILL.md +0 -273
- package/skills/website-design-skills/31-bland/README.md +0 -44
- package/skills/website-design-skills/31-bland/SKILL.md +0 -273
- package/skills/website-design-skills/32-nauto/README.md +0 -44
- package/skills/website-design-skills/32-nauto/SKILL.md +0 -273
- package/skills/website-design-skills/33-bill/README.md +0 -44
- package/skills/website-design-skills/33-bill/SKILL.md +0 -273
- package/skills/website-design-skills/34-localyzer/README.md +0 -44
- package/skills/website-design-skills/34-localyzer/SKILL.md +0 -273
- package/skills/website-design-skills/35-jasper/README.md +0 -44
- package/skills/website-design-skills/35-jasper/SKILL.md +0 -273
- package/skills/website-design-skills/README.md +0 -108
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Accessibility System — Brutalist Tech
|
|
2
|
+
|
|
3
|
+
Good news: brutalism's **stark high contrast and big type are accessibility strengths**. The
|
|
4
|
+
risks are loud accent colors (contrast on fills), all-caps overuse, raw "edgy" layouts that
|
|
5
|
+
confuse, and motion (marquees/press). This system keeps the raw look **fully usable** at AA.
|
|
6
|
+
|
|
7
|
+
## Color & contrast (leverage the strength)
|
|
8
|
+
- **Body ≥ 4.5:1**, large/UI ≥ 3:1 — easy with near-black on paper. Keep muted grays
|
|
9
|
+
(`--text-muted`) above AA.
|
|
10
|
+
- **Verify accent fills.** Loud accents need the right text: **yellow/lime → black** text;
|
|
11
|
+
saturated blue/red → white. Test every accent block (`--on-accent`) before shipping. Never
|
|
12
|
+
put low-contrast text on a loud accent.
|
|
13
|
+
- **Non-text contrast ≥ 3:1** for borders that carry meaning, focus outlines, controls — the
|
|
14
|
+
thick black borders easily pass.
|
|
15
|
+
- **Don't rely on color alone** for status; pair flat status colors with a label/icon.
|
|
16
|
+
|
|
17
|
+
## Typography accessibility
|
|
18
|
+
- **All-caps for labels/headings only**, not long body — uppercase hurts readability of
|
|
19
|
+
paragraphs; keep body sentence-case. If body is mono, keep line-height ~1.55 and measure ≤ 70ch.
|
|
20
|
+
- Don't crush spacing for "edge" — maintain readable line-height and word-spacing.
|
|
21
|
+
- Avoid illegible display faces for anything but the hero; never below ~14px for read text.
|
|
22
|
+
|
|
23
|
+
## Focus & keyboard
|
|
24
|
+
- **Thick, visible focus:** `:focus-visible { outline: 3px solid var(--ring); outline-offset:2px }`
|
|
25
|
+
— on brand AND highly visible. Never `outline:none`.
|
|
26
|
+
- **The press effect must not hide focus** — focus outline stays visible in `:active`.
|
|
27
|
+
- **Full keyboard operability**; logical tab order; no traps (except modal focus-trap, ESC).
|
|
28
|
+
**Skip link** to `#main` first in DOM. Accordions/menus: `aria-expanded`, ESC.
|
|
29
|
+
|
|
30
|
+
## Motion (marquees + press)
|
|
31
|
+
- Honor `prefers-reduced-motion`: stop marquees/typewriters/count-ups (final state); reveals in
|
|
32
|
+
final state; press becomes an instant state change.
|
|
33
|
+
- **Marquees are pausable** (hover/focus) and decorative duplicate copies are `aria-hidden`; the
|
|
34
|
+
real content (logos/links) is in the DOM once and reachable. No flashing > 3×/sec.
|
|
35
|
+
- No motion required to access content.
|
|
36
|
+
|
|
37
|
+
## Semantics & structure
|
|
38
|
+
- One `<h1>` per page; ordered headings (size with CSS; don't skip levels). Landmarks
|
|
39
|
+
`<header><nav><main id="main"><section><footer>`.
|
|
40
|
+
- Buttons vs links: `<button>` actions, `<a href>` navigation. Lists `<ul>/<ol>`; quotes
|
|
41
|
+
`<blockquote><cite>`; code `<pre><code>`. Native elements over ARIA; minimal correct ARIA.
|
|
42
|
+
- Decorative stickers/marks `aria-hidden`; informative images have meaningful `alt`.
|
|
43
|
+
|
|
44
|
+
## Forms
|
|
45
|
+
- Programmatic `<label>` per input (placeholders aren't labels); `<fieldset><legend>` for
|
|
46
|
+
groups; errors in text + `aria-describedby`, focus to first error. Inputs use the bordered
|
|
47
|
+
box style but stay legible.
|
|
48
|
+
|
|
49
|
+
## Touch & responsive
|
|
50
|
+
- **Tap targets ≥ 44×44px** (blocky buttons easily satisfy this); blocks stack on mobile;
|
|
51
|
+
oversized type clamps down (no overflow); no unintended page horizontal scroll (marquees clip
|
|
52
|
+
inside their band); 200% zoom OK; pinch-zoom not disabled.
|
|
53
|
+
|
|
54
|
+
## Checklist (run before finishing)
|
|
55
|
+
1. Body + muted text meet AA; **every accent block's text** verified (yellow/lime → black, etc.).
|
|
56
|
+
2. All-caps limited to labels/headings; body sentence-case + readable measure.
|
|
57
|
+
3. Thick visible focus everywhere, including during the press; keyboard-complete; skip link.
|
|
58
|
+
4. Reduced motion → marquees/typewriters/count-ups stopped at final; press is instant.
|
|
59
|
+
5. Marquees pausable; decorative copies `aria-hidden`; real content reachable; nothing flashes.
|
|
60
|
+
6. Correct semantics (one H1, landmarks, button/link, lists); informative media has alt.
|
|
61
|
+
7. 44px targets; blocks stack; type clamps; 200% zoom; zoom not disabled.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Color System — Brutalist Tech
|
|
2
|
+
|
|
3
|
+
Stark and flat: **pure black, paper white, and one loud accent**, plus raw status colors and
|
|
4
|
+
an **inverted block** mode. No gradients, no soft tints — color comes in **flat full-bleed
|
|
5
|
+
blocks** that invert against each other (this is how sections separate — never borders). Ships
|
|
6
|
+
**raw light by default**; an inverted dark mode is included. Override `--accent` to rebrand.
|
|
7
|
+
Contrast is high by design — but **verify accent text/fills meet AA**.
|
|
8
|
+
|
|
9
|
+
## Tokens (`:root`) — raw light (default)
|
|
10
|
+
|
|
11
|
+
```css
|
|
12
|
+
:root {
|
|
13
|
+
/* ---- Core (stark) ---- */
|
|
14
|
+
--paper: #f5f4ef; /* default page (raw off-white) */
|
|
15
|
+
--paper-2: #ffffff; /* pure white block */
|
|
16
|
+
--ink: #0a0a0a; /* near-pure black — text, borders, shadows */
|
|
17
|
+
--ink-2: #1a1a1a; /* inverted block background */
|
|
18
|
+
|
|
19
|
+
/* ---- Block backgrounds (sections invert between these) ---- */
|
|
20
|
+
--block-paper: var(--paper);
|
|
21
|
+
--block-white: var(--paper-2);
|
|
22
|
+
--block-ink: var(--ink); /* black section (text becomes paper) */
|
|
23
|
+
--block-accent: var(--accent); /* accent section (text per --on-accent) */
|
|
24
|
+
|
|
25
|
+
/* ---- Text ---- */
|
|
26
|
+
--text-primary: #0a0a0a; /* on light blocks */
|
|
27
|
+
--text-secondary: #2a2a2a;
|
|
28
|
+
--text-muted: #444444; /* still AA on paper */
|
|
29
|
+
--text-invert: #f5f4ef; /* on ink/accent blocks */
|
|
30
|
+
--on-accent: #0a0a0a; /* text on the accent fill (verify per accent) */
|
|
31
|
+
|
|
32
|
+
/* ---- Borders & shadows (THICK, HARD — component-level, not section dividers) ---- */
|
|
33
|
+
--border-w: 3px; /* default thick border */
|
|
34
|
+
--border-w-2: 4px; /* heavier */
|
|
35
|
+
--border: var(--border-w) solid var(--ink);
|
|
36
|
+
--shadow: 6px 6px 0 var(--ink); /* hard offset shadow, NO blur */
|
|
37
|
+
--shadow-sm:3px 3px 0 var(--ink);
|
|
38
|
+
--shadow-lg:10px 10px 0 var(--ink);
|
|
39
|
+
--ring: #0a0a0a; /* focus outline color (thick) */
|
|
40
|
+
|
|
41
|
+
/* ---- Accent (ONE loud color — pick per brand) ---- */
|
|
42
|
+
--accent: #2b2bff; /* electric blue (default). Alts: #e8ff00 yellow, #ff3b00 red, #b6ff00 lime, #ff5cc8 pink */
|
|
43
|
+
--accent-2: #ffd400; /* optional secondary block accent */
|
|
44
|
+
--accent-press: #1f1fd6;
|
|
45
|
+
|
|
46
|
+
/* ---- Status (raw, flat) ---- */
|
|
47
|
+
--good: #00a341; --good-block:#b6ff8a;
|
|
48
|
+
--warn: #b46a00; --warn-block:#ffd400;
|
|
49
|
+
--bad: #d10000; --bad-block: #ff6b6b;
|
|
50
|
+
--info: #0050ff; --info-block:#9ec5ff;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Inverted / dark mode
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
[data-theme="dark"]{
|
|
58
|
+
--paper:#0a0a0a; --paper-2:#000000; --ink:#f5f4ef; --ink-2:#111111;
|
|
59
|
+
--text-primary:#f5f4ef; --text-secondary:#dcdcd6; --text-muted:#a8a8a2;
|
|
60
|
+
--text-invert:#0a0a0a; --on-accent:#0a0a0a;
|
|
61
|
+
/* borders/shadows now use the light ink (#f5f4ef) so they read on black */
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
In dark mode the "ink" is light, so thick borders + hard shadows are drawn in off-white on
|
|
65
|
+
black — still stark and structural.
|
|
66
|
+
|
|
67
|
+
## Palette roles
|
|
68
|
+
|
|
69
|
+
- **Core** (`--ink`, `--paper`): the only two "neutrals" — pure-ish black + raw white. Used at
|
|
70
|
+
full strength; no in-between grays for chrome (muted grays only for secondary text).
|
|
71
|
+
- **Block backgrounds** (`--block-*`): full-bleed flat **section blocks**. Sections separate by
|
|
72
|
+
**inverting blocks** (paper → ink → accent → white), **not** by a border/divider line.
|
|
73
|
+
- **Text** (`--text-*`, `--text-invert`, `--on-accent`): black on light blocks, paper on ink/
|
|
74
|
+
accent blocks. Always set the matching text color per block. Never below AA.
|
|
75
|
+
- **Borders & shadows** (`--border*`, `--shadow*`): **thick solid borders + hard offset
|
|
76
|
+
(un-blurred) shadows** on cards/buttons/inputs/tables — *inside* components, never between
|
|
77
|
+
sections. No `blur` in any shadow.
|
|
78
|
+
- **Accent** (`--accent`, `--accent-2`): one (occasionally two) loud, flat colors for the
|
|
79
|
+
primary action, an accent block, and highlights. Pick a high-contrast accent and verify text on it.
|
|
80
|
+
- **Status** (`--good/warn/bad/info` + `*-block`): flat raw status colors for badges/alerts;
|
|
81
|
+
pair with a label/icon (never color-only).
|
|
82
|
+
|
|
83
|
+
## Usage rules
|
|
84
|
+
|
|
85
|
+
1. **Flat only.** No gradients, no soft tints, no glass. Color is solid blocks.
|
|
86
|
+
2. **Sections = inverted blocks.** Alternate `--block-paper/white/ink/accent` to separate
|
|
87
|
+
sections; **never** a border/`<hr>` between two sections.
|
|
88
|
+
3. **Two neutrals + one accent.** Resist extra colors; the restraint is the look.
|
|
89
|
+
4. **Hard shadows only.** Every shadow is `Xpx Ypx 0 <ink>` — **no blur radius**.
|
|
90
|
+
5. **Verify AA on accent.** Loud accents (yellow/lime) often need **black** text; saturated
|
|
91
|
+
blue/red can take white — check each accent's text pairing before shipping.
|
|
92
|
+
|
|
93
|
+
## Accent options (pick ONE primary)
|
|
94
|
+
|
|
95
|
+
| Accent | Hex | Text on it |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| Electric blue (default) | `#2b2bff` | white or `--text-invert` |
|
|
98
|
+
| Safety yellow | `#e8ff00` | **black** (`--on-accent`) |
|
|
99
|
+
| Hot red | `#ff3b00` | white |
|
|
100
|
+
| Lime | `#b6ff00` | **black** |
|
|
101
|
+
| Hot pink | `#ff5cc8` | black |
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Component Library — Brutalist Tech
|
|
2
|
+
|
|
3
|
+
Specs for the 17 required components re-cast as **brutalist blocks** — thick borders, hard
|
|
4
|
+
**offset shadows (no blur)**, mono labels, oversized type, blocky buttons that press. Each:
|
|
5
|
+
purpose, anatomy, tokens, states, responsive + a11y. **No borders between sections** (component
|
|
6
|
+
borders are *inside* a section; sections separate by inverted color blocks).
|
|
7
|
+
|
|
8
|
+
Shared primitives:
|
|
9
|
+
|
|
10
|
+
```css
|
|
11
|
+
/* Brutalist box + press button */
|
|
12
|
+
.box { background: var(--paper-2); color: var(--text-primary);
|
|
13
|
+
border: var(--border); box-shadow: var(--shadow); border-radius: var(--radius-0); padding: var(--space-6); }
|
|
14
|
+
.btn { display:inline-flex; align-items:center; gap: var(--space-2);
|
|
15
|
+
font-family: var(--font-mono); font-weight:700; text-transform:uppercase; letter-spacing:.02em;
|
|
16
|
+
font-size:.9375rem; padding: var(--space-3) var(--space-6);
|
|
17
|
+
border: var(--border); border-radius: var(--radius-0); cursor:pointer;
|
|
18
|
+
background: var(--paper-2); color: var(--ink); box-shadow: var(--shadow-sm);
|
|
19
|
+
transition: transform .08s linear, box-shadow .08s linear; }
|
|
20
|
+
.btn:hover { box-shadow: var(--shadow); } /* shadow grows */
|
|
21
|
+
.btn:active { transform: translate(3px,3px); box-shadow: 0 0 0 var(--ink); } /* PRESS: collapses */
|
|
22
|
+
.btn-primary { background: var(--accent); color: var(--on-accent); }
|
|
23
|
+
.tag { font-family: var(--font-mono); text-transform:uppercase; font-size:var(--fs-micro);
|
|
24
|
+
border: 2px solid var(--ink); padding: 2px 8px; box-shadow: var(--shadow-sm); } /* sticker chip */
|
|
25
|
+
:where(a,button,input,[tabindex]):focus-visible { outline: 3px solid var(--ring);
|
|
26
|
+
outline-offset: 2px; } /* thick visible focus */
|
|
27
|
+
```
|
|
28
|
+
**The press effect** (`:active` translate + shadow collapse) is the signature interaction —
|
|
29
|
+
apply to buttons and clickable boxes.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 1. Navbar
|
|
34
|
+
A bordered bar (thick bottom border or a full bordered block), often sticky. Wordmark (bold/
|
|
35
|
+
mono) · mono UPPERCASE nav links · a **`.btn-primary`** CTA · mobile hamburger. **Extensionless
|
|
36
|
+
hrefs**. Optional blocky dropdown (a bordered `.box` panel). Mobile: full-screen block overlay,
|
|
37
|
+
big mono links, ESC/focus-trap. a11y: `<nav>`, `aria-current`, `aria-expanded`, thick focus.
|
|
38
|
+
|
|
39
|
+
## 2. Hero
|
|
40
|
+
Layout BH-A/BH-B/BH-C on an accent or ink block. Kicker (`[ TAG ]`) · huge UPPERCASE display
|
|
41
|
+
H1 · mono deck · blocky CTA pair (press) · optional bordered preview box or a marquee band. One
|
|
42
|
+
H1, one primary CTA. Decorative marks `aria-hidden`.
|
|
43
|
+
|
|
44
|
+
## 3. Feature Grid
|
|
45
|
+
`.grid.cols-3` of `.box` cards (icon/number · bold title · body), or **F-B exposed grid** of
|
|
46
|
+
bordered cells. Hover: shadow grows / slight translate. Mono kicker per card.
|
|
47
|
+
|
|
48
|
+
## 4. Bento Grid
|
|
49
|
+
A blocky bento: varied bordered boxes (one big anchor) on the grid — mixed content (stat, mini
|
|
50
|
+
preview, quote). Hard borders + shadows; gaps show the block background between boxes.
|
|
51
|
+
|
|
52
|
+
## 5. Testimonials
|
|
53
|
+
Quotes in bordered `.box` cards (big quotation mark, mono attribution), or one giant pull quote
|
|
54
|
+
on an accent block. `<blockquote>` + `<cite>`. Optional marquee of short quotes.
|
|
55
|
+
|
|
56
|
+
## 6. Logos Section
|
|
57
|
+
A **marquee** ticker of customer logos (monochrome) or a bordered logo grid. "TRUSTED BY" mono
|
|
58
|
+
kicker. Marquee pausable. `<img alt>`.
|
|
59
|
+
|
|
60
|
+
## 7. Pricing
|
|
61
|
+
Layout P-A: bordered tier boxes; recommended tier = **accent block** / heavier border + a
|
|
62
|
+
sticker `.tag` ("BEST"); price in big mono/grotesk; feature list with `+`/`✓` mono marks;
|
|
63
|
+
blocky CTA. Monthly/annual blocky toggle. a11y: real switch/radio.
|
|
64
|
+
|
|
65
|
+
## 8. FAQ
|
|
66
|
+
Bordered accordion rows; `+`/`−` mono toggle; `<button>` + collapsible answer. Hard edges. a11y:
|
|
67
|
+
`aria-expanded`/`aria-controls`.
|
|
68
|
+
|
|
69
|
+
## 9. CTA
|
|
70
|
+
Layout C-A: a full-bleed **accent or ink block** with a giant UPPERCASE headline + a `.btn-primary`
|
|
71
|
+
(press). `--section-y-lg`, no border between it and neighbors (block inversion does the work).
|
|
72
|
+
|
|
73
|
+
## 10. Footer
|
|
74
|
+
An **ink block** mega footer: big wordmark, mono column labels + links, fine print, social,
|
|
75
|
+
"BUILT WITH HTML/CSS/JS" tag. `<footer>`, `<nav>` lists. Thick top edge via the block change.
|
|
76
|
+
|
|
77
|
+
## 11. Dashboard Preview
|
|
78
|
+
A product screenshot/mock in a thick-bordered `.box` with a **mono title bar** (e.g. `> app —
|
|
79
|
+
v1.0`); hard shadow, slight rotation optional (sticker feel). Real-looking data. Decorative
|
|
80
|
+
chrome `aria-hidden`; informative → alt.
|
|
81
|
+
|
|
82
|
+
## 12. Agent Workflow Section
|
|
83
|
+
Steps as bordered boxes connected by thick lines/arrows (PLAN → RETRIEVE → ACT → VERIFY), mono
|
|
84
|
+
labels + big numbers. Reveal/step animation snappy. a11y: `<ol>` text equivalent.
|
|
85
|
+
|
|
86
|
+
## 13. Code Preview
|
|
87
|
+
A bordered `.box` with a mono title bar + copy button; code in `--font-mono` on paper/ink;
|
|
88
|
+
high-contrast syntax (flat colors, no soft tints). `<pre><code>`; copy `aria-label`.
|
|
89
|
+
|
|
90
|
+
## 14. Terminal Preview
|
|
91
|
+
A bordered terminal box (ink block), mono prompt lines (`$`), optional snappy typewriter
|
|
92
|
+
(reduced motion → final state). Real text, not an image.
|
|
93
|
+
|
|
94
|
+
## 15. Trust Section
|
|
95
|
+
Big mono **numbers** (tabular) in bordered boxes or an exposed grid (uptime, users, requests),
|
|
96
|
+
with mono labels. Count-up snappy on reveal (final value in DOM). Accent on numbers optional.
|
|
97
|
+
|
|
98
|
+
## 16. Security Section
|
|
99
|
+
Compliance badges (SOC 2/ISO/GDPR/HIPAA) as bordered `.tag`/boxes + assurances list (mono `//`
|
|
100
|
+
notes) + "SECURITY DOCS" link. Flat, factual. Badges alt text.
|
|
101
|
+
|
|
102
|
+
## 17. Enterprise Section
|
|
103
|
+
"FOR ENTERPRISE" block: SSO/RBAC/SLAs/VPC as bordered list items + a `.btn-primary` "TALK TO
|
|
104
|
+
SALES" + optional logo marquee. No border between it and neighbors.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Component rules
|
|
109
|
+
- **Brutalist primitives:** every card/button/input/table uses `.box`/`.btn` (thick border +
|
|
110
|
+
hard offset shadow, no blur); the press effect on clickables.
|
|
111
|
+
- **Sections separate by inverted blocks**, not borders; component borders stay *inside* sections.
|
|
112
|
+
- Compose from shared `.box`/`.btn`/`.tag`/tokens — consistent border width + shadow offset.
|
|
113
|
+
- Every interactive element has hover (shadow/translate) **and** a **thick `:focus-visible`**
|
|
114
|
+
outline; components reflow to single column by `md`/`sm`.
|
|
115
|
+
- Decorative marks `aria-hidden`; informative media has meaningful `alt`.
|
|
116
|
+
- Flat only: **no gradients, no glass, no blurred shadows, no pillowy radii.** Restraint: two
|
|
117
|
+
neutrals + one loud accent.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Design Principles — Brutalist Tech
|
|
2
|
+
|
|
3
|
+
The philosophy distilled from neo-brutalist/raw references (Gumroad, Vercel-blocky, brutalist
|
|
4
|
+
Awwwards winners, Read.cv, Bloomberg, Hatch) and modern AI sites (OpenAI, Anthropic,
|
|
5
|
+
Perplexity, Cursor, Replit) for structure. Brutalism on the web = honesty, structure, and
|
|
6
|
+
raw confidence — built **legibly and accessibly**, not as an excuse for unusable chaos.
|
|
7
|
+
|
|
8
|
+
## The one-sentence philosophy
|
|
9
|
+
|
|
10
|
+
**Show the structure, loudly.** Build the page from stark flat color blocks and oversized
|
|
11
|
+
type, expose the grid and the construction (thick borders, hard offset shadows), and let the
|
|
12
|
+
rawness *be* the design — with high contrast and clear function throughout.
|
|
13
|
+
|
|
14
|
+
## Core principles
|
|
15
|
+
|
|
16
|
+
1. **Blocks, not gradients.** Compose in flat, full-bleed **color blocks** that invert
|
|
17
|
+
against each other (black ↔ white ↔ accent). No gradients, no glass, no soft fades.
|
|
18
|
+
2. **Type is the graphic.** Oversized **monospace** and **bold grotesk** headlines — often
|
|
19
|
+
UPPERCASE, tight tracking, set huge. Type carries the personality; imagery is secondary.
|
|
20
|
+
3. **Expose the structure.** A visible grid, hard edges, **thick component borders**, and
|
|
21
|
+
**hard offset shadows** (e.g. `6px 6px 0 #000`, never blurred) reveal how it's built.
|
|
22
|
+
4. **Honesty + function.** Buttons look like buttons, links are underlined, the layout reads
|
|
23
|
+
like a document. The raw, "default browser turned up" feel is intentional.
|
|
24
|
+
5. **One loud accent.** A single saturated accent (electric blue / safety yellow / hot red /
|
|
25
|
+
lime) does the shouting; everything else is black and white.
|
|
26
|
+
6. **High contrast = the look AND the a11y.** Brutalism's stark contrast is an accessibility
|
|
27
|
+
advantage — lean into it (and verify accent text/fills meet AA).
|
|
28
|
+
7. **Mechanical motion.** Snappy, abrupt interactions — a button "presses" (translate +
|
|
29
|
+
shadow collapse), hovers snap, a marquee scrolls. Not silky; deliberate and a little raw.
|
|
30
|
+
8. **Density with order.** Pack content into a clear grid; the rawness is composed, not messy.
|
|
31
|
+
Alignment and a strict grid keep "brutal" from becoming "broken."
|
|
32
|
+
9. **No decoration for its own sake.** Skip ornament, gradients, drop-shadow fluff, rounded
|
|
33
|
+
"friendly" corners. Hard edges (or tiny radii at most).
|
|
34
|
+
10. **Legible above all.** Big type, high contrast, clear hierarchy — brutalist should be
|
|
35
|
+
*more* readable, not less. Never sacrifice legibility for edginess.
|
|
36
|
+
|
|
37
|
+
## Visual-hierarchy laws
|
|
38
|
+
|
|
39
|
+
- **One H1 per page**, set huge — the loudest block on the screen.
|
|
40
|
+
- **Block inversion = section change.** A black block followed by an accent block followed by
|
|
41
|
+
a white block creates rhythm and separates sections — **no divider lines**.
|
|
42
|
+
- **Contrast ladder via weight + case + size:** UPPERCASE bold display, sentence-case body,
|
|
43
|
+
mono labels — not subtle gray steps.
|
|
44
|
+
- **One primary CTA per viewport:** a blocky, bordered, hard-shadow button that presses.
|
|
45
|
+
- **Group with bordered blocks + the grid**, not soft cards or rules between sections.
|
|
46
|
+
- **Accent marks importance** — the primary action, a highlighted block, a key word.
|
|
47
|
+
|
|
48
|
+
## Brutalist devices
|
|
49
|
+
|
|
50
|
+
- **Color-block sections:** full-bleed flat blocks that invert (the section separator).
|
|
51
|
+
- **Thick borders:** 2–4px solid black on cards/buttons/tables/inputs (inside components).
|
|
52
|
+
- **Hard offset shadow:** `box-shadow: 6px 6px 0 #000` (no blur) — the "sticker" look; presses
|
|
53
|
+
on click (shadow shrinks + element translates).
|
|
54
|
+
- **Marquee:** a scrolling ticker of words/logos (pausable, accessible).
|
|
55
|
+
- **Mono labels / tags:** `[ LABEL ]`, `// note`, `001 —`, kbd-style chips.
|
|
56
|
+
- **Exposed grid:** visible column lines / a bordered grid of cells.
|
|
57
|
+
- **Sticker badges:** rotated, bordered, hard-shadow callouts ("NEW", "BETA").
|
|
58
|
+
|
|
59
|
+
## Reference cues (what each does well)
|
|
60
|
+
|
|
61
|
+
- **Gumroad:** loud color blocks, thick borders, hard shadows, bold type — the canonical neo-brutalist.
|
|
62
|
+
- **Vercel (blocky moments) / Read.cv:** stark black/white, mono, exposed structure, restraint.
|
|
63
|
+
- **Awwwards brutalist winners:** oversized type, marquees, raw grids (borrow craft; stay legible).
|
|
64
|
+
|
|
65
|
+
## Do / Don't
|
|
66
|
+
|
|
67
|
+
**Do:** flat color blocks that invert · oversized mono/grotesk type · thick black component
|
|
68
|
+
borders · hard offset shadows (no blur) · one loud accent · exposed grid · snappy mechanical
|
|
69
|
+
motion · UPPERCASE labels · high contrast · marquees/stickers used with intent.
|
|
70
|
+
|
|
71
|
+
**Don't:** gradients · glassmorphism · soft blurred shadows · pillowy rounded everything ·
|
|
72
|
+
low-contrast accent text · borders/lines between sections (use inverted blocks) · timid type ·
|
|
73
|
+
soft generic SaaS layouts · motion that's silky instead of snappy · illegible "edgy" chaos.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Example Page Structures — Brutalist Tech
|
|
2
|
+
|
|
3
|
+
Ready-to-assemble, **brutalist block** page blueprints. Each section names a layout (see
|
|
4
|
+
`layout-system.md`) and components (see `component-library.md`). Compose in stark full-bleed
|
|
5
|
+
**color blocks** that invert; thick borders + hard shadows live inside components. **Sections
|
|
6
|
+
separate by inverted blocks — never borders.**
|
|
7
|
+
|
|
8
|
+
Legend: `BH-* / F-* / P-* / C-* / Q-* / FT-*` layouts · components by name · block colors:
|
|
9
|
+
paper / white / ink / accent.
|
|
10
|
+
|
|
11
|
+
## MANDATORY: 15+ page site map (≈20), 10+ sections/page, clean URLs
|
|
12
|
+
|
|
13
|
+
Always ship a **full multipage website with 15+ pages (≈20)** — never a single landing page.
|
|
14
|
+
Every page carries **at least 10 sections (≈12)**, **no borders/dividers between sections**
|
|
15
|
+
(sections invert via block colors), pure HTML/CSS/vanilla JS, **extensionless URLs**. Required
|
|
16
|
+
20-page map:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
/ Home /customers Customers
|
|
20
|
+
/platform Platform /case-studies Case Studies
|
|
21
|
+
/solutions Solutions /developers Developers
|
|
22
|
+
/products Products /docs Documentation ← + DOC-A subpages
|
|
23
|
+
/features Features /about About
|
|
24
|
+
/ai-agents AI Agents /careers Careers
|
|
25
|
+
/enterprise Enterprise /blog Blog ← + article pages
|
|
26
|
+
/security Security /contact Contact
|
|
27
|
+
/pricing Pricing /partners Partners
|
|
28
|
+
/resources Resources /faq FAQ
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Each blueprint below is a **10-section** skeleton — extend toward 12, never fewer than 10.
|
|
32
|
+
Every page must include: **Hero (block) · Feature Sections · Product Highlights · Trust Signals
|
|
33
|
+
· Testimonials · Use Cases · Statistics · Integrations · CTA (accent block) · Footer (ink).**
|
|
34
|
+
**Alternate block colors** so adjacent sections invert.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1. Home (default) — block sequence shown
|
|
39
|
+
1. **Navbar** (bordered bar) — extensionless mono links
|
|
40
|
+
2. **Hero** `BH-A` — **[accent block]** huge UPPERCASE H1 · mono deck · blocky CTAs · preview box
|
|
41
|
+
3. **Logos / Marquee** — **[ink block]** scrolling logo ticker
|
|
42
|
+
4. **Feature Grid** `F-A` — **[paper block]** bordered `.box` cards
|
|
43
|
+
5. **Exposed grid** `F-B` — **[white block]** bordered cells (construction look)
|
|
44
|
+
6. **Numbered list** `F-D` — **[ink block]** `001/002/003` big mono + bold titles
|
|
45
|
+
7. **Statistics** — **[accent block]** big mono numbers in boxes (count-up)
|
|
46
|
+
8. **Testimonials** — **[paper block]** bordered quote boxes / giant pull quote
|
|
47
|
+
9. **Pricing** `P-A` (or teaser) — **[white block]** bordered tier boxes
|
|
48
|
+
10. **CTA** `C-A` **[accent block]** giant headline + press CTA + **Footer** `FT-A` **[ink block]**
|
|
49
|
+
|
|
50
|
+
## 2. Platform / Product
|
|
51
|
+
1. Navbar · 2. **Hero** `BH-B` split (accent) · 3. Marquee (ink) · 4. Feature `F-A` (paper) · 5.
|
|
52
|
+
**Dashboard Preview** bordered box (white) · 6. Exposed grid `F-B` (ink) · 7. Code Preview box ·
|
|
53
|
+
8. Statistics (accent) · 9. Testimonials (paper) · 10. CTA (accent) + Footer (ink)
|
|
54
|
+
|
|
55
|
+
## 3. Features
|
|
56
|
+
1. Navbar · 2. Hero (block) · 3.–8. feature blocks (alternate `F-A`/`F-B`/`F-C`/`F-D`, inverting
|
|
57
|
+
paper/white/ink/accent each time) · 9. Integrations marquee · 10. CTA + Footer
|
|
58
|
+
|
|
59
|
+
## 4. Developers / Documentation
|
|
60
|
+
- **Developers:** Navbar · **Hero** with **Terminal/Code box** (ink) · Logos marquee · Code
|
|
61
|
+
Preview (tabbed boxes) · Feature grid · Use Cases · Statistics · CTA ("READ DOCS"/"GET KEY") ·
|
|
62
|
+
Footer (≥10).
|
|
63
|
+
- **Docs:** `DOC-A` three-pane (bordered sidebar · prose `--container-md` · TOC); bordered code
|
|
64
|
+
blocks; breadcrumb. Borders are inside the docs UI, not between sections.
|
|
65
|
+
|
|
66
|
+
## 5. Enterprise / Security
|
|
67
|
+
1. Navbar · 2. Hero (outcome, ink) · 3. Logos · 4. Feature `F-C` · 5. **Enterprise** block
|
|
68
|
+
(accent) · 6. **Security** (compliance `.tag` boxes, white) · 7. Statistics (ink) · 8.
|
|
69
|
+
Testimonials (paper) · 9. CTA "TALK TO SALES" (accent) · 10. Footer (ink)
|
|
70
|
+
|
|
71
|
+
## 6. Pricing
|
|
72
|
+
1. Navbar · 2. Hero (short + blocky toggle) · 3. **Pricing** `P-A/P-B` boxes (recommended =
|
|
73
|
+
accent block + sticker) · 4. Feature comparison (exposed grid) · 5. Enterprise band · 6. Logos ·
|
|
74
|
+
7. Statistics · 8. Testimonials · 9. **FAQ** `Q-A` bordered rows · 10. CTA + Footer
|
|
75
|
+
|
|
76
|
+
## 7. Content pages (About, Customers, Case Studies, Careers, Blog, Partners, Resources, Contact, FAQ)
|
|
77
|
+
Reach **≥10 sections** by inverting blocks: Hero → body blocks (manifesto/values, customer grid,
|
|
78
|
+
case-study with big stats, open roles list, article boxes, partner grid, resource boxes, contact
|
|
79
|
+
form in a bordered box) → Trust Signals → Statistics → Testimonials → Integrations marquee → CTA
|
|
80
|
+
(accent) → Footer (ink). About can be a bold "MANIFESTO" block page.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Assembly notes
|
|
85
|
+
- **Scale is mandatory:** 15+ pages, **≥10 sections each**. Never a single/thin page.
|
|
86
|
+
- **Sequence the blocks** (paper → ink → accent → white …) so adjacent sections clearly invert —
|
|
87
|
+
this is how sections separate; **no borders/dividers between sections**.
|
|
88
|
+
- **Thick borders + hard offset shadows on components only** (boxes/buttons/tables/exposed grids).
|
|
89
|
+
Flat — no gradients/glass/blurred shadows.
|
|
90
|
+
- **Oversized mono/grotesk type, UPPERCASE labels/buttons/nav**, one loud accent; verify accent
|
|
91
|
+
text contrast.
|
|
92
|
+
- Use **real, punchy copy** (brutalist voice — short, declarative); mark guesses `[PLACEHOLDER]`.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Layout & Grid System — Brutalist Tech
|
|
2
|
+
|
|
3
|
+
A 12-column **exposed grid** + canonical **block** layouts. The grid is allowed to *show*
|
|
4
|
+
(visible column lines / bordered cells), composition is blocky and confident, and **sections
|
|
5
|
+
separate by inverted color blocks — never borders**.
|
|
6
|
+
|
|
7
|
+
## Grid
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root { --grid-cols: 12; --grid-gap: clamp(16px, 2vw, 28px); }
|
|
11
|
+
|
|
12
|
+
.grid { display: grid; gap: var(--grid-gap);
|
|
13
|
+
grid-template-columns: repeat(var(--grid-cols), 1fr); }
|
|
14
|
+
.cols-2 { grid-template-columns: repeat(2, 1fr); }
|
|
15
|
+
.cols-3 { grid-template-columns: repeat(3, 1fr); }
|
|
16
|
+
.cols-4 { grid-template-columns: repeat(4, 1fr); }
|
|
17
|
+
.split { grid-template-columns: 1fr 1fr; }
|
|
18
|
+
.asym { grid-template-columns: 2fr 1fr; } /* off-balance brutalist split */
|
|
19
|
+
@media (max-width: 900px){ .cols-3,.cols-4 { grid-template-columns: repeat(2,1fr); } }
|
|
20
|
+
@media (max-width: 760px){ .split,.asym { grid-template-columns: 1fr; } }
|
|
21
|
+
@media (max-width: 600px){ .cols-2,.cols-3,.cols-4 { grid-template-columns: 1fr; } }
|
|
22
|
+
|
|
23
|
+
/* Exposed grid: a bordered grid of cells (the "construction" look).
|
|
24
|
+
Borders here are INSIDE the component, not section dividers. */
|
|
25
|
+
.grid--exposed { gap: 0; border: var(--border); }
|
|
26
|
+
.grid--exposed > * { border: var(--border); margin: calc(var(--border-w) * -0.5); padding: var(--space-6); }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Breakpoints: `sm 480` · `md 768` · `lg 1024` · `xl 1280` · `2xl 1440`. Mobile-first; blocks
|
|
30
|
+
stack to one column by `md`; oversized type clamps down.
|
|
31
|
+
|
|
32
|
+
## Canonical block layouts
|
|
33
|
+
|
|
34
|
+
### Hero
|
|
35
|
+
- **BH-A Block hero (default):** a huge UPPERCASE display headline on a block, a mono deck,
|
|
36
|
+
blocky CTAs (bordered, hard shadow), optional a bordered product/screenshot box. Often the
|
|
37
|
+
accent block or the ink block.
|
|
38
|
+
- **BH-B Split:** oversized headline (`.asym` left) + a bordered box/preview (right).
|
|
39
|
+
- **BH-C Marquee hero:** headline + a scrolling **marquee** ticker band beneath it.
|
|
40
|
+
|
|
41
|
+
### Feature
|
|
42
|
+
- **F-A Bordered card grid:** `.grid.cols-3` of `.box` cards (thick border, hard shadow).
|
|
43
|
+
- **F-B Exposed grid:** `.grid--exposed` of cells (visible grid lines) — the construction look.
|
|
44
|
+
- **F-C Alternating blocks:** copy block ↔ bordered media box, flipping sides; blocks invert.
|
|
45
|
+
- **F-D Numbered list:** big `001 / 002 / 003` mono numbers + bold titles, bordered rows.
|
|
46
|
+
|
|
47
|
+
### Pricing / CTA / FAQ / Footer
|
|
48
|
+
- **P-A 3-tier boxes:** bordered tier cards, the recommended one in the **accent block** /
|
|
49
|
+
heavier border + sticker badge ("BEST"). Monthly/annual toggle (blocky switch).
|
|
50
|
+
- **C-A CTA block:** a full-bleed **accent or ink block** with a giant headline + blocky CTA.
|
|
51
|
+
`--section-y-lg`, no border.
|
|
52
|
+
- **Q-A Accordion FAQ:** bordered rows; `+`/`−` mono toggles; hard edges.
|
|
53
|
+
- **FT-A Mega footer:** an **ink block** with mono columns, big wordmark, fine print, social.
|
|
54
|
+
|
|
55
|
+
### Dashboard / Docs
|
|
56
|
+
- **D-A Bordered shell:** product preview in a thick-bordered box with a mono title bar.
|
|
57
|
+
- **DOC-A Three-pane docs:** bordered sidebar · prose (`--container-md`, mono-ish) · TOC;
|
|
58
|
+
bordered code blocks; breadcrumb. Hairlines/borders are *inside* the docs UI.
|
|
59
|
+
|
|
60
|
+
## Composition rules
|
|
61
|
+
|
|
62
|
+
1. **Separate sections by inverted color blocks, NEVER borders.** Sequence blocks (paper →
|
|
63
|
+
ink → accent → white) so adjacent sections clearly differ; `.section{border:0}`; no `<hr>`
|
|
64
|
+
between sections. Component borders (cards/boxes/grids) are fine *inside* a section.
|
|
65
|
+
2. **Compose in blocks on the grid.** Confident, slightly asymmetric splits (`.asym`),
|
|
66
|
+
full-bleed blocks, oversized type. Keep alignment strict so "raw" reads as composed.
|
|
67
|
+
3. **One loud idea per block.** Big headline or one demo per section; don't muddle blocks.
|
|
68
|
+
4. **At least 10 sections per page**, **15+ pages.** Never thin.
|
|
69
|
+
5. **Rhythm via inversion:** hero block → marquee/logos → feature blocks (alternate F-A/F-B) →
|
|
70
|
+
numbered list → metrics → testimonials → pricing → FAQ → accent CTA block → ink footer.
|
|
71
|
+
6. **Full-bleed blocks, contained content** (`.container` inside each block).
|
|
72
|
+
7. **Reflow:** multi-column → single column by `md`; oversized type clamps; exposed grids
|
|
73
|
+
collapse to stacked bordered cells; marquees keep scrolling (or pause) but never cause page
|
|
74
|
+
horizontal scroll of the whole layout.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Motion System — Brutalist Tech
|
|
2
|
+
|
|
3
|
+
Motion is **snappy and mechanical** — things snap, press, and slide rather than glide. Short
|
|
4
|
+
durations, sharp/linear easing, and the signature **press** (translate + hard-shadow collapse).
|
|
5
|
+
It's deliberate and a little raw, but **never janky** and always reduced-motion-aware.
|
|
6
|
+
|
|
7
|
+
Distilled from neo-brutalist sites (abrupt, tactile interactions) and OpenAI/Anthropic/
|
|
8
|
+
Perplexity/Cursor (restraint) for structure.
|
|
9
|
+
|
|
10
|
+
## Tokens
|
|
11
|
+
|
|
12
|
+
```css
|
|
13
|
+
:root {
|
|
14
|
+
--dur-snap: 80ms; --dur-fast: 120ms; --dur-base: 200ms; --dur-slow: 320ms;
|
|
15
|
+
--ease-snap: linear; /* mechanical, no soft curve */
|
|
16
|
+
--ease-step: steps(4, end); /* stepped/digital feel (optional) */
|
|
17
|
+
--ease-out: cubic-bezier(0.2, 0.9, 0.2, 1); /* for reveals only */
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Principles
|
|
22
|
+
1. **Snap, don't glide.** Most interactions use `--dur-snap`/`--dur-fast` with `linear` — abrupt
|
|
23
|
+
and tactile, matching the hard edges.
|
|
24
|
+
2. **The press is the signature.** Buttons/clickable boxes translate `3px,3px` and the hard
|
|
25
|
+
shadow collapses to `0` on `:active` (and back on release) — like physically pressing a sticker.
|
|
26
|
+
3. **Hard, not soft.** No easing-luxury, no blur transitions, no parallax drift. Movement is
|
|
27
|
+
small and decisive.
|
|
28
|
+
4. **One loud motion per area.** A marquee or a snappy reveal — not everything moving at once.
|
|
29
|
+
5. **Cheap props + final-state truth.** Animate `transform`/`opacity`/`box-shadow` (offset only);
|
|
30
|
+
content is fully present with motion off.
|
|
31
|
+
|
|
32
|
+
## Patterns
|
|
33
|
+
|
|
34
|
+
- **Button / box press:** `:hover` shadow grows (`--shadow-sm`→`--shadow`); `:active` →
|
|
35
|
+
`transform: translate(3px,3px); box-shadow: 0 0 0 var(--ink)` over `--dur-snap`.
|
|
36
|
+
- **Hover lift (cards):** small `translate(-2px,-2px)` + shadow grows — the box "pops" off the page.
|
|
37
|
+
- **Reveal:** sections/boxes appear with a quick `opacity` + small `translateY` (or a hard
|
|
38
|
+
`clip-path` wipe) over `--dur-base`, slight stagger. Snappy, not floaty.
|
|
39
|
+
- **Marquee (logos/words):** an infinite horizontal ticker (`transform: translateX`), linear,
|
|
40
|
+
**pausable on hover/focus**; duplicate the track for seamlessness; `aria-hidden` decorative copy.
|
|
41
|
+
- **Accordion / toggle:** instant-ish height + `+`/`−` swap; no slow ease.
|
|
42
|
+
- **Nav:** on scroll, the bar's border/shadow snaps in; mobile menu blocks in/out fast.
|
|
43
|
+
- **Typewriter (terminal):** stepped mono typing (`--ease-step`); reduced motion → final text.
|
|
44
|
+
- **Count-up (stats):** quick mono number roll; final value in DOM.
|
|
45
|
+
- **Sticker wobble (optional):** a tiny rotate on a badge on hover — use sparingly.
|
|
46
|
+
|
|
47
|
+
## Reduced motion (required)
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
@media (prefers-reduced-motion: reduce) {
|
|
51
|
+
*, *::before, *::after { animation-duration:.001ms !important;
|
|
52
|
+
animation-iteration-count:1 !important; transition-duration:.001ms !important;
|
|
53
|
+
scroll-behavior:auto !important; }
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
Under reduced motion: stop marquees/typewriters/count-ups at final values; reveals show in
|
|
57
|
+
final state; keep the **press** as an instant state change (no transition) — it stays usable
|
|
58
|
+
and tactile without animation.
|
|
59
|
+
|
|
60
|
+
## Minimal vanilla helpers
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
const RM = matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
64
|
+
// reveal
|
|
65
|
+
const io = new IntersectionObserver((es)=>es.forEach((e,i)=>{ if(e.isIntersecting){
|
|
66
|
+
e.target.style.transitionDelay = `${Math.min(i*60,240)}ms`;
|
|
67
|
+
e.target.classList.add('in'); io.unobserve(e.target);
|
|
68
|
+
}}, {threshold:.2});
|
|
69
|
+
document.querySelectorAll('[data-reveal]').forEach(el=>io.observe(el));
|
|
70
|
+
// marquee pause on hover handled in CSS (animation-play-state)
|
|
71
|
+
```
|
|
72
|
+
```css
|
|
73
|
+
[data-reveal]{ opacity:0; transform: translateY(14px);
|
|
74
|
+
transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); }
|
|
75
|
+
[data-reveal].in{ opacity:1; transform:none; }
|
|
76
|
+
.marquee { display:flex; gap: var(--space-8); width:max-content;
|
|
77
|
+
animation: marquee 18s linear infinite; }
|
|
78
|
+
.marquee:hover, .marquee:focus-within { animation-play-state: paused; }
|
|
79
|
+
@keyframes marquee { to { transform: translateX(-50%); } }
|
|
80
|
+
```
|