@yottagraph-app/aether-instructions 1.1.24 → 1.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: lovelace-branding
3
+ description: Implement Lovelace brand identity in any UI project. Use for colors, typography, patterns, and visual guidelines.
4
+ ---
5
+
6
+ # Lovelace Branding Skill
7
+
8
+ Lovelace brand guidelines for implementing consistent visual identity across any UI project.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Implementing Lovelace visual identity in a new project
13
+ - Styling UI components to match Lovelace branding
14
+ - Setting up colors, fonts, or CSS variables
15
+ - Looking up brand guidelines or constraints
16
+
17
+ ## Files
18
+
19
+ | File | Contents |
20
+ |------|----------|
21
+ | [overview.md](overview.md) | Quick reference: colors, fonts, CSS variables, key principles |
22
+ | [BRANDING.md](BRANDING.md) | Full brand guidelines with rationale and color ramps |
23
+ | [patterns.md](patterns.md) | Framework-agnostic CSS patterns (cards, buttons, tables) |
24
+ | [fonts.md](fonts.md) | FK Grotesk font setup and fallbacks |
25
+ | [assets/](assets/) | Logo SVGs, icons, and other brand assets |
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 643.71 84.78">
3
+ <defs>
4
+ <style>
5
+ .cls-1 {
6
+ fill: #3fea00;
7
+ }
8
+
9
+ .cls-2 {
10
+ fill: #fff;
11
+ }
12
+ </style>
13
+ </defs>
14
+ <g id="Layer_1-2" data-name="Layer 1">
15
+ <g>
16
+ <path class="cls-2" d="M108.53,69.1V5.86h18.75v56.13h34.92v16.48h-44.08c-6.08,0-9.58-3.19-9.58-9.37Z"/>
17
+ <path class="cls-2" d="M198.24,4.42c23.59,0,38.01,16.27,38.01,37.7s-14.42,37.8-38.01,37.8-38.21-16.27-38.21-37.8,14.52-37.7,38.21-37.7ZM198.24,62.92c12.57,0,18.75-7.62,18.75-20.81s-6.28-20.7-18.75-20.7-18.85,7.62-18.85,20.7,6.28,20.81,18.85,20.81Z"/>
18
+ <path class="cls-2" d="M229.96,5.86h19.88l20.6,65.82,20.6-65.82h19.67l-23.28,72.61h-34.3L229.96,5.86Z"/>
19
+ <path class="cls-2" d="M313.7,5.86h57.78v16.38h-38.93v12.15h33.78v15.45h-33.78v12.26h38.93v16.38h-57.78V5.86Z"/>
20
+ <path class="cls-2" d="M376.01,69.1V5.86h18.75v56.13h34.92v16.48h-44.08c-6.08,0-9.58-3.19-9.58-9.37Z"/>
21
+ <path class="cls-2" d="M455.94,5.86h34.3l23.17,72.61h-19.88l-6.8-21.94h-27.6l-6.8,21.94h-19.67l23.28-72.61ZM481.59,40.16l-8.65-27.71-8.65,27.71h17.3Z"/>
22
+ <path class="cls-2" d="M507.54,42.11c0-21.42,14.73-37.7,38.52-37.7,20.81,0,34.61,11.23,36.77,29.46h-19.26c-1.54-7.83-8.24-12.46-17.41-12.46-11.23,0-19.26,6.39-19.26,20.7s8.03,20.81,19.26,20.81c9.17,0,15.86-4.74,17.41-12.57h19.26c-2.16,18.33-15.96,29.56-36.77,29.56-23.79,0-38.52-16.27-38.52-37.8Z"/>
23
+ <path class="cls-2" d="M585.92,5.86h57.78v16.38h-38.93v12.15h33.78v15.45h-33.78v12.26h38.93v16.38h-57.78V5.86Z"/>
24
+ </g>
25
+ <path class="cls-1" d="M84.78,42.39h0c0,23.41-18.98,42.39-42.39,42.39h0C18.98,84.78,0,65.8,0,42.39h0C0,18.98,18.98,0,42.39,0h0c23.41,0,42.39,18.98,42.39,42.39Z"/>
26
+ <g>
27
+ <circle cx="67.39" cy="50.72" r="6.4"/>
28
+ <circle cx="67.39" cy="34.05" r="6.4"/>
29
+ <circle cx="50.72" cy="50.72" r="6.4"/>
30
+ <circle cx="34.05" cy="34.05" r="6.4"/>
31
+ <circle cx="17.39" cy="34.05" r="6.4"/>
32
+ <circle cx="17.39" cy="50.72" r="6.4"/>
33
+ </g>
34
+ </g>
35
+ </svg>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 643.71 84.78">
3
+ <defs>
4
+ <style>
5
+ .cls-1 {
6
+ fill: #e6e6e6;
7
+ }
8
+
9
+ .cls-2 {
10
+ fill: #3fea00;
11
+ }
12
+
13
+ .cls-3 {
14
+ fill: #fff;
15
+ }
16
+ </style>
17
+ </defs>
18
+ <g id="Layer_1-2" data-name="Layer 1">
19
+ <g>
20
+ <path class="cls-3" d="M108.53,69.1V5.86h18.75v56.13h34.92v16.48h-44.08c-6.08,0-9.58-3.19-9.58-9.37Z"/>
21
+ <path class="cls-3" d="M198.24,4.42c23.59,0,38.01,16.27,38.01,37.7s-14.42,37.8-38.01,37.8-38.21-16.27-38.21-37.8,14.52-37.7,38.21-37.7ZM198.24,62.92c12.57,0,18.75-7.62,18.75-20.81s-6.28-20.7-18.75-20.7-18.85,7.62-18.85,20.7,6.28,20.81,18.85,20.81Z"/>
22
+ <path class="cls-3" d="M229.96,5.86h19.88l20.6,65.82,20.6-65.82h19.67l-23.28,72.61h-34.3L229.96,5.86Z"/>
23
+ <path class="cls-3" d="M313.7,5.86h57.78v16.38h-38.93v12.15h33.78v15.45h-33.78v12.26h38.93v16.38h-57.78V5.86Z"/>
24
+ <path class="cls-3" d="M376.01,69.1V5.86h18.75v56.13h34.92v16.48h-44.08c-6.08,0-9.58-3.19-9.58-9.37Z"/>
25
+ <path class="cls-3" d="M455.94,5.86h34.3l23.17,72.61h-19.88l-6.8-21.94h-27.6l-6.8,21.94h-19.67l23.28-72.61ZM481.59,40.16l-8.65-27.71-8.65,27.71h17.3Z"/>
26
+ <path class="cls-3" d="M507.54,42.11c0-21.42,14.73-37.7,38.52-37.7,20.81,0,34.61,11.23,36.77,29.46h-19.26c-1.54-7.83-8.24-12.46-17.41-12.46-11.23,0-19.26,6.39-19.26,20.7s8.03,20.81,19.26,20.81c9.17,0,15.86-4.74,17.41-12.57h19.26c-2.16,18.33-15.96,29.56-36.77,29.56-23.79,0-38.52-16.27-38.52-37.8Z"/>
27
+ <path class="cls-3" d="M585.92,5.86h57.78v16.38h-38.93v12.15h33.78v15.45h-33.78v12.26h38.93v16.38h-57.78V5.86Z"/>
28
+ </g>
29
+ <path class="cls-1" d="M84.78,42.39h0c0,23.41-18.98,42.39-42.39,42.39h0C18.98,84.78,0,65.8,0,42.39h0C0,18.98,18.98,0,42.39,0h0c23.41,0,42.39,18.98,42.39,42.39Z"/>
30
+ <g>
31
+ <circle class="cls-2" cx="67.39" cy="50.72" r="6.4"/>
32
+ <circle class="cls-2" cx="67.39" cy="34.05" r="6.4"/>
33
+ <circle class="cls-2" cx="50.72" cy="50.72" r="6.4"/>
34
+ <circle class="cls-2" cx="34.05" cy="34.05" r="6.4"/>
35
+ <circle class="cls-2" cx="17.39" cy="34.05" r="6.4"/>
36
+ <circle class="cls-2" cx="17.39" cy="50.72" r="6.4"/>
37
+ </g>
38
+ </g>
39
+ </svg>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 84.78 84.78">
3
+ <defs>
4
+ <style>
5
+ .cls-1 {
6
+ fill: #3fea00;
7
+ }
8
+ </style>
9
+ </defs>
10
+ <g id="Layer_1-2" data-name="Layer 1">
11
+ <path class="cls-1" d="M84.78,42.39h0c0,23.41-18.98,42.39-42.39,42.39h0C18.98,84.78,0,65.8,0,42.39h0C0,18.98,18.98,0,42.39,0h0c23.41,0,42.39,18.98,42.39,42.39Z"/>
12
+ <g>
13
+ <circle cx="67.39" cy="50.72" r="6.4"/>
14
+ <circle cx="67.39" cy="34.05" r="6.4"/>
15
+ <circle cx="50.72" cy="50.72" r="6.4"/>
16
+ <circle cx="34.05" cy="34.05" r="6.4"/>
17
+ <circle cx="17.39" cy="34.05" r="6.4"/>
18
+ <circle cx="17.39" cy="50.72" r="6.4"/>
19
+ </g>
20
+ </g>
21
+ </svg>
@@ -0,0 +1,42 @@
1
+ [
2
+ {
3
+ "name": "Medium Red",
4
+ "color": "#FF0000",
5
+ "size": 20
6
+ },
7
+ {
8
+ "name": "Medium Green",
9
+ "color": "#00FF00",
10
+ "size": 20
11
+ },
12
+ {
13
+ "name": "Medium Blue",
14
+ "color": "#0000FF",
15
+ "size": 20
16
+ },
17
+ {
18
+ "name": "Medium Yellow",
19
+ "color": "#FFFF00",
20
+ "size": 20
21
+ },
22
+ {
23
+ "name": "Small Red",
24
+ "color": "#FF0000",
25
+ "size": 20
26
+ },
27
+ {
28
+ "name": "Small Green",
29
+ "color": "#00FF00",
30
+ "size": 20
31
+ },
32
+ {
33
+ "name": "Small Blue",
34
+ "color": "#0000FF",
35
+ "size": 20
36
+ },
37
+ {
38
+ "name": "Small Yellow",
39
+ "color": "#FFFF00",
40
+ "size": 20
41
+ }
42
+ ]
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="main">
2
+ <path
3
+ d="M15.07,11.25L14.17,12.17C13.45,12.89 13,13.5 13,15H11V14.5C11,13.39 11.45,12.39 12.17,11.67L13.41,10.41C13.78,10.05 14,9.55 14,9C14,7.89 13.1,7 12,7A2,2 0 0,0 10,9H8A4,4 0 0,1 12,5A4,4 0 0,1 16,9C16,9.88 15.64,10.67 15.07,11.25M13,19H11V17H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z" />
4
+ </svg>
@@ -0,0 +1,147 @@
1
+ # Lovelace Font Setup
2
+
3
+ FK Grotesk is the primary font family for Lovelace branding. This document covers setup, fallbacks, and deployment considerations.
4
+
5
+ ## Required Font Files
6
+
7
+ FK Grotesk is a commercial font. Font files are **not committed to git**.
8
+
9
+ ### Minimum Required
10
+
11
+ At minimum, you need these three files:
12
+
13
+ - `FKGrotesk-Regular.otf` — Body text
14
+ - `FKGrotesk-Bold.otf` — Strong text
15
+ - `FKGroteskMono-Regular.otf` — Headlines, buttons, code
16
+
17
+ ### Full Set (Optional)
18
+
19
+ **FK Grotesk (Proportional):**
20
+ - `FKGrotesk-Thin.otf`, `FKGrotesk-ThinItalic.otf`
21
+ - `FKGrotesk-Light.otf`, `FKGrotesk-LightItalic.otf`
22
+ - `FKGrotesk-Regular.otf`, `FKGrotesk-Italic.otf`
23
+ - `FKGrotesk-Medium.otf`, `FKGrotesk-MediumItalic.otf`
24
+ - `FKGrotesk-Bold.otf`, `FKGrotesk-BoldItalic.otf`
25
+ - `FKGrotesk-Black.otf`, `FKGrotesk-BlackItalic.otf`
26
+
27
+ **FK Grotesk Mono:**
28
+ - `FKGroteskMono-Thin.otf`, `FKGroteskMono-ThinItalic.otf`
29
+ - `FKGroteskMono-Light.otf`, `FKGroteskMono-LightItalic.otf`
30
+ - `FKGroteskMono-Regular.otf`, `FKGroteskMono-Italic.otf`
31
+ - `FKGroteskMono-Medium.otf`, `FKGroteskMono-MediumItalic.otf`
32
+ - `FKGroteskMono-Bold.otf`, `FKGroteskMono-BoldItalic.otf`
33
+ - `FKGroteskMono-Black.otf`, `FKGroteskMono-BlackItalic.otf`
34
+
35
+ ## @font-face Declarations
36
+
37
+ ```css
38
+ @font-face {
39
+ font-family: 'FK Grotesk';
40
+ src: url('/fonts/FKGrotesk-Regular.otf') format('opentype');
41
+ font-weight: 400;
42
+ font-style: normal;
43
+ font-display: swap;
44
+ }
45
+
46
+ @font-face {
47
+ font-family: 'FK Grotesk';
48
+ src: url('/fonts/FKGrotesk-Bold.otf') format('opentype');
49
+ font-weight: 700;
50
+ font-style: normal;
51
+ font-display: swap;
52
+ }
53
+
54
+ @font-face {
55
+ font-family: 'FK Grotesk Mono';
56
+ src: url('/fonts/FKGroteskMono-Regular.otf') format('opentype');
57
+ font-weight: 400;
58
+ font-style: normal;
59
+ font-display: swap;
60
+ }
61
+ ```
62
+
63
+ ## CSS Variable Setup
64
+
65
+ ```css
66
+ :root {
67
+ --font-primary: 'FK Grotesk', 'Inter', system-ui, -apple-system, sans-serif;
68
+ --font-headline: 'FK Grotesk Mono', 'Inter', system-ui, sans-serif;
69
+ --font-brand: 'Inter', system-ui, -apple-system, sans-serif;
70
+ --font-mono: 'FK Grotesk Mono', 'JetBrains Mono', 'Fira Code', monospace;
71
+ }
72
+ ```
73
+
74
+ ## Fallback Strategy
75
+
76
+ When FK Grotesk is not available, the CSS falls back gracefully:
77
+
78
+ | Role | Primary | Fallback |
79
+ |------|---------|----------|
80
+ | Body text | FK Grotesk | Inter, system-ui |
81
+ | Headlines | FK Grotesk Mono | Inter, system-ui |
82
+ | Code/Buttons | FK Grotesk Mono | JetBrains Mono, Fira Code |
83
+ | Brand wordmark | Inter | system-ui |
84
+
85
+ **Inter** is a widely available system font on modern operating systems and provides a similar aesthetic to FK Grotesk.
86
+
87
+ **JetBrains Mono** is a free, open-source monospace font that works well as a fallback for FK Grotesk Mono.
88
+
89
+ ## Usage Examples
90
+
91
+ ```css
92
+ /* Body text */
93
+ body {
94
+ font-family: var(--font-primary);
95
+ }
96
+
97
+ /* Headlines */
98
+ h1, h2, h3 {
99
+ font-family: var(--font-headline);
100
+ }
101
+
102
+ /* Buttons */
103
+ button {
104
+ font-family: var(--font-mono);
105
+ text-transform: uppercase;
106
+ letter-spacing: 0.05em;
107
+ }
108
+
109
+ /* Code blocks */
110
+ code, pre {
111
+ font-family: var(--font-mono);
112
+ }
113
+ ```
114
+
115
+ ## Deployment Considerations
116
+
117
+ ### Static Hosting
118
+
119
+ Place font files in your `public/fonts/` directory. They'll be served as static assets.
120
+
121
+ ### Docker
122
+
123
+ Include fonts in your Docker build. Since fonts are git-ignored, add them before building:
124
+
125
+ ```dockerfile
126
+ COPY fonts/ /app/public/fonts/
127
+ ```
128
+
129
+ ### Cloud Run / Kubernetes
130
+
131
+ Options:
132
+ 1. Copy fonts to the image before building
133
+ 2. Mount fonts as a secret or ConfigMap volume
134
+ 3. Fetch fonts from secure storage in a CI/CD step
135
+
136
+ ### CI/CD
137
+
138
+ Add a step to fetch fonts from secure storage (e.g., GCS bucket, 1Password) before building:
139
+
140
+ ```yaml
141
+ - name: Fetch fonts
142
+ run: gsutil cp gs://your-bucket/fonts/*.otf public/fonts/
143
+ ```
144
+
145
+ ## Licensing
146
+
147
+ FK Grotesk requires a commercial license. Contact the font foundry for licensing terms. Do not commit font files to public repositories.
@@ -0,0 +1,136 @@
1
+ # Lovelace Branding Quick Reference
2
+
3
+ Quick-start guide for implementing Lovelace visual identity.
4
+
5
+ ## Key Principles
6
+
7
+ - **Dark-first**: Jet Black (#0A0A0A) backgrounds, white text
8
+ - **Green accents**: Cyber Green (#3FEA00) for interactive elements, CTAs, success states
9
+ - **WCAG AA accessibility**: All color pairings meet minimum contrast requirements
10
+ - **Monospace for emphasis**: FK Grotesk Mono for headlines, buttons, code
11
+ - **Minimal decoration**: Clean surfaces, subtle borders, purposeful color
12
+
13
+ ## Quick Start
14
+
15
+ Minimal CSS variable setup to get started:
16
+
17
+ ```css
18
+ :root {
19
+ /* Core colors */
20
+ --lv-black: #0A0A0A;
21
+ --lv-white: #FFFFFF;
22
+ --lv-green: #3FEA00;
23
+ --lv-silver: #757575;
24
+
25
+ /* Surfaces */
26
+ --lv-surface: #141414;
27
+ --lv-surface-light: #1E1E1E;
28
+
29
+ /* Typography */
30
+ --font-primary: 'FK Grotesk', 'Inter', system-ui, sans-serif;
31
+ --font-headline: 'FK Grotesk Mono', 'Inter', system-ui, sans-serif;
32
+ --font-mono: 'FK Grotesk Mono', 'JetBrains Mono', monospace;
33
+ }
34
+ ```
35
+
36
+ ## Core Colors
37
+
38
+ | Name | Hex | CSS Variable | Usage |
39
+ |------|-----|--------------|-------|
40
+ | Jet Black | `#0A0A0A` | `--lv-black` | Primary backgrounds |
41
+ | Pure White | `#FFFFFF` | `--lv-white` | Primary text on dark surfaces |
42
+ | Sonic Silver | `#757575` | `--lv-silver` | Muted text, secondary elements |
43
+ | Cyber Green | `#3FEA00` | `--lv-green` | Primary accent, CTAs, success |
44
+
45
+ ## Secondary Colors
46
+
47
+ | Name | Hex | CSS Variable | Usage |
48
+ |------|-----|--------------|-------|
49
+ | Electric Blue | `#003BFF` | `--lv-blue` | Accent, links, finance/data |
50
+ | Blaze Orange | `#FF5C00` | `--lv-orange` | Warnings, highlights, secondary CTA |
51
+ | Amber | `#FF9F0A` | `--lv-yellow` | Warnings |
52
+ | Red | `#EF4444` | — | Errors |
53
+
54
+ ## Surface Colors
55
+
56
+ | Name | Hex | CSS Variable | Usage |
57
+ |------|-----|--------------|-------|
58
+ | Surface | `#141414` | `--lv-surface` | Card backgrounds, elevated surfaces |
59
+ | Surface Light | `#1E1E1E` | `--lv-surface-light` | Hover states, lighter panels |
60
+ | Panel | `#111111` | — | Table headers, dark panels |
61
+ | Border | `#2A2A2A` | — | Subtle borders |
62
+
63
+ ## Color Usage Proportions
64
+
65
+ - **70%** — Jet Black + Pure White (dark backgrounds, white text)
66
+ - **15%** — Cyber Green (accents, interactive elements, success states)
67
+ - **10%** — Sonic Silver (muted text, borders, secondary elements)
68
+ - **5%** — Electric Blue + Blaze Orange (sparingly, for specific semantic purposes)
69
+
70
+ ## Typography
71
+
72
+ ### Font Families
73
+
74
+ | Role | Font | CSS Variable |
75
+ |------|------|--------------|
76
+ | Body / Primary | FK Grotesk | `--font-primary` |
77
+ | Headlines | FK Grotesk Mono | `--font-headline` |
78
+ | Buttons / Code | FK Grotesk Mono | `--font-mono` |
79
+ | Brand wordmark | Inter | `--font-brand` |
80
+
81
+ ### Type Hierarchy
82
+
83
+ | Level | Font | Weight | Style |
84
+ |-------|------|--------|-------|
85
+ | Headlines (h1) | FK Grotesk Mono | Regular | Normal |
86
+ | Subheaders (h2, h3) | FK Grotesk Mono | Regular | Normal |
87
+ | Body Copy | FK Grotesk | Regular | Normal |
88
+ | Body Strong | FK Grotesk | Bold (700) | Normal |
89
+ | Buttons & UI | FK Grotesk Mono | Regular | UPPERCASE, letter-spacing 0.05em |
90
+
91
+ ## Full CSS Variables
92
+
93
+ Complete `:root` block for all brand variables:
94
+
95
+ ```css
96
+ :root {
97
+ /* Core */
98
+ --lv-black: #0A0A0A;
99
+ --lv-surface: #141414;
100
+ --lv-surface-light: #1E1E1E;
101
+ --lv-white: #FFFFFF;
102
+ --lv-silver: #757575;
103
+
104
+ /* Primary */
105
+ --lv-green: #3FEA00;
106
+ --lv-green-dim: #30BC00;
107
+ --lv-green-light: #57FF19;
108
+
109
+ /* Secondary */
110
+ --lv-orange: #FF5C00;
111
+ --lv-orange-dim: #D04E02;
112
+ --lv-blue: #003BFF;
113
+ --lv-blue-dim: #0230D0;
114
+ --lv-blue-light: #2E5DFF;
115
+
116
+ /* Semantic */
117
+ --lv-yellow: #FF9F0A;
118
+ --lv-finance-blue: #003BFF;
119
+
120
+ /* Typography */
121
+ --font-primary: 'FK Grotesk', 'Inter', system-ui, -apple-system, sans-serif;
122
+ --font-headline: 'FK Grotesk Mono', 'Inter', system-ui, sans-serif;
123
+ --font-brand: 'Inter', system-ui, -apple-system, sans-serif;
124
+ --font-mono: 'FK Grotesk Mono', 'JetBrains Mono', 'Fira Code', monospace;
125
+ }
126
+ ```
127
+
128
+ ## Accessibility
129
+
130
+ All color pairings must meet WCAG AA contrast ratio at minimum:
131
+
132
+ - White text on Jet Black: **passes AAA**
133
+ - Cyber Green on Jet Black: **passes AA**
134
+ - Electric Blue on Jet Black: **passes AA**
135
+
136
+ Use the color ramps (see BRANDING.md) to find appropriate pairings for other combinations.