ICN Universal Civic Design Language — Brief v0
Status: v0 — canonical source of truth for the ICN design language. Scope: website today; product UI, diagrams, docs, and onboarding over time. Last updated: current refactor session.
1. Purpose
ICN needs a design language that makes institutional life legible.
Not attractive. Not modern. Not technically impressive.
It needs a system of symbols, language, structure, and visual patterns that helps people understand:
- who is acting
- in what scope
- with what standing
- under what authority
- according to what rules
- affecting what resources
- producing what record
- in relation to which other institutions
The design language must make ICN understandable across regions, organizations, cultures, and levels of expertise without flattening the meaning of the system.
Core principle: same system grammar, locally expressed
2. North star
ICN should feel like:
- institutional
- civic
- calm
- legible
- federated
- auditable
- serious
- structured
- human-centered but not soft
- accessible by design
It should feel like public infrastructure for collective self-rule.
It should not feel like:
- crypto
- startup SaaS
- enterprise dashboard sludge
- generic govtech
- hacker terminal aesthetic
- cyberpunk network maps
- AI vapor
- futuristic spectacle
- obscure priest-language software
3. What the design language must do
- make complex institutional systems easier to understand
- teach users the system through repetition
- support mobile-first real-world use
- support plain language and local translation
- preserve semantic consistency across different institutions
- distinguish public meaning, truth-state, and technical depth
- remain readable under stress, low attention, or low expertise
- allow local adaptation without semantic collapse
This is not branding alone. It is part of the institutional interface.
4. Core design principles
4.1 Structure over spectacle
Every visual element should clarify relation, authority, state, scope, proof, or consequence. No decorative futurism.
4.2 One system, many surfaces
The website, product, docs, onboarding, and diagrams should all teach the same grammar.
4.3 Stable meaning, flexible expression
Core concepts remain stable. Visible wording, examples, and helper text can vary by institution, region, or language.
4.4 Accessibility is foundational
Meaning must survive low vision, colorblindness, stress, mobile use, translation, and low familiarity. Accessibility is not an add-on. It is part of institutional legitimacy.
4.5 Repetition builds literacy
Symbols, card structures, scope markers, status bands, and relationship patterns should recur consistently. Users should start learning the system just by seeing the same visual patterns recur.
4.6 Human-centered, not infantilized
The system should be easy to understand without being dumbed down.
4.7 Institutional seriousness without bureaucratic deadness
Alive and usable, but durable, formal, and trustworthy.
5. Three layers of meaning
Every public-facing surface must operate across three layers simultaneously:
Layer 1 — Canonical semantic layer
Stable system concepts. Used internally and for technical precision. Never changes.
Examples: Identity, Standing, Authority, Governance, Policy, Accounting, Execution, Provenance, Federation, Commons, Scope, Agreement, Allocation, Obligation, Settlement, Attestation, Role, Membership, Resource, Member experience.
Layer 2 — Default public vocabulary
Plain-language English. The default user-facing layer for unlocalized public surfaces.
Examples:
- Standing → "your recognized status"
- Authority → "what you are allowed to do"
- Provenance → "history and proof"
- Federation → "how groups work together"
Layer 3 — Local institutional vocabulary
Overridable by organization, federation, language, or region. A local co-op, an agricultural federation, a mutual-aid network, and an indigenous governance body may all prefer different visible labels for the same underlying concept.
The site should default to Layer 2 on public-facing surfaces. Formal Layer 1 terms are allowed when precision requires them, but must be paired with Layer 2 explanations. Layer 3 is not yet implemented; it is the architecture target for localization.
6. Visual primitives
These are the recurring forms the system uses. Each should be a reusable component, not per-page CSS.
- Institutional card (
.inst-card) — exists today with 6 semantic accent variants - Closure station marker — exists today as ClosureLoop + station-number pills
- Scope container — not yet built
- Agreement connector — not yet built
- Provenance trail / receipt strip — not yet built
- Truth-state band — exists as custom CSS on three pages; not yet a reusable component
- Resource / commons field — not yet built
- Federation relation line — not yet built
- Role / authority badge — not yet built
- Action block — not yet built
- Eyebrow (
.eyebrow) — exists today - System divider (
.system-divider) — defined, unused - Section frame (
.section-frame) — defined, unused
7. Current maturity of the design language
As of the latest assessment:
Built and working:
- Token system (74 custom properties)
- Dark theme with reasonable contrast (AA+ verified)
- Mobile layout verified
- ClosureLoop component (first canonical diagram)
.inst-cardwith six semantic accent variants.station-numberpill.eyebrowmono label pattern- Maturity bands with text + color (not color alone)
- Public reading order + cross-page flow
- Icon component + initial symbol family (
Icon.astro+src/data/icons.ts)- First 10 icons: identity, standing, authority, governance, policy, accounting, execution, provenance, federation, commons
- Silhouette-distinct at 16–22px
- Stroke-based line art (1.5px, round caps), monochrome via currentColor
- Grayscale-safe: integrated into ClosureLoop and
.inst-cardeyebrows; each card remains distinguishable underfilter: grayscale(1)
- Accessibility foundations: skip-link, focus-visible, reduced-motion
support,
aria-expandedhamburger,aria-currenton nav,aria-hiddenon decorative SVGs
Not yet built:
- Scope model diagram
- Federation relation map
- Provenance trail visual
- Commons / resource governance visual
- Reusable truth-state band component (blocked by semantic divergence across three current call sites — see Phase 2 notes in session log)
- Full institutional object card grammar (icon ✓, scope, status, action ✗)
- Icon for station 09 Member Experience (convergence station — still unresolved; the amber gradient + column span currently carries it)
- Canonical concept map as a runtime data artifact (exists as markdown, not yet imported by components)
- Localization scaffold (i18n)
- Real logo
- Light theme maintenance discipline
7a. Icon system rules
The first implementation of the ICN symbol system lives in:
website/src/data/icons.ts— the sprite definitions (SVG paths per concept)website/src/components/Icon.astro— the rendererwebsite/src/components/ClosureLoop.astro— the first integrationwebsite/src/pages/index.astro(inst-card eyebrows) — the second integration
Style rules (enforced by review)
- One concept, one icon. Icon ids match canonical concept ids in
concept-map.md. No parallel icon systems, no per-page icon reinterpretation. - Stroke-based line art. 1.5px stroke, round line caps, round joins,
fill="none"on the parent<svg>. No filled shapes unless absolutely required for silhouette distinction. - 24×24 viewBox, designed for 16–22px display. Silhouettes must remain distinct at 16px. If an icon becomes illegible at that size, simplify it.
- Monochrome via
currentColor. Icons inherit their stroke color from the parent element. Never bake color into path attributes. - Silhouette-distinct. Each icon must be recognizable without relying on its label. At 20px, you should be able to identify the concept from shape alone.
- Civic, not decorative. No fantasy insignia, no crypto aesthetics, no cartoon flourishes, no product-UI doodles. Closer to transit signage or constitutional stamps than to consumer app icons.
- Culturally careful. Avoid metaphors that only make sense in English or Western institutional traditions. When a concept is culturally loaded (e.g. "standing", "commons"), lean on abstract structural forms over narrative scenes.
Accessibility rules
- Paired with text on first use. When an icon is introduced on a page, it must appear alongside its visible label. Icons never carry first-time meaning alone.
aria-hidden="true"when decorative. When the icon sits next to a visible text label, it is decorative from the screen-reader's perspective and must be hidden. TheIcon.astrocomponent does this automatically when thelabelprop is omitted.role="img"+aria-labelwhen standalone. When an icon must carry meaning by itself (rare, discouraged), pass alabelprop and the component will set both attributes.focusable="false"always. Icons never trap tab focus.- Grayscale-safe. Every icon + card combination must remain
distinguishable under
filter: grayscale(1). Run the grayscale check before shipping a new integration.
Adding a new icon
- Add an
IconDefentry toICONSinsrc/data/icons.tskeyed by the canonical concept id fromconcept-map.md. - Draw the paths in a 24×24 viewBox using round-cap strokes.
- Review the silhouette at 16px, 20px, and 22px against the existing set. If it is confusable with another icon at those sizes, refine.
- Add the icon slug to the concept entry in
concept-map.mdonce the concept map grows aniconSlugfield (currently tracked informally). - Integrate into the relevant page by importing
Icon.astroand using<Icon name="..." size={...} label="..." />or decorative form. - Run the grayscale test on every page that uses it.
Open questions (v1 targets)
- Additional concepts beyond the initial 10 — scope, agreement, allocation, obligation, settlement, attestation, role, membership, resource — still need icons.
- Runtime concept-map consumption. Currently
concept-map.mdis a human-readable markdown table and icons are separately defined inicons.ts. These should eventually be unified so a single source of truth drives both human docs and runtime rendering. - Icon for the NetworkGraph replacement. The placeholder decorative graph on the homepage hero could become a motion/composition built from the real icon system once the full set exists.
8. Anti-patterns
ICN should not look or sound like:
- a crypto protocol explainer
- a venture-funded SaaS homepage
- a generic enterprise dashboard
- a government PDF portal
- a cyberpunk network map
- a developer docs site pretending to be a public institution
- a symbolic system so abstract that only insiders can read it
- icon chaos
- color overloading
- long unbroken prose everywhere
- diagrams that require prior expertise
- centralizing federation imagery
- soft consumer polish that undermines seriousness
9. Open questions for v1
- exact icon family style
- exact palette spec with WCAG-verified contrast pairs
- logo/mark direction
- degree of local institutional theming allowed
- how much terminology override is safe before semantic drift
- whether some concepts need two-level display everywhere
- how to formalize design tokens across site and product
10. Working definition
ICN should use a universal civic design language: a stable system of symbols, structures, colors, and plain-language labels that makes institutional life legible across regions, organizations, and languages. The underlying semantic model should remain consistent, while visible wording and examples can be localized by each institution or federation. The system should be understandable on mobile, under stress, across literacy levels, and without insider knowledge. It should feel like public infrastructure for collective self-rule.
11. Related artifacts
docs/design-language/concept-map.md— canonical → public → local term mappingdocs/design-language/accessibility.md— accessibility rules and WCAG requirementswebsite/src/styles/global.css— token definitions and shared component classeswebsite/src/components/ClosureLoop.astro— the first canonical diagram primitive
12. How to use this document
This is the canonical source of truth for the ICN design language. Every public-facing page, component, copy change, and visual decision should be checkable against it.
Rule for contributors: if an edit introduces something this brief does not describe, either the brief needs to evolve (v0 → v1) or the edit is out of scope for the design language. Do not let ad-hoc decisions silently drift the system.
Rule for future agents: this brief supersedes any earlier design direction scattered across chat history, README snippets, or informal notes. Start here.