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.
Files changed (127) hide show
  1. package/THE-ARKAOS-GUIDE.md +1 -1
  2. package/VERSION +1 -1
  3. package/config/claude-agents/conversion-strategist.md +1 -1
  4. package/config/claude-agents/extraction-script-writer.md +1 -1
  5. package/config/claude-agents/frontend-dev.md +1 -1
  6. package/config/claude-agents/landing-cro-specialist.md +1 -1
  7. package/config/claude-agents/visual-designer.md +1 -1
  8. package/config/skills-provenance.yaml +17 -3
  9. package/departments/brand/agents/design-ops/extraction-script-writer.yaml +1 -0
  10. package/departments/brand/agents/visual-designer.yaml +1 -0
  11. package/departments/brand/references/uiux-knowledge-and-tools.md +13 -1
  12. package/departments/brand/skills/colors/SKILL.md +9 -1
  13. package/departments/brand/skills/colors/references/hallmark.LICENSE +21 -0
  14. package/departments/brand/skills/colors/references/impeccable.LICENSE +191 -0
  15. package/departments/brand/skills/colors/references/oklch-theme.md +563 -0
  16. package/departments/brand/skills/design-system/SKILL.md +34 -0
  17. package/departments/brand/skills/design-system/references/design-dna-study.md +512 -0
  18. package/departments/brand/skills/design-system/references/design-md-spec.md +454 -0
  19. package/departments/brand/skills/design-system/references/hallmark.LICENSE +21 -0
  20. package/departments/brand/skills/design-system/references/impeccable.LICENSE +191 -0
  21. package/departments/brand/skills/design-system/references/interaction-states.md +306 -0
  22. package/departments/brand/skills/design-system/references/themes/carnival.md +303 -0
  23. package/departments/brand/skills/design-system/references/themes/cobalt.md +148 -0
  24. package/departments/brand/skills/design-system/references/themes/hum.md +405 -0
  25. package/departments/brand/skills/design-system/references/themes/lumen.md +480 -0
  26. package/departments/brand/skills/design-system/references/typography-craft.md +319 -0
  27. package/departments/brand/skills/mockup-generate/SKILL.md +4 -1
  28. package/departments/brand/skills/wireframe/SKILL.md +5 -0
  29. package/departments/dev/agents/frontend-dev.yaml +1 -0
  30. package/departments/dev/skills/animated-website/SKILL.md +10 -0
  31. package/departments/dev/skills/animated-website/references/hallmark.LICENSE +21 -0
  32. package/departments/dev/skills/animated-website/references/impeccable.LICENSE +191 -0
  33. package/departments/dev/skills/animated-website/references/motion-recipes.md +546 -0
  34. package/departments/dev/skills/evaluator-build-loop/SKILL.md +5 -0
  35. package/departments/landing/agents/conversion-strategist.yaml +1 -0
  36. package/departments/landing/agents/cro-specialist.yaml +1 -0
  37. package/departments/landing/skills/landing-gen/SKILL.md +16 -5
  38. package/departments/landing/skills/page-architect/SKILL.md +25 -1
  39. package/departments/landing/skills/page-architect/references/component-cookbook.md +265 -0
  40. package/departments/landing/skills/page-architect/references/components/c1-outlined-chip.md +14 -0
  41. package/departments/landing/skills/page-architect/references/components/c2-inline-form-as-cta.md +19 -0
  42. package/departments/landing/skills/page-architect/references/components/c3-typographic-link.md +11 -0
  43. package/departments/landing/skills/page-architect/references/components/c4-sticky-bottom-bar.md +17 -0
  44. package/departments/landing/skills/page-architect/references/components/f1-bento-grid.md +22 -0
  45. package/departments/landing/skills/page-architect/references/components/f2-sticky-scroll-stack.md +23 -0
  46. package/departments/landing/skills/page-architect/references/components/f3-tabular-spec-sheet.md +14 -0
  47. package/departments/landing/skills/page-architect/references/components/f4-step-sequence.md +14 -0
  48. package/departments/landing/skills/page-architect/references/components/f5-annotated-screenshot.md +14 -0
  49. package/departments/landing/skills/page-architect/references/components/f6-product-card-grid.md +42 -0
  50. package/departments/landing/skills/page-architect/references/components/ft1-mast-headed.md +15 -0
  51. package/departments/landing/skills/page-architect/references/components/ft2-inline-rule-single-line.md +13 -0
  52. package/departments/landing/skills/page-architect/references/components/ft3-index-style-category-list.md +15 -0
  53. package/departments/landing/skills/page-architect/references/components/ft4-dense-typographic.md +13 -0
  54. package/departments/landing/skills/page-architect/references/components/ft5-statement.md +24 -0
  55. package/departments/landing/skills/page-architect/references/components/ft6-letter-close.md +22 -0
  56. package/departments/landing/skills/page-architect/references/components/ft7-newsletter-first.md +30 -0
  57. package/departments/landing/skills/page-architect/references/components/ft8-marquee-scroll.md +26 -0
  58. package/departments/landing/skills/page-architect/references/components/h1-marquee.md +17 -0
  59. package/departments/landing/skills/page-architect/references/components/h2-split-diptych.md +18 -0
  60. package/departments/landing/skills/page-architect/references/components/h3-quote-led.md +14 -0
  61. package/departments/landing/skills/page-architect/references/components/h4-stat-led.md +17 -0
  62. package/departments/landing/skills/page-architect/references/components/h5-letter-hero.md +14 -0
  63. package/departments/landing/skills/page-architect/references/components/h6-photographic-fold.md +19 -0
  64. package/departments/landing/skills/page-architect/references/components/h7-demo-video-clipped-by-viewport-edge.md +30 -0
  65. package/departments/landing/skills/page-architect/references/components/h8-mockup-split-browser-framed.md +26 -0
  66. package/departments/landing/skills/page-architect/references/components/h9-custom-illustration-centerpiece.md +28 -0
  67. package/departments/landing/skills/page-architect/references/components/n1-wordmark-2-links.md +14 -0
  68. package/departments/landing/skills/page-architect/references/components/n10-floating-on-scroll-morph.md +20 -0
  69. package/departments/landing/skills/page-architect/references/components/n11-mega-menu.md +43 -0
  70. package/departments/landing/skills/page-architect/references/components/n12-banner-retract.md +37 -0
  71. package/departments/landing/skills/page-architect/references/components/n13-inline-cmdk-pill.md +42 -0
  72. package/departments/landing/skills/page-architect/references/components/n1b-saas-three-section.md +38 -0
  73. package/departments/landing/skills/page-architect/references/components/n2-floating-chip.md +17 -0
  74. package/departments/landing/skills/page-architect/references/components/n3-side-rail.md +17 -0
  75. package/departments/landing/skills/page-architect/references/components/n4-hidden-behind-k.md +12 -0
  76. package/departments/landing/skills/page-architect/references/components/n5-floating-pill.md +31 -0
  77. package/departments/landing/skills/page-architect/references/components/n6-newspaper-masthead.md +27 -0
  78. package/departments/landing/skills/page-architect/references/components/n7-brutal-slab.md +25 -0
  79. package/departments/landing/skills/page-architect/references/components/n8-terminal-command.md +24 -0
  80. package/departments/landing/skills/page-architect/references/components/n9-edge-aligned-minimal.md +20 -0
  81. package/departments/landing/skills/page-architect/references/components/s1-left-margin-numbered.md +17 -0
  82. package/departments/landing/skills/page-architect/references/components/s2-hanging.md +16 -0
  83. package/departments/landing/skills/page-architect/references/components/s3-sticky-pinned.md +22 -0
  84. package/departments/landing/skills/page-architect/references/components/s4-inline-no-break.md +14 -0
  85. package/departments/landing/skills/page-architect/references/components/s5-bottom-anchored.md +14 -0
  86. package/departments/landing/skills/page-architect/references/components/t1-pull-quote-with-marginalia.md +14 -0
  87. package/departments/landing/skills/page-architect/references/components/t2-logo-wall-hairline.md +22 -0
  88. package/departments/landing/skills/page-architect/references/components/t3-single-huge-quote.md +14 -0
  89. package/departments/landing/skills/page-architect/references/components/t4-numbered-stat-strip.md +15 -0
  90. package/departments/landing/skills/page-architect/references/floating-nav.md +91 -0
  91. package/departments/landing/skills/page-architect/references/hallmark.LICENSE +21 -0
  92. package/departments/landing/skills/page-architect/references/hero-enrichment.md +477 -0
  93. package/departments/landing/skills/page-architect/references/impeccable.LICENSE +191 -0
  94. package/departments/landing/skills/page-architect/references/layout-craft.md +236 -0
  95. package/departments/landing/skills/page-architect/references/macrostructures/01-bento-grid.md +37 -0
  96. package/departments/landing/skills/page-architect/references/macrostructures/02-long-document.md +36 -0
  97. package/departments/landing/skills/page-architect/references/macrostructures/03-marquee-hero.md +33 -0
  98. package/departments/landing/skills/page-architect/references/macrostructures/04-stat-led.md +36 -0
  99. package/departments/landing/skills/page-architect/references/macrostructures/05-workbench.md +34 -0
  100. package/departments/landing/skills/page-architect/references/macrostructures/06-conversational-faq.md +35 -0
  101. package/departments/landing/skills/page-architect/references/macrostructures/07-manifesto.md +34 -0
  102. package/departments/landing/skills/page-architect/references/macrostructures/08-photographic.md +36 -0
  103. package/departments/landing/skills/page-architect/references/macrostructures/09-quote-led.md +34 -0
  104. package/departments/landing/skills/page-architect/references/macrostructures/10-specimen.md +34 -0
  105. package/departments/landing/skills/page-architect/references/macrostructures/11-catalogue.md +25 -0
  106. package/departments/landing/skills/page-architect/references/macrostructures/12-letter.md +25 -0
  107. package/departments/landing/skills/page-architect/references/macrostructures/13-index-first.md +25 -0
  108. package/departments/landing/skills/page-architect/references/macrostructures/14-narrative-workflow.md +25 -0
  109. package/departments/landing/skills/page-architect/references/macrostructures/15-split-studio.md +25 -0
  110. package/departments/landing/skills/page-architect/references/macrostructures/16-feature-stack.md +25 -0
  111. package/departments/landing/skills/page-architect/references/macrostructures/17-type-specimen.md +25 -0
  112. package/departments/landing/skills/page-architect/references/macrostructures/18-portfolio-grid.md +25 -0
  113. package/departments/landing/skills/page-architect/references/macrostructures/19-map-diagram.md +25 -0
  114. package/departments/landing/skills/page-architect/references/macrostructures/20-ecosystem-index.md +25 -0
  115. package/departments/landing/skills/page-architect/references/macrostructures/21-component-playground.md +25 -0
  116. package/departments/landing/skills/page-architect/references/macrostructures.md +91 -0
  117. package/departments/landing/skills/page-architect/references/ui-copy.md +75 -0
  118. package/harness/codex/AGENTS.md +1 -1
  119. package/harness/copilot/copilot-instructions.md +1 -1
  120. package/harness/cursor/rules/arkaos.mdc +2 -2
  121. package/harness/gemini/GEMINI.md +1 -1
  122. package/harness/opencode/AGENTS.md +1 -1
  123. package/harness/zed/.rules +1 -1
  124. package/knowledge/agents-registry-v2.json +9 -4
  125. package/knowledge/skills-manifest.json +10 -4
  126. package/package.json +1 -1
  127. 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.