@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/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @hubpav/hwio-brand
2
+
3
+ HARDWARIO brand source of truth: `src/brand.json` holds the palette, theme roles (DaisyUI
4
+ slots), shape tokens, fonts, layout presets, the sites registry and the footer-strip rules.
5
+ `npm run build` generates `dist/tokens.json`, `dist/vars.css` (plain `--hwio-*` custom
6
+ properties), `dist/docusaurus.css` (`--ifm-*` mapping), `dist/fonts/*.css` with the woff2
7
+ files, and `dist/sites.js` (registry + `hwioFooterSites()`). Zero runtime dependencies.
@@ -0,0 +1,29 @@
1
+ /* Generated from brand.json by @hubpav/hwio-brand: Infima variables for the Docusaurus sites. */
2
+ :root {
3
+ --ifm-color-primary: #e30427;
4
+ --ifm-color-primary-dark: #cc0423;
5
+ --ifm-color-primary-darker: #c10321;
6
+ --ifm-color-primary-darkest: #aa031d;
7
+ --ifm-color-primary-light: #e61d3d;
8
+ --ifm-color-primary-lighter: #e72a47;
9
+ --ifm-color-primary-lightest: #eb4f68;
10
+ --ifm-color-secondary: #016ad4;
11
+ --ifm-font-family-base: 'Inter', 'Inter Fallback', ui-sans-serif, system-ui, sans-serif;
12
+ --ifm-font-color-base: #252532;
13
+ --ifm-background-color: #ffffff;
14
+ --ifm-code-font-size: 95%;
15
+ --hwio-color-ink: #252532;
16
+ --hwio-color-muted: #5c5f70;
17
+ }
18
+ [data-theme='dark'] {
19
+ --ifm-color-primary: #f43f5e;
20
+ --ifm-color-primary-dark: #dc3955;
21
+ --ifm-color-primary-darker: #cf3650;
22
+ --ifm-color-primary-darkest: #b72f47;
23
+ --ifm-color-primary-light: #f5526e;
24
+ --ifm-color-primary-lighter: #f65c76;
25
+ --ifm-color-primary-lightest: #f7798e;
26
+ --ifm-background-color: #0f0f14;
27
+ --ifm-background-surface-color: #1a1a22;
28
+ --ifm-font-color-base: #e7e7ee;
29
+ }
Binary file
Binary file
@@ -0,0 +1,25 @@
1
+ /* Generated from brand.json. Owner ruling R3 (2026-09-05): font-display block; the pre-paint gate (HWioFontGate) keeps text invisible until the face decodes. Files live at /fonts/ in every site. */
2
+ @font-face {
3
+ font-family: 'Inter';
4
+ font-style: normal;
5
+ font-weight: 100 900;
6
+ font-display: block;
7
+ src: url('/fonts/inter-latin.woff2') format('woff2-variations');
8
+ unicode-range: 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;
9
+ }
10
+ @font-face {
11
+ font-family: 'Inter';
12
+ font-style: normal;
13
+ font-weight: 100 900;
14
+ font-display: block;
15
+ src: url('/fonts/inter-latin-ext.woff2') format('woff2-variations');
16
+ unicode-range: 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;
17
+ }
18
+ @font-face {
19
+ font-family: 'Inter Fallback';
20
+ src: local('Arial');
21
+ size-adjust: 107.40%;
22
+ ascent-override: 90.20%;
23
+ descent-override: 22.48%;
24
+ line-gap-override: 0%;
25
+ }
@@ -0,0 +1,54 @@
1
+ /* Generated from brand.json. Owner ruling R3 (2026-09-05): font-display block; the pre-paint gate (HWioFontGate) keeps text invisible until the face decodes. Files live at /fonts/ in every site. */
2
+ @font-face {
3
+ font-family: 'Poppins';
4
+ font-style: normal;
5
+ font-weight: 400;
6
+ font-display: block;
7
+ src: url('/fonts/poppins-400-latin.woff2') format('woff2');
8
+ unicode-range: 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;
9
+ }
10
+ @font-face {
11
+ font-family: 'Poppins';
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ font-display: block;
15
+ src: url('/fonts/poppins-400-latin-ext.woff2') format('woff2');
16
+ unicode-range: 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;
17
+ }
18
+ @font-face {
19
+ font-family: 'Poppins';
20
+ font-style: normal;
21
+ font-weight: 600;
22
+ font-display: block;
23
+ src: url('/fonts/poppins-600-latin.woff2') format('woff2');
24
+ unicode-range: 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;
25
+ }
26
+ @font-face {
27
+ font-family: 'Poppins';
28
+ font-style: normal;
29
+ font-weight: 600;
30
+ font-display: block;
31
+ src: url('/fonts/poppins-600-latin-ext.woff2') format('woff2');
32
+ unicode-range: 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;
33
+ }
34
+ @font-face {
35
+ font-family: 'Poppins';
36
+ font-style: normal;
37
+ font-weight: 700;
38
+ font-display: block;
39
+ src: url('/fonts/poppins-700-latin.woff2') format('woff2');
40
+ unicode-range: 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;
41
+ }
42
+ @font-face {
43
+ font-family: 'Poppins';
44
+ font-style: normal;
45
+ font-weight: 700;
46
+ font-display: block;
47
+ src: url('/fonts/poppins-700-latin-ext.woff2') format('woff2');
48
+ unicode-range: 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;
49
+ }
50
+ @font-face {
51
+ font-family: 'Poppins Fallback';
52
+ src: local('Arial');
53
+ size-adjust: 112%;
54
+ }
@@ -0,0 +1,5 @@
1
+ // Generated from brand.json.
2
+ export const sites = [{"key":"www","label":"HARDWARIO.com","url":"https://www.hardwario.com","locales":["en","cs","de","sk","pl"],"defaultLocale":"en","theme":"hwio","layout":"hub","strip":{"show":true,"omit":[]},"gtm":"GTM-WGV5D8TM"},{"key":"docs","label":"Docs","url":"https://docs.hardwario.com","locales":["en","cs"],"defaultLocale":"en","theme":"hwio","layout":"hub","strip":{"show":true,"omit":[]},"gtm":null},{"key":"engineering","label":"HARDWARIO Engineering","url":"https://hardwario.engineering","locales":["en","cs","de","sk","pl"],"defaultLocale":"en","theme":"hwio","layout":"landing","strip":{"show":false,"omit":[]},"gtm":"GTM-TD83PT2D"},{"key":"studio","label":"HARDWARIO Studio","url":"https://hardwario.studio","locales":["en","cs","de","sk","pl"],"defaultLocale":"en","theme":"hwio","layout":"landing","strip":{"show":true,"omit":[]},"gtm":"GTM-PCNXBGDF"},{"key":"academy","label":"HARDWARIO Academy","url":"https://hardwario.academy","locales":["en","cs","de","sk","pl"],"defaultLocale":"en","theme":"hwio","layout":"landing","strip":{"show":true,"omit":["docs","stem"]},"gtm":"GTM-P723ZJGL"},{"key":"stem","label":"HARDWARIO STEM","url":"https://stem.hardwario.com","locales":["en","cs"],"defaultLocale":"en","theme":"hwio","layout":"hub","strip":{"show":true,"omit":[]},"gtm":null},{"key":"energy","label":"energeticky.report","url":"https://energeticky.report","locales":["cs","en"],"defaultLocale":"cs","theme":"hwio","layout":"landing","strip":{"show":false,"omit":[]},"gtm":null},{"key":"facility","label":"facility.report","url":"https://facility.report","locales":["en","cs"],"defaultLocale":"en","theme":"hwio","layout":"landing","strip":{"show":false,"omit":[]},"gtm":null},{"key":"factory","label":"factory.report","url":"https://factory.report","locales":["en","cs"],"defaultLocale":"en","theme":"hwio","layout":"landing","strip":{"show":false,"omit":[]},"gtm":null},{"key":"forestry","label":"forestry.report","url":"https://forestry.report","locales":["en","cs"],"defaultLocale":"en","theme":"hwio-forestry","layout":"landing","strip":{"show":false,"omit":[]},"gtm":null},{"key":"enerooo","label":"ENEROOO","url":"https://www.enerooo.cz","locales":["cs"],"defaultLocale":"cs","theme":"er3o","layout":"hub","strip":{"show":false,"omit":[]},"gtm":null}];
3
+ export const footerSites = {"order":["www","docs","engineering","studio","academy","stem"],"labels":{"www":"HARDWARIO.com","docs":"Docs","engineering":"Engineering","studio":"Studio","academy":"Academy","stem":"STEM"}};
4
+ export const social = {"linkedin":"https://www.linkedin.com/company/13187032","x":{"cs":"https://x.com/hardwario_cz","default":"https://x.com/hardwario_en"},"instagram":"https://www.instagram.com/hardwario/","youtube":"https://www.youtube.com/c/hardwario","github":"https://github.com/hardwario","forum":"https://forum.hardwario.com"};
5
+ export const branches = [{"name":"HARDWARIO a.s.","country":"cz","mapUrl":"https://maps.app.goo.gl/uwNsT2fuUmTaoXc48"},{"name":"HARDWARIO LLC","country":"us","mapUrl":"https://maps.app.goo.gl/YyUsBivFKc6yYVTr8"},{"name":"HARDWARIO LTD","country":"uk","mapUrl":"https://maps.app.goo.gl/BPVS4T61Ao1h5HVJ9"}];
@@ -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/dist/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
+ }