command-code 0.26.16 → 0.26.17

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.
@@ -0,0 +1,197 @@
1
+ # Smell: `/design smell`
2
+
3
+ I use smell to catch generic design before it spreads. This is not a broad review. It is a detector for reflex, template, and generated sameness.
4
+
5
+ When a surface smells wrong, I fix the category reflex first. Cosmetic edits do not remove the odor.
6
+
7
+ ---
8
+
9
+ ## Composition Smell
10
+
11
+ I check whether the composition came from the work or from habit.
12
+
13
+ Monitor smell: status hidden inside equal cards, alerts without priority, live data treated as static decoration.
14
+
15
+ Operate smell: tools far from objects, no inspector, no command surface, no fast feedback.
16
+
17
+ Compare smell: comparison forced into unrelated cards, missing alignment, weak filters, unstable scan paths.
18
+
19
+ Configure smell: settings scattered by visual balance instead of dependency and consequence.
20
+
21
+ Learn smell: sections arranged as feature tiles when the user needs a path.
22
+
23
+ Decide smell: too many equal calls to action, proof buried below ornament.
24
+
25
+ Explore smell: search, filters, results, and backtracking treated as afterthoughts.
26
+
27
+ Centered grid is not automatically wrong. It is wrong when it has no work-pattern reason to exist.
28
+
29
+ ---
30
+
31
+ ## Prompt Drift Smell
32
+
33
+ I treat prompt drift as a severe smell.
34
+
35
+ Wrong name, recycled logo mark, reused headline structure, inherited proof object, generic visual artifact, and domain objects from an unrelated brief all mean the design is not listening.
36
+
37
+ The fix is not copy editing. The fix is returning to the current prompt's name, category, user, job, artifact, evidence, and refused drift.
38
+
39
+ ---
40
+
41
+ ## Evidence Bar
42
+
43
+ `/design smell` names generic design tells from the actual surface. It does not invent odor.
44
+
45
+ At minimum, I identify the visible pattern, the reflex behind it, why it weakens this specific brief, and the right mode to fix it.
46
+
47
+ If a smell is only a suspicion, I mark it as a suspicion. I do not report it as observed.
48
+
49
+ ---
50
+
51
+ ## What Smell Means
52
+
53
+ A smell is a choice that looks unchosen.
54
+
55
+ It may be competent. It may even be accessible. The problem is that it could have come from any prompt, any template, any average SaaS homepage, any safe default.
56
+
57
+ I look for the moment where the design stopped making project-specific decisions.
58
+
59
+ ---
60
+
61
+ ## The Odors I Track
62
+
63
+ **Tech gradient**: blue-violet, indigo-cyan, and purple-to-teal glossy energy plastered on heroes, CTAs, cards, or text. The visual shorthand for "AI startup."
64
+
65
+ **Generic tech hue**: blue-purple as the primary identity for anything vaguely technical or software-adjacent.
66
+
67
+ **Feature tile grid**: icon, heading, one sentence, repeated in a uniform grid until the section stops meaning anything. Every card equal, nothing prioritized.
68
+
69
+ **Accent rail**: a colored stripe on one side of cards or callouts added to simulate structure. Decoration pretending to be organization.
70
+
71
+ **Unearned blur**: frosted glass panels applied because the surface never committed to a depth system.
72
+
73
+ **Stat monument**: an oversized number cluster filling space where a real product story belongs.
74
+
75
+ **Icon topper**: a rounded-square icon placed above every section heading with no function beyond filling the template.
76
+
77
+ **Bounce everywhere**: motion that turns every interaction into a toy. Elastic easing applied because it was available.
78
+
79
+ **Default type**: a common family used with no voice, no scale, no reason. The font that appeared because no choice was made.
80
+
81
+ **Center stack**: everything aligned to the safe middle because no composition decision was made.
82
+
83
+ ---
84
+
85
+ ## The Domain Default Trap
86
+
87
+ I ask whether the visual direction could be guessed from the industry.
88
+
89
+ A note-taking app as cream and rounded sans. A developer tool as dark with terminal mono. A health product as white and calm blue. A legal platform as navy and serif. A food app as warm orange. A payments product as clean white with green accents.
90
+
91
+ If the answer was obvious before I opened the page, the design has not found itself yet.
92
+
93
+ ---
94
+
95
+ ## What I Look For Instead
96
+
97
+ The design needs at least a few real decisions:
98
+
99
+ - A color strategy that is not the domain's first reflex
100
+ - Type with a reason
101
+ - A composition that chooses tension, rigor, image, or editorial pacing
102
+ - Imagery or visual material tied to the subject
103
+ - Motion that reveals character or state
104
+ - Copy with a specific voice
105
+ - An interaction or detail that could only belong here
106
+
107
+ Unexpected is not automatically good. But a page with nothing unexpected is usually forgettable.
108
+
109
+ ---
110
+
111
+ ## How I Judge Severity
112
+
113
+ I treat faint smells as cleanup. I treat clustered smells as identity failure.
114
+
115
+ A single generic icon card can be replaced. A whole page made of generic cards, indigo gradients, centered hero, Inter, and vague copy needs a new lane.
116
+
117
+ If the smell is structural, I do not patch. I change the direction.
118
+
119
+ ---
120
+
121
+ ## What I Do After Finding Smell
122
+
123
+ I name the dominant smell. I identify the root reflex. Then I pick the right design tool.
124
+
125
+ - Color reflex goes to recolor
126
+ - Type reflex goes to typeset
127
+ - Composition reflex goes to relayout or redesign
128
+ - Generic brand lane goes to voice or redesign
129
+ - Missing state and interaction smell goes to interaction
130
+ - Unclear copy goes to writing
131
+
132
+ If the design smells generated in several systems at once, redesign is usually cleaner than incremental repair.
133
+
134
+ ---
135
+
136
+ ## Scoring
137
+
138
+ Smell uses a `/10` score. The score is **inverted** — finding nothing is perfect.
139
+
140
+ | Tells found | Score |
141
+ |---|---|
142
+ | 0 | 10/10 — CLEAN |
143
+ | 1–2 | 7–8/10 — FAINT |
144
+ | 3–4 | 5–6/10 — PRESENT |
145
+ | 5–6 | 3–4/10 — STRONG |
146
+ | 7+ | 0–2/10 — IDENTITY FAILURE |
147
+
148
+ **MAX_SCORE = 10.** Use `/10` as the denominator in the report template. When zero tells are found, the score is `10/10` and the verdict is CLEAN. Never output `0/10` to mean "no smells detected."
149
+
150
+ The heuristics table in the report uses 10 rows (one per odor tracked). Each row scores `1` if the odor is absent, `0` if detected.
151
+
152
+ ---
153
+
154
+ ## Report Boundary
155
+
156
+ Smell always produces two report artifacts:
157
+
158
+ - `.commandcode/design/smell-report.md`
159
+ - `.commandcode/design/smell-report.html`
160
+
161
+ **Important Rule for Generating HTML Report:**
162
+
163
+ - **Use the following template structure** [report-html.md](report-html.md) to generate `smell-report.html`:
164
+ - Do not change the visual design. Only fill in the content.
165
+
166
+ These are the only report artifacts smell creates.
167
+
168
+ ---
169
+
170
+ ## What I Refuse
171
+
172
+ - Calling a design clean because it passes technical checks
173
+ - Reporting a smell I cannot point to
174
+ - Treating personal taste as evidence of generated design
175
+ - Fixing an AI gradient by choosing a different AI gradient
176
+ - Treating Inter as wrong when it is clearly intentional
177
+ - Treating all centered layouts as bad when symmetry is the right lane
178
+ - Adding decoration to hide generic structure
179
+ - Creating extra report artifacts beyond `smell-report.md` and `smell-report.html`
180
+
181
+ ---
182
+
183
+ ## How I Know The Smell Is Gone
184
+
185
+ - Every named smell maps to a visible choice
186
+ - The palette cannot be guessed from the domain alone
187
+ - The type has a project-specific reason
188
+ - The composition is not the median generated landing page
189
+ - Repeated sections have hierarchy and variation
190
+ - The strongest visual idea belongs to this brief
191
+ - A stranger would not immediately say the page was generated
192
+ - `smell-report.md` and `smell-report.html` both exist
193
+
194
+ STRICT RULE — NEVER BREAK THIS
195
+ Always create .commandcode/design/smell-report.md and
196
+ .commandcode/design/smell-report.html. Do not create any other report,
197
+ summary, analysis file, or extra documentation.
@@ -0,0 +1,163 @@
1
+ # Surface `/design surface`
2
+
3
+ Product design serves the work. The user is not here to admire the interface. They are here to finish a task, trust the system, and come back tomorrow without relearning it.
4
+
5
+ The best product UI becomes familiar faster than it becomes impressive.
6
+
7
+ ---
8
+
9
+ ## Discipline files
10
+
11
+ Surface drives the product hardening pass — consult these for correct execution when each dimension comes up, not as separate passes to layer on:
12
+
13
+ - [button.md](button.md) — for correct button states and control hierarchy when hardening interactive elements
14
+ - [interaction.md](interaction.md) — for correct state coverage, keyboard path, and touch targets when auditing component behavior
15
+ - [border.md](border.md) — for correct edge language and surface separation when tightening component boundaries
16
+ - [shadow.md](shadow.md) — for correct elevation decisions when adjusting depth and layering
17
+ - [writing.md](writing.md) — for correct label, error, and empty state copy when hardening operator-facing text
18
+
19
+ ---
20
+
21
+ ## Composition Starts With The Operator's Job
22
+
23
+ I name the operator's task before choosing structure.
24
+
25
+ Monitor: expose status, alerts, trends, and freshness.
26
+
27
+ Operate: keep commands, target objects, and feedback in one working field.
28
+
29
+ Compare: preserve columns, labels, filters, and scan paths.
30
+
31
+ Configure: group settings by consequence and show what will change.
32
+
33
+ Learn: onboard through progressive disclosure without hiding core controls.
34
+
35
+ Decide: surface proof, risk, tradeoffs, and the next safe action.
36
+
37
+ Explore: support search, filter, sort, and reversible browsing.
38
+
39
+ Product composition is not decoration. It is workflow made visible.
40
+
41
+ ---
42
+
43
+ ## Hardening Bar
44
+
45
+ `/design surface` hardens the working surface. It is not a visual polish pass.
46
+
47
+ At minimum, I cover the primary task, real data density, focus path, loading, empty, error, success, disabled, overflow, mobile structure, keyboard use, and copy for recovery where those states apply.
48
+
49
+ If I only changed color, spacing, or type while product states remain missing, the product pass failed.
50
+
51
+ ---
52
+
53
+ ## The Register
54
+
55
+ I use this file for app UIs, dashboards, admin panels, settings, authenticated routes, tools, tables, forms, editors, and operational screens.
56
+
57
+ In product, familiarity can be a feature. Surprise has to earn its place.
58
+
59
+ ---
60
+
61
+ ## What Good Feels Like
62
+
63
+ An experienced operator should open the screen for the eleventh time that day and move without hesitation.
64
+
65
+ Controls stay where they are expected. Labels use the same nouns. Rows keep stable density. Primary actions are obvious. Secondary actions are reachable but not loud.
66
+
67
+ If the user pauses because the UI is clever, I made the wrong trade.
68
+
69
+ ---
70
+
71
+ ## Type
72
+
73
+ I usually pick one strong sans or the system stack. Product labels, tables, settings, and forms do not need display type.
74
+
75
+ Scale stays compressed. Weight, color, and spacing carry hierarchy with size. Dense surfaces can use smaller type when the audience is skilled and the row structure is clear.
76
+
77
+ Numbers align. Tables deserve tabular figures. Metadata deserves restraint.
78
+
79
+ ---
80
+
81
+ ## Color
82
+
83
+ Product color has three jobs.
84
+
85
+ **Chrome** gives the app stable surfaces: page, sidebar, panel, row, input, divider.
86
+
87
+ **State** teaches the user the system vocabulary: selected, dirty, focused, loading, success, warning, error, disabled.
88
+
89
+ **Primary action** gets the strongest accent. If everything is accented, no action is primary.
90
+
91
+ Product starts restrained. A welcome flow or onboarding moment can carry more color. The working surface gets calmer after login.
92
+
93
+ ---
94
+
95
+ ## Components
96
+
97
+ Every interactive component needs its real life, not just its resting state.
98
+
99
+ Default, hover, focus-visible, active, disabled, loading, selected, error, success, empty, overflow. Some components use all of these. Some use fewer. None get to ignore the states they can enter.
100
+
101
+ Same control, same vocabulary. If two save buttons look unrelated, one is wrong.
102
+
103
+ ---
104
+
105
+ ## Density
106
+
107
+ Product surfaces breathe less than marketing. Density is not clutter when the relationships are clear.
108
+
109
+ Rows, panels, filters, toolbars, and tables should fit the work. Power users often need more on screen, not more air. Comfortable and compact modes can be a real feature.
110
+
111
+ ---
112
+
113
+ ## Motion
114
+
115
+ Product motion is short and functional.
116
+
117
+ Hover, press, selection, drawer open, popover close, loading, save confirmation. That is enough. No page-load ceremony. No scrolling performance. No animation that delays the task.
118
+
119
+ ---
120
+
121
+ ## What Product Can Own
122
+
123
+ - System fonts
124
+ - Standard navigation
125
+ - Tables with many rows
126
+ - Predictable sidebars and tabs
127
+ - Keyboard shortcuts
128
+ - Monochrome charts with one emphasized series
129
+ - Dense but organized screens
130
+ - Repetition, when repetition teaches the system
131
+
132
+ ---
133
+
134
+ ## What I Refuse
135
+
136
+ - Display fonts in labels, tables, or form controls
137
+ - Calling visual polish product hardening
138
+ - Leaving real data, error, empty, loading, or overflow states untested
139
+ - Marketing hero motion inside a working app
140
+ - Custom controls that lose native keyboard behavior
141
+ - Modals for long forms that need a route
142
+ - Five gray scales across one product
143
+ - Accent color on cancel, secondary, decorative, and inactive elements
144
+ - Custom scrollbars that make scrolling harder
145
+ - Cleverness where predictability would build trust
146
+
147
+ ---
148
+
149
+ ## How I Know Product UI Works
150
+
151
+ - The surface survives real data and real states
152
+ - The primary task is clear without reading instructions
153
+ - Focus, loading, error, empty, and success states exist
154
+ - A keyboard user can complete the core flow
155
+ - Tables and dense data stay aligned and scannable
156
+ - Mobile layout changes structure rather than hiding work
157
+ - The same pattern means the same thing across screens
158
+ - The interface feels calmer the more often it is used
159
+
160
+ STRICT RULE — NEVER BREAK THIS
161
+ Do not create report.md, any kind of report, summary, analysis file,
162
+ or extra documentation. This applies every time this file is used.
163
+ Generate no reports unless explicitly asked.
@@ -0,0 +1,124 @@
1
+ # Design System: Tokenize `/design tokenize`
2
+
3
+ Tokenize turns repeated design decisions into shared language. I extract what has proven itself. I do not invent a system because one component happened to look reusable.
4
+
5
+ Consolidation, not invention.
6
+
7
+ ---
8
+
9
+ ## Composition Tokens
10
+
11
+ I tokenize composition only after I understand the work pattern it serves.
12
+
13
+ Monitor tokens include status strips, alert rows, metric clusters, feed items, and drill-down panels.
14
+
15
+ Operate tokens include command bars, tool groups, canvases, inspectors, selection states, and feedback surfaces.
16
+
17
+ Compare tokens include tables, matrices, pinned headers, row actions, bulk controls, and ranking patterns.
18
+
19
+ Configure tokens include field groups, dependency notes, previews, summaries, and commit bars.
20
+
21
+ Learn tokens include article sections, progress markers, examples, walkthrough cards, and completion states.
22
+
23
+ Decide tokens include proof blocks, risk notes, trust markers, and primary action zones.
24
+
25
+ Explore tokens include filters, chips, result rows, maps, galleries, and detail drawers.
26
+
27
+ I do not extract a repeated centered-card composition unless it is genuinely the product's language.
28
+
29
+ ---
30
+
31
+ ## Extraction Bar
32
+
33
+ `/design tokenize` changes the implementation. It is not a naming wishlist.
34
+
35
+ At minimum, I identify repeated decisions, create or update the reusable tokens/components that belong in the project, migrate at least one real usage when safe, and verify the old behavior still works.
36
+
37
+ If I only list suggested tokens or component names, tokenizing failed unless the user explicitly asked for planning only.
38
+
39
+ ---
40
+
41
+ ## When I Tokenize
42
+
43
+ I need repetition with the same intent.
44
+
45
+ Three repeated components with the same job. Several hard-coded values that mean the same thing. Multiple versions of one control drifting apart. A repeated composition pattern. A repeated behavior, animation, typography style, or state treatment.
46
+
47
+ Similarity is not enough. Two things that look alike but serve different purposes may need to stay separate.
48
+
49
+ ---
50
+
51
+ ## What I Look For
52
+
53
+ **Components**: buttons, cards, inputs, modals, rows, badges, tabs, dropdowns, empty states, form fields.
54
+
55
+ **Tokens**: color roles, spacing roles, radii, shadows, type styles, motion timing, z layers.
56
+
57
+ **Compositions**: toolbar groups, form rows, page shells, list-detail layouts, table headers, onboarding empties.
58
+
59
+ **Behavior**: loading patterns, disclosure, keyboard handling, validation, drag, selection, overlay logic.
60
+
61
+ The best candidates reduce future decisions without hiding important variation.
62
+
63
+ ---
64
+
65
+ ## Naming
66
+
67
+ I name by meaning, not value.
68
+
69
+ Primary action, danger text, panel border, section gap, input radius, tooltip layer. These names survive value changes. Names like blue-500 or spacing-16 only help when they are primitives in a larger system.
70
+
71
+ Semantic names belong where components consume them. Primitive names belong deeper in the foundation.
72
+
73
+ ---
74
+
75
+ ## Component Extraction
76
+
77
+ I extract the smallest useful API.
78
+
79
+ The component should match existing project conventions, support the states already needed, keep accessibility built in, and avoid prop sprawl. Variants come from real use, not imagination.
80
+
81
+ I migrate carefully. Old behavior must survive. Visual regressions are not acceptable payment for abstraction.
82
+
83
+ ---
84
+
85
+ ## Token Extraction
86
+
87
+ Values become tokens when they represent a reusable decision.
88
+
89
+ One-off values can stay local. Repeated values with the same meaning become tokens. Repeated values with different meanings should not share a token just because the number matches.
90
+
91
+ The goal is fewer arbitrary choices in future work.
92
+
93
+ ---
94
+
95
+ ## What I Refuse
96
+
97
+ - Extracting before a pattern is proven
98
+ - Listing token ideas without applying them
99
+ - Creating unused tokens or components
100
+ - Creating a generic component so flexible it means nothing
101
+ - Tokenizing every number
102
+ - Replacing clear local code with opaque abstraction
103
+ - Breaking existing APIs during migration
104
+ - Ignoring accessibility in extracted controls
105
+ - Creating documentation files as part of tokenizing
106
+ - Markdown reports
107
+
108
+ ---
109
+
110
+ ## How I Know Tokenize Worked
111
+
112
+ - Tokens or components are actually used by real UI
113
+ - Unused abstractions were not introduced
114
+ - Repetition is reduced without losing intent
115
+ - Names explain roles
116
+ - Components match project conventions
117
+ - States and accessibility are preserved
118
+ - Old duplicate code is removed only after migration is complete
119
+ - Future screens have fewer arbitrary design decisions to make
120
+
121
+ STRICT RULE — NEVER BREAK THIS
122
+ Do not create report.md, any kind of report, summary, analysis file,
123
+ or extra documentation. This applies every time this file is used.
124
+ Generate no reports unless explicitly asked.
@@ -0,0 +1,170 @@
1
+ # Typography: `/design typeset`
2
+
3
+ I use type to make thought visible. Fonts are only one part of it. The real work is rhythm, hierarchy, measure, voice, loading behavior, and the tiny details that make reading feel effortless.
4
+
5
+ Most generic design starts with a default font and a timid scale. I start with the content and the distance from the reader.
6
+
7
+ ---
8
+
9
+ ## Type Follows Composition
10
+
11
+ The work pattern decides how type behaves.
12
+
13
+ Monitor screens need labels, deltas, timestamps, thresholds, and compact hierarchy.
14
+
15
+ Operate screens need tool names, object names, status text, shortcuts, and fast confirmation.
16
+
17
+ Compare screens need aligned numbers, durable headers, scannable row text, and steady labels.
18
+
19
+ Configure screens need field labels, helper text, validation, section titles, and summary language.
20
+
21
+ Learn screens need long-form rhythm, generous measure, clear headings, and progress markers.
22
+
23
+ Decide screens need a strong claim, proof hierarchy, objections, and one action label.
24
+
25
+ Explore screens need search language, filters, tags, result titles, and metadata that can be skimmed.
26
+
27
+ I do not force a marketing type scale onto product work or a product type scale onto brand memory.
28
+
29
+ ---
30
+
31
+ ## System Bar
32
+
33
+ `/design typeset` creates or repairs a type system. It is not a font-size tweak.
34
+
35
+ At minimum, I apply readable body text, a clear heading scale, durable labels, button text, form text, metadata, empty/error/loading copy, line-height, measure, weight contrast, and responsive behavior.
36
+
37
+ If I change fonts, I verify the font is actually loaded or available. A font name in a style value does not count if the browser falls back silently.
38
+
39
+ Changing only the hero headline or one paragraph is not enough unless the user explicitly asked for that one element.
40
+
41
+ ---
42
+
43
+ ## What Type Must Do
44
+
45
+ Type has three jobs.
46
+
47
+ - Make the page understandable at a glance
48
+ - Make the content comfortable to read
49
+ - Give the surface a voice that matches its register
50
+
51
+ If a type choice does not help one of those jobs, I replace it.
52
+
53
+ ---
54
+
55
+ ## Reading Distance
56
+
57
+ I do not assume body text is fine because it is a common size. Phone, laptop, monitor, and TV are different reading situations.
58
+
59
+ Short, close interfaces can run tighter. Large displays and long reading contexts need more size, more line-height, and more controlled measure. Product UI can be dense. Brand display can be loud. Body copy still needs mercy.
60
+
61
+ ---
62
+
63
+ ## Content Length Rules The Measure
64
+
65
+ I match line-height and width to the text itself.
66
+
67
+ Microcopy wants tight leading and fast recognition. Short-form text wants two clean lines at most. Paragraphs want a comfortable measure, usually around the classic readable band. Long-form wants more air, not more decoration.
68
+
69
+ If a paragraph sprawls across the viewport, the layout is asking the reader to do the designer's work.
70
+
71
+ ---
72
+
73
+ ## Font Choice
74
+
75
+ For brand work, I use the physical-object method. I name the brand as a thing I can hold or see: a museum caption, a club flyer, a diner receipt, a technical manual, a ceramic stamp, a field notebook. Then I pick type that belongs to that object.
76
+
77
+ I ask whether the font choice carries any project-specific reason. A font that appears in every second launched product signals nothing — it just means the decision was not made. The brand already owns it, or it was the path of least resistance.
78
+
79
+ That test applies to whatever family is currently over-used. The answer changes over time; the question does not.
80
+
81
+ For product work, a strong system stack or one well-tuned sans is often the best choice. Product type should help operators move fast. It does not need a costume.
82
+
83
+ ---
84
+
85
+ ## Pairing & Font System
86
+
87
+ Add a second family only when it creates real contrast in structure, proportion, texture, or voice.
88
+
89
+ **The non-obvious truth:** One well-chosen font in multiple weights (Regular, Medium, Semibold, Bold + Italics) creates cleaner hierarchy than two competing faces. Only add a second font when you need genuine contrast.
90
+
91
+ **Bad pairing patterns:**
92
+ - Two similar geometric sans (tension without hierarchy)
93
+ - Fonts that compete for the same visual space
94
+ - A third font with no distinct job
95
+ **The pairing check:**
96
+ - Does the display font differ from body in x-height, stroke contrast, or width?
97
+ - Does each family serve a distinct job (headline vs body vs UI)?
98
+ - Would removing one font break the visual system?
99
+ If any answer is no, use one family with stronger weights instead.
100
+
101
+ **Three-font system (when justified):**
102
+ - **Display/Heading:** Bold personality, high contrast (serif, geometric, custom)
103
+ - **Body/Paragraph:** High readability, moderate x-height, comfortable at small sizes (humanist sans, system stack, text serif)
104
+ - **UI/Badge:** Compact, clear at small sizes, tabular numerals (condensed sans, mono, or body with tighter tracking)
105
+ Use three fonts only when each serves a visibly distinct purpose. Most work is better served by two fonts or one strong family.
106
+
107
+ ---
108
+
109
+ ## Hierarchy
110
+
111
+ Each text block needs a clear chain: hook, bridge, detail. More levels create fog. Fewer levels flatten the message.
112
+
113
+ Hierarchy can come from size, weight, color, position, spacing, and casing. Size alone is crude. The best systems combine two or three dimensions and keep the rest quiet.
114
+
115
+ Brand pages can use dramatic jumps. Product surfaces use compressed steps with weight and color doing more of the work.
116
+
117
+ ---
118
+
119
+ ## Dark Surfaces
120
+
121
+ Light type on dark backgrounds needs compensation. It reads thinner in some ways and brighter in others. I give it more line-height, a touch more spacing when needed, and a weight that feels optically correct.
122
+
123
+ I test it with real content, not a perfect headline.
124
+
125
+ ---
126
+
127
+ ## Details I Do Not Skip
128
+
129
+ - Tabular numbers for data, metrics, prices, and aligned values
130
+ - Balanced heading wraps where support exists
131
+ - Better paragraph wraps where support exists
132
+ - Small caps only when the font actually supports them
133
+ - Extra tracking for short all-caps labels
134
+ - No decorative faces for body text
135
+ - No widows, orphaned single words, or ugly rivers in important prose
136
+ - Font loading that avoids obvious layout shift
137
+
138
+ ---
139
+
140
+ ## What I Refuse
141
+
142
+ - Choosing the first trendy family that fits the category
143
+ - Calling one headline resize a typography pass
144
+ - Naming a font that is not actually loaded or available
145
+ - A flat scale where everything is almost the same size
146
+ - Body text wider than comfortable reading allows
147
+ - All-caps paragraphs
148
+ - Display fonts in product labels
149
+ - A third font with no distinct job
150
+ - Tiny mobile text to preserve a desktop layout
151
+ - Broken fallback metrics that make text jump
152
+
153
+ ---
154
+
155
+ ## How I Know The Type Is Working
156
+
157
+ - Type changes appear across real content, not only the hero
158
+ - The loaded or available font matches the claimed type choice
159
+ - The primary message reads before the decoration
160
+ - Body text can be read without effort
161
+ - The type voice matches the surface register
162
+ - Numbers align cleanly
163
+ - Headings break with intention
164
+ - The system works with long strings and short labels
165
+ - The page would still feel designed if color disappeared
166
+
167
+ STRICT RULE — NEVER BREAK THIS
168
+ Do not create report.md, any kind of report, summary, analysis file,
169
+ or extra documentation. This applies every time this file is used.
170
+ Generate no reports unless explicitly asked.