@networkpro/web 1.12.8 → 1.12.9

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/CHANGELOG.md CHANGED
@@ -22,6 +22,43 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
22
22
 
23
23
  ---
24
24
 
25
+ ## [1.12.9] - 2025-06-11
26
+
27
+ ### Added
28
+
29
+ - Added `check-security-txt-expiry.yml` workflow to check `.well-known/security.txt` expiration and warn if close to expiring
30
+ - Added `humans.txt` and `security.txt` to `.well-known/` directory
31
+ - Added `src/lib/components/CodeBlock.svelte` component for improved inline formatting control
32
+ - Updated sitemap.xml to include `.well-known/` routes and the `/pgp` route
33
+ - Added link to OpenPGP results for `security@s.neteng.pro` on the `/pgp` route
34
+ - Added support for copy-to-clipboard feedback on PGP fingerprint buttons
35
+ - Added detached signature (`security.txt.asc`) for `.well-known/security.txt`, signed with the `security@s.neteng.pro` PGP key
36
+
37
+ ### Changed
38
+
39
+ - Version bump to `v1.12.9` in `package.json`
40
+ - Corrected the name of `dnt-policy.txt` from `dnt-policy-1.0.txt`
41
+ - Updated `src/service-worker.js` to:
42
+ - Reflect correct `.well-known/dnt-policy.txt` reference
43
+ - Exclude `.well-known/security.txt.asc` from caching
44
+ - Applied line breaks to comment header in `jsconfig.template.jsonc` to fix formatting
45
+ - Minor revision to spreadsheet display and fingerprint formatting for improved mobile responsiveness
46
+ - Revised `.github/SECURITY.md`:
47
+ - Removed note about “PGP section coming soon to the wiki” (now live)
48
+ - Clarified Proton Mail use for `s.neteng.pro` addresses, while preserving support guidance for others
49
+ - Streamlined vulnerability reporting section for clarity and correctness
50
+ - Updated Content Security Policy (CSP) header to allow `clipboard-write` permission
51
+ - Added Proton Mail usage note to `/pgp` route UI for `s.neteng.pro` domain only
52
+ - Added equivalent Proton Mail usage comment to `.well-known/security.txt`
53
+ - Upgraded dependencies:
54
+ - `@eslint/compat` `^1.2.9` → `^1.3.0`
55
+ - `eslint-plugin-jsdoc` `^50.7.1` → `^50.8.0`
56
+ - `postcss` `^8.5.4` → `^8.5.5`
57
+ - `posthog-js` `^1.250.1` → `^1.250.2`
58
+ - `svelte` `5.33.19` → `5.34.1`
59
+
60
+ ---
61
+
25
62
  ## [1.12.8] - 2025-06-11
26
63
 
27
64
  ### Added
@@ -249,7 +286,8 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
249
286
 
250
287
  <!-- Link references -->
251
288
 
252
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.12.8...HEAD
289
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.12.9...HEAD
290
+ [1.12.9]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.9
253
291
  [1.12.8]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.8
254
292
  [1.12.7]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.7
255
293
  [1.12.6]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.6
package/cspell.json CHANGED
@@ -13,6 +13,7 @@
13
13
  "ccby",
14
14
  "CCPA",
15
15
  "CPRA",
16
+ "elif",
16
17
  "Embedder",
17
18
  "Ente",
18
19
  "esbuild",
@@ -1,7 +1,9 @@
1
1
  /* =========================================================================
2
2
  jsconfig.template.jsonc
3
3
 
4
- NOTE: This file is for reference only and is not actively used by SvelteKit or tooling. SvelteKit uses the jsconfig.json file without comments for actual configuration.
4
+ NOTE: This file is for reference only and is not actively used by SvelteKit or
5
+ tooling. SvelteKit uses the jsconfig.json file without comments for actual
6
+ configuration.
5
7
 
6
8
  Copyright © 2025 Network Pro Strategies (Network Pro™)
7
9
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.12.8",
4
+ "version": "1.12.9",
5
5
  "description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
6
6
  "keywords": [
7
7
  "advisory",
@@ -80,12 +80,12 @@
80
80
  },
81
81
  "dependencies": {
82
82
  "dompurify": "^3.2.6",
83
- "posthog-js": "^1.250.1",
83
+ "posthog-js": "^1.250.2",
84
84
  "semver": "^7.7.2",
85
- "svelte": "5.33.19"
85
+ "svelte": "5.34.1"
86
86
  },
87
87
  "devDependencies": {
88
- "@eslint/compat": "^1.2.9",
88
+ "@eslint/compat": "^1.3.0",
89
89
  "@eslint/js": "^9.28.0",
90
90
  "@lhci/cli": "^0.15.0",
91
91
  "@playwright/test": "^1.53.0",
@@ -99,7 +99,7 @@
99
99
  "browserslist": "^4.25.0",
100
100
  "eslint": "^9.28.0",
101
101
  "eslint-config-prettier": "^10.1.5",
102
- "eslint-plugin-jsdoc": "^50.7.1",
102
+ "eslint-plugin-jsdoc": "^50.8.0",
103
103
  "eslint-plugin-svelte": "^3.9.2",
104
104
  "globals": "^16.2.0",
105
105
  "jsdom": "^26.1.0",
@@ -108,7 +108,7 @@
108
108
  "markdownlint-cli2": "^0.18.1",
109
109
  "mdsvex": "^0.12.6",
110
110
  "playwright": "^1.53.0",
111
- "postcss": "^8.5.4",
111
+ "postcss": "^8.5.5",
112
112
  "prettier": "^3.5.3",
113
113
  "prettier-plugin-svelte": "^3.4.0",
114
114
  "stylelint": "^16.20.0",
@@ -67,7 +67,7 @@ export async function handle({ event, resolve }) {
67
67
  "microphone=()",
68
68
  "geolocation=()",
69
69
  "clipboard-read=()",
70
- "clipboard-write=()",
70
+ "clipboard-write=(self)",
71
71
  "payment=()",
72
72
  "usb=()",
73
73
  "hid=()",
@@ -0,0 +1,13 @@
1
+ <!-- ==========================================================================
2
+ src/lib/components/CodeBlock.svelte
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
+ <script>
10
+ export let text = "";
11
+ </script>
12
+
13
+ <code class="block">{text}</code>
@@ -7,6 +7,7 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
+ import CodeBlock from "$lib/components/CodeBlock.svelte";
10
11
  import { base } from "$app/paths";
11
12
  import { CONSTANTS } from "$lib";
12
13
 
@@ -38,25 +39,56 @@ This file is part of Network Pro.
38
39
  name: "Security Contact",
39
40
  email: "security (at) s.neteng.pro",
40
41
  fingerprint: "B7FE 1D4E 6CAB 3E71 4A9F DF6E 48CB 7290 C00D 0DA5",
41
- opgp: null,
42
+ opgp: "https://keys.openpgp.org/search?q=security%40s.neteng.pro",
42
43
  file: "/pgp/security@s.neteng.pro.asc",
43
44
  img: "pgp-security",
44
45
  },
45
46
  ];
46
47
 
47
48
  /**
48
- * Copy a string to the clipboard
49
- * @param {string} text
49
+ * Tracks which PGP key's fingerprint was last copied.
50
+ * @type {string | null}
51
+ */
52
+ let copiedKey = null;
53
+
54
+ /**
55
+ * Copies the fingerprint of a given PGP key and shows temporary feedback.
56
+ * @param {{ fingerprint: string, email: string }} key - The PGP key object
57
+ */
58
+ function handleCopy(key) {
59
+ copy(key.fingerprint);
60
+ copiedKey = key.email;
61
+ setTimeout(() => {
62
+ if (copiedKey === key.email) copiedKey = null;
63
+ }, 2000);
64
+ }
65
+
66
+ /**
67
+ * Writes a string to the clipboard.
68
+ * @param {string} text - The text to copy to the clipboard
50
69
  */
51
70
  function copy(text) {
52
- navigator.clipboard.writeText(text);
71
+ navigator.clipboard.writeText(text).catch((err) => {
72
+ console.error("Clipboard copy failed:", err);
73
+ });
53
74
  }
54
75
  </script>
55
76
 
56
77
  <h1>🔐 Public PGP Keys</h1>
57
- <p
58
- >Below are our public encryption keys. Use them to securely send email or
59
- verify signed messages.</p>
78
+ <p>
79
+ Below are our public encryption keys. Use them to securely send email or
80
+ verify signed messages.
81
+ </p>
82
+ <p>
83
+ <img
84
+ src="/img/powered-by-proton.svg"
85
+ alt="Powered by Proton"
86
+ style="width: 168px; height: 24px;" />
87
+ </p>
88
+ <p class="bquote">
89
+ NOTE: Addresses under the <strong>s.neteng.pro</strong> domain are powered by Proton
90
+ Mail to ensure strong end-to-end privacy protections.
91
+ </p>
60
92
 
61
93
  {#each keys as key}
62
94
  <section class="pgp-entry" aria-labelledby={`pgp-${key.img}`}>
@@ -73,14 +105,14 @@ This file is part of Network Pro.
73
105
  {/if}
74
106
  &gt;
75
107
  </h3>
76
- <pre><code>{key.fingerprint}</code></pre>
108
+ <CodeBlock text={key.fingerprint} />
77
109
  <p>
78
110
  <button
79
111
  type="button"
80
- on:click={() => copy(key.fingerprint)}
112
+ on:click={() => handleCopy(key)}
81
113
  aria-label={`Copy PGP fingerprint for ${key.name}`}
82
114
  title="Copy fingerprint to clipboard">
83
- Copy fingerprint
115
+ {copiedKey === key.email ? "Copied!" : "Copy fingerprint"}
84
116
  </button>
85
117
  </p>
86
118
  <p>
@@ -457,12 +457,16 @@ footer .container {
457
457
  .block {
458
458
  width: 100%;
459
459
  border: none;
460
- font-size: 0.75rem;
460
+ font-size: 0.875rem;
461
461
  line-height: 1.125rem;
462
462
  background: none;
463
463
  border-radius: 0;
464
+ font-family: monospace; /* retain code look */
464
465
  outline: none;
466
+ overflow-wrap: break-word; /* modern replacement */
465
467
  resize: none;
468
+ white-space: normal; /* allow wrapping */
469
+ word-break: normal; /* avoid deprecated behavior */
466
470
  }
467
471
 
468
472
  .fingerprint {
@@ -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:visited{color:#7f6227}a:focus-visible{color:#191919;outline-offset:4px;background-color:#ffc627;outline:2px solid #ffc627}a:focus:not(:focus-visible){color:inherit;background-color:#0000;outline:none}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}.gold{color:#ffc627}.visited{color:#7f6227}.goldseparator{color:#ffc627;margin:0 .5rem}.center-nav{text-align:center;padding:5px;font-size:1rem;line-height:1.5rem}.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}.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}
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:visited{color:#7f6227}a:focus-visible{color:#191919;outline-offset:4px;background-color:#ffc627;outline:2px solid #ffc627}a:focus:not(:focus-visible){color:inherit;background-color:#0000;outline:none}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}.gold{color:#ffc627}.visited{color:#7f6227}.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}
@@ -28,6 +28,7 @@ const CACHE = `cache-${version}`;
28
28
  const excludedAssets = [];
29
29
 
30
30
  const IGNORE_PATHS = new Set([
31
+ "/.well-known/security.txt.asc",
31
32
  "/img/banner-1280x640.png",
32
33
  "/img/logo-transparent.png",
33
34
  "/img/logo.png",
@@ -108,7 +109,7 @@ const REQUIRED_ASSETS = [
108
109
  "/styles/solid.min.css",
109
110
  "/webfonts/fa-brands-400.woff2",
110
111
  "/webfonts/fa-solid-900.woff2",
111
- "/.well-known/dnt-policy-1.0.txt",
112
+ "/.well-known/dnt-policy.txt",
112
113
  "/.well-known/gpc.json",
113
114
  ];
114
115
 
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="196.114" height="28" aria-label="POWERED BY: PROTON"><g shape-rendering="crispEdges"><path fill="#555" d="M0 0h117.614v28H0z"/><path fill="#6d4aff" d="M117.614 0h78.5v28h-78.5z"/></g><g fill="#fff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="100" text-anchor="middle" text-rendering="geometricPrecision"><image width="11.114" height="14" x="9" y="7" href="data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgMTkuMDUyMDAwMDAwMDAwMDAzIDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5Qcm90b248L3RpdGxlPjxwYXRoIGQ9Ik0wIDE3Ljc1VjI0aDQuNDAxdi01Ljk3OWMwLTAuNTgyIDAuMjMyLTEuMTQgMC42NDUtMS41NTFhMi4yMDQgMi4yMDQgMCAwIDEgMS41NTYtMC42NDNoNC41MTNhNy45NTUgNy45NTUgMCAwIDAgNS42MTItMi4zMTggNy45MDcgNy45MDcgMCAwIDAgMi4zMjUtNS41OTUgNy45MSA3LjkxIDAgMCAwLTIuMzI1LTUuNTk2QTcuOTU4IDcuOTU4IDAgMCAwIDExLjExMyAwSDB2Ny44MTJoNC40MDFWNC4xMjloNi40MTZjMC45OTUgMCAxLjk1MSAwLjM5NCAyLjY1NiAxLjA5NyAwLjcwNCAwLjcgMS4xIDEuNjUzIDEuMTAxIDIuNjQ2YTMuNzQyIDMuNzQyIDAgMCAxLTEuMTAxIDIuNjQ4IDMuNzY2IDMuNzY2IDAgMCAxLTIuNjU2IDEuMDk3SDYuMTUzYTYuMTU4IDYuMTU4IDAgMCAwLTQuMzUyIDEuNzk1IDYuMTMzIDYuMTMzIDAgMCAwLTEuODAxIDQuMzM4WiIvPjwvc3ZnPg=="/><text x="658.637" y="175" textLength="795" transform="scale(.1)">POWERED BY</text><text x="1568.637" y="175" font-weight="bold" textLength="545" transform="scale(.1)">PROTON</text></g></svg>
@@ -101,9 +101,9 @@
101
101
 
102
102
  <url>
103
103
 
104
- <loc>https://netwk.pro/bin/CC-BY-4.0.html</loc>
104
+ <loc>https://netwk.pro/pgp</loc>
105
105
 
106
- <lastmod>2025-06-10</lastmod>
106
+ <lastmod>2025-06-11</lastmod>
107
107
 
108
108
  <changefreq>monthly</changefreq>
109
109
 
@@ -111,15 +111,75 @@
111
111
 
112
112
  </url>
113
113
 
114
+ <url>
115
+
116
+ <loc>https://netwk.pro/bin/CC-BY-4.0.html</loc>
117
+
118
+ <lastmod>2025-06-10</lastmod>
119
+
120
+ <changefreq>yearly</changefreq>
121
+
122
+ <priority>0.3</priority>
123
+
124
+ </url>
125
+
114
126
  <url>
115
127
 
116
128
  <loc>https://netwk.pro/bin/COPYING.html</loc>
117
129
 
118
130
  <lastmod>2025-06-10</lastmod>
119
131
 
120
- <changefreq>monthly</changefreq>
132
+ <changefreq>yearly</changefreq>
121
133
 
122
- <priority>0.5</priority>
134
+ <priority>0.3</priority>
135
+
136
+ </url>
137
+
138
+ <url>
139
+
140
+ <loc>https://netwk.pro/.well-known/security.txt</loc>
141
+
142
+ <lastmod>2025-06-11</lastmod>
143
+
144
+ <changefreq>yearly</changefreq>
145
+
146
+ <priority>0.2</priority>
147
+
148
+ </url>
149
+
150
+ <url>
151
+
152
+ <loc>https://netwk.pro/.well-known/dnt-policy.txt</loc>
153
+
154
+ <lastmod>2025-06-11</lastmod>
155
+
156
+ <changefreq>yearly</changefreq>
157
+
158
+ <priority>0.2</priority>
159
+
160
+ </url>
161
+
162
+ <url>
163
+
164
+ <loc>https://netwk.pro/.well-known/gpc.json</loc>
165
+
166
+ <lastmod>2025-06-11</lastmod>
167
+
168
+ <changefreq>yearly</changefreq>
169
+
170
+ <priority>0.2</priority>
171
+
172
+ </url>
173
+
174
+ <url>
175
+
176
+ <loc>https://netwk.pro/.well-known/humans.txt</loc>
177
+
178
+ <lastmod>2025-06-11</lastmod>
179
+
180
+ <changefreq>yearly</changefreq>
181
+
182
+ <priority>0.1</priority>
123
183
 
124
184
  </url>
125
185