@networkpro/web 1.7.0 → 1.7.3
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.
- package/LICENSE.md +2 -2
- package/README.md +60 -16
- package/cspell.json +5 -0
- package/netlify-functions/cspReport.js +8 -0
- package/package.json +5 -5
- package/src/lib/components/foss/FossFeatures.svelte +0 -23
- package/src/lib/components/foss/FossItemContent.svelte +1 -2
- package/src/lib/pages/AboutContent.svelte +50 -32
- package/src/lib/pages/LicenseContent.svelte +18 -22
- package/src/lib/pages/TermsConditionsContent.svelte +1 -4
- package/src/lib/styles/css/default.css +25 -2
- package/src/lib/styles/global.min.css +1 -1
- package/static/assets/bin/contact.vcf +13 -0
- package/static/assets/bin/linksheet.json +8 -0
- package/static/assets/consulting-terms.pdf +0 -0
- package/static/assets/license/CC-BY-4.0-rdfa.xml +741 -0
- package/static/assets/license/CC-BY-4.0.html +884 -0
- package/static/assets/license/CC-BY-4.0.md +367 -0
- package/static/assets/license/CC-BY-4.0.txt +156 -0
- package/static/assets/license/CC-BY-4.0.xml +25 -0
- package/static/assets/license/COPYING-rdfa.xml +1187 -0
- package/static/assets/license/COPYING.html +1062 -0
- package/static/assets/license/COPYING.md +611 -0
- package/static/assets/license/COPYING.odt +0 -0
- package/static/assets/license/COPYING.txt +232 -0
- package/static/disableSw.js +8 -0
- package/static/offline.html +3 -0
- package/static/robots.txt +2 -1
- package/static/sitemap.xml +40 -4
- package/static/styles/brands.min.css +6 -0
- package/static/styles/fontawesome.min.css +9 -0
- package/static/styles/global.min.css +6 -0
- package/static/styles/solid.min.css +6 -0
- package/tests/e2e/app.spec.js +40 -16
- package/tests/e2e/mobile.spec.js +32 -42
- package/tests/e2e/shared/helpers.js +57 -0
- /package/{assets/bin/contact@s.neteng.pro.aexpk → static/assets/bin/contact@s.neteng.pro.asc} +0 -0
- /package/{assets/bin/github@sl.neteng.cc.aexpk → static/assets/bin/github@sl.neteng.cc.asc} +0 -0
- /package/{assets/bin/support@neteng.pro.aexpk → static/assets/bin/support@neteng.pro.asc} +0 -0
package/LICENSE.md
CHANGED
|
@@ -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://
|
|
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™ (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://
|
|
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™ 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
|
@@ -31,10 +31,14 @@ All infrastructure and data flows are designed with **maximum transparency, self
|
|
|
31
31
|
```bash
|
|
32
32
|
.
|
|
33
33
|
├── .github/workflows/ # CI workflows and automation
|
|
34
|
-
├── .vscode/
|
|
34
|
+
├── .vscode/
|
|
35
|
+
│ ├── customData.json # Custom CSS data for FontAwesome icons
|
|
36
|
+
│ ├── extensions.json # Recommended VSCodium / VS Code extensions
|
|
37
|
+
│ ├── extensions.jsonc # Commented version of extensions.json for reference
|
|
38
|
+
│ └── settings.json # User settings for VSCodium / VS Code
|
|
35
39
|
├── netlify-functions/
|
|
36
40
|
│ └── cspReport.js # Serverless function to receive and log CSP violation reports
|
|
37
|
-
├── scripts/ #
|
|
41
|
+
├── scripts/ # General utility scripts
|
|
38
42
|
├── src/
|
|
39
43
|
│ ├── lib/ # Reusable components, styles, utilities
|
|
40
44
|
│ ├── routes/ # SvelteKit routes (+page.svelte, +page.server.js)
|
|
@@ -43,13 +47,33 @@ All infrastructure and data flows are designed with **maximum transparency, self
|
|
|
43
47
|
│ ├── app.html # SvelteKit entry HTML with CSP/meta/bootentry
|
|
44
48
|
│ └── service-worker.js # Custom Service Worker
|
|
45
49
|
├── static/ # Static assets served at root
|
|
50
|
+
│ ├── manifest.json # Manifest file for PWA configuration
|
|
51
|
+
│ ├── robots.txt # Instructions for web robots
|
|
52
|
+
│ └── sitemap.xml # Sitemap for search engines
|
|
46
53
|
├── tests/
|
|
47
54
|
│ ├── e2e/ # End-to-end Playwright tests
|
|
48
55
|
│ └── unit/ # Vite unit tests
|
|
56
|
+
├── _redirects # Netlify redirects
|
|
49
57
|
├── netlify.toml # Netlify configuration
|
|
50
58
|
└── ...
|
|
51
59
|
```
|
|
52
60
|
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
### E2E Test Structure
|
|
64
|
+
|
|
65
|
+
End-to-end tests are located in `tests/e2e/` and organized by feature or route:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
tests/
|
|
69
|
+
├── e2e/
|
|
70
|
+
│ ├── app.spec.js # Desktop and mobile route tests
|
|
71
|
+
│ ├── mobile.spec.js # Mobile-specific assertions
|
|
72
|
+
│ └── shared/
|
|
73
|
+
│ └── helpers.js # Shared test utilities (e.g., getFooter, setDesktopView, setMobileView)
|
|
74
|
+
└── ...
|
|
75
|
+
```
|
|
76
|
+
|
|
53
77
|
---
|
|
54
78
|
|
|
55
79
|
## 🛠 Getting Started
|
|
@@ -180,7 +204,7 @@ Located at `src/hooks.server.js`, this file is responsible for injecting dynamic
|
|
|
180
204
|
To re-enable nonce generation for inline scripts in the future:
|
|
181
205
|
|
|
182
206
|
1. Uncomment the nonce generation and injection logic in `hooks.server.js`.
|
|
183
|
-
2. Add `nonce="
|
|
207
|
+
2. Add `nonce="__cspNonce__"` to inline `<script>` blocks in `app.html` or route templates.
|
|
184
208
|
|
|
185
209
|
> 💡 The `[headers]` block in `netlify.toml` has been deprecated — all headers are now set dynamically from within SvelteKit.
|
|
186
210
|
|
|
@@ -202,15 +226,15 @@ Located at `src/hooks.client.ts`, it is automatically used by the SvelteKit runt
|
|
|
202
226
|
To receive and inspect CSP violation reports in development or production, the repo includes a Netlify-compatible function at:
|
|
203
227
|
|
|
204
228
|
```bash
|
|
205
|
-
netlify-functions/
|
|
229
|
+
netlify-functions/cspReport.js
|
|
206
230
|
```
|
|
207
231
|
|
|
208
|
-
This function receives reports sent to `/functions/
|
|
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).
|
|
209
233
|
|
|
210
234
|
Make sure to include the `report-uri` directive in your CSP header:
|
|
211
235
|
|
|
212
236
|
```bash
|
|
213
|
-
Content-Security-Policy: ...; report-uri /.netlify/functions/
|
|
237
|
+
Content-Security-Policy: ...; report-uri /.netlify/functions/cspReport;
|
|
214
238
|
```
|
|
215
239
|
|
|
216
240
|
|
|
@@ -244,6 +268,24 @@ This project uses a mix of automated performance, accessibility, and end-to-end
|
|
|
244
268
|
|
|
245
269
|
|
|
246
270
|
|
|
271
|
+
### E2E Setup
|
|
272
|
+
|
|
273
|
+
Playwright is included in `devDependencies` and installed automatically with:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
npm install
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
To install browser dependencies (required once):
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
npx playwright install
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
> This downloads the browser binaries (Chromium, Firefox, WebKit) used for testing. You only need to run this once per machine or after a fresh clone.
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
|
|
247
289
|
### Running Tests
|
|
248
290
|
|
|
249
291
|
Local testing via Vitest and Playwright:
|
|
@@ -254,9 +296,11 @@ npm run test:server # Run server-side unit tests with Vitest
|
|
|
254
296
|
npm run test:all # Run full test suite
|
|
255
297
|
npm run test:watch # Watch mode for client tests
|
|
256
298
|
npm run test:coverage # Collect code coverage reports
|
|
257
|
-
npm run test:e2e # Runs Playwright E2E tests
|
|
299
|
+
npm run test:e2e # Runs Playwright E2E tests (with one retry on failure)
|
|
258
300
|
```
|
|
259
301
|
|
|
302
|
+
> Playwright will retry failed tests once `(--retries=1)` to reduce false negatives from transient flakiness (network, render delay, etc.).
|
|
303
|
+
|
|
260
304
|
Audit your app using Lighthouse:
|
|
261
305
|
|
|
262
306
|
```bash
|
|
@@ -399,15 +443,15 @@ The following CLI commands are available via `npm run <script>` or `pnpm run <sc
|
|
|
399
443
|
|
|
400
444
|
<!-- markdownlint-enable MD024 -->
|
|
401
445
|
|
|
402
|
-
| Script | Description
|
|
403
|
-
| --------------- |
|
|
404
|
-
| `test` | Alias for `test:all`
|
|
405
|
-
| `test:all` | Run both client and server test suites
|
|
406
|
-
| `test:client` | Run client tests with Vitest
|
|
407
|
-
| `test:server` | Run server-side tests with Vitest
|
|
408
|
-
| `test:watch` | Watch mode for client tests
|
|
409
|
-
| `test:coverage` | Collect coverage from both client and server
|
|
410
|
-
| `test:e2e` |
|
|
446
|
+
| Script | Description |
|
|
447
|
+
| --------------- | ------------------------------------------------------ |
|
|
448
|
+
| `test` | Alias for `test:all` |
|
|
449
|
+
| `test:all` | Run both client and server test suites |
|
|
450
|
+
| `test:client` | Run client tests with Vitest |
|
|
451
|
+
| `test:server` | Run server-side tests with Vitest |
|
|
452
|
+
| `test:watch` | Watch mode for client tests |
|
|
453
|
+
| `test:coverage` | Collect coverage from both client and server |
|
|
454
|
+
| `test:e2e` | Runs E2E tests with up to 1 automatic retry on failure |
|
|
411
455
|
|
|
412
456
|
---
|
|
413
457
|
|
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",
|
|
@@ -30,12 +31,16 @@
|
|
|
30
31
|
"noreferrer",
|
|
31
32
|
"nosniff",
|
|
32
33
|
"nosw",
|
|
34
|
+
"npmjs",
|
|
33
35
|
"obtainium",
|
|
34
36
|
"posthog",
|
|
35
37
|
"SIEM",
|
|
38
|
+
"SPDY",
|
|
36
39
|
"stylelintignore",
|
|
37
40
|
"Subsite",
|
|
38
41
|
"subsites",
|
|
42
|
+
"Supercookie",
|
|
43
|
+
"supercookies",
|
|
39
44
|
"urlcheck",
|
|
40
45
|
"vcard",
|
|
41
46
|
"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.
|
|
7
|
+
"version": "1.7.3",
|
|
8
8
|
"description": "Locking Down Networks, Unlocking Confidence | Security, Networking, Privacy — Network Pro Strategies",
|
|
9
9
|
"keywords": [
|
|
10
10
|
"advisory",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"test:server": "vitest --config vitest.config.server.js",
|
|
61
61
|
"test:watch": "vitest --config vitest.config.client.js --watch",
|
|
62
62
|
"test:coverage": "npm run test:client -- --run --coverage && npm run test:server -- --run --coverage",
|
|
63
|
-
"test:e2e": "npx playwright test",
|
|
63
|
+
"test:e2e": "npx playwright test --retries=1",
|
|
64
64
|
"lint": "eslint . --ext .mjs,.js,.svelte",
|
|
65
65
|
"lint:fix": "eslint . --ext .mjs,.js,.svelte --fix",
|
|
66
66
|
"lint:jsdoc": "eslint . --ext .js,.mjs,.svelte --max-warnings=0",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"nodemailer": "^7.0.3",
|
|
81
81
|
"posthog-js": "^1.248.1",
|
|
82
82
|
"semver": "^7.7.2",
|
|
83
|
-
"svelte": "5.33.
|
|
83
|
+
"svelte": "5.33.10"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@eslint/compat": "^1.2.9",
|
|
@@ -106,10 +106,10 @@
|
|
|
106
106
|
"markdownlint-cli2": "^0.18.1",
|
|
107
107
|
"mdsvex": "^0.12.6",
|
|
108
108
|
"playwright": "^1.52.0",
|
|
109
|
-
"postcss": "^8.5.
|
|
109
|
+
"postcss": "^8.5.4",
|
|
110
110
|
"prettier": "^3.5.3",
|
|
111
111
|
"prettier-plugin-svelte": "^3.4.0",
|
|
112
|
-
"stylelint": "^16.
|
|
112
|
+
"stylelint": "^16.20.0",
|
|
113
113
|
"stylelint-config-html": "^1.1.0",
|
|
114
114
|
"stylelint-config-recommended": "^16.0.0",
|
|
115
115
|
"stylelint-order": "^7.0.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
|
-
|
|
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;"
|
|
@@ -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: ["
|
|
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: ["
|
|
85
|
+
fingerprint: ["DF118BAA6C2D9DCDEBDC", "2DDCF99373499495F957"],
|
|
86
86
|
},
|
|
87
87
|
];
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
91
|
-
* @
|
|
92
|
-
*
|
|
93
|
-
*
|
|
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
|
-
|
|
96
|
+
|
|
97
|
+
/** @type {ContactAssets} */
|
|
98
|
+
const contactAssets = {
|
|
99
|
+
vcf: "/assets/bin/contact.vcf",
|
|
97
100
|
qrSrc: vcfSrc,
|
|
98
|
-
|
|
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
|
|
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
|
|
234
|
-
|
|
235
|
-
|
|
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>
|
|
252
|
-
|
|
253
|
-
|
|
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={
|
|
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
|
-
{
|
|
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
|
-
|
|
224
|
-
|
|
225
|
-
target={constants.
|
|
223
|
+
href="/assets/license/CC-BY-4.0.html"
|
|
224
|
+
download
|
|
225
|
+
target={constants.targetBlank}>HTML</a>
|
|
226
226
|
|
|
|
227
227
|
<a
|
|
228
|
-
|
|
229
|
-
|
|
228
|
+
href="/assets/license/CC-BY-4.0.md"
|
|
229
|
+
download
|
|
230
230
|
target={constants.targetBlank}>Markdown</a>
|
|
231
231
|
|
|
|
232
232
|
<a
|
|
233
|
-
|
|
234
|
-
|
|
233
|
+
href="/assets/license/CC-BY-4.0.txt"
|
|
234
|
+
download
|
|
235
235
|
target={constants.targetBlank}>Text</a>
|
|
236
236
|
|
|
|
237
237
|
<a
|
|
238
|
-
|
|
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
|
-
|
|
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
|
-
|
|
329
|
-
|
|
330
|
-
target={constants.
|
|
326
|
+
href="/assets/license/COPYING.html"
|
|
327
|
+
download
|
|
328
|
+
target={constants.targetBlank}>HTML</a>
|
|
331
329
|
|
|
|
332
330
|
<a
|
|
333
|
-
|
|
334
|
-
|
|
331
|
+
href="/assets/license/COPYING.md"
|
|
332
|
+
download
|
|
335
333
|
target={constants.targetBlank}>Markdown</a>
|
|
336
334
|
|
|
|
337
335
|
<a
|
|
338
|
-
|
|
339
|
-
|
|
336
|
+
href="/assets/license/COPYING.txt"
|
|
337
|
+
download
|
|
340
338
|
target={constants.targetBlank}>Text</a>
|
|
341
339
|
|
|
|
342
340
|
<a
|
|
343
|
-
|
|
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
|
-
|
|
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:
|
|
467
|
-
height:
|
|
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:
|
|
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}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
BEGIN:VCARD
|
|
2
|
+
VERSION:3.0
|
|
3
|
+
FN:Scott Lopez
|
|
4
|
+
N:Lopez;Scott
|
|
5
|
+
TEL;TYPE=WORK,PREF=1:(623) 252-4350
|
|
6
|
+
EMAIL;TYPE=HOME:github@sl.neteng.cc
|
|
7
|
+
EMAIL;TYPE=WORK:support@neteng.pro
|
|
8
|
+
EMAIL;TYPE=Secure:business@s.neteng.pro
|
|
9
|
+
ADR;TYPE=WORK:;;Peoria\, AZ 85382\nUS
|
|
10
|
+
ORG:Network Pro Strategies
|
|
11
|
+
TITLE:Security Consultant
|
|
12
|
+
URL:https://netwk.pro
|
|
13
|
+
END:VCARD
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "fe.linksheet.nightly",
|
|
3
|
+
"url": "https://github.com/LinkSheet/nightly",
|
|
4
|
+
"author": "1fexd",
|
|
5
|
+
"name": "LinkSheet Nightly",
|
|
6
|
+
"preferredApkIndex": 0,
|
|
7
|
+
"additionalSettings": "{\"includePrereleases\":true,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"dontSortReleasesList\":false,\"useLatestAssetDateAsReleaseDate\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"LinkSheet.Nightly\",\"invertAPKFilter\":true,\"autoApkFilterByArch\":true,\"appName\":\"LinkSheet Nightly\",\"shizukuPretendToBeGooglePlay\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"Restore link control on Android 12+\",\"appAuthor\":\"1fexd\"}"
|
|
8
|
+
}
|
|
Binary file
|