@networkpro/web 1.7.2 → 1.7.4

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 (42) hide show
  1. package/CODE_OF_CONDUCT.md +4 -4
  2. package/LICENSE.md +4 -4
  3. package/README.md +3 -3
  4. package/cspell.json +7 -0
  5. package/netlify-functions/cspReport.js +8 -0
  6. package/package.json +4 -4
  7. package/src/lib/components/foss/FossFeatures.svelte +0 -23
  8. package/src/lib/components/foss/FossItemContent.svelte +1 -2
  9. package/src/lib/data/fossData.js +76 -4
  10. package/src/lib/images.js +6 -2
  11. package/src/lib/img/posts/hboard.png +0 -0
  12. package/src/lib/img/posts/hboard.webp +0 -0
  13. package/src/lib/pages/AboutContent.svelte +50 -32
  14. package/src/lib/pages/LicenseContent.svelte +18 -22
  15. package/src/lib/pages/TermsConditionsContent.svelte +1 -4
  16. package/src/lib/styles/css/default.css +25 -2
  17. package/src/lib/styles/global.min.css +1 -1
  18. package/static/assets/bin/contact.vcf +13 -0
  19. package/static/assets/bin/linksheet.json +8 -0
  20. package/static/assets/consulting-terms.pdf +0 -0
  21. package/static/assets/license/CC-BY-4.0-rdfa.xml +741 -0
  22. package/static/assets/license/CC-BY-4.0.html +884 -0
  23. package/static/assets/license/CC-BY-4.0.md +367 -0
  24. package/static/assets/license/CC-BY-4.0.txt +156 -0
  25. package/static/assets/license/CC-BY-4.0.xml +25 -0
  26. package/static/assets/license/COPYING-rdfa.xml +1187 -0
  27. package/static/assets/license/COPYING.html +1062 -0
  28. package/static/assets/license/COPYING.md +611 -0
  29. package/static/assets/license/COPYING.odt +0 -0
  30. package/static/assets/license/COPYING.txt +232 -0
  31. package/static/disableSw.js +8 -0
  32. package/static/offline.html +3 -0
  33. package/static/sitemap.xml +40 -4
  34. package/static/styles/brands.min.css +6 -0
  35. package/static/styles/fontawesome.min.css +9 -0
  36. package/static/styles/global.min.css +6 -0
  37. package/static/styles/solid.min.css +6 -0
  38. package/assets/nsa-happy-dance.png +0 -0
  39. package/tsconfig.custom.jsonc +0 -40
  40. /package/{assets/bin/contact@s.neteng.pro.aexpk → static/assets/bin/contact@s.neteng.pro.asc} +0 -0
  41. /package/{assets/bin/github@sl.neteng.cc.aexpk → static/assets/bin/github@sl.neteng.cc.asc} +0 -0
  42. /package/{assets/bin/support@neteng.pro.aexpk → static/assets/bin/support@neteng.pro.asc} +0 -0
@@ -8,8 +8,8 @@ This file is part of Network Pro.
8
8
 
9
9
  <a name="top"></a>
10
10
 
11
- [SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info):
12
- `CC-BY-4.0 OR GPL-3.0-or-later`
11
+ <sup>[SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info):
12
+ `CC-BY-4.0 OR GPL-3.0-or-later`</sup>
13
13
 
14
14
  # Contributor Covenant Code of Conduct
15
15
 
@@ -152,12 +152,12 @@ For answers to common questions about this code of conduct, see the FAQ at
152
152
 
153
153
  ---
154
154
 
155
- <div style="font-size: 12px; font-weight: bold; text-align: center;">
155
+ <span style="font-size: 12px; font-weight: bold; text-align: center;">
156
156
 
157
157
  [Home](https://netwk.pro) &nbsp; | &nbsp; [Terms of Use](https://netwk.pro/terms-of-use)
158
158
  [Privacy Policy](https://netwk.pro/privacy) &nbsp; | &nbsp; [Legal](https://netwk.pro/license)
159
159
 
160
- </div>
160
+ </span>
161
161
 
162
162
  &nbsp;
163
163
 
package/LICENSE.md CHANGED
@@ -6,8 +6,8 @@ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
6
  This file is part of Network Pro.
7
7
  ====================================================================== -->
8
8
 
9
- [SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info/):
10
- `CC-BY-4.0 OR GPL-3.0-or-later`
9
+ <sup>[SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info/):
10
+ `CC-BY-4.0 OR GPL-3.0-or-later`</sup>
11
11
 
12
12
  <a name="top"></a>
13
13
 
@@ -112,7 +112,7 @@ This work is dual-licensed under:
112
112
 
113
113
  ## 7. Creative Commons License (CC BY 4.0)
114
114
 
115
- <sup>Formats: [HTML](https://legal.netwk.pro/html/CC-BY-4.0.html) | [Markdown](https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/CC-BY-4.0.md) | [Text](https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/CC-BY-4.0.txt) | [RDFa](https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/CC-BY-4.0-rdfa.xml) | [XMP](https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/CC-BY-4.0.xml)</sup>
115
+ <sup>Formats: [HTML](https://netwk.pro/assets/license/CC-BY-4.0.html) | [Markdown](https://netwk.pro/assets/license/CC-BY-4.0.md) | [Text](https://netwk.pro/assets/license/CC-BY-4.0.txt) | [RDFa](https://netwk.pro/assets/license/CC-BY-4.0-rdfa.xml) | [XMP](https://netwk.pro/assets/license/CC-BY-4.0.xml)</sup>
116
116
 
117
117
  Network Pro&trade; (the "Licensed Material") is licensed under **Creative
118
118
  Commons Attribution 4.0 International** (CC BY 4.0)
@@ -138,7 +138,7 @@ Permissions beyond the scope of this License—or instead of those permitted by
138
138
 
139
139
  ## 8. GNU General Public License (GPL)
140
140
 
141
- <sup>Formats: [HTML](https://legal.netwk.pro/html/COPYING.html) | [Markdown](https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/COPYING.md) | [Text](https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/COPYING.txt) | [RDFa](https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/COPYING-rdfa.xml) | [ODT](https://github.com/netwk-pro/netwk-pro-legal/raw/refs/heads/master/assets/license/COPYING.odt)</sup>
141
+ <sup>Formats: [HTML](https://netwk.pro/assets/license/COPYING.html) | [Markdown](https://netwk.pro/assets/license/COPYING.md) | [Text](https://netwk.pro/assets/license/COPYING.txt) | [RDFa](https://netwk.pro/assets/license/COPYING-rdfa.xml) | [ODT](https://netwk.pro/assets/license/COPYING.odt)</sup>
142
142
 
143
143
  Network Pro&trade; is free software: you can redistribute it and/or modify it under the terms of the **GNU General Public License** (GNU GPL) as published by the [Free Software Foundation](https://www.fsf.org/), either version 3 of the License, or (at your option) any later version.
144
144
 
package/README.md CHANGED
@@ -226,15 +226,15 @@ Located at `src/hooks.client.ts`, it is automatically used by the SvelteKit runt
226
226
  To receive and inspect CSP violation reports in development or production, the repo includes a Netlify-compatible function at:
227
227
 
228
228
  ```bash
229
- netlify-functions/csp-report.js
229
+ netlify-functions/cspReport.js
230
230
  ```
231
231
 
232
- This function receives reports sent to `/functions/csp-report` and logs them to the console. You can later integrate with logging tools or alerts (e.g., via email, Slack, or SIEM ingestion).
232
+ This function receives reports sent to `/functions/cspReport` and logs them to the console. You can later integrate with logging tools or alerts (e.g., via email, Slack, or SIEM ingestion).
233
233
 
234
234
  Make sure to include the `report-uri` directive in your CSP header:
235
235
 
236
236
  ```bash
237
- Content-Security-Policy: ...; report-uri /.netlify/functions/csp-report;
237
+ Content-Security-Policy: ...; report-uri /.netlify/functions/cspReport;
238
238
  ```
239
239
 
240
240
  &nbsp;
package/cspell.json CHANGED
@@ -3,6 +3,7 @@
3
3
  "language": "en",
4
4
  "words": [
5
5
  "acode",
6
+ "anonymization",
6
7
  "autocapture",
7
8
  "autorun",
8
9
  "beforeinstallprompt",
@@ -13,7 +14,9 @@
13
14
  "esbuild",
14
15
  "foss",
15
16
  "geolocation",
17
+ "heliboard",
16
18
  "homescreen",
19
+ "Izzy",
17
20
  "lhci",
18
21
  "lighthouseci",
19
22
  "lighthouserc",
@@ -30,12 +33,16 @@
30
33
  "noreferrer",
31
34
  "nosniff",
32
35
  "nosw",
36
+ "npmjs",
33
37
  "obtainium",
34
38
  "posthog",
35
39
  "SIEM",
40
+ "SPDY",
36
41
  "stylelintignore",
37
42
  "Subsite",
38
43
  "subsites",
44
+ "Supercookie",
45
+ "supercookies",
39
46
  "urlcheck",
40
47
  "vcard",
41
48
  "vite",
@@ -6,6 +6,14 @@ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
6
  This file is part of Network Pro.
7
7
  ========================================================================== */
8
8
 
9
+ /**
10
+ * @file cspReport.js
11
+ * @description Sets up a CSP reporting endpoint with email notifications, to be deployed as a Netlify function.
12
+ * @module netlify-functions
13
+ * @author SunDevil311
14
+ * @updated 2025-05-29
15
+ */
16
+
9
17
  import nodemailer from "nodemailer";
10
18
 
11
19
  /**
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "sideEffects": [
5
5
  "./.netlify/shims.js"
6
6
  ],
7
- "version": "1.7.2",
7
+ "version": "1.7.4",
8
8
  "description": "Locking Down Networks, Unlocking Confidence | Security, Networking, Privacy — Network Pro Strategies",
9
9
  "keywords": [
10
10
  "advisory",
@@ -78,13 +78,13 @@
78
78
  },
79
79
  "dependencies": {
80
80
  "nodemailer": "^7.0.3",
81
- "posthog-js": "^1.248.1",
81
+ "posthog-js": "^1.249.0",
82
82
  "semver": "^7.7.2",
83
83
  "svelte": "5.33.10"
84
84
  },
85
85
  "devDependencies": {
86
86
  "@eslint/compat": "^1.2.9",
87
- "@eslint/js": "^9.27.0",
87
+ "@eslint/js": "^9.28.0",
88
88
  "@lhci/cli": "^0.14.0",
89
89
  "@playwright/test": "^1.52.0",
90
90
  "@sveltejs/adapter-netlify": "^5.0.2",
@@ -95,7 +95,7 @@
95
95
  "@vitest/coverage-v8": "^3.1.4",
96
96
  "autoprefixer": "^10.4.21",
97
97
  "browserslist": "^4.25.0",
98
- "eslint": "^9.27.0",
98
+ "eslint": "^9.28.0",
99
99
  "eslint-config-prettier": "^10.1.5",
100
100
  "eslint-plugin-jsdoc": "^50.6.17",
101
101
  "eslint-plugin-svelte": "^3.9.0",
@@ -52,27 +52,4 @@ This file is part of Network Pro.
52
52
  font-weight: 600;
53
53
  margin-bottom: 0.5em;
54
54
  }
55
-
56
- .emoji {
57
- margin-right: 8px;
58
- }
59
-
60
- .headline {
61
- display: block; /* Ensure it is on its own line */
62
- font-weight: bold; /* Keep the first item bold */
63
- font-style: italic; /* Only make the first item italic */
64
- margin-bottom: 4px; /* Add space between headline and the rest */
65
- }
66
-
67
- .label {
68
- font-weight: bold; /* Keep the label bold */
69
- font-family: inherit; /* Ensure it uses the same font-family as normal text */
70
- }
71
-
72
- .description {
73
- display: inline; /* Keep description inline */
74
- font-weight: normal; /* Ensure the description is normal (not bold) */
75
- font-family: inherit; /* Ensure it uses the same font-family as normal text */
76
- font-style: normal; /* Remove italic for the description */
77
- }
78
55
  </style>
@@ -126,8 +126,7 @@ This file is part of Network Pro.
126
126
  ><i class="fas fa-file-arrow-down" style="margin-left: 8px;"></i
127
127
  ></span>
128
128
  <a
129
- {rel}
130
- href="https://raw.githubusercontent.com/netwk-pro/dev-sveltekit/refs/heads/master/assets/bin/linksheet.json"
129
+ href="/assets/bin/linksheet.json"
131
130
  download
132
131
  type="application/json"
133
132
  style="margin-left: 8px;"
@@ -6,12 +6,82 @@ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
6
  This file is part of Network Pro.
7
7
  ========================================================================== */
8
8
 
9
- // cspell:ignore lsheet eauth bolditalic tosdr
10
-
11
9
  // Import FOSS images
12
- import { acodePng, acodeWbp, eauthPng, eauthWbp, lsheetPng, lsheetWbp, pmxPng, pmxWbp, tosPng, tosWbp, urlPng, urlWbp } from "$lib";
10
+ import { acodePng, acodeWbp, eauthPng, eauthWbp, hboardPng, hboardWbp, lsheetPng, lsheetWbp, pmxPng, pmxWbp, tosPng, tosWbp, urlPng, urlWbp } from "$lib";
13
11
 
14
12
  export const fossData = [
13
+ {
14
+ id: "heliboard",
15
+ images: {
16
+ webp: hboardWbp,
17
+ png: hboardPng,
18
+ },
19
+ imgAlt: "HeliBoard",
20
+ title: "HeliBoard",
21
+ headline: "⌨️ A privacy-first keyboard that respects your data. Always.",
22
+ headlineDescription: `
23
+ <p>
24
+ Meet <strong>HeliBoard</strong> — a fully open-source Android keyboard that puts privacy and user control first. No internet permissions. No telemetry. No tracking. Just a lightweight, seamless typing experience built by developers who genuinely care about digital freedom and transparency.
25
+ </p>
26
+ `,
27
+ features: [
28
+ {
29
+ emoji: "💡",
30
+ label: "Why Make the Switch to HeliBoard?",
31
+ isIntro: true
32
+ },
33
+ {
34
+ emoji: "✔️",
35
+ label: "Material Design interface",
36
+ },
37
+ {
38
+ emoji: "✔️",
39
+ label: "Built-in themes with dark mode support",
40
+ },
41
+ {
42
+ emoji: "✔️",
43
+ label: "No ads, data collection, or background connections",
44
+ },
45
+ {
46
+ emoji: "✔️",
47
+ label: "Emoji support, gesture input, and smart customization",
48
+ },
49
+ {
50
+ emoji: "✔️",
51
+ label: "Actively developed on GitHub",
52
+ description: "get involved!"
53
+ }
54
+ ],
55
+ detailsDescription: `
56
+ <p>
57
+ Whether you're switching from Gboard or just want something more minimal and ethical, HeliBoard brings you that true FOSS flavor while keeping your taps smooth and secure.
58
+ </p>
59
+ <p>
60
+ 🛠️ Open-source. Lightweight. Transparent. HeliBoard isn't just a keyboard—it's a philosophy.
61
+ </p>
62
+ <p>
63
+ ✨ <strong>Weekly FOSS gems like this remind us: we have powerful alternatives, built by passionate devs, made for people who care. <em>Let's support that</em>.</strong>
64
+ </p>
65
+
66
+ `,
67
+ links: [
68
+ {
69
+ label: "GitHub",
70
+ href: "https://github.com/Helium314/HeliBoard",
71
+ },
72
+ {
73
+ label: "F-Droid",
74
+ href: "https://f-droid.org/packages/helium314.keyboard/",
75
+ },
76
+ {
77
+ label: "IzzyOnDroid",
78
+ href: "https://apt.izzysoft.de/fdroid/index/apk/helium314.keyboard",
79
+ },
80
+ ],
81
+ notes: [
82
+ "Network Pro&trade; <strong>highly recommends</strong> that Android users choose an open-source keyboard—ideally one that does not require internet permissions. Concerns remain valid around proprietary keyboards like Gboard and Microsoft SwiftKey, which may collect and store user input data."
83
+ ],
84
+ },
15
85
  {
16
86
  id: "eauth",
17
87
  images: {
@@ -23,7 +93,7 @@ export const fossData = [
23
93
  headline: "🔐 Elevate Your 2FA Game with Ente Auth — The Cross-Platform Open-Source Powerhouse!",
24
94
  headlineDescription: `
25
95
  <p>
26
- This week's <strong>FOSS Spotlight</strong> is on <strong>Ente Auth</strong> — the sleek, open-source 2FA authenticator that's putting privacy and usability front and center.
96
+ Discover <strong>Ente Auth</strong> — the sleek, open-source 2FA authenticator that's putting privacy and usability front and center.
27
97
  </p>
28
98
  <p>
29
99
  Whether you're a dev, a cybersecurity enthusiast, or simply serious about protecting your accounts, <strong>Ente Auth</strong> offers a next-level authentication experience — <strong>backed by encryption, not ads.</strong>
@@ -434,3 +504,5 @@ export const fossData = [
434
504
  notes: [],
435
505
  },
436
506
  ];
507
+
508
+ // cspell:ignore hboard gboard lsheet eauth tosdr
package/src/lib/images.js CHANGED
@@ -15,7 +15,7 @@ This file is part of Network Pro.
15
15
  * @description Provides convenient access to images in the src/lib/img directory
16
16
  * @module src/lib
17
17
  * @author SunDevil311
18
- * @updated 2025-05-28
18
+ * @updated 2025-05-30
19
19
  */
20
20
 
21
21
  // Import favicon images
@@ -41,6 +41,8 @@ import acodePng from "$lib/img/posts/acode.png";
41
41
  import acodeWbp from "$lib/img/posts/acode.webp";
42
42
  import eauthPng from "$lib/img/posts/eauth.png";
43
43
  import eauthWbp from "$lib/img/posts/eauth.webp";
44
+ import hboardPng from "$lib/img/posts/hboard.png";
45
+ import hboardWbp from "$lib/img/posts/hboard.webp";
44
46
  import lsheetPng from "$lib/img/posts/linksheet.png";
45
47
  import lsheetWbp from "$lib/img/posts/linksheet.webp";
46
48
  import pmxPng from "$lib/img/posts/pmx.png";
@@ -67,6 +69,8 @@ export {
67
69
  eauthWbp,
68
70
  faviconSvg,
69
71
  gplBadge,
72
+ hboardPng,
73
+ hboardWbp,
70
74
  logoPng,
71
75
  logoWbp,
72
76
  lsheetPng,
@@ -84,4 +88,4 @@ export {
84
88
  vcfSrc
85
89
  };
86
90
 
87
- // cspell:ignore eauth
91
+ // cspell:ignore eauth hboard
Binary file
Binary file
@@ -76,26 +76,30 @@ This file is part of Network Pro.
76
76
  label: "support@neteng.pro",
77
77
  qrSrc: pgpSupport,
78
78
  keySearch: "https://keys.openpgp.org/search?q=support%40neteng.pro",
79
- fingerprint: ["6590b992e2e3eff12738", "7bce2af093e9dec61ba0"],
79
+ fingerprint: ["6590B992E2E3EFF12738", "7BCE2AF093E9DEC61BA0"],
80
80
  },
81
81
  {
82
82
  label: "contact@s.neteng.pro",
83
83
  qrSrc: pgpContact,
84
84
  keySearch: "https://keys.openpgp.org/search?q=contact%40s.neteng.pro",
85
- fingerprint: ["df118baa6c2d9dcdebdc", "2ddcf99373499495f957"],
85
+ fingerprint: ["DF118BAA6C2D9DCDEBDC", "2DDCF99373499495F957"],
86
86
  },
87
87
  ];
88
88
 
89
89
  /**
90
- * vCard information for contact details
91
- * @type {{
92
- * qrSrc: string,
93
- * vcf: string
94
- * }}
90
+ * @typedef {Object} ContactAssets
91
+ * @property {string} vcf - Path to the contact vCard (.vcf file)
92
+ * @property {string} qrSrc - Path to QR image for contact info
93
+ * @property {string} supportAsc - Support PGP public key file (.asc)
94
+ * @property {string} contactAsc - Contact PGP public key file (.asc)
95
95
  */
96
- const vCard = {
96
+
97
+ /** @type {ContactAssets} */
98
+ const contactAssets = {
99
+ vcf: "/assets/bin/contact.vcf",
97
100
  qrSrc: vcfSrc,
98
- vcf: "https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/contact.vcf",
101
+ supportAsc: "/assets/bin/support@neteng.pro.asc",
102
+ contactAsc: "/assets/bin/contact@s.neteng.pro.asc",
99
103
  };
100
104
  </script>
101
105
 
@@ -192,7 +196,7 @@ This file is part of Network Pro.
192
196
  <div class="spacer"></div>
193
197
 
194
198
  <p>
195
- <a {rel} href="https://netwk.pro/contact" target="_blank">Let's connect</a>
199
+ <a href="https://netwk.pro/contact" target="_self">Let's connect</a>
196
200
  to discuss how we can help secure and strengthen your business today.
197
201
  </p>
198
202
 
@@ -222,17 +226,25 @@ This file is part of Network Pro.
222
226
  alt={`PGP Key - ${pgpKeys[0].label}`} />
223
227
  </td>
224
228
  <td class="pgp-col2">
225
- <a
226
- {rel}
227
- href={pgpKeys[0].keySearch}
228
- download
229
- type="application/pgp-keys"
230
- target={tgtBlank}>
229
+ <a {rel} href={pgpKeys[0].keySearch} target={tgtBlank}>
231
230
  <strong>{pgpKeys[0].label}</strong>
232
231
  </a>
233
- <p>Fingerprint:</p>
234
- <p class="fingerprint">
235
- {pgpKeys[0].fingerprint.join("\n")}
232
+ <p
233
+ ><strong
234
+ ><a
235
+ href={contactAssets.supportAsc}
236
+ type="application/pgp-keys"
237
+ download
238
+ target={tgtBlank}
239
+ >asc
240
+ <span class="fas fa-file-arrow-down"></span></a
241
+ ></strong>
242
+ </p>
243
+ <p
244
+ >Fingerprint:<br />
245
+ <span class="fingerprint">
246
+ {pgpKeys[0].fingerprint.join("\n")}
247
+ </span>
236
248
  </p>
237
249
  </td>
238
250
  </tr>
@@ -240,17 +252,24 @@ This file is part of Network Pro.
240
252
  <!-- Row 1 (Second row) has its columns swapped -->
241
253
  <tr>
242
254
  <td class="pgp-col1">
243
- <a
244
- {rel}
245
- href={pgpKeys[1].keySearch}
246
- download
247
- type="application/pgp-keys"
248
- target={tgtBlank}>
255
+ <a {rel} href={pgpKeys[1].keySearch} target={tgtBlank}>
249
256
  <strong>{pgpKeys[1].label}</strong>
250
257
  </a>
251
- <p>Fingerprint:</p>
252
- <p class="fingerprint">
253
- {pgpKeys[1].fingerprint.join("\n")}
258
+ <p>
259
+ <strong
260
+ ><a
261
+ href={contactAssets.contactAsc}
262
+ type="application/pgp-keys"
263
+ download
264
+ target={tgtBlank}
265
+ >asc <span class="fas fa-file-arrow-down"></span></a
266
+ ></strong>
267
+ </p>
268
+ <p
269
+ >Fingerprint:<br />
270
+ <span class="fingerprint">
271
+ {pgpKeys[1].fingerprint.join("\n")}
272
+ </span>
254
273
  </p>
255
274
  </td>
256
275
  <td class="pgp-col2">
@@ -269,7 +288,7 @@ This file is part of Network Pro.
269
288
  <img
270
289
  {decoding}
271
290
  {loading}
272
- src={vCard.qrSrc}
291
+ src={contactAssets.qrSrc}
273
292
  class="pgp-image"
274
293
  alt="vCard" />
275
294
  </td>
@@ -277,10 +296,9 @@ This file is part of Network Pro.
277
296
  <strong>vCard</strong>
278
297
  <p>
279
298
  <a
280
- {rel}
281
- href={vCard.vcf}
282
- download
299
+ href={contactAssets.vcf}
283
300
  type="text/vcard"
301
+ download
284
302
  target={tgtBlank}>
285
303
  <strong>vcf</strong>
286
304
  </a>
@@ -220,30 +220,28 @@ This file is part of Network Pro.
220
220
  <p class={constants.classSmall}>
221
221
  Formats:
222
222
  <a
223
- rel={constants.rel}
224
- href="https://legal.netwk.pro/html/CC-BY-4.0.html"
225
- target={constants.targetSelf}>HTML</a>
223
+ href="/assets/license/CC-BY-4.0.html"
224
+ download
225
+ target={constants.targetBlank}>HTML</a>
226
226
  |
227
227
  <a
228
- rel={constants.rel}
229
- href="https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/CC-BY-4.0.md"
228
+ href="/assets/license/CC-BY-4.0.md"
229
+ download
230
230
  target={constants.targetBlank}>Markdown</a>
231
231
  |
232
232
  <a
233
- rel={constants.rel}
234
- href="https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/CC-BY-4.0.txt"
233
+ href="/assets/license/CC-BY-4.0.txt"
234
+ download
235
235
  target={constants.targetBlank}>Text</a>
236
236
  |
237
237
  <a
238
- rel={constants.rel}
238
+ href="/assets/license/CC-BY-4.0-rdfa.xml"
239
239
  download
240
- href="https://raw.githubusercontent.com/netwk-pro/netwk-pro-legal/refs/heads/master/assets/license/CC-BY-4.0-rdfa.xml"
241
240
  target={constants.targetBlank}>RDFa</a>
242
241
  |
243
242
  <a
244
- rel={constants.rel}
243
+ href="/assets/license/CC-BY-4.0.xml"
245
244
  download
246
- href="https://raw.githubusercontent.com/netwk-pro/netwk-pro-legal/refs/heads/master/assets/license/CC-BY-4.0.xml"
247
245
  target={constants.targetBlank}>XMP</a>
248
246
  </p>
249
247
 
@@ -325,30 +323,28 @@ This file is part of Network Pro.
325
323
  <p class={constants.classSmall}>
326
324
  Formats:
327
325
  <a
328
- rel={constants.rel}
329
- href="https://legal.netwk.pro/html/COPYING.html"
330
- target={constants.targetSelf}>HTML</a>
326
+ href="/assets/license/COPYING.html"
327
+ download
328
+ target={constants.targetBlank}>HTML</a>
331
329
  |
332
330
  <a
333
- rel={constants.rel}
334
- href="https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/COPYING.md"
331
+ href="/assets/license/COPYING.md"
332
+ download
335
333
  target={constants.targetBlank}>Markdown</a>
336
334
  |
337
335
  <a
338
- rel={constants.rel}
339
- href="https://github.com/netwk-pro/netwk-pro-legal/blob/master/assets/license/COPYING.txt"
336
+ href="/assets/license/COPYING.txt"
337
+ download
340
338
  target={constants.targetBlank}>Text</a>
341
339
  |
342
340
  <a
343
- rel={constants.rel}
341
+ href="/assets/license/COPYING-rdfa.xml"
344
342
  download
345
- href="https://raw.githubusercontent.com/netwk-pro/netwk-pro-legal/refs/heads/master/assets/license/COPYING-rdfa.xml"
346
343
  target={constants.targetBlank}>RDFa</a>
347
344
  |
348
345
  <a
349
- rel={constants.rel}
346
+ href="/assets/license/COPYING.odt"
350
347
  download
351
- href="https://raw.githubusercontent.com/netwk-pro/netwk-pro-legal/refs/heads/master/assets/license/COPYING.odt"
352
348
  target={constants.targetBlank}>ODT</a>
353
349
  </p>
354
350
 
@@ -114,10 +114,7 @@ This file is part of Network Pro.
114
114
  |
115
115
  <a href={tandcLink} target={constants.targetSelf}>Docs</a>
116
116
  |
117
- <a
118
- rel={constants.rel}
119
- href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/consulting-terms.pdf"
120
- target={constants.targetBlank}>
117
+ <a href="/assets/consulting-terms.pdf" target={constants.targetBlank}>
121
118
  PDF <span class="fas fa-file-arrow-down"></span>
122
119
  </a>
123
120
  </sup>
@@ -463,8 +463,8 @@ footer .container {
463
463
  }
464
464
 
465
465
  .pgp-image {
466
- width: 125px;
467
- height: 125px;
466
+ width: 150px;
467
+ height: 150px;
468
468
  }
469
469
 
470
470
  .spacer {
@@ -474,3 +474,26 @@ footer .container {
474
474
  .separator {
475
475
  margin: 0 0.5rem;
476
476
  }
477
+
478
+ .emoji {
479
+ margin-right: 8px;
480
+ }
481
+
482
+ .headline {
483
+ display: block; /* Ensure it is on its own line */
484
+ font-weight: bold; /* Keep the first item bold */
485
+ font-style: italic; /* Only make the first item italic */
486
+ margin-bottom: 4px; /* Add space between headline and the rest */
487
+ }
488
+
489
+ .label {
490
+ font-weight: bold; /* Keep the label bold */
491
+ font-family: inherit; /* Ensure it uses the same font-family as normal text */
492
+ }
493
+
494
+ .description {
495
+ display: inline; /* Keep description inline */
496
+ font-weight: normal; /* Ensure the description is normal (not bold) */
497
+ font-family: inherit; /* Ensure it uses the same font-family as normal text */
498
+ font-style: normal; /* Remove italic for the description */
499
+ }
@@ -3,4 +3,4 @@ Copyright © 2025 Network Pro Strategies (Network Pro™)
3
3
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
4
4
  This file is part of Network Pro.
5
5
  ========================================================================== */
6
- html{-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{margin:.67em 0;font-size:2em}hr{box-sizing:content-box}pre{font-family:monospace;font-size:1em}a{background-color:#0000}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted buttontext}fieldset{padding:.35em .75em .625em}legend{color:inherit;box-sizing:border-box;white-space:normal;max-width:100%;padding:0;display:table}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details{display:block}summary{display:list-item}template{display:none}html{color:#222;scroll-behavior:smooth;font-size:1em;line-height:1.4}::-moz-selection{text-shadow:none;background:#191919}::selection{text-shadow:none;background:#191919}hr{border:0;border-top:1px solid #ccc;height:1px;margin:1em 0;padding:0;display:block;overflow:visible}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}body{color:#fafafa;background-color:#191919;margin:10px;font-family:Arial,Helvetica,sans-serif}a{text-decoration:none}a:link{color:#ffc627}a:hover,a:active{color:#ffc627;text-decoration:underline}a:focus{color:#191919;background-color:#ffc627}a:visited,a:visited:hover{color:#7f6227}.hidden,[hidden]{display:none!important}.visually-hidden{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visually-hidden.focusable:active,.visually-hidden.focusable:focus{clip:auto;width:auto;height:auto;white-space:inherit;margin:0;position:static;overflow:visible}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}@media print{*,:before,:after{color:#000!important;box-shadow:none!important;text-shadow:none!important;background:#fff!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^=\#]:after,a[href^=javascript\:]:after{content:""}pre{white-space:pre-wrap!important}pre,blockquote{page-break-inside:avoid;border:1px solid #999}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.full-width-section{background-position:50%;background-size:cover;width:100%;max-width:1920px;margin:0 auto}.container{max-width:1200px;margin:0 auto;padding:0 12px}.readable{max-width:900px;margin:0 auto}header,footer{width:100%}header .container,footer .container{max-width:1200px;margin:0 auto;padding:20px 12px}.gh{border-collapse:collapse;border-spacing:0;margin:0 auto}.gh td,.gh th{border-collapse:collapse;word-break:normal;padding:10px 5px;overflow:hidden}.gh .gh-tcell{text-align:center;vertical-align:middle}@media screen and (width<=767px){.gh,.gh col{width:auto!important}.gh-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.soc{border-collapse:collapse;border-spacing:0;margin:0 auto}.soc td,.soc th{border-collapse:collapse;word-break:normal;padding:8px;overflow:hidden}.soc .soc-fa{text-align:center;vertical-align:middle}@media screen and (width<=767px){.soc,.soc col{width:auto!important}.soc-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.foss{border-collapse:collapse;border-spacing:0}.foss td,.foss th{border-collapse:collapse;word-break:normal;padding:10px 5px;overflow:hidden}.foss .foss-cell{text-align:center;vertical-align:middle}@media screen and (width<=767px){.foss,.foss col{width:auto!important}.foss-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}}.bnav{text-align:center;border-collapse:collapse;border-spacing:0;margin:0 auto}.bnav td,.bnav th{text-align:center;vertical-align:middle;word-break:normal;border-style:none;padding:10px;font-size:.875rem;font-weight:700;line-height:1.125rem;overflow:hidden}.bnav .bnav-cell{text-align:center;vertical-align:middle;align-content:center}@media screen and (width<=767px){.bnav,.bnav col{width:auto!important}.bnav-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.bnav2{border-collapse:collapse;border-spacing:0;margin:0 auto}.bnav2 td{word-break:normal;border-style:none;padding:10px;font-size:.875rem;font-weight:700;line-height:1.125rem;overflow:hidden}.bnav2 th{word-break:normal;border-style:none;padding:12px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.bnav2 .bnav2-cell{text-align:center;vertical-align:middle;align-content:center}@media screen and (width<=767px){.bnav2,.bnav2 col{width:auto!important}.bnav2-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.pgp{border-collapse:collapse;border-spacing:0;margin:0 auto}.pgp td{word-break:normal;border-style:none;padding:10px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.pgp th{word-break:normal;border:1px solid #000;padding:10px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.pgp .pgp-col1{text-align:right;vertical-align:middle;padding-right:1rem}.pgp .pgp-col2{text-align:left;vertical-align:middle;padding-left:1rem}@media screen and (width<=767px){.pgp,.pgp col{width:auto!important}.pgp-wrap{-webkit-overflow-scrolling:touch;margin:2rem 0 auto;overflow-x:auto}}.logo{margin-left:auto;margin-right:auto;display:block}.index-title1{text-align:center;font-style:italic;font-weight:700}.index-title2{letter-spacing:-.015em;text-align:center;font-variant:small-caps;font-size:1.25rem;line-height:1.625rem}.index1{letter-spacing:-.035em;text-align:center;font-style:italic;font-weight:700;line-height:2.125rem}.index2{letter-spacing:-.035em;text-align:center;font-variant:small-caps;font-size:1.5rem;line-height:1.75rem}.index3{letter-spacing:-.035em;text-align:center;font-size:1.5rem;line-height:1.75rem}.index4{letter-spacing:-.035em;text-align:center;font-size:1.5rem;line-height:1.75rem;text-decoration:underline}.subhead{letter-spacing:-.035em;font-variant:small-caps;font-size:1.5rem;line-height:1.75rem}.bold{font-weight:700}.emphasis{font-style:italic}.uline{text-decoration:underline}.bolditalic{font-style:italic;font-weight:700}.bquote{border-left:3px solid #9e9e9e;margin-left:30px;padding-left:10px;font-style:italic}.small-text{font-size:.75rem;line-height:1.125rem}.large-text-center{text-align:center;font-size:1.25rem;line-height:1.75rem}.prewrap{white-space:pre-wrap;display:block}.hr-styled{width:75%;margin:auto}.center-text{text-align:center}.copyright{text-align:center;font-size:.75rem;line-height:1.125rem}.visited{color:#7f6227}.center-nav{text-align:center;padding:5px;font-size:.875rem;line-height:1.125rem}.block{resize:none;background:0 0;border:none;border-radius:0;outline:none;width:100%;font-size:.75rem;line-height:1.125rem}.fingerprint{white-space:pre-line;font-weight:700;display:block}.pgp-image{width:125px;height:125px}.spacer{margin:2rem 0}.separator{margin:0 .5rem}
6
+ html{-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{margin:.67em 0;font-size:2em}hr{box-sizing:content-box}pre{font-family:monospace;font-size:1em}a{background-color:#0000}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted buttontext}fieldset{padding:.35em .75em .625em}legend{color:inherit;box-sizing:border-box;white-space:normal;max-width:100%;padding:0;display:table}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details{display:block}summary{display:list-item}template{display:none}html{color:#222;scroll-behavior:smooth;font-size:1em;line-height:1.4}::-moz-selection{text-shadow:none;background:#191919}::selection{text-shadow:none;background:#191919}hr{border:0;border-top:1px solid #ccc;height:1px;margin:1em 0;padding:0;display:block;overflow:visible}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}body{color:#fafafa;background-color:#191919;margin:10px;font-family:Arial,Helvetica,sans-serif}a{text-decoration:none}a:link{color:#ffc627}a:hover,a:active{color:#ffc627;text-decoration:underline}a:focus{color:#191919;background-color:#ffc627}a:visited,a:visited:hover{color:#7f6227}.hidden,[hidden]{display:none!important}.visually-hidden{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visually-hidden.focusable:active,.visually-hidden.focusable:focus{clip:auto;width:auto;height:auto;white-space:inherit;margin:0;position:static;overflow:visible}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}@media print{*,:before,:after{color:#000!important;box-shadow:none!important;text-shadow:none!important;background:#fff!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^=\#]:after,a[href^=javascript\:]:after{content:""}pre{white-space:pre-wrap!important}pre,blockquote{page-break-inside:avoid;border:1px solid #999}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.full-width-section{background-position:50%;background-size:cover;width:100%;max-width:1920px;margin:0 auto}.container{max-width:1200px;margin:0 auto;padding:0 12px}.readable{max-width:900px;margin:0 auto}header,footer{width:100%}header .container,footer .container{max-width:1200px;margin:0 auto;padding:20px 12px}.gh{border-collapse:collapse;border-spacing:0;margin:0 auto}.gh td,.gh th{border-collapse:collapse;word-break:normal;padding:10px 5px;overflow:hidden}.gh .gh-tcell{text-align:center;vertical-align:middle}@media screen and (width<=767px){.gh,.gh col{width:auto!important}.gh-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.soc{border-collapse:collapse;border-spacing:0;margin:0 auto}.soc td,.soc th{border-collapse:collapse;word-break:normal;padding:8px;overflow:hidden}.soc .soc-fa{text-align:center;vertical-align:middle}@media screen and (width<=767px){.soc,.soc col{width:auto!important}.soc-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.foss{border-collapse:collapse;border-spacing:0}.foss td,.foss th{border-collapse:collapse;word-break:normal;padding:10px 5px;overflow:hidden}.foss .foss-cell{text-align:center;vertical-align:middle}@media screen and (width<=767px){.foss,.foss col{width:auto!important}.foss-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}}.bnav{text-align:center;border-collapse:collapse;border-spacing:0;margin:0 auto}.bnav td,.bnav th{text-align:center;vertical-align:middle;word-break:normal;border-style:none;padding:10px;font-size:.875rem;font-weight:700;line-height:1.125rem;overflow:hidden}.bnav .bnav-cell{text-align:center;vertical-align:middle;align-content:center}@media screen and (width<=767px){.bnav,.bnav col{width:auto!important}.bnav-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.bnav2{border-collapse:collapse;border-spacing:0;margin:0 auto}.bnav2 td{word-break:normal;border-style:none;padding:10px;font-size:.875rem;font-weight:700;line-height:1.125rem;overflow:hidden}.bnav2 th{word-break:normal;border-style:none;padding:12px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.bnav2 .bnav2-cell{text-align:center;vertical-align:middle;align-content:center}@media screen and (width<=767px){.bnav2,.bnav2 col{width:auto!important}.bnav2-wrap{-webkit-overflow-scrolling:touch;margin:auto 0;overflow-x:auto}}.pgp{border-collapse:collapse;border-spacing:0;margin:0 auto}.pgp td{word-break:normal;border-style:none;padding:10px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.pgp th{word-break:normal;border:1px solid #000;padding:10px;font-size:.875rem;line-height:1.125rem;overflow:hidden}.pgp .pgp-col1{text-align:right;vertical-align:middle;padding-right:1rem}.pgp .pgp-col2{text-align:left;vertical-align:middle;padding-left:1rem}@media screen and (width<=767px){.pgp,.pgp col{width:auto!important}.pgp-wrap{-webkit-overflow-scrolling:touch;margin:2rem 0 auto;overflow-x:auto}}.logo{margin-left:auto;margin-right:auto;display:block}.index-title1{text-align:center;font-style:italic;font-weight:700}.index-title2{letter-spacing:-.015em;text-align:center;font-variant:small-caps;font-size:1.25rem;line-height:1.625rem}.index1{letter-spacing:-.035em;text-align:center;font-style:italic;font-weight:700;line-height:2.125rem}.index2{letter-spacing:-.035em;text-align:center;font-variant:small-caps;font-size:1.5rem;line-height:1.75rem}.index3{letter-spacing:-.035em;text-align:center;font-size:1.5rem;line-height:1.75rem}.index4{letter-spacing:-.035em;text-align:center;font-size:1.5rem;line-height:1.75rem;text-decoration:underline}.subhead{letter-spacing:-.035em;font-variant:small-caps;font-size:1.5rem;line-height:1.75rem}.bold{font-weight:700}.emphasis{font-style:italic}.uline{text-decoration:underline}.bolditalic{font-style:italic;font-weight:700}.bquote{border-left:3px solid #9e9e9e;margin-left:30px;padding-left:10px;font-style:italic}.small-text{font-size:.75rem;line-height:1.125rem}.large-text-center{text-align:center;font-size:1.25rem;line-height:1.75rem}.prewrap{white-space:pre-wrap;display:block}.hr-styled{width:75%;margin:auto}.center-text{text-align:center}.copyright{text-align:center;font-size:.75rem;line-height:1.125rem}.visited{color:#7f6227}.center-nav{text-align:center;padding:5px;font-size:.875rem;line-height:1.125rem}.block{resize:none;background:0 0;border:none;border-radius:0;outline:none;width:100%;font-size:.75rem;line-height:1.125rem}.fingerprint{white-space:pre-line;font-weight:700;display:block}.pgp-image{width:150px;height:150px}.spacer{margin:2rem 0}.separator{margin:0 .5rem}.emoji{margin-right:8px}.headline{margin-bottom:4px;font-style:italic;font-weight:700;display:block}.label{font-family:inherit;font-weight:700}.description{font-family:inherit;font-style:normal;font-weight:400;display:inline}