@networkpro/web 1.15.4 → 1.17.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.
- package/.github/workflows/build-and-publish.yml +19 -12
- package/.github/workflows/lighthouse.yml +1 -1
- package/.github/workflows/meta-check.yml +34 -0
- package/.github/workflows/playwright.yml +3 -3
- package/.github/workflows/publish-test.yml +3 -3
- package/.github/workflows/templates/publish.template.yml +3 -3
- package/.node-version +1 -1
- package/.nvmrc +1 -1
- package/.svelte-kit/tsconfig.json +3 -0
- package/CHANGELOG.md +120 -1
- package/CODE_OF_CONDUCT.md +173 -0
- package/CONTRIBUTING.md +214 -0
- package/LICENSE.md +3 -3
- package/README.md +21 -9
- package/package.json +24 -25
- package/playwright.config.js +2 -2
- package/src/app.html +2 -2
- package/src/lib/components/Badges.svelte +2 -1
- package/src/lib/components/Logo.svelte +6 -5
- package/src/lib/components/layout/Footer.svelte +4 -18
- package/src/lib/pages/LicenseContent.svelte +6 -16
- package/src/lib/styles/css/default.css +12 -0
- package/src/lib/styles/css/style.css +5 -3
- package/src/lib/styles/global.min.css +1 -1
- package/src/routes/consultation/+page.svelte +1 -1
- package/src/routes/pgp/[key]/+server.js +1 -1
- package/stylelint.config.js +6 -0
- package/tests/e2e/app.spec.js +12 -31
- package/tests/e2e/mobile.spec.js +3 -3
- package/tests/meta/meta.test.js +40 -0
- package/tests/unit/server/internal/auditCoverage.test.js +2 -2
- package/tests/unit/server/meta.test.js +30 -0
- package/src/routes/example.svx +0 -9
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
<!-- =========================================================================
|
|
2
|
+
CONTRIBUTING.md
|
|
3
|
+
|
|
4
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
6
|
+
This file is part of Network Pro.
|
|
7
|
+
========================================================================== -->
|
|
8
|
+
|
|
9
|
+
<a name="top"></a>
|
|
10
|
+
|
|
11
|
+
[SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info/):
|
|
12
|
+
`CC-BY-4.0 OR GPL-3.0-or-later`
|
|
13
|
+
|
|
14
|
+
# 🤝 Contributing to Network Pro Strategies
|
|
15
|
+
|
|
16
|
+
**Network Pro Strategies**
|
|
17
|
+
**Effective Date:** July 31, 2025
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Thanks for your interest in improving **Network Pro Strategies** (Network Pro™)! We're always looking for collaborators and contributors of all skill levels. This guide will help you get started quickly and effectively.
|
|
22
|
+
|
|
23
|
+
Following these guidelines helps us all work together efficiently and respectfully. 🙌
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 🐛 Using the Issue Tracker
|
|
28
|
+
|
|
29
|
+
Use the [issue tracker](https://github.com/netwk-pro/netwk-pro.github.io/issues) for:
|
|
30
|
+
|
|
31
|
+
- Reporting [bugs](#bug-reports)
|
|
32
|
+
- Submitting [feature requests](#feature-requests)
|
|
33
|
+
- Proposing [pull requests](#pull-requests)
|
|
34
|
+
|
|
35
|
+
🚫 Please do **not** use issues for general support — instead, head to:
|
|
36
|
+
|
|
37
|
+
- [Stack Overflow Teams](https://stack.neteng.pro/)
|
|
38
|
+
- [GitHub Discussions](https://discuss.neteng.pro)
|
|
39
|
+
- [Discord](https://discord.neteng.pro)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
<section id="bug-reports">
|
|
44
|
+
|
|
45
|
+
## 🐞 Bug Reports
|
|
46
|
+
|
|
47
|
+
A bug is a clear, reproducible issue in the code. High-quality reports help us fix problems faster.
|
|
48
|
+
|
|
49
|
+
### ✅ A good bug report includes
|
|
50
|
+
|
|
51
|
+
- A **descriptive title**
|
|
52
|
+
- Steps to reproduce
|
|
53
|
+
- Your environment (OS, browser, version)
|
|
54
|
+
- Expected vs actual behavior
|
|
55
|
+
- Links to a minimal reproducible case (if possible)
|
|
56
|
+
|
|
57
|
+
_Example_:
|
|
58
|
+
|
|
59
|
+
<!-- markdownlint-disable MD042 -->
|
|
60
|
+
|
|
61
|
+
> **Title**: Checkbox toggle fails on Safari 17
|
|
62
|
+
> Steps:
|
|
63
|
+
>
|
|
64
|
+
> 1. Visit page X
|
|
65
|
+
> 2. Click toggle
|
|
66
|
+
> 3. Observe that...
|
|
67
|
+
> Expected: ...
|
|
68
|
+
> Actual: ...
|
|
69
|
+
> [Live example](#)
|
|
70
|
+
|
|
71
|
+
<!-- markdownlint-enable MD042 -->
|
|
72
|
+
|
|
73
|
+
</section>
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
<sub>[Back to top](#top)</sub>
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
<section id="feature-requests">
|
|
82
|
+
|
|
83
|
+
## ✨ Feature Requests
|
|
84
|
+
|
|
85
|
+
Feature requests are welcome — just make sure it aligns with the project’s goals.
|
|
86
|
+
|
|
87
|
+
Before posting:
|
|
88
|
+
|
|
89
|
+
- Search for similar requests
|
|
90
|
+
- Clearly describe the problem it solves
|
|
91
|
+
- Explain the use case and who benefits
|
|
92
|
+
|
|
93
|
+
Strong proposals help us prioritize.
|
|
94
|
+
|
|
95
|
+
</section>
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
<sub>[Back to top](#top)</sub>
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
<section id="pull-requests">
|
|
104
|
+
|
|
105
|
+
## 🔁 Pull Requests
|
|
106
|
+
|
|
107
|
+
Well-scoped, well-documented pull requests are the lifeblood of open-source.
|
|
108
|
+
|
|
109
|
+
### ⚠️ Ask First
|
|
110
|
+
|
|
111
|
+
Before large PRs (new features, refactors, dependency upgrades), please check with maintainers first.
|
|
112
|
+
|
|
113
|
+
### 📋 Steps
|
|
114
|
+
|
|
115
|
+
1. **Fork the repo & set remotes**:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
git clone https://github.com/<your-username>/netwk-pro.github.io.git
|
|
119
|
+
cd netwk-pro.github.io
|
|
120
|
+
git remote add upstream https://github.com/netwk-pro/netwk-pro.github.io.git
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
2. **Stay Updated**
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
git checkout master
|
|
127
|
+
git pull upstream master
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
3. **Create a topic branch:**
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
git checkout -b my-feature
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
4. **Install & test locally:**
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
npm install
|
|
140
|
+
npm run checkout
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
5. **Make your changes**
|
|
144
|
+
|
|
145
|
+
(and commit them in logical chunks with good commit messages).
|
|
146
|
+
|
|
147
|
+
6. **Build:**
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
npm run build
|
|
151
|
+
git add build/
|
|
152
|
+
git commit -m "Build: update assets"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
7. **Push and open a PR:**
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
git push origin my-feature
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Open your PR with a clear title, description, and reference the related issue (if any).
|
|
162
|
+
|
|
163
|
+
</section>
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
<sub>[Back to top](#top)</sub>
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## ✅ Coding & Style Notes
|
|
172
|
+
|
|
173
|
+
- Use the defined code style (Prettier, ESLint, Stylelint, markdownlint)
|
|
174
|
+
- Avoid unrelated changes in the same PR
|
|
175
|
+
- Keep PRs focused and test-covered when appropriate
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
## 🔐 Legal Notice
|
|
180
|
+
|
|
181
|
+
By submitting a pull request, you agree to license your contributions under:
|
|
182
|
+
|
|
183
|
+
- [CC BY 4.0](https://netwk.pro/license#cc-by)
|
|
184
|
+
- [GNU GPL 3.0 or later](https://netwk.pro/license#gnu-gpl)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
<sub>[Back to top](#top)</sub>
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
_Thanks again for your contribution and for being part of the Network Pro™ community!_
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
<div style="font-size: 12px; font-weight: bold; text-align: center;">
|
|
197
|
+
|
|
198
|
+
[Home](https://netwk.pro) | [Terms of Use](https://netwk.pro/terms-of-use)
|
|
199
|
+
[Privacy Policy](https://netwk.pro/privacy) | [Legal](https://netwk.pro/license)
|
|
200
|
+
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
<span style="font-size: 12px; text-align: center;">
|
|
206
|
+
|
|
207
|
+
Copyright © 2025
|
|
208
|
+
**[Network Pro Strategies](https://netwk.pro/)** (Network Pro™)
|
|
209
|
+
|
|
210
|
+
Network Pro™, the shield logo, and the "Locking Down Networks...™" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
|
|
211
|
+
|
|
212
|
+
Licensed under **[CC BY 4.0](https://netwk.pro/license#cc-by)** and the **[GNU GPL](https://netwk.pro/license#gnu-gpl)**, as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
213
|
+
|
|
214
|
+
</span>
|
package/LICENSE.md
CHANGED
|
@@ -51,7 +51,7 @@ This document is provided for convenience only. In the event of any discrepancy,
|
|
|
51
51
|
|
|
52
52
|
## 1. Copyright
|
|
53
53
|
|
|
54
|
-
All content—including text, software, logos, graphics, documentation, and other materials—provided by **Network Pro Strategies** (“Network Pro
|
|
54
|
+
All content—including text, software, logos, graphics, documentation, and other materials—provided by **Network Pro Strategies** (“Network Pro™”, “Company”, “Licensor”) is protected by U.S. and international copyright laws.
|
|
55
55
|
|
|
56
56
|
Copyright © 2025 **[Network Pro Strategies](https://netwk.pro)** (Network Pro™)
|
|
57
57
|
|
|
@@ -113,7 +113,7 @@ This work is dual-licensed under:
|
|
|
113
113
|
|
|
114
114
|
## 7. Creative Commons License (CC BY 4.0)
|
|
115
115
|
|
|
116
|
-
<sup>
|
|
116
|
+
<sup>View / Download: [HTML](https://netwk.pro/bin/license/CC-BY-4.0.html) | [Markdown](https://netwk.pro/bin/license/CC-BY-4.0.md) | [Text](https://netwk.pro/bin/license/CC-BY-4.0.txt) | [RDFa](https://netwk.pro/bin/license/CC-BY-4.0-rdfa.xml) | [XMP](https://netwk.pro/bin/license/CC-BY-4.0.xml)</sup>
|
|
117
117
|
|
|
118
118
|
Network Pro™ (the "Licensed Material") is licensed under **Creative
|
|
119
119
|
Commons Attribution 4.0 International** (CC BY 4.0)
|
|
@@ -139,7 +139,7 @@ Permissions beyond the scope of this License—or instead of those permitted by
|
|
|
139
139
|
|
|
140
140
|
## 8. GNU General Public License (GPL)
|
|
141
141
|
|
|
142
|
-
<sup>
|
|
142
|
+
<sup>View / Download: [HTML](https://netwk.pro/bin/license/COPYING.html) | [Markdown](https://netwk.pro/bin/license/COPYING.md) | [Text](https://netwk.pro/bin/license/COPYING.txt) | [RDFa](https://netwk.pro/bin/license/COPYING-rdfa.xml) | [ODT](https://netwk.pro/bin/license/COPYING.odt)</sup>
|
|
143
143
|
|
|
144
144
|
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.
|
|
145
145
|
|
package/README.md
CHANGED
|
@@ -309,18 +309,30 @@ https://netwk.pro/?debug=true
|
|
|
309
309
|
|
|
310
310
|
## 📣 CSP Report Handler
|
|
311
311
|
|
|
312
|
-
|
|
312
|
+
This project integrates with a dedicated CSP reporting endpoint, implemented as a [Netlify Edge Function](https://docs.netlify.com/edge-functions/overview/) and hosted separately at:
|
|
313
313
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
```
|
|
314
|
+
- <https://csp.netwk.pro/.netlify/functions/csp-report>
|
|
315
|
+
- Source: [netwk-pro/csp-endpoint](https://github.com/netwk-pro/csp-endpoint)
|
|
317
316
|
|
|
318
|
-
|
|
317
|
+
The endpoint receives Content Security Policy (CSP) violation reports and logs details for inspection. High-risk violations (e.g., `script-src`, `form-action`) also trigger real-time alerts via [`ntfy`](https://ntfy.sh/). You can extend this further by integrating with SIEM platforms, logging tools, or notification systems.
|
|
319
318
|
|
|
320
|
-
|
|
319
|
+
### Usage
|
|
321
320
|
|
|
322
|
-
|
|
323
|
-
|
|
321
|
+
To enable reporting, make sure your CSP headers include both the legacy `report-uri` and the modern `report-to` directives.
|
|
322
|
+
This project’s `hooks.server.js` already configures both, along with the required `Report-To` header:
|
|
323
|
+
|
|
324
|
+
```http
|
|
325
|
+
# Example response headers
|
|
326
|
+
Content-Security-Policy: ...; report-uri https://csp.netwk.pro/.netlify/functions/csp-report; report-to csp-endpoint;
|
|
327
|
+
|
|
328
|
+
Report-To: {
|
|
329
|
+
"group": "csp-endpoint",
|
|
330
|
+
"max_age": 10886400,
|
|
331
|
+
"endpoints": [
|
|
332
|
+
{ "url": "https://csp.netwk.pro/.netlify/functions/csp-report" }
|
|
333
|
+
],
|
|
334
|
+
"include_subdomains": true
|
|
335
|
+
}
|
|
324
336
|
```
|
|
325
337
|
|
|
326
338
|
</section>
|
|
@@ -494,7 +506,7 @@ _Designed for professionals. Hardened for privacy. Built with intent._
|
|
|
494
506
|
Copyright © 2025
|
|
495
507
|
**[Network Pro Strategies](https://netwk.pro) (Network Pro™)**
|
|
496
508
|
|
|
497
|
-
Network Pro™, the shield logo, and the "Locking Down Networks
|
|
509
|
+
Network Pro™, the shield logo, and the "Locking Down Networks...™" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
|
|
498
510
|
|
|
499
511
|
Licensed under **[CC BY 4.0](https://netwk.pro/license#cc-by)** and the **[GNU GPL](https://netwk.pro/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.
|
|
500
512
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@networkpro/web",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.17.0",
|
|
5
5
|
"description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"advisory",
|
|
@@ -78,47 +78,46 @@
|
|
|
78
78
|
"postinstall": "npm run check:node"
|
|
79
79
|
},
|
|
80
80
|
"dependencies": {
|
|
81
|
-
"dompurify": "^3.2.
|
|
82
|
-
"posthog-js": "^1.
|
|
81
|
+
"dompurify": "^3.2.7",
|
|
82
|
+
"posthog-js": "^1.266.0",
|
|
83
83
|
"semver": "^7.7.2",
|
|
84
|
-
"svelte": "5.
|
|
84
|
+
"svelte": "5.39.1"
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
|
-
"@eslint/compat": "^1.3.
|
|
88
|
-
"@eslint/js": "^9.
|
|
87
|
+
"@eslint/compat": "^1.3.2",
|
|
88
|
+
"@eslint/js": "^9.35.0",
|
|
89
89
|
"@lhci/cli": "^0.15.1",
|
|
90
|
-
"@playwright/test": "^1.
|
|
91
|
-
"@sveltejs/adapter-netlify": "^5.
|
|
92
|
-
"@sveltejs/kit": "2.
|
|
93
|
-
"@sveltejs/vite-plugin-svelte": "^6.
|
|
94
|
-
"@testing-library/jest-dom": "^6.
|
|
90
|
+
"@playwright/test": "^1.55.0",
|
|
91
|
+
"@sveltejs/adapter-netlify": "^5.2.3",
|
|
92
|
+
"@sveltejs/kit": "2.42.1",
|
|
93
|
+
"@sveltejs/vite-plugin-svelte": "^6.2.0",
|
|
94
|
+
"@testing-library/jest-dom": "^6.8.0",
|
|
95
95
|
"@testing-library/svelte": "^5.2.8",
|
|
96
96
|
"@vitest/coverage-v8": "^3.2.4",
|
|
97
97
|
"autoprefixer": "^10.4.21",
|
|
98
|
-
"browserslist": "^4.
|
|
99
|
-
"eslint": "^9.
|
|
98
|
+
"browserslist": "^4.26.2",
|
|
99
|
+
"eslint": "^9.35.0",
|
|
100
100
|
"eslint-config-prettier": "^10.1.8",
|
|
101
|
-
"eslint-plugin-jsdoc": "^
|
|
102
|
-
"eslint-plugin-svelte": "^3.
|
|
103
|
-
"globals": "^16.
|
|
104
|
-
"jsdom": "
|
|
101
|
+
"eslint-plugin-jsdoc": "^58.1.1",
|
|
102
|
+
"eslint-plugin-svelte": "^3.12.3",
|
|
103
|
+
"globals": "^16.4.0",
|
|
104
|
+
"jsdom": "26.1.0",
|
|
105
105
|
"lightningcss": "^1.30.1",
|
|
106
106
|
"markdownlint": "^0.38.0",
|
|
107
107
|
"markdownlint-cli2": "^0.18.1",
|
|
108
|
-
"
|
|
109
|
-
"playwright": "^1.54.1",
|
|
108
|
+
"playwright": "^1.55.0",
|
|
110
109
|
"postcss": "^8.5.6",
|
|
111
110
|
"prettier": "^3.6.2",
|
|
112
111
|
"prettier-plugin-svelte": "^3.4.0",
|
|
113
|
-
"stylelint": "^16.
|
|
112
|
+
"stylelint": "^16.24.0",
|
|
114
113
|
"stylelint-config-html": "^1.1.0",
|
|
115
|
-
"stylelint-config-recommended": "^
|
|
114
|
+
"stylelint-config-recommended": "^17.0.0",
|
|
116
115
|
"stylelint-order": "^7.0.0",
|
|
117
|
-
"svelte-check": "^4.3.
|
|
118
|
-
"svelte-eslint-parser": "^1.3.
|
|
116
|
+
"svelte-check": "^4.3.1",
|
|
117
|
+
"svelte-eslint-parser": "^1.3.2",
|
|
119
118
|
"svelte-preprocess": "^6.0.3",
|
|
120
|
-
"typescript": "^5.
|
|
121
|
-
"vite": "^7.
|
|
119
|
+
"typescript": "^5.9.2",
|
|
120
|
+
"vite": "^7.1.5",
|
|
122
121
|
"vite-plugin-lightningcss": "^0.0.5",
|
|
123
122
|
"vite-tsconfig-paths": "^5.1.4",
|
|
124
123
|
"vitest": "^3.2.4"
|
package/playwright.config.js
CHANGED
|
@@ -33,7 +33,7 @@ export default defineConfig({
|
|
|
33
33
|
|
|
34
34
|
/* Shared settings for all projects */
|
|
35
35
|
use: {
|
|
36
|
-
baseURL: 'http://localhost:4173
|
|
36
|
+
baseURL: 'http://localhost:4173', // Update to use preview server URL
|
|
37
37
|
trace: 'on-first-retry',
|
|
38
38
|
timeout: 60000, // Default action timeout of 60 seconds for each step
|
|
39
39
|
navigationTimeout: 60000, // Timeout for navigation operations
|
|
@@ -83,7 +83,7 @@ export default defineConfig({
|
|
|
83
83
|
/* Run your local preview server before starting the tests */
|
|
84
84
|
webServer: {
|
|
85
85
|
command: 'npm run preview', // Use preview server
|
|
86
|
-
url: 'http://localhost:4173
|
|
86
|
+
url: 'http://localhost:4173', // Match the preview server URL
|
|
87
87
|
reuseExistingServer: !process.env.CI,
|
|
88
88
|
timeout: 60 * 1000, // wait up to 60 seconds for preview to be ready
|
|
89
89
|
},
|
package/src/app.html
CHANGED
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
content="bx4ham0zkpvzztzu213bhpt76m9siq" />
|
|
64
64
|
<!-- cspell:enable -->
|
|
65
65
|
|
|
66
|
-
<meta name="generator" content="SvelteKit 2.
|
|
66
|
+
<meta name="generator" content="SvelteKit 2.42.1" />
|
|
67
67
|
|
|
68
68
|
<script src="/disableSw.js"></script>
|
|
69
69
|
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
<body>
|
|
73
73
|
<div id="svelte">%sveltekit.body%</div>
|
|
74
74
|
|
|
75
|
-
<!-- LinkedIn Insight Tag removed 2025-05-26
|
|
75
|
+
<!-- LinkedIn Insight Tag removed 2025-05-26 -->
|
|
76
76
|
|
|
77
77
|
<!-- cspell:ignore preconnects webfonts lintrk -->
|
|
78
78
|
</body>
|
|
@@ -60,15 +60,15 @@ This file is part of Network Pro.
|
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* Width of the logo in pixels.
|
|
63
|
-
* @type {
|
|
63
|
+
* @type {string}
|
|
64
64
|
*/
|
|
65
|
-
export let width =
|
|
65
|
+
export let width = '250px';
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
68
|
* Height of the logo in pixels.
|
|
69
|
-
* @type {
|
|
69
|
+
* @type {string}
|
|
70
70
|
*/
|
|
71
|
-
export let height =
|
|
71
|
+
export let height = '250px';
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
74
|
* Fetch priority for the logo image.
|
|
@@ -93,7 +93,8 @@ This file is part of Network Pro.
|
|
|
93
93
|
src={logoPng}
|
|
94
94
|
{alt}
|
|
95
95
|
{fetchpriority}
|
|
96
|
-
style
|
|
96
|
+
style:width
|
|
97
|
+
style:height />
|
|
97
98
|
</picture>
|
|
98
99
|
|
|
99
100
|
{#if showSlogan}
|
|
@@ -117,32 +117,18 @@ This file is part of Network Pro.
|
|
|
117
117
|
Licensed under
|
|
118
118
|
{#each licenses as license, index}
|
|
119
119
|
{#if license.type === 'CC BY 4.0'}
|
|
120
|
-
<a
|
|
121
|
-
href={license.url}
|
|
122
|
-
target={PAGE.SELF}
|
|
123
|
-
rel={relLicense}
|
|
124
|
-
style="display: inline-block">
|
|
120
|
+
<a href={license.url} target={PAGE.SELF} rel={relLicense}>
|
|
125
121
|
<strong>{license.type}</strong>
|
|
126
122
|
</a>
|
|
127
123
|
{#if license.icons}
|
|
128
124
|
{#each license.icons as icon}
|
|
129
|
-
<a
|
|
130
|
-
href={license.externalUrl}
|
|
131
|
-
target={PAGE.BLANK}
|
|
132
|
-
rel={relLicense}
|
|
133
|
-
style="display: inline-block">
|
|
125
|
+
<a href={license.externalUrl} target={PAGE.BLANK} rel={relLicense}>
|
|
134
126
|
<img
|
|
127
|
+
class="cc-img"
|
|
135
128
|
decoding="async"
|
|
136
129
|
loading="lazy"
|
|
137
130
|
src={icon.src}
|
|
138
|
-
alt={icon.alt}
|
|
139
|
-
style="
|
|
140
|
-
width: 18px !important;
|
|
141
|
-
height: 18px !important;
|
|
142
|
-
margin-left: 3px;
|
|
143
|
-
text-decoration: none;
|
|
144
|
-
vertical-align: text-bottom;
|
|
145
|
-
" />
|
|
131
|
+
alt={icon.alt} />
|
|
146
132
|
</a>
|
|
147
133
|
{/each}
|
|
148
134
|
{/if}
|
|
@@ -242,34 +242,24 @@ This file is part of Network Pro.
|
|
|
242
242
|
<a
|
|
243
243
|
rel={PAGE.REL}
|
|
244
244
|
href="https://creativecommons.org/licenses/by/4.0/"
|
|
245
|
-
target={PAGE.BLANK}
|
|
245
|
+
target={PAGE.BLANK}
|
|
246
|
+
class="cc-link">
|
|
246
247
|
<img
|
|
248
|
+
class="cc-img"
|
|
247
249
|
decoding="async"
|
|
248
250
|
loading="lazy"
|
|
249
|
-
style="
|
|
250
|
-
display: inline-block;
|
|
251
|
-
height: 18px !important;
|
|
252
|
-
margin-left: 3px;
|
|
253
|
-
text-decoration: none;
|
|
254
|
-
vertical-align: text-bottom;
|
|
255
|
-
"
|
|
256
251
|
src={ccSrc}
|
|
257
252
|
alt="Creative Commons BY" />
|
|
258
253
|
</a>
|
|
259
254
|
<a
|
|
260
255
|
rel={PAGE.REL}
|
|
261
256
|
href="https://creativecommons.org/licenses/by/4.0/"
|
|
262
|
-
target={PAGE.BLANK}
|
|
257
|
+
target={PAGE.BLANK}
|
|
258
|
+
class="cc-link">
|
|
263
259
|
<img
|
|
260
|
+
class="cc-img"
|
|
264
261
|
decoding="async"
|
|
265
262
|
loading="lazy"
|
|
266
|
-
style="
|
|
267
|
-
display: inline-block;
|
|
268
|
-
height: 18px !important;
|
|
269
|
-
margin-left: 3px;
|
|
270
|
-
text-decoration: none;
|
|
271
|
-
vertical-align: text-bottom;
|
|
272
|
-
"
|
|
273
263
|
src={bySrc}
|
|
274
264
|
alt="Creative Commons BY" />
|
|
275
265
|
</a>.
|
|
@@ -518,6 +518,7 @@ footer .container {
|
|
|
518
518
|
padding: 0;
|
|
519
519
|
margin: -1px;
|
|
520
520
|
border: 0;
|
|
521
|
+
/* stylelint-disable-next-line property-no-deprecated */
|
|
521
522
|
clip: rect(0, 0, 0, 0);
|
|
522
523
|
overflow: hidden;
|
|
523
524
|
white-space: nowrap;
|
|
@@ -602,3 +603,14 @@ footer .container {
|
|
|
602
603
|
transform: rotate(360deg);
|
|
603
604
|
}
|
|
604
605
|
}
|
|
606
|
+
|
|
607
|
+
.cc-link {
|
|
608
|
+
text-decoration: none;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
.cc-img {
|
|
612
|
+
display: inline-block;
|
|
613
|
+
height: 18px !important;
|
|
614
|
+
margin-left: 3px;
|
|
615
|
+
vertical-align: text-bottom;
|
|
616
|
+
}
|
|
@@ -179,6 +179,7 @@ a:visited:focus-visible {
|
|
|
179
179
|
padding: 0;
|
|
180
180
|
margin: -1px;
|
|
181
181
|
border: 0;
|
|
182
|
+
/* stylelint-disable-next-line property-no-deprecated */
|
|
182
183
|
clip: rect(0, 0, 0, 0);
|
|
183
184
|
overflow: hidden;
|
|
184
185
|
white-space: nowrap;
|
|
@@ -198,6 +199,7 @@ a:visited:focus-visible {
|
|
|
198
199
|
width: auto;
|
|
199
200
|
height: auto;
|
|
200
201
|
margin: 0;
|
|
202
|
+
/* stylelint-disable-next-line property-no-deprecated */
|
|
201
203
|
clip: auto;
|
|
202
204
|
overflow: visible;
|
|
203
205
|
white-space: inherit;
|
|
@@ -294,12 +296,12 @@ a:visited:focus-visible {
|
|
|
294
296
|
pre,
|
|
295
297
|
blockquote {
|
|
296
298
|
border: 1px solid #999;
|
|
297
|
-
|
|
299
|
+
break-inside: avoid;
|
|
298
300
|
}
|
|
299
301
|
|
|
300
302
|
tr,
|
|
301
303
|
img {
|
|
302
|
-
|
|
304
|
+
break-inside: avoid;
|
|
303
305
|
}
|
|
304
306
|
|
|
305
307
|
p,
|
|
@@ -311,6 +313,6 @@ a:visited:focus-visible {
|
|
|
311
313
|
|
|
312
314
|
h2,
|
|
313
315
|
h3 {
|
|
314
|
-
|
|
316
|
+
break-after: avoid;
|
|
315
317
|
}
|
|
316
318
|
}
|
|
@@ -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:#111;background-color:#ffc627}a:visited,a:visited:hover{color:#cba557}a:visited:focus,a:visited:focus-visible{color:#111!important}.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{
|
|
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:#111;background-color:#ffc627}a:visited,a:visited:hover{color:#cba557}a:visited:focus,a:visited:focus-visible{color:#111!important}.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{break-inside:avoid;border:1px solid #999}tr,img{break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{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}.gold{color:#ffc627}.visited{color:#cba557}.goldseparator{color:#ffc627;margin:0 .5rem}.center-nav{text-align:center;padding:5px;font-size:1rem;line-height:1.5rem}.block{overflow-wrap:break-word;resize:none;white-space:normal;word-break:normal;background:0 0;border:none;border-radius:0;outline:none;width:100%;font-family:monospace;font-size:.875rem;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}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pgp-entry{flex-wrap:wrap;align-items:center;gap:2rem;margin-bottom:2rem;display:flex}.pgp-text{flex:2;min-width:250px}.pgp-qr{flex:1;min-width:150px}.obtainium-direct-label{margin:.25rem 0 .75rem;font-weight:700}.obtainium-manual-label{margin-top:.75rem;font-weight:700}.obtainium-img{width:185px;height:55px;margin-bottom:.25rem}.obtainium-margin{margin-left:4px}.obtainium-fa-down{color:#ffc627;margin-left:4px}.obtainium-icon{width:50px;height:50px}.proton-img{width:168px;height:24px}.redirect-text{text-align:center;margin-top:4rem}.redirect-content{text-align:center;margin-top:2rem;font-family:system-ui,sans-serif}.loading-spinner{border:4px solid #ddd;border-top-color:#ffc627;border-radius:50%;width:48px;height:48px;margin:2rem auto;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.cc-link{text-decoration:none}.cc-img{vertical-align:text-bottom;margin-left:3px;display:inline-block;height:18px!important}
|
|
@@ -28,7 +28,7 @@ export async function GET({ params, setHeaders }) {
|
|
|
28
28
|
'Content-Type': 'application/pgp-keys',
|
|
29
29
|
'Content-Disposition': `attachment; filename="${key}"`,
|
|
30
30
|
});
|
|
31
|
-
return new Response(file);
|
|
31
|
+
return new Response(new Uint8Array(file));
|
|
32
32
|
} catch {
|
|
33
33
|
return new Response('File not found', { status: 404 });
|
|
34
34
|
}
|