@hubpav/hwio-brand 0.1.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 (39) hide show
  1. package/README.md +7 -0
  2. package/dist/docusaurus.css +29 -0
  3. package/dist/fonts/inter-latin-ext.woff2 +0 -0
  4. package/dist/fonts/inter-latin.woff2 +0 -0
  5. package/dist/fonts/inter.css +25 -0
  6. package/dist/fonts/poppins-400-latin-ext.woff2 +0 -0
  7. package/dist/fonts/poppins-400-latin.woff2 +0 -0
  8. package/dist/fonts/poppins-600-latin-ext.woff2 +0 -0
  9. package/dist/fonts/poppins-600-latin.woff2 +0 -0
  10. package/dist/fonts/poppins-700-latin-ext.woff2 +0 -0
  11. package/dist/fonts/poppins-700-latin.woff2 +0 -0
  12. package/dist/fonts/poppins.css +54 -0
  13. package/dist/sites-data.js +5 -0
  14. package/dist/sites.d.ts +21 -0
  15. package/dist/sites.js +43 -0
  16. package/dist/tokens.json +594 -0
  17. package/dist/vars.css +167 -0
  18. package/fonts/inter-latin-ext.woff2 +0 -0
  19. package/fonts/inter-latin.woff2 +0 -0
  20. package/fonts/poppins-400-latin-ext.woff2 +0 -0
  21. package/fonts/poppins-400-latin.woff2 +0 -0
  22. package/fonts/poppins-600-latin-ext.woff2 +0 -0
  23. package/fonts/poppins-600-latin.woff2 +0 -0
  24. package/fonts/poppins-700-latin-ext.woff2 +0 -0
  25. package/fonts/poppins-700-latin.woff2 +0 -0
  26. package/logos/apple-touch-icon.png +0 -0
  27. package/logos/favicon-32x32.png +0 -0
  28. package/logos/favicon.ico +0 -0
  29. package/logos/favicon.svg +1 -0
  30. package/logos/hardwario-logo-dark.svg +1 -0
  31. package/logos/hardwario-logo-icon.svg +1 -0
  32. package/logos/hardwario-logo.svg +1 -0
  33. package/logos/hardwario-mark-pos.svg +1 -0
  34. package/logos/hardwario-mark-white.svg +60 -0
  35. package/logos/hardwario-mark.svg +60 -0
  36. package/package.json +37 -0
  37. package/src/brand.json +497 -0
  38. package/src/sites.d.ts +21 -0
  39. package/src/sites.js +43 -0
package/src/brand.json ADDED
@@ -0,0 +1,497 @@
1
+ {
2
+ "$comment": "Source of truth for HARDWARIO web brand values. Edit here, run `npm run build`; every generated artifact (tokens.json, vars.css, docusaurus.css, the DaisyUI theme files in @hubpav/hwio-ui) is committed so a change shows its full downstream diff. Colours are hex; theme roles reference palette keys. Owner rulings 2026-09-05 (DESIGN-SYSTEM.md in website-admin): R1 navy primary + red accent, R2 dark kept (Zola neutral palette), R3 font-display block + gate, R7 enerooo palette preserved. R9 (2026-09-05): visual direction A, www systematised: type ramp 56/40/28/22/17, 8 px rhythm, hairline borders (base-300 = gray-200), 48 px controls, sentence-case red kickers.",
3
+ "palette": {
4
+ "white": "#ffffff",
5
+ "sky": "#F1FAFF",
6
+ "gray-100": "#f3f4f6",
7
+ "gray-200": "#e5e7eb",
8
+ "gray-300": "#d1d5db",
9
+ "gray-500": "#6b6a6a",
10
+ "muted": "#5c5f70",
11
+ "ink": "#252532",
12
+ "red": "#e30427",
13
+ "rose": "#f43f5e",
14
+ "blue": "#016ad4",
15
+ "blue-light": "#009cfa",
16
+ "blue-dark": "#06367a",
17
+ "night-100": "#0f0f14",
18
+ "night-200": "#1a1a22",
19
+ "night-300": "#23232f",
20
+ "night-content": "#e7e7ee",
21
+ "green": "#15803d",
22
+ "amber": "#b45309",
23
+ "error": "#dc2626",
24
+ "forestry": "#2B7036",
25
+ "forestry-light": "#5aa864",
26
+ "er3o-green": "#01CC9B",
27
+ "er3o-teal": "#14A0C0",
28
+ "er3o-teal-text": "#0C6678",
29
+ "er3o-heading": "#19768B",
30
+ "er3o-ink": "#061920",
31
+ "er3o-text": "#333333",
32
+ "er3o-gray-50": "#f9fafb"
33
+ },
34
+ "shape": {
35
+ "hwio": {
36
+ "radius-selector": "2rem",
37
+ "radius-field": "0.5rem",
38
+ "radius-box": "1rem",
39
+ "size-selector": "0.25rem",
40
+ "size-field": "0.3rem",
41
+ "border": "1px",
42
+ "depth": "0",
43
+ "noise": "0"
44
+ },
45
+ "er3o": {
46
+ "radius-selector": "2rem",
47
+ "radius-field": "2rem",
48
+ "radius-box": "1.5rem",
49
+ "size-selector": "0.25rem",
50
+ "size-field": "0.3rem",
51
+ "border": "1px",
52
+ "depth": "0",
53
+ "noise": "0"
54
+ }
55
+ },
56
+ "themes": {
57
+ "hwio": {
58
+ "scheme": "light",
59
+ "default": true,
60
+ "prefersdark": false,
61
+ "font": "inter",
62
+ "shape": "hwio",
63
+ "roles": {
64
+ "base-100": "white",
65
+ "base-200": "sky",
66
+ "base-300": "gray-200",
67
+ "base-content": "ink",
68
+ "primary": "blue-dark",
69
+ "primary-content": "white",
70
+ "secondary": "blue",
71
+ "secondary-content": "white",
72
+ "accent": "red",
73
+ "accent-content": "white",
74
+ "neutral": "ink",
75
+ "neutral-content": "gray-100",
76
+ "info": "blue-light",
77
+ "info-content": "blue-dark",
78
+ "success": "green",
79
+ "success-content": "white",
80
+ "warning": "amber",
81
+ "warning-content": "white",
82
+ "error": "error",
83
+ "error-content": "white"
84
+ },
85
+ "extras": {
86
+ "--hwio-kicker-on-neutral": "#f43f5e"
87
+ }
88
+ },
89
+ "hwio-dark": {
90
+ "extends": "hwio",
91
+ "scheme": "dark",
92
+ "default": false,
93
+ "prefersdark": true,
94
+ "roles": {
95
+ "base-100": "night-100",
96
+ "base-200": "night-200",
97
+ "base-300": "night-300",
98
+ "base-content": "night-content",
99
+ "accent": "rose",
100
+ "accent-content": "night-100",
101
+ "neutral": "night-300",
102
+ "neutral-content": "night-content"
103
+ }
104
+ },
105
+ "hwio-forestry": {
106
+ "extends": "hwio",
107
+ "roles": {
108
+ "primary": "forestry",
109
+ "accent": "forestry"
110
+ }
111
+ },
112
+ "hwio-forestry-dark": {
113
+ "extends": "hwio-dark",
114
+ "roles": {
115
+ "primary": "forestry",
116
+ "accent": "forestry-light",
117
+ "accent-content": "night-100"
118
+ }
119
+ },
120
+ "er3o": {
121
+ "scheme": "light",
122
+ "default": false,
123
+ "prefersdark": false,
124
+ "font": "poppins",
125
+ "shape": "er3o",
126
+ "roles": {
127
+ "base-100": "white",
128
+ "base-200": "er3o-gray-50",
129
+ "base-300": "gray-100",
130
+ "base-content": "er3o-text",
131
+ "primary": "er3o-teal",
132
+ "primary-content": "white",
133
+ "secondary": "er3o-green",
134
+ "secondary-content": "er3o-ink",
135
+ "accent": "er3o-teal-text",
136
+ "accent-content": "white",
137
+ "neutral": "ink",
138
+ "neutral-content": "white",
139
+ "info": "er3o-heading",
140
+ "info-content": "white",
141
+ "success": "green",
142
+ "success-content": "white",
143
+ "warning": "amber",
144
+ "warning-content": "white",
145
+ "error": "error",
146
+ "error-content": "white"
147
+ },
148
+ "extras": {
149
+ "--er3o-gradient-from": "#01CC9B",
150
+ "--er3o-gradient-to": "#14A0C0"
151
+ }
152
+ }
153
+ },
154
+ "layout": {
155
+ "hub": {
156
+ "container": "1275px",
157
+ "pad": "27px"
158
+ },
159
+ "landing": {
160
+ "container": "1640px",
161
+ "pad": "27px"
162
+ }
163
+ },
164
+ "fonts": {
165
+ "display": "block",
166
+ "families": {
167
+ "inter": {
168
+ "family": "Inter",
169
+ "stack": "'Inter', 'Inter Fallback', ui-sans-serif, system-ui, sans-serif",
170
+ "weight": "100 900",
171
+ "format": "woff2-variations",
172
+ "faces": [
173
+ {
174
+ "file": "inter-latin.woff2",
175
+ "unicodeRange": "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"
176
+ },
177
+ {
178
+ "file": "inter-latin-ext.woff2",
179
+ "unicodeRange": "U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF"
180
+ }
181
+ ],
182
+ "fallback": {
183
+ "family": "Inter Fallback",
184
+ "local": "Arial",
185
+ "sizeAdjust": "107.40%",
186
+ "ascent": "90.20%",
187
+ "descent": "22.48%",
188
+ "lineGap": "0%"
189
+ }
190
+ },
191
+ "poppins": {
192
+ "family": "Poppins",
193
+ "stack": "'Poppins', 'Poppins Fallback', ui-sans-serif, system-ui, sans-serif",
194
+ "weight": "400",
195
+ "format": "woff2",
196
+ "faces": [
197
+ {
198
+ "file": "poppins-400-latin.woff2",
199
+ "weight": "400",
200
+ "unicodeRange": "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"
201
+ },
202
+ {
203
+ "file": "poppins-400-latin-ext.woff2",
204
+ "weight": "400",
205
+ "unicodeRange": "U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF"
206
+ },
207
+ {
208
+ "file": "poppins-600-latin.woff2",
209
+ "weight": "600",
210
+ "unicodeRange": "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"
211
+ },
212
+ {
213
+ "file": "poppins-600-latin-ext.woff2",
214
+ "weight": "600",
215
+ "unicodeRange": "U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF"
216
+ },
217
+ {
218
+ "file": "poppins-700-latin.woff2",
219
+ "weight": "700",
220
+ "unicodeRange": "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"
221
+ },
222
+ {
223
+ "file": "poppins-700-latin-ext.woff2",
224
+ "weight": "700",
225
+ "unicodeRange": "U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF"
226
+ }
227
+ ],
228
+ "fallback": {
229
+ "family": "Poppins Fallback",
230
+ "local": "Arial",
231
+ "sizeAdjust": "112%"
232
+ }
233
+ }
234
+ }
235
+ },
236
+ "footerSites": {
237
+ "order": [
238
+ "www",
239
+ "docs",
240
+ "engineering",
241
+ "studio",
242
+ "academy",
243
+ "stem"
244
+ ],
245
+ "labels": {
246
+ "www": "HARDWARIO.com",
247
+ "docs": "Docs",
248
+ "engineering": "Engineering",
249
+ "studio": "Studio",
250
+ "academy": "Academy",
251
+ "stem": "STEM"
252
+ }
253
+ },
254
+ "sites": [
255
+ {
256
+ "key": "www",
257
+ "label": "HARDWARIO.com",
258
+ "url": "https://www.hardwario.com",
259
+ "locales": [
260
+ "en",
261
+ "cs",
262
+ "de",
263
+ "sk",
264
+ "pl"
265
+ ],
266
+ "defaultLocale": "en",
267
+ "theme": "hwio",
268
+ "layout": "hub",
269
+ "strip": {
270
+ "show": true,
271
+ "omit": []
272
+ },
273
+ "gtm": "GTM-WGV5D8TM"
274
+ },
275
+ {
276
+ "key": "docs",
277
+ "label": "Docs",
278
+ "url": "https://docs.hardwario.com",
279
+ "locales": [
280
+ "en",
281
+ "cs"
282
+ ],
283
+ "defaultLocale": "en",
284
+ "theme": "hwio",
285
+ "layout": "hub",
286
+ "strip": {
287
+ "show": true,
288
+ "omit": []
289
+ },
290
+ "gtm": null
291
+ },
292
+ {
293
+ "key": "engineering",
294
+ "label": "HARDWARIO Engineering",
295
+ "url": "https://hardwario.engineering",
296
+ "locales": [
297
+ "en",
298
+ "cs",
299
+ "de",
300
+ "sk",
301
+ "pl"
302
+ ],
303
+ "defaultLocale": "en",
304
+ "theme": "hwio",
305
+ "layout": "landing",
306
+ "strip": {
307
+ "show": false,
308
+ "omit": []
309
+ },
310
+ "gtm": "GTM-TD83PT2D"
311
+ },
312
+ {
313
+ "key": "studio",
314
+ "label": "HARDWARIO Studio",
315
+ "url": "https://hardwario.studio",
316
+ "locales": [
317
+ "en",
318
+ "cs",
319
+ "de",
320
+ "sk",
321
+ "pl"
322
+ ],
323
+ "defaultLocale": "en",
324
+ "theme": "hwio",
325
+ "layout": "landing",
326
+ "strip": {
327
+ "show": true,
328
+ "omit": []
329
+ },
330
+ "gtm": "GTM-PCNXBGDF"
331
+ },
332
+ {
333
+ "key": "academy",
334
+ "label": "HARDWARIO Academy",
335
+ "url": "https://hardwario.academy",
336
+ "locales": [
337
+ "en",
338
+ "cs",
339
+ "de",
340
+ "sk",
341
+ "pl"
342
+ ],
343
+ "defaultLocale": "en",
344
+ "theme": "hwio",
345
+ "layout": "landing",
346
+ "strip": {
347
+ "show": true,
348
+ "omit": [
349
+ "docs",
350
+ "stem"
351
+ ]
352
+ },
353
+ "gtm": "GTM-P723ZJGL"
354
+ },
355
+ {
356
+ "key": "stem",
357
+ "label": "HARDWARIO STEM",
358
+ "url": "https://stem.hardwario.com",
359
+ "locales": [
360
+ "en",
361
+ "cs"
362
+ ],
363
+ "defaultLocale": "en",
364
+ "theme": "hwio",
365
+ "layout": "hub",
366
+ "strip": {
367
+ "show": true,
368
+ "omit": []
369
+ },
370
+ "gtm": null
371
+ },
372
+ {
373
+ "key": "energy",
374
+ "label": "energeticky.report",
375
+ "url": "https://energeticky.report",
376
+ "locales": [
377
+ "cs",
378
+ "en"
379
+ ],
380
+ "defaultLocale": "cs",
381
+ "theme": "hwio",
382
+ "layout": "landing",
383
+ "strip": {
384
+ "show": false,
385
+ "omit": []
386
+ },
387
+ "gtm": null
388
+ },
389
+ {
390
+ "key": "facility",
391
+ "label": "facility.report",
392
+ "url": "https://facility.report",
393
+ "locales": [
394
+ "en",
395
+ "cs"
396
+ ],
397
+ "defaultLocale": "en",
398
+ "theme": "hwio",
399
+ "layout": "landing",
400
+ "strip": {
401
+ "show": false,
402
+ "omit": []
403
+ },
404
+ "gtm": null
405
+ },
406
+ {
407
+ "key": "factory",
408
+ "label": "factory.report",
409
+ "url": "https://factory.report",
410
+ "locales": [
411
+ "en",
412
+ "cs"
413
+ ],
414
+ "defaultLocale": "en",
415
+ "theme": "hwio",
416
+ "layout": "landing",
417
+ "strip": {
418
+ "show": false,
419
+ "omit": []
420
+ },
421
+ "gtm": null
422
+ },
423
+ {
424
+ "key": "forestry",
425
+ "label": "forestry.report",
426
+ "url": "https://forestry.report",
427
+ "locales": [
428
+ "en",
429
+ "cs"
430
+ ],
431
+ "defaultLocale": "en",
432
+ "theme": "hwio-forestry",
433
+ "layout": "landing",
434
+ "strip": {
435
+ "show": false,
436
+ "omit": []
437
+ },
438
+ "gtm": null
439
+ },
440
+ {
441
+ "key": "enerooo",
442
+ "label": "ENEROOO",
443
+ "url": "https://www.enerooo.cz",
444
+ "locales": [
445
+ "cs"
446
+ ],
447
+ "defaultLocale": "cs",
448
+ "theme": "er3o",
449
+ "layout": "hub",
450
+ "strip": {
451
+ "show": false,
452
+ "omit": []
453
+ },
454
+ "gtm": null
455
+ }
456
+ ],
457
+ "social": {
458
+ "linkedin": "https://www.linkedin.com/company/13187032",
459
+ "x": {
460
+ "cs": "https://x.com/hardwario_cz",
461
+ "default": "https://x.com/hardwario_en"
462
+ },
463
+ "instagram": "https://www.instagram.com/hardwario/",
464
+ "youtube": "https://www.youtube.com/c/hardwario",
465
+ "github": "https://github.com/hardwario",
466
+ "forum": "https://forum.hardwario.com"
467
+ },
468
+ "branches": [
469
+ {
470
+ "name": "HARDWARIO a.s.",
471
+ "country": "cz",
472
+ "mapUrl": "https://maps.app.goo.gl/uwNsT2fuUmTaoXc48"
473
+ },
474
+ {
475
+ "name": "HARDWARIO LLC",
476
+ "country": "us",
477
+ "mapUrl": "https://maps.app.goo.gl/YyUsBivFKc6yYVTr8"
478
+ },
479
+ {
480
+ "name": "HARDWARIO LTD",
481
+ "country": "uk",
482
+ "mapUrl": "https://maps.app.goo.gl/BPVS4T61Ao1h5HVJ9"
483
+ }
484
+ ],
485
+ "logos": {
486
+ "hardwario-logo.svg": "full logo, light surfaces",
487
+ "hardwario-logo-dark.svg": "full logo, dark surfaces",
488
+ "hardwario-logo-icon.svg": "icon-only mark",
489
+ "hardwario-mark-pos.svg": "mark, positive (footer)",
490
+ "hardwario-mark.svg": "mark (docs)",
491
+ "hardwario-mark-white.svg": "mark, white (docs dark)",
492
+ "favicon.svg": "favicon",
493
+ "favicon-32x32.png": "favicon 32px",
494
+ "apple-touch-icon.png": "iOS icon 180px",
495
+ "favicon.ico": "legacy favicon"
496
+ }
497
+ }
package/src/sites.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ export interface HWioSite {
2
+ key: string;
3
+ label: string;
4
+ url: string;
5
+ locales: string[];
6
+ defaultLocale: string;
7
+ theme: string;
8
+ layout: 'hub' | 'landing';
9
+ strip: { show: boolean; omit: string[] };
10
+ gtm: string | null;
11
+ }
12
+ export interface HWioFooterSite { key: string; label: string; href: string }
13
+ export const sites: HWioSite[];
14
+ export const footerSites: { order: string[]; labels: Record<string, string> };
15
+ export const social: Record<string, string | Record<string, string>>;
16
+ export const branches: { name: string; country: string; mapUrl: string }[];
17
+ export function hwioSite(key: string): HWioSite;
18
+ export function hwioSiteUrl(key: string, locale: string): string;
19
+ export function hwioFooterSites(input: { self: string; locale: string }): HWioFooterSite[];
20
+ export function hwioFooterSitesHtml(input: { self: string; locale: string; label: string }): string;
21
+ export function hwioSocialX(locale: string): string;
package/src/sites.js ADDED
@@ -0,0 +1,43 @@
1
+ // Sites registry and the cross-site footer strip rules (owner rulings in website-admin
2
+ // AGENTS.md: fixed order, self omitted, engineering carries no strip, academy omits Docs
3
+ // and STEM until the TOWER docs migrate, .report pages and enerooo carry none).
4
+ import { sites, footerSites, social, branches } from './sites-data.js';
5
+
6
+ export { sites, footerSites, social, branches };
7
+
8
+ export function hwioSite(key) {
9
+ const site = sites.find((s) => s.key === key);
10
+ if (!site) throw new Error(`unknown site key: ${key}`);
11
+ return site;
12
+ }
13
+
14
+ /** Localised URL of a family site for a given locale (root for its default locale, /<lang>/ otherwise). */
15
+ export function hwioSiteUrl(key, locale) {
16
+ const site = hwioSite(key);
17
+ const lang = site.locales.includes(locale) ? locale : site.defaultLocale;
18
+ return lang === site.defaultLocale ? `${site.url}/` : `${site.url}/${lang}/`;
19
+ }
20
+
21
+ /** The footer strip entries a site should render, or an empty array when it carries none. */
22
+ export function hwioFooterSites({ self, locale }) {
23
+ const site = hwioSite(self);
24
+ if (!site.strip.show) return [];
25
+ return footerSites.order
26
+ .filter((key) => key !== self && !site.strip.omit.includes(key))
27
+ .map((key) => ({ key, label: footerSites.labels[key], href: hwioSiteUrl(key, locale) }));
28
+ }
29
+
30
+ /** Docusaurus footers take an HTML string; this renders the same strip for them. */
31
+ export function hwioFooterSitesHtml({ self, locale, label }) {
32
+ const items = hwioFooterSites({ self, locale });
33
+ if (!items.length) return '';
34
+ const links = items
35
+ .map((s) => `<a href="${s.href}" target="_blank" rel="noopener noreferrer">${s.label}</a>`)
36
+ .join('<span aria-hidden="true"> · </span>');
37
+ return `<nav aria-label="${label}"><span class="footer-sites-label">${label}:</span> ${links}</nav>`;
38
+ }
39
+
40
+ /** X (Twitter) account by locale: CS → hardwario_cz, everything else → hardwario_en. */
41
+ export function hwioSocialX(locale) {
42
+ return social.x[locale] ?? social.x.default;
43
+ }