arkaos 4.29.0 → 4.30.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/THE-ARKAOS-GUIDE.md +1 -1
- package/VERSION +1 -1
- package/config/claude-agents/conversion-strategist.md +1 -1
- package/config/claude-agents/extraction-script-writer.md +1 -1
- package/config/claude-agents/frontend-dev.md +1 -1
- package/config/claude-agents/landing-cro-specialist.md +1 -1
- package/config/claude-agents/visual-designer.md +1 -1
- package/config/skills-provenance.yaml +17 -3
- package/departments/brand/agents/design-ops/extraction-script-writer.yaml +1 -0
- package/departments/brand/agents/visual-designer.yaml +1 -0
- package/departments/brand/references/uiux-knowledge-and-tools.md +13 -1
- package/departments/brand/skills/colors/SKILL.md +9 -1
- package/departments/brand/skills/colors/references/hallmark.LICENSE +21 -0
- package/departments/brand/skills/colors/references/impeccable.LICENSE +191 -0
- package/departments/brand/skills/colors/references/oklch-theme.md +563 -0
- package/departments/brand/skills/design-system/SKILL.md +34 -0
- package/departments/brand/skills/design-system/references/design-dna-study.md +512 -0
- package/departments/brand/skills/design-system/references/design-md-spec.md +454 -0
- package/departments/brand/skills/design-system/references/hallmark.LICENSE +21 -0
- package/departments/brand/skills/design-system/references/impeccable.LICENSE +191 -0
- package/departments/brand/skills/design-system/references/interaction-states.md +306 -0
- package/departments/brand/skills/design-system/references/themes/carnival.md +303 -0
- package/departments/brand/skills/design-system/references/themes/cobalt.md +148 -0
- package/departments/brand/skills/design-system/references/themes/hum.md +405 -0
- package/departments/brand/skills/design-system/references/themes/lumen.md +480 -0
- package/departments/brand/skills/design-system/references/typography-craft.md +319 -0
- package/departments/brand/skills/mockup-generate/SKILL.md +4 -1
- package/departments/brand/skills/wireframe/SKILL.md +5 -0
- package/departments/dev/agents/frontend-dev.yaml +1 -0
- package/departments/dev/skills/animated-website/SKILL.md +10 -0
- package/departments/dev/skills/animated-website/references/hallmark.LICENSE +21 -0
- package/departments/dev/skills/animated-website/references/impeccable.LICENSE +191 -0
- package/departments/dev/skills/animated-website/references/motion-recipes.md +546 -0
- package/departments/dev/skills/evaluator-build-loop/SKILL.md +5 -0
- package/departments/landing/agents/conversion-strategist.yaml +1 -0
- package/departments/landing/agents/cro-specialist.yaml +1 -0
- package/departments/landing/skills/landing-gen/SKILL.md +16 -5
- package/departments/landing/skills/page-architect/SKILL.md +25 -1
- package/departments/landing/skills/page-architect/references/component-cookbook.md +265 -0
- package/departments/landing/skills/page-architect/references/components/c1-outlined-chip.md +14 -0
- package/departments/landing/skills/page-architect/references/components/c2-inline-form-as-cta.md +19 -0
- package/departments/landing/skills/page-architect/references/components/c3-typographic-link.md +11 -0
- package/departments/landing/skills/page-architect/references/components/c4-sticky-bottom-bar.md +17 -0
- package/departments/landing/skills/page-architect/references/components/f1-bento-grid.md +22 -0
- package/departments/landing/skills/page-architect/references/components/f2-sticky-scroll-stack.md +23 -0
- package/departments/landing/skills/page-architect/references/components/f3-tabular-spec-sheet.md +14 -0
- package/departments/landing/skills/page-architect/references/components/f4-step-sequence.md +14 -0
- package/departments/landing/skills/page-architect/references/components/f5-annotated-screenshot.md +14 -0
- package/departments/landing/skills/page-architect/references/components/f6-product-card-grid.md +42 -0
- package/departments/landing/skills/page-architect/references/components/ft1-mast-headed.md +15 -0
- package/departments/landing/skills/page-architect/references/components/ft2-inline-rule-single-line.md +13 -0
- package/departments/landing/skills/page-architect/references/components/ft3-index-style-category-list.md +15 -0
- package/departments/landing/skills/page-architect/references/components/ft4-dense-typographic.md +13 -0
- package/departments/landing/skills/page-architect/references/components/ft5-statement.md +24 -0
- package/departments/landing/skills/page-architect/references/components/ft6-letter-close.md +22 -0
- package/departments/landing/skills/page-architect/references/components/ft7-newsletter-first.md +30 -0
- package/departments/landing/skills/page-architect/references/components/ft8-marquee-scroll.md +26 -0
- package/departments/landing/skills/page-architect/references/components/h1-marquee.md +17 -0
- package/departments/landing/skills/page-architect/references/components/h2-split-diptych.md +18 -0
- package/departments/landing/skills/page-architect/references/components/h3-quote-led.md +14 -0
- package/departments/landing/skills/page-architect/references/components/h4-stat-led.md +17 -0
- package/departments/landing/skills/page-architect/references/components/h5-letter-hero.md +14 -0
- package/departments/landing/skills/page-architect/references/components/h6-photographic-fold.md +19 -0
- package/departments/landing/skills/page-architect/references/components/h7-demo-video-clipped-by-viewport-edge.md +30 -0
- package/departments/landing/skills/page-architect/references/components/h8-mockup-split-browser-framed.md +26 -0
- package/departments/landing/skills/page-architect/references/components/h9-custom-illustration-centerpiece.md +28 -0
- package/departments/landing/skills/page-architect/references/components/n1-wordmark-2-links.md +14 -0
- package/departments/landing/skills/page-architect/references/components/n10-floating-on-scroll-morph.md +20 -0
- package/departments/landing/skills/page-architect/references/components/n11-mega-menu.md +43 -0
- package/departments/landing/skills/page-architect/references/components/n12-banner-retract.md +37 -0
- package/departments/landing/skills/page-architect/references/components/n13-inline-cmdk-pill.md +42 -0
- package/departments/landing/skills/page-architect/references/components/n1b-saas-three-section.md +38 -0
- package/departments/landing/skills/page-architect/references/components/n2-floating-chip.md +17 -0
- package/departments/landing/skills/page-architect/references/components/n3-side-rail.md +17 -0
- package/departments/landing/skills/page-architect/references/components/n4-hidden-behind-k.md +12 -0
- package/departments/landing/skills/page-architect/references/components/n5-floating-pill.md +31 -0
- package/departments/landing/skills/page-architect/references/components/n6-newspaper-masthead.md +27 -0
- package/departments/landing/skills/page-architect/references/components/n7-brutal-slab.md +25 -0
- package/departments/landing/skills/page-architect/references/components/n8-terminal-command.md +24 -0
- package/departments/landing/skills/page-architect/references/components/n9-edge-aligned-minimal.md +20 -0
- package/departments/landing/skills/page-architect/references/components/s1-left-margin-numbered.md +17 -0
- package/departments/landing/skills/page-architect/references/components/s2-hanging.md +16 -0
- package/departments/landing/skills/page-architect/references/components/s3-sticky-pinned.md +22 -0
- package/departments/landing/skills/page-architect/references/components/s4-inline-no-break.md +14 -0
- package/departments/landing/skills/page-architect/references/components/s5-bottom-anchored.md +14 -0
- package/departments/landing/skills/page-architect/references/components/t1-pull-quote-with-marginalia.md +14 -0
- package/departments/landing/skills/page-architect/references/components/t2-logo-wall-hairline.md +22 -0
- package/departments/landing/skills/page-architect/references/components/t3-single-huge-quote.md +14 -0
- package/departments/landing/skills/page-architect/references/components/t4-numbered-stat-strip.md +15 -0
- package/departments/landing/skills/page-architect/references/floating-nav.md +91 -0
- package/departments/landing/skills/page-architect/references/hallmark.LICENSE +21 -0
- package/departments/landing/skills/page-architect/references/hero-enrichment.md +477 -0
- package/departments/landing/skills/page-architect/references/impeccable.LICENSE +191 -0
- package/departments/landing/skills/page-architect/references/layout-craft.md +236 -0
- package/departments/landing/skills/page-architect/references/macrostructures/01-bento-grid.md +37 -0
- package/departments/landing/skills/page-architect/references/macrostructures/02-long-document.md +36 -0
- package/departments/landing/skills/page-architect/references/macrostructures/03-marquee-hero.md +33 -0
- package/departments/landing/skills/page-architect/references/macrostructures/04-stat-led.md +36 -0
- package/departments/landing/skills/page-architect/references/macrostructures/05-workbench.md +34 -0
- package/departments/landing/skills/page-architect/references/macrostructures/06-conversational-faq.md +35 -0
- package/departments/landing/skills/page-architect/references/macrostructures/07-manifesto.md +34 -0
- package/departments/landing/skills/page-architect/references/macrostructures/08-photographic.md +36 -0
- package/departments/landing/skills/page-architect/references/macrostructures/09-quote-led.md +34 -0
- package/departments/landing/skills/page-architect/references/macrostructures/10-specimen.md +34 -0
- package/departments/landing/skills/page-architect/references/macrostructures/11-catalogue.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/12-letter.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/13-index-first.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/14-narrative-workflow.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/15-split-studio.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/16-feature-stack.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/17-type-specimen.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/18-portfolio-grid.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/19-map-diagram.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/20-ecosystem-index.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures/21-component-playground.md +25 -0
- package/departments/landing/skills/page-architect/references/macrostructures.md +91 -0
- package/departments/landing/skills/page-architect/references/ui-copy.md +75 -0
- package/harness/codex/AGENTS.md +1 -1
- package/harness/copilot/copilot-instructions.md +1 -1
- package/harness/cursor/rules/arkaos.mdc +2 -2
- package/harness/gemini/GEMINI.md +1 -1
- package/harness/opencode/AGENTS.md +1 -1
- package/harness/zed/.rules +1 -1
- package/knowledge/agents-registry-v2.json +9 -4
- package/knowledge/skills-manifest.json +10 -4
- package/package.json +1 -1
- package/pyproject.toml +1 -1
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# Typography craft
|
|
2
|
+
|
|
3
|
+
> Source: merge of `references/typography.md` from the **hallmark** skill repo (MIT — see `hallmark.LICENSE` in this references directory) and `skill/reference/typeset.md` from the **impeccable** repo (Apache-2.0 — see `impeccable.LICENSE` in this references directory). The 2+1 rule, font catalog, and hero-sizing brackets are hallmark's; the brand-vs-product register, fixed-rem-vs-fluid doctrine, and web-font-loading craft are impeccable's. Banned/overused font lists live ONLY in `departments/brand/references/uiux-knowledge-and-tools.md` §11 — this file points there and never restates them. Generic font-pairing data (who pairs with whom, with no ban or theme semantics) is owned by the `ui-ux-pro-max` plugin skill. Rule anchors follow impeccable's `<!-- rule:… -->` convention (the two source files carried none; the IDs below are minted for this port). Upstream hallmark ships an in-repo face ("The Future") as its default body workhorse; that font is not bundled here — wherever the source referred to it, read *the project's chosen body workhorse*.
|
|
4
|
+
|
|
5
|
+
Type carries the design. If the type is wrong, nothing else matters. Typography carries most of the information on the page — replace generic defaults (a reflex sans at a flat scale) with type that reflects the brand and scales with intentional contrast.
|
|
6
|
+
|
|
7
|
+
## Principles
|
|
8
|
+
|
|
9
|
+
- A page is a pairing, not a single font. Display face + body face, minimum. *Single-font pages are allowed only when the single font IS the design choice* — a true terminal aesthetic is monospace-everywhere on purpose; a Manifesto poster might be one display face on purpose. The default is a pairing.
|
|
10
|
+
- Commit to extremes. Weight 200 next to weight 800 reads as intentional. Weight 400 next to weight 600 reads as a default setting.
|
|
11
|
+
- Size steps should be ratios, not increments. Major third (1.25), perfect fourth (1.333), perfect fifth (1.5), or golden (1.618). Pick one and use it. The common mistake is too many font sizes too close together (14px, 15px, 16px, 18px…) — muddy hierarchy. Use fewer sizes with more contrast; 5 sizes cover most needs (caption, secondary, body, subheading, heading). <!-- rule:type-modular-scale -->
|
|
12
|
+
- Line-height changes with size. Tight for display (1.05–1.2), comfortable for body (1.5–1.65).
|
|
13
|
+
- Measure — line length — lives between 45 and 75 characters. Use `max-width: 65ch` as the default.
|
|
14
|
+
- Combine dimensions for hierarchy: size + weight + colour + space. Don't rely on size alone.
|
|
15
|
+
- Good typography is invisible; bad typography is distracting. The goal isn't "fancier" — it's clearer, more readable, more intentional.
|
|
16
|
+
|
|
17
|
+
## Register — brand vs product
|
|
18
|
+
|
|
19
|
+
Two registers, two sizing strategies: <!-- rule:type-register-split -->
|
|
20
|
+
|
|
21
|
+
- **Brand / marketing / content pages:** expressive faces are the point. Fluid `clamp()` scale for headings and display, ≥ 1.25 ratio between steps. Body text stays fixed even here — the size difference across viewports is too small to warrant fluidity.
|
|
22
|
+
- **Product UI (apps, dashboards, data-dense interfaces):** system fonts and familiar sans stacks are legitimate. One well-tuned family typically carries the whole UI. Fixed `rem` scale, 1.125–1.2 ratio between more closely-spaced steps, optionally adjusted at 1–2 breakpoints.
|
|
23
|
+
|
|
24
|
+
**Fixed rem vs fluid clamp — the doctrine.** No major app design system (Material, Polaris, Primer, Carbon) uses fluid type in product UI; fixed scales give the spatial predictability that dense, container-based layouts need. A fluid h1 that shrinks in a sidebar looks worse, not better. Use fluid type only for headings and display text on marketing/content pages where text dominates the layout and needs to breathe across viewport sizes. <!-- rule:type-fixed-rem-product -->
|
|
25
|
+
|
|
26
|
+
Fluid type mechanics, when it IS the right call:
|
|
27
|
+
|
|
28
|
+
- `clamp(min, preferred, max)` — the middle value (e.g. `5vw + 1rem`) controls scaling rate; add a rem offset so it doesn't collapse to 0 on small screens.
|
|
29
|
+
- **Bound your clamp(): keep `max ≤ ~2.5 × min`.** Wider ratios break the browser's zoom and reflow behaviour and make large viewports feel like the page is shouting. <!-- rule:type-clamp-max-2-5x -->
|
|
30
|
+
- **Scale container width and font-size together** so effective character measure stays in the 45–75ch band at every viewport. A heading that widens faster than its container drifts out of the comfortable measure at the top end.
|
|
31
|
+
|
|
32
|
+
## The 2+1 rule — three faces is the ceiling
|
|
33
|
+
|
|
34
|
+
**A page may use at most three distinct font families.** One **display**, one **body**, and an optional **outlier** for a single typographic moment — wordmark, hero stat, pull quote, masthead — where the page wants exactly one note that doesn't sound like the rest. Four families is slop. Two is canonical. Three is the ceiling, used sparingly. <!-- rule:type-two-plus-one -->
|
|
35
|
+
|
|
36
|
+
The pattern:
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
:root {
|
|
40
|
+
--font-display: "Fraunces", ui-serif, Georgia, serif; /* headings, hero */
|
|
41
|
+
--font-body: "Geist", ui-sans-serif, system-ui, sans; /* prose, UI */
|
|
42
|
+
--font-outlier: "Geist Mono", ui-monospace, monospace; /* wordmark + hero stat ONLY */
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The outlier is a *register*, not a third surface. Rules:
|
|
47
|
+
|
|
48
|
+
- **Outlier appears in ≤ 2 places** on the whole page. Wordmark + hero stat. Or pull quote + masthead. Two slots, not five. If you find yourself reaching for it a third time, you don't have an outlier — you have a third body font, which is slop.
|
|
49
|
+
- **The outlier carries one role.** It tags a specific kind of content (the brand, the headline figure, the manifesto line). Once you know what it tags, every instance of that role uses it. Don't apply it to one button label and not another.
|
|
50
|
+
- **Mono counts as a face.** A page with Fraunces display, Geist body, and Geist Mono in code blocks is using three families. That's fine — code is the outlier role. Don't sneak in a fourth.
|
|
51
|
+
- **Same family at different weights is one family**, not two. Geist 400 + Geist 700 is one font; pairing it with Fraunces is two. Adding Geist Mono on top is three.
|
|
52
|
+
|
|
53
|
+
Two families is still the right answer for most pages. Three is for SaaS / brand-heavy / editorial-rich pages where the wordmark needs a different register than the body. In product UI, one family is often right — a well-tuned sans carries headings, buttons, labels, body, and data.
|
|
54
|
+
|
|
55
|
+
## Banned defaults
|
|
56
|
+
|
|
57
|
+
The canonical banned/overused font list (the reflex sans, serif, and mono defaults every LLM reaches for) lives in **`departments/brand/references/uiux-knowledge-and-tools.md` §11** — the single home for ban lists. Consult it before naming any face; never restate it here or anywhere else. <!-- rule:type-ban-list-canonical-home -->
|
|
58
|
+
|
|
59
|
+
If the user insists on a banned face, do it — the ban is against *reflex* defaults, not against informed choices. Otherwise pick from the catalog below.
|
|
60
|
+
|
|
61
|
+
Anti-reflexes worth defending against (these are judgement corrections, not bans):
|
|
62
|
+
|
|
63
|
+
- A technical/utilitarian brief does NOT need a serif "for warmth." Most tech tools should look like tech tools.
|
|
64
|
+
- An editorial/premium brief does NOT need the same expressive serif everyone is using right now. Premium can be Swiss-modern, neo-grotesque, a literal monospace, or a quiet humanist sans.
|
|
65
|
+
- A children's product does NOT need a rounded display font. Kids' books use real type.
|
|
66
|
+
- A "modern" brief does NOT need a geometric sans. The most modern thing you can do is not use the font everyone else is using.
|
|
67
|
+
- System fonts are underrated: `-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui` looks native, loads instantly, and is highly readable. Consider it for apps where performance > personality — but never as the *only* stack on brand surfaces.
|
|
68
|
+
|
|
69
|
+
## The font catalog
|
|
70
|
+
|
|
71
|
+
Three sources, in priority order:
|
|
72
|
+
|
|
73
|
+
- **Google Fonts** — free, served via CDN, works everywhere. The default source.
|
|
74
|
+
- **Fontshare** (Indian Type Foundry) — free for commercial use, foundry-grade. The "you didn't know these were free" tier. Drop-in via `<link href="https://api.fontshare.com/v2/css?f=...">`.
|
|
75
|
+
- **Foundry-licensed** — Klim, Pangram Pangram, Production Type, Lineto, Colophon. Only when the user has confirmed they're licensed.
|
|
76
|
+
|
|
77
|
+
### Free display faces
|
|
78
|
+
|
|
79
|
+
| Family | Source | Voice | Best for |
|
|
80
|
+
| --- | --- | --- | --- |
|
|
81
|
+
| **Fraunces** | Google | Variable serif, deeply expressive italic, optical-size axis | Editorial, Atelier, brand-heavy |
|
|
82
|
+
| **Newsreader** | Google | Roman serif with optical-size + italic | Editorial, magazine, long-form |
|
|
83
|
+
| **Instrument Serif** | Google | Tight contrast, italic available, smart for short heads | Brand, atelier, intimate editorial |
|
|
84
|
+
| **Cormorant Garamond** | Google | Classical, high contrast, luxury register | Luxury, fashion, fine arts |
|
|
85
|
+
| **EB Garamond** | Google | Honest classical Garamond, body-grade | Editorial body, longform reading |
|
|
86
|
+
| **Cardo** | Google | Scholarly serif, generous x-height | Reference, academic, slow reading |
|
|
87
|
+
| **Source Serif 4** | Google | Modern transitional, big OT family | SaaS marketing with serif tone |
|
|
88
|
+
| **DM Serif Display** | Google | Bracketed serif, high-contrast display | Headlines that need to feel printed |
|
|
89
|
+
| **Bodoni Moda** | Google | Modern Bodoni revival, dramatic | Fashion, editorial, luxury display |
|
|
90
|
+
| **Playfair Display** | Google | Use only as display; banned as body (see §11) | Marketing display moments — sparingly |
|
|
91
|
+
| **Geist** | Google | Modern grotesque, geometric, 7 weights | Modern minimal, SaaS, dev tools |
|
|
92
|
+
| **Inter Tight** | Google | Tighter Inter — allowed *only* as a body fallback in technical themes; never as display | UI body in restrained themes |
|
|
93
|
+
| **Bricolage Grotesque** | Google | Variable display sans, bold weights, condensable | Brutal, playful, riso-bold |
|
|
94
|
+
| **Space Grotesk** | Google | Geometric grotesque, slightly quirky | Brutalist, technical |
|
|
95
|
+
| **Anton** | Google | Heavy condensed grotesque | Posters, manifestos |
|
|
96
|
+
| **Big Shoulders Display** | Google | Industrial condensed | Sports, manifestos, declarative |
|
|
97
|
+
| **Tomorrow** | Google | Variable optical condensed | Tech, atmospheric, near-future |
|
|
98
|
+
| **Outfit** | Google | Modern geometric (a reflex default — use only when *picked* deliberately) | Restrained tech — sparingly |
|
|
99
|
+
| **General Sans** | Fontshare | Modern grotesque, Geist-adjacent | Modern minimal alternative to Geist |
|
|
100
|
+
| **Switzer** | Fontshare | Neutral sans, broad weight range | SaaS body, restrained |
|
|
101
|
+
| **Cabinet Grotesk** | Fontshare | Display grotesque, 9 weights | Editorial display, magazine |
|
|
102
|
+
| **Clash Display** | Fontshare | Ultra-condensed display | Posters, brand moments |
|
|
103
|
+
| **Satoshi** | Fontshare | Playful geometric sans | Playful, consumer |
|
|
104
|
+
| **Sentient** | Fontshare | Variable serif, soft contrast | Soft editorial, atmospheric |
|
|
105
|
+
| **Erode** | Fontshare | Distressed serif, hand-set feel | Riso, tactile-rebellion, brand-y |
|
|
106
|
+
| **Tanker** | Fontshare | Heavy condensed grotesque, pure display | One-word posters, mastheads |
|
|
107
|
+
|
|
108
|
+
### Free body faces
|
|
109
|
+
|
|
110
|
+
| Family | Source | Voice | Best for |
|
|
111
|
+
| --- | --- | --- | --- |
|
|
112
|
+
| **Geist** | Google | The default modern body sans | Modern minimal, SaaS, atmospheric |
|
|
113
|
+
| **Newsreader** | Google | Reading serif, optical-size aware | Editorial body, longform |
|
|
114
|
+
| **Source Serif 4** | Google | Body-grade serif | Editorial mid-weight |
|
|
115
|
+
| **EB Garamond** | Google | Classical body | Editorial slow reading |
|
|
116
|
+
| **Spectral** | Google | Slab-ish serif, screen-tuned | Long-form on screen |
|
|
117
|
+
| **Lora** | Google | Calligraphic serif, body-grade | Body — sparingly (over-used; see §11) |
|
|
118
|
+
| **Crimson Pro** | Google | Old-style body, generous | Editorial slow body |
|
|
119
|
+
| **IBM Plex Sans** | Google | Engineering sans, broad family | Technical body |
|
|
120
|
+
| **Switzer** | Fontshare | Neutral sans body | SaaS body, restrained |
|
|
121
|
+
| **General Sans** | Fontshare | Geist-adjacent body | Modern minimal body |
|
|
122
|
+
|
|
123
|
+
(Upstream hallmark also lists its in-repo face here as the default workhorse; substitute *the project's chosen body workhorse*.)
|
|
124
|
+
|
|
125
|
+
### Free mono / outlier faces
|
|
126
|
+
|
|
127
|
+
| Family | Source | Voice | Best for |
|
|
128
|
+
| --- | --- | --- | --- |
|
|
129
|
+
| **Geist Mono** | Google | Geist's mono companion | Default mono, code, captions |
|
|
130
|
+
| **JetBrains Mono** | Google | Engineering mono, ligatures | Code, terminal, technical |
|
|
131
|
+
| **IBM Plex Mono** | Google | Engineering mono, broad family | Technical body-grade |
|
|
132
|
+
| **Commit Mono** | Google | Tighter mono, modern | Code, modern terminal |
|
|
133
|
+
| **Space Mono** | Google | Quirky, slightly retro | Playful tech, riso |
|
|
134
|
+
|
|
135
|
+
### Tone-based pairing patterns
|
|
136
|
+
|
|
137
|
+
Each tone gets two rows: a **free baseline** (Google Fonts / Fontshare; works out of the box) and a **paid upgrade** (foundry licences required; only when the user has confirmed the budget and the licence). The free row is the default. **Never name a paid font in code without confirming the user is licensed** — the demo will fall back to system-default and look broken to the user. <!-- rule:type-paid-font-licence -->
|
|
138
|
+
|
|
139
|
+
| Tone | Tier | Display | Body | Outlier |
|
|
140
|
+
| --- | --- | --- | --- | --- |
|
|
141
|
+
| **Editorial** | Free | Fraunces · Newsreader · EB Garamond · Instrument Serif · Cabinet Grotesk | IBM Plex Sans · Switzer · Source Serif 4 | JetBrains Mono · Geist Mono · Erode (display moment) |
|
|
142
|
+
| | *Paid* | *Tiempos Headline · Söhne Breit · Reckless Display · Migra · Tobias* | *Söhne · Haffer · Untitled Sans* | *Söhne Mono · GT America Mono* |
|
|
143
|
+
| **Technical** | Free | JetBrains Mono · Geist Mono · Geist (700) · Commit Mono | Geist · IBM Plex Sans · Switzer | Tomorrow · Cabinet Grotesk (wordmark) |
|
|
144
|
+
| | *Paid* | *Berkeley Mono · Söhne Mono · GT Pressura · ABC Diatype Mono* | *Söhne · Untitled Sans · ABC Diatype* | *Berkeley Mono · GT Pressura Mono* |
|
|
145
|
+
| **Brutalist** | Free | Bricolage Grotesque (800) · Anton · Tanker · Big Shoulders Display | Geist · Switzer | Space Grotesk (numerals) · Geist Mono |
|
|
146
|
+
| | *Paid* | *Druk · Monument Extended · NaN Jaune · Migra · ABC Pressura* | *Söhne Breit · GT America* | *GT America Mono* |
|
|
147
|
+
| **Soft** | Free | Geist · Bricolage Grotesque (500) · Sentient · Newsreader | Geist · Crimson Pro · Switzer | Geist Mono · Satoshi (label) |
|
|
148
|
+
| | *Paid* | *Söhne · GT Pressura · Pangaia · Tobias* | *Söhne · Halyard Text · Satoshi* | *Söhne Mono · GT Maru Mono* |
|
|
149
|
+
| **Luxury** | Free | Cormorant Garamond · Fraunces · Cardo · DM Serif Display · Bodoni Moda | EB Garamond · Crimson Pro · Source Serif 4 | (rare; small caps from display family) |
|
|
150
|
+
| | *Paid* | *Canela · Tiempos Headline · GT Super · Domaine Display · Migra* | *Tiempos Text · Suisse Int'l · Domaine Text* | *(rarely used at this tier)* |
|
|
151
|
+
| **Playful** | Free | Bricolage Grotesque · Fraunces (italic) · Satoshi · Newsreader (italic) · Sentient | Geist · Newsreader · Satoshi | Geist Mono · Space Mono |
|
|
152
|
+
| | *Paid* | *Clash Display · Cabinet Grotesk · Migra · Tobias · Pangaia* | *Satoshi · Plus Jakarta Sans · GT Maru* | *Space Mono · GT Maru Mono* |
|
|
153
|
+
| **Austere** | Free | system-ui · Inter Tight (regular) · Geist (400) · Switzer (regular) | system-ui · Geist · Switzer | system-ui mono · Geist Mono |
|
|
154
|
+
| | *Paid* | *ABC Diatype · ABC Monument Grotesk · Söhne (regular) · ABC Pressura* | *ABC Diatype · Söhne* | *ABC Diatype Mono · Söhne Mono* |
|
|
155
|
+
| **Atmospheric** | Free | Geist (600) · Sentient · Tomorrow · Bricolage Grotesque | Geist (400) · Switzer | Geist Mono · JetBrains Mono |
|
|
156
|
+
| | *Paid* | *Söhne · GT Pressura · ABC Diatype* | *Söhne · ABC Diatype* | *Berkeley Mono · Söhne Mono* |
|
|
157
|
+
| **Workshop** *(upstream hallmark's own theme)* | Free | the project's chosen body workhorse · Geist · Cabinet Grotesk | the project's chosen body workhorse · Switzer | its mono companion · Geist Mono |
|
|
158
|
+
| | *Paid* | *Avenir Next · GT Walsheim* | *Söhne · GT Walsheim* | *Berkeley Mono* |
|
|
159
|
+
|
|
160
|
+
**The discipline.** Default to the free pairings. They're not consolation prizes; Fraunces, Geist, Bricolage Grotesque, Cabinet Grotesk, Sentient, and JetBrains Mono are first-rate faces in 2026. The paid upgrades exist for two cases: (a) the user has explicitly confirmed they're licensed, or (b) the user is asking for a specific named foundry voice (e.g., "make it look like Klim", "I want Söhne"). Reach for Tier 2 only then; otherwise the free row is the right answer. Treat the free row as canon, the paid row as a *cited* alternative.
|
|
161
|
+
|
|
162
|
+
**Pairing beyond this table.** When pairing outside the tone table, contrast on a real axis — structure (serif + sans), personality (geometric + humanist), or proportion (condensed display + wide body) — and never pair fonts that are similar but not identical (two geometric sans-serifs). You often don't need a second font at all: one well-chosen family in multiple weights creates cleaner hierarchy than two competing typefaces. Generic pairing catalogues (57 curated pairings and the like) are owned by the `ui-ux-pro-max` plugin skill — consult it rather than restating pairing data here. <!-- rule:type-pairing-contrast-axis -->
|
|
163
|
+
|
|
164
|
+
## Wordmark / logo typography
|
|
165
|
+
|
|
166
|
+
The wordmark in the navbar and footer **may use a different display face than the body**. On tone-rich themes (Editorial, Atelier, Specimen) it **should** — collapsing the wordmark into the body family flattens the visual hierarchy and the page reads as un-branded.
|
|
167
|
+
|
|
168
|
+
```css
|
|
169
|
+
:root {
|
|
170
|
+
--display: "Geist", system-ui, sans-serif; /* body + display */
|
|
171
|
+
--font-wordmark: "Fraunces", Georgia, serif; /* logo only */
|
|
172
|
+
}
|
|
173
|
+
.wordmark {
|
|
174
|
+
font-family: var(--font-wordmark);
|
|
175
|
+
font-weight: 600;
|
|
176
|
+
letter-spacing: -0.015em;
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
When to use the same family for both:
|
|
181
|
+
|
|
182
|
+
- **Editorial · Letter · Manifesto · Long Document** can collapse to a single family because the body voice carries the brand. The wordmark in these contexts is small, grounded, and earns its weight by being typeset rather than decorated.
|
|
183
|
+
|
|
184
|
+
When to use a contrasting family:
|
|
185
|
+
|
|
186
|
+
- **Bento Grid · Stat-Led · Workbench · Marquee Hero** — these archetypes lean visually generic (geometric grids, big numbers, browser-frame mockups) and need the wordmark to do the typographic differentiation work the body can't.
|
|
187
|
+
|
|
188
|
+
**Avoid the same-family collapse on a SaaS page.** A Geist-only page where the wordmark is also Geist 600 reads as un-designed; the wordmark in Fraunces SemiBold over a Geist body costs nothing and adds the one typographic register that says *this is a brand*. <!-- rule:type-wordmark-register -->
|
|
189
|
+
|
|
190
|
+
(Specific wordmark-pairing suggestions are generic pairing data — consult the `ui-ux-pro-max` plugin's pairing catalog; the doctrine above is what this file owns.)
|
|
191
|
+
|
|
192
|
+
## Scale
|
|
193
|
+
|
|
194
|
+
Pick a ratio. The default is **1.25** (major third). Build the scale from a 16px body, then clamp display sizes for responsive (brand register only — see § Register).
|
|
195
|
+
|
|
196
|
+
```css
|
|
197
|
+
:root {
|
|
198
|
+
--text-xs: 0.64rem; /* 10.24px */
|
|
199
|
+
--text-sm: 0.8rem; /* 12.8px */
|
|
200
|
+
--text-base: 1rem; /* 16px */
|
|
201
|
+
--text-md: 1.25rem; /* 20px */
|
|
202
|
+
--text-lg: 1.5625rem; /* 25px */
|
|
203
|
+
--text-xl: 1.9531rem; /* 31.25px */
|
|
204
|
+
--text-2xl: 2.4414rem;
|
|
205
|
+
--text-3xl: 3.0518rem;
|
|
206
|
+
--text-4xl: 3.8147rem;
|
|
207
|
+
--text-display: clamp(2.75rem, 5vw + 1rem, 5.25rem);
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Display max — keep it ≤ 5.5rem (88 px).** Above that, hero headlines crowd themselves on 1280–1440 px viewports and require multi-line wrapping that almost always reads as drama, not gravity. Even on Manifesto / Brutal display-heavy themes, cap at 6rem (96 px). The exception is a single-line, single-word display (e.g. a stat) that occupies ≤ 12 ch — it can grow to 7rem. **Default emit format is `clamp(2.75rem, 5vw + 1rem, 5.25rem)`.** <!-- rule:type-display-max -->
|
|
212
|
+
|
|
213
|
+
### Hero headline sizing — match size to copy length
|
|
214
|
+
|
|
215
|
+
Count characters in the rendered hero `h1`. Pick the cap by bucket — the rule applies on top of any per-theme `--text-display` clamp: <!-- rule:type-hero-size-by-char-count -->
|
|
216
|
+
|
|
217
|
+
| Headline length | Size cap | Notes |
|
|
218
|
+
| --- | --- | --- |
|
|
219
|
+
| **≤ 20 chars** (e.g. *"Limitless"*, *"Made not generated"*) | full `--text-display`; single-word can grow to 7rem | Display-heavy themes only |
|
|
220
|
+
| **21–50 chars** (the default sweet spot) | `--text-display` | If it wraps past 2 lines at 414 px, step down to `--text-display-s` |
|
|
221
|
+
| **51–90 chars** | cap at `--text-display-s` | Strongly consider splitting into eyebrow + headline |
|
|
222
|
+
| **> 90 chars** | rewrite shorter, or cap at `--text-4xl` with tighter leading | A 100-char headline at display size is the single most reliable AI tell |
|
|
223
|
+
|
|
224
|
+
**Aggressive-display themes step down one rung when headline > 50 chars.** Brutal, Riso, and Manifesto clamp `--text-display` at 6.5–9rem — that ceiling is for ≤ 50-char statements only. Past 50 chars, route them to `--text-display-s` automatically. **When you write the headline yourself (no user-supplied copy), aim for ≤ 7 words and ≤ 50 chars from the start** — imperative or nominal phrase, never a gerund opener.
|
|
225
|
+
|
|
226
|
+
Use no more than five sizes on a single page. If you need more hierarchy, use weight and colour, not another size.
|
|
227
|
+
|
|
228
|
+
## Weights
|
|
229
|
+
|
|
230
|
+
- Body: one weight (typically 400 or 350). Bold for emphasis only.
|
|
231
|
+
- Headings: a weight that contrasts the body by at least 300 units. If body is 400, headings are 700 or 200 — not 500 or 600.
|
|
232
|
+
- Define clear roles for each weight and stick to them — not bold in one section, semibold in another for the same role. Don't use more than 3–4 weights (Regular, Medium, Semibold, Bold is plenty). <!-- rule:type-weight-roles -->
|
|
233
|
+
- Load only the weights you actually use (each weight adds to page load).
|
|
234
|
+
- Never synthesise. Load the weight you need; don't rely on `font-weight: bold` against a single-weight file.
|
|
235
|
+
|
|
236
|
+
## Web font loading
|
|
237
|
+
|
|
238
|
+
The layout-shift problem: fonts load late, text reflows, users see content jump. The fix:
|
|
239
|
+
|
|
240
|
+
```css
|
|
241
|
+
/* 1. Use font-display: swap for visibility */
|
|
242
|
+
@font-face {
|
|
243
|
+
font-family: 'CustomFont';
|
|
244
|
+
src: url('font.woff2') format('woff2');
|
|
245
|
+
font-display: swap;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* 2. Match fallback metrics to minimize shift */
|
|
249
|
+
@font-face {
|
|
250
|
+
font-family: 'CustomFont-Fallback';
|
|
251
|
+
src: local('Arial');
|
|
252
|
+
size-adjust: 105%; /* Scale to match x-height */
|
|
253
|
+
ascent-override: 90%; /* Match ascender height */
|
|
254
|
+
descent-override: 20%; /* Match descender depth */
|
|
255
|
+
line-gap-override: 10%; /* Match line spacing */
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
body {
|
|
259
|
+
font-family: 'CustomFont', 'CustomFont-Fallback', sans-serif;
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Tools like [Fontaine](https://github.com/unjs/fontaine) calculate these overrides automatically. `font-display: swap` + metric-matched fallbacks (`size-adjust`, `ascent-override`, `descent-override`, `line-gap-override`) are required on every web font. <!-- rule:type-metric-matched-fallback -->
|
|
264
|
+
|
|
265
|
+
**`swap` vs `optional`**: `swap` shows fallback text immediately and FOUT-swaps when the web font arrives. `optional` uses the fallback if the web font misses a small load budget (~100ms) and avoids the shift entirely. Pick `optional` when zero layout shift matters more than seeing the branded font on slow networks. <!-- rule:type-swap-vs-optional -->
|
|
266
|
+
|
|
267
|
+
**Preload the critical weight only**: typically the regular-weight body font used above the fold. Preloading every weight costs more bandwidth than it saves.
|
|
268
|
+
|
|
269
|
+
**Variable fonts for 3+ weights or styles**: a single variable font file is usually smaller than three static weight files, gives fractional weight control, and pairs well with `font-optical-sizing: auto`. For 1–2 weights, static is fine.
|
|
270
|
+
|
|
271
|
+
## Rendering polish and OpenType features
|
|
272
|
+
|
|
273
|
+
- Tabular numbers on any data display: `font-variant-numeric: tabular-nums;`.
|
|
274
|
+
- Oldstyle figures for body copy where the face supports them: `font-variant-numeric: oldstyle-nums;`.
|
|
275
|
+
- Proper fractions: `font-variant-numeric: diagonal-fractions;`. Small caps for abbreviations: `font-variant-caps: all-small-caps;`. Disable ligatures in code: `code { font-variant-ligatures: none; }`. Be explicit about kerning: `font-kerning: normal;`. Variable fonts: `font-optical-sizing: auto;` picks the right optical-size master automatically. Check what features a font supports at [Wakamai Fondue](https://wakamaifondue.com/).
|
|
276
|
+
- **ALL-CAPS tracking: capitals sit too close at default spacing. Add 5–12% letter-spacing (`letter-spacing: 0.05em` to `0.12em`) to short all-caps labels, eyebrows, and small headings.** Real small caps (via `font-variant-caps`) need the same treatment, slightly gentler. <!-- rule:type-caps-tracking -->
|
|
277
|
+
- Proper typographic punctuation: `" " — … ' '`. Never straight quotes, never `--` or `...`.
|
|
278
|
+
- Name tokens semantically (`--text-body`, `--text-heading`), not by value (`--font-size-16`). Include font stacks, size scale, weights, line-heights, and letter-spacing in the token system.
|
|
279
|
+
|
|
280
|
+
## Body text rules
|
|
281
|
+
|
|
282
|
+
- Minimum 16px. Below 14px is accessibility-hostile.
|
|
283
|
+
- Line-height 1.5–1.65 on body copy, tighter (1.1–1.3) on display. **Floor for all-caps display heads (`text-transform: uppercase` on `.hero__display` / `.section__title` / `h1` / `h2`) is `1.0` — recommended `1.02–1.08`.** Below 1.0 the cap-tops of line N+1 collide with the baseline of line N (no descenders to cushion the gap); the comma + cap-D on a wrapped "PROMPT, / DIFFERENT" fuse into a single glyph blob. Condensed display faces make this worse. The design-review slop gates auto-fail the pattern (`departments/brand/skills/design-review/` — upstream: hallmark gate 55). <!-- rule:type-allcaps-leading-floor -->
|
|
284
|
+
- Measure 45–75 characters (`max-width: 65ch`). Line-height scales inversely with line length: narrow columns need tighter leading, wide columns need more.
|
|
285
|
+
- **Light-on-dark compensation is three axes, not one.** Light text on dark backgrounds: bump line-height by 0.05–0.1, add a touch of letter-spacing (0.01–0.02em), and optionally step the body weight up one notch (regular → medium). The perceived weight drops across all three axes; fix all three. <!-- rule:type-dark-bg-three-axis -->
|
|
286
|
+
- **Paragraph rhythm**: pick either space between paragraphs OR first-line indentation. Never both. Digital usually wants space; editorial/long-form can justify indent-only.
|
|
287
|
+
- Never all-caps body copy. Never justified text without hyphenation. Never letter-spacing above 0.05em on body.
|
|
288
|
+
|
|
289
|
+
## Headings rules
|
|
290
|
+
|
|
291
|
+
- Tight tracking on display sizes (`letter-spacing: -0.02em` to `-0.04em` depending on the face).
|
|
292
|
+
- Loose tracking on small caps / labels (`letter-spacing: 0.08em` to `0.14em`, `text-transform: uppercase`, use small caps if the face has them: `font-variant-caps: all-small-caps;`).
|
|
293
|
+
- Skip no levels. `h1` → `h2` → `h3`. Style them visually how you like, but keep semantic order.
|
|
294
|
+
|
|
295
|
+
## Vertical rhythm
|
|
296
|
+
|
|
297
|
+
Line-height is the base unit for ALL vertical spacing. If body text has `line-height: 1.5` on `16px` type (= 24px), spacing values should be multiples of 24px. This creates subconscious harmony; text and space share a mathematical foundation. <!-- rule:type-vertical-rhythm -->
|
|
298
|
+
|
|
299
|
+
## Accessibility
|
|
300
|
+
|
|
301
|
+
- **Never disable zoom**: `user-scalable=no` breaks accessibility. If the layout breaks at 200% zoom, fix the layout. <!-- rule:type-never-disable-zoom -->
|
|
302
|
+
- **Use rem/em for font sizes** — respects user browser settings. Never `px` for body text.
|
|
303
|
+
- **Minimum 16px body text** — smaller strains eyes and fails WCAG on mobile.
|
|
304
|
+
- **Adequate touch targets**: text links need padding or line-height that creates 44px+ tap targets.
|
|
305
|
+
- Text must meet WCAG contrast ratios (see the contrast discipline in [`interaction-states.md`](interaction-states.md)).
|
|
306
|
+
|
|
307
|
+
## Bans
|
|
308
|
+
|
|
309
|
+
- Reflex-default faces: see the canonical list in `departments/brand/references/uiux-knowledge-and-tools.md` §11. No system stack as the *only* stack on brand surfaces.
|
|
310
|
+
- No gradient text on headings (`background-clip: text` with a gradient fill).
|
|
311
|
+
- No single-font pages (unless the single font IS the design choice — see Principles).
|
|
312
|
+
- No decorative/display fonts for body text.
|
|
313
|
+
- No all-caps paragraphs.
|
|
314
|
+
- No font-size below 14px for body copy, below 10px anywhere.
|
|
315
|
+
- No hard-synthesised bold or italic.
|
|
316
|
+
- No arbitrary sizes — commit to a scale.
|
|
317
|
+
- No skipped fallback font definitions; no ignoring font-loading performance (FOUT/FOIT).
|
|
318
|
+
- **No more than three font families on a single page.** Display + body + one outlier is the ceiling. Four families = slop. Audit gate.
|
|
319
|
+
- No outlier face used in more than two slots. Wordmark + hero stat is the canonical pair; if you reach for a third slot, drop it back to the body face.
|
|
@@ -70,7 +70,10 @@ the squad reference.
|
|
|
70
70
|
## Workflow
|
|
71
71
|
|
|
72
72
|
1. **KB + identity** — pull the real brand tokens (palette hexes, type,
|
|
73
|
-
logo variants, clear-space rules) and cite the source note.
|
|
73
|
+
logo variants, clear-space rules) and cite the source note. All
|
|
74
|
+
generated imagery runs through the ArkaOS image pipeline
|
|
75
|
+
(`/brand image-create`, ComfyUI) — never external one-off image
|
|
76
|
+
services.
|
|
74
77
|
2. **Scene selection** — per requested type (product / packaging /
|
|
75
78
|
social / stationery), design 2–3 scenes rooted in the brand's world;
|
|
76
79
|
one sentence of rationale each.
|
|
@@ -71,6 +71,11 @@ the squad reference.
|
|
|
71
71
|
|
|
72
72
|
## Workflow (Garrett's 5 Planes, applied)
|
|
73
73
|
|
|
74
|
+
0. **Name the macrostructure** — before any plane, name the page shape
|
|
75
|
+
from the 21-entry catalog
|
|
76
|
+
(`departments/landing/skills/page-architect/references/macrostructures.md`);
|
|
77
|
+
the ASCII wireframe below expresses THAT shape, not the generic
|
|
78
|
+
hero-features-CTA template.
|
|
74
79
|
1. **Strategy** — one sentence: the page's single job and its audience.
|
|
75
80
|
If the brief doesn't pin these, pin them yourself and say so.
|
|
76
81
|
2. **Scope** — content inventory: every element that must exist, ranked
|
|
@@ -66,6 +66,7 @@ expertise:
|
|
|
66
66
|
- Design Tokens (DTCG)
|
|
67
67
|
- Hallmark slop gates (58) + pre-emit critique (P/H/E/S/R/V)
|
|
68
68
|
- Impeccable design laws + registers (brand vs product)
|
|
69
|
+
- Hallmark macrostructures (21 page shapes) + component archetype cookbook (50)
|
|
69
70
|
- runtime:frontend-design (Anthropic skill)
|
|
70
71
|
- runtime:ui-ux-pro-max (community skill)
|
|
71
72
|
depth: expert
|
|
@@ -11,6 +11,10 @@ description: >
|
|
|
11
11
|
video player -> just use <video>; regular animated site WITHOUT a video
|
|
12
12
|
source -> frontend-design skill; video editing/production -> content/video-produce.
|
|
13
13
|
allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch]
|
|
14
|
+
metadata:
|
|
15
|
+
origin: community
|
|
16
|
+
source: https://github.com/nutlope/hallmark
|
|
17
|
+
license: MIT
|
|
14
18
|
---
|
|
15
19
|
|
|
16
20
|
<!-- arka:kb-first-prefix begin -->
|
|
@@ -163,6 +167,12 @@ Common iteration requests:
|
|
|
163
167
|
|
|
164
168
|
The visual language is warm, dark, and cinematic. Every element serves the animation — surrounding effects (grain, particles, vignette) add depth without competing with the video frames.
|
|
165
169
|
|
|
170
|
+
**Motion craft reference:** `references/motion-recipes.md` — timing/easing
|
|
171
|
+
mapped onto the doctrine-hub §4 tokens, 15 named interaction recipes, 20
|
|
172
|
+
motion tells, the exits-at-75% rule and the reduced-motion floor. This
|
|
173
|
+
skill's scroll-scrubbed canvas engine is the named exception to the
|
|
174
|
+
no-scroll-scrub rule; its reduced-motion fallback stays mandatory.
|
|
175
|
+
|
|
166
176
|
### Color Palette (CSS Custom Properties)
|
|
167
177
|
|
|
168
178
|
```css
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Hallmark contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to the Licensor for inclusion in the Work by the copyright
|
|
52
|
+
owner or by an individual or Legal Entity authorized to submit on
|
|
53
|
+
behalf of the copyright owner. For the purposes of this definition,
|
|
54
|
+
"submitted" means any form of electronic, verbal, or written
|
|
55
|
+
communication sent to the Licensor or its representatives, including
|
|
56
|
+
but not limited to communication on electronic mailing lists, source
|
|
57
|
+
code control systems, and issue tracking systems that are managed by,
|
|
58
|
+
or on behalf of, the Licensor for the purpose of discussing and
|
|
59
|
+
improving the Work, but excluding communication that is conspicuously
|
|
60
|
+
marked or otherwise designated in writing by the copyright owner as
|
|
61
|
+
"Not a Contribution."
|
|
62
|
+
|
|
63
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
64
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
65
|
+
subsequently incorporated within the Work.
|
|
66
|
+
|
|
67
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
68
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
69
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
70
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
71
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
72
|
+
Work and such Derivative Works in Source or Object form.
|
|
73
|
+
|
|
74
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
75
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
76
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
77
|
+
(except as stated in this section) patent license to make, have made,
|
|
78
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
79
|
+
where such license applies only to those patent claims licensable
|
|
80
|
+
by such Contributor that are necessarily infringed by their
|
|
81
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
82
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
83
|
+
institute patent litigation against any entity (including a
|
|
84
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
85
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
86
|
+
or contributory patent infringement, then any patent licenses
|
|
87
|
+
granted to You under this License for that Work shall terminate
|
|
88
|
+
as of the date such litigation is filed.
|
|
89
|
+
|
|
90
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
91
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
92
|
+
modifications, and in Source or Object form, provided that You
|
|
93
|
+
meet the following conditions:
|
|
94
|
+
|
|
95
|
+
(a) You must give any other recipients of the Work or
|
|
96
|
+
Derivative Works a copy of this License; and
|
|
97
|
+
|
|
98
|
+
(b) You must cause any modified files to carry prominent notices
|
|
99
|
+
stating that You changed the files; and
|
|
100
|
+
|
|
101
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
102
|
+
that You distribute, all copyright, patent, trademark, and
|
|
103
|
+
attribution notices from the Source form of the Work,
|
|
104
|
+
excluding those notices that do not pertain to any part of
|
|
105
|
+
the Derivative Works; and
|
|
106
|
+
|
|
107
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
108
|
+
distribution, then any Derivative Works that You distribute must
|
|
109
|
+
include a readable copy of the attribution notices contained
|
|
110
|
+
within such NOTICE file, excluding those notices that do not
|
|
111
|
+
pertain to any part of the Derivative Works, in at least one
|
|
112
|
+
of the following places: within a NOTICE text file distributed
|
|
113
|
+
as part of the Derivative Works; within the Source form or
|
|
114
|
+
documentation, if provided along with the Derivative Works; or,
|
|
115
|
+
within a display generated by the Derivative Works, if and
|
|
116
|
+
wherever such third-party notices normally appear. The contents
|
|
117
|
+
of the NOTICE file are for informational purposes only and
|
|
118
|
+
do not modify the License. You may add Your own attribution
|
|
119
|
+
notices within Derivative Works that You distribute, alongside
|
|
120
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
121
|
+
that such additional attribution notices cannot be construed
|
|
122
|
+
as modifying the License.
|
|
123
|
+
|
|
124
|
+
You may add Your own copyright statement to Your modifications and
|
|
125
|
+
may provide additional or different license terms and conditions
|
|
126
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
127
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
128
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
129
|
+
the conditions stated in this License.
|
|
130
|
+
|
|
131
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
132
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
133
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
134
|
+
this License, without any additional terms or conditions.
|
|
135
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
136
|
+
the terms of any separate license agreement you may have executed
|
|
137
|
+
with Licensor regarding such Contributions.
|
|
138
|
+
|
|
139
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
140
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
143
|
+
|
|
144
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
145
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
146
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
147
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
148
|
+
implied, including, without limitation, any warranties or conditions
|
|
149
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
150
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
151
|
+
appropriateness of using or redistributing the Work and assume any
|
|
152
|
+
risks associated with Your exercise of permissions under this License.
|
|
153
|
+
|
|
154
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
155
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
156
|
+
unless required by applicable law (such as deliberate and grossly
|
|
157
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
158
|
+
liable to You for damages, including any direct, indirect, special,
|
|
159
|
+
incidental, or consequential damages of any character arising as a
|
|
160
|
+
result of this License or out of the use or inability to use the
|
|
161
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
162
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
163
|
+
other commercial damages or losses), even if such Contributor
|
|
164
|
+
has been advised of the possibility of such damages.
|
|
165
|
+
|
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
173
|
+
defend, and hold each Contributor harmless for any liability
|
|
174
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
176
|
+
|
|
177
|
+
END OF TERMS AND CONDITIONS
|
|
178
|
+
|
|
179
|
+
Copyright 2025 Paul Bakaus
|
|
180
|
+
|
|
181
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
182
|
+
you may not use this file except in compliance with the License.
|
|
183
|
+
You may obtain a copy of the License at
|
|
184
|
+
|
|
185
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
186
|
+
|
|
187
|
+
Unless required by applicable law or agreed to in writing, software
|
|
188
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
189
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
190
|
+
See the License for the specific language governing permissions and
|
|
191
|
+
limitations under the License.
|