@networkpro/web 1.19.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.github/workflows/build-and-publish.yml +5 -4
  2. package/.github/workflows/lighthouse.yml +1 -1
  3. package/.github/workflows/meta-check.yml +1 -1
  4. package/.github/workflows/playwright.yml +1 -1
  5. package/.github/workflows/publish-test.yml +5 -4
  6. package/.github/workflows/templates/publish.template.yml +5 -4
  7. package/CHANGELOG.md +82 -1
  8. package/cspell.json +3 -0
  9. package/package.json +16 -16
  10. package/scripts/auditScripts.js +1 -1
  11. package/scripts/bundleCss.js +1 -1
  12. package/scripts/checkEnv.js +1 -1
  13. package/scripts/checkNode.js +1 -1
  14. package/scripts/checkVersions.js +1 -1
  15. package/scripts/generateTest.js +1 -1
  16. package/scripts/openReport.js +1 -1
  17. package/src/app.html +3 -6
  18. package/src/hooks.server.js +10 -7
  19. package/src/lib/components/ServiceSummaryTable.svelte +113 -0
  20. package/src/lib/components/index.js +2 -1
  21. package/src/lib/components/layout/HeaderDefault.svelte +3 -1
  22. package/src/lib/components/layout/HeaderHome.svelte +6 -5
  23. package/src/lib/images.js +1 -1
  24. package/src/lib/index.js +2 -2
  25. package/src/lib/meta.js +14 -9
  26. package/src/lib/pages/AboutContent.svelte +26 -10
  27. package/src/lib/pages/HomeContent.svelte +11 -1
  28. package/src/lib/pages/LicenseContent.svelte +3 -3
  29. package/src/lib/pages/PrivacyContent.svelte +31 -1
  30. package/src/lib/pages/ServicesContent.svelte +545 -0
  31. package/src/lib/pages/index.js +2 -1
  32. package/src/lib/stores/posthog.js +2 -1
  33. package/src/lib/styles/css/default.css +88 -0
  34. package/src/lib/styles/global.min.css +1 -3
  35. package/src/lib/types/appConstants.js +1 -1
  36. package/src/lib/types/fossTypes.js +1 -1
  37. package/src/lib/utils/getUTMParams.js +1 -1
  38. package/src/lib/utils/purify.js +1 -1
  39. package/src/lib/utils/redirect.js +1 -1
  40. package/src/lib/utils/utm.js +2 -2
  41. package/src/routes/+layout.svelte +0 -2
  42. package/src/routes/consultation/+page.svelte +1 -1
  43. package/src/routes/services/+page.server.js +18 -0
  44. package/src/routes/services/+page.svelte +65 -0
  45. package/src/routes/status/+page.server.js +1 -1
  46. package/src/service-worker.js +2 -2
  47. package/static/bin/contact.vcf +1 -2
  48. package/static/disableSw.js +1 -1
  49. package/static/sitemap.xml +17 -5
  50. package/tests/e2e/app.spec.js +1 -1
  51. package/tests/e2e/mobile.spec.js +1 -1
  52. package/tests/e2e/shared/helpers.js +1 -1
  53. package/tests/meta/meta.test.js +1 -1
  54. package/tests/unit/client/lib/PWAInstallButton.test.js +1 -1
  55. package/tests/unit/client/lib/utils/redirect.test.js +1 -1
  56. package/tests/unit/server/internal/auditCoverage.test.js +1 -1
  57. package/tests/unit/server/lib/utils/purify.test.js +1 -1
  58. package/tests/unit/server/meta.test.js +1 -1
  59. package/vercel.json +12 -0
@@ -1,8 +1,6 @@
1
1
  /*! ==========================================================================
2
- src/lib/styles/css/global.css
3
-
4
2
  Copyright © 2025 Network Pro Strategies (Network Pro™)
5
3
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
4
  This file is part of Network Pro.
7
5
  ========================================================================== */
8
- 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}.full-width-section.centered{flex-direction:column;justify-content:center;min-height:80vh;display:flex}.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}
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}}#service-summary{color:#e6e6e6;margin-top:2rem;margin-bottom:2.5rem}.service-table{color:#e6e6e6;border-collapse:collapse;background-color:#191919;width:100%;font-size:.95rem}.service-table th,.service-table td{text-align:left;vertical-align:top;border-bottom:1px solid #333;padding:.75rem 1rem}.service-table th{color:#ffc627;text-transform:uppercase;background-color:#222;font-size:.85rem;font-weight:600}.service-table a{color:#ffc627;font-weight:500;text-decoration:none}.service-table a:hover{text-decoration:underline}.service-table tr:hover{background-color:#222;transition:background-color .3s,box-shadow .3s;box-shadow:0 0 10px 2px #ffc62740}.service-table tr.selected{background-color:#222;border-left:4px solid #ffc627;transition:background-color .3s,border-left-color .3s}.service-table tr.selected:hover{background-color:#252525;box-shadow:0 0 12px 3px #ffc62759}@media (width<=768px){.service-table{font-size:.9rem}.service-table th,.service-table td{padding:.5rem}}.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}.full-width-section.centered{flex-direction:column;justify-content:center;min-height:80vh;display:flex}.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}#toc ul{padding-left:1.5rem;list-style-type:disc}#toc a{color:var(--color-primary,#ffc627);text-decoration:none}#toc a:hover{text-decoration:underline}
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file appConstants.js
11
11
  * @description Type definitions for app constants in src/lib/index.js
12
12
  * @module src/lib/types
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-06-03
15
15
  */
16
16
 
@@ -11,7 +11,7 @@ This file is part of Network Pro.
11
11
  * @description Type definitions for `fossItem` in
12
12
  * src/lib/components/foss/FossItemContent.svelte
13
13
  * @module src/lib/types
14
- * @author SunDevil311
14
+ * @author Scott Lopez
15
15
  * @updated 2025-06-12
16
16
  */
17
17
 
@@ -12,7 +12,7 @@ This file is part of Network Pro.
12
12
  * Useful for analytics platforms like PostHog or GA4.
13
13
  *
14
14
  * @module src/lib/utils/
15
- * @author SunDevil311
15
+ * @author Scott Lopez
16
16
  * @updated 2025-06-30
17
17
  */
18
18
 
@@ -11,7 +11,7 @@ This file is part of Network Pro.
11
11
  * @description Universal DOMPurify instance for SSR + client with safe build support.
12
12
  * Secures untrusted HTML before injecting it into the DOM.
13
13
  * @module src/lib/utils/
14
- * @author SunDevil311
14
+ * @author Scott Lopez
15
15
  * @updated 2025-06-01
16
16
  */
17
17
 
@@ -12,7 +12,7 @@ This file is part of Network Pro.
12
12
  * visual if true.
13
13
  *
14
14
  * @module src/lib/utils/
15
- * @author SunDevil311
15
+ * @author Scott Lopez
16
16
  * @updated 2025-07-01
17
17
  */
18
18
 
@@ -10,8 +10,8 @@ This file is part of Network Pro.
10
10
  * @file utm.js
11
11
  * @description Appends standardized UTM parameters to a given URL.
12
12
  * @module src/lib/utils/
13
- * @author SunDevil311
14
- * @updated 2025-06-30
13
+ * @author Scott Lopez
14
+ * @updated 2025-10-10
15
15
  */
16
16
 
17
17
  import { browser } from '$app/environment';
@@ -18,8 +18,6 @@ This file is part of Network Pro.
18
18
  import { ContainerSection, PWAInstallButton } from '$lib/components';
19
19
  import { Footer, HeaderDefault, HeaderHome } from '$lib/components/layout';
20
20
 
21
- //import PWAInstallButton from '$lib/components/PWAInstallButton.svelte';
22
-
23
21
  import '$lib/styles/global.min.css';
24
22
  import '$lib/styles/fa-global.css';
25
23
 
@@ -7,7 +7,7 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
- import RedirectPage from '$lib/components/RedirectPage.svelte';
10
+ import { RedirectPage } from '$lib/components';
11
11
  import { appendUTM } from '$lib/utils/utm.js';
12
12
  import { getUTMParams } from '$lib/utils/getUTMParams.js';
13
13
  import { trackingEnabled } from '$lib/stores/trackingPreferences';
@@ -0,0 +1,18 @@
1
+ /* ==========================================================================
2
+ src/routes/services/+page.server.js
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
+ import { defaultMeta, meta } from '$lib/meta.js';
10
+
11
+ export const prerender = false;
12
+
13
+ /** @type {import('./$types').PageServerLoad} */
14
+ export function load() {
15
+ return {
16
+ meta: meta['/services'] || defaultMeta,
17
+ };
18
+ }
@@ -0,0 +1,65 @@
1
+ <!-- ==========================================================================
2
+ src/routes/services/+page.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
+ import {
11
+ Badges,
12
+ FullWidthSection,
13
+ LegalNav,
14
+ SocialMedia,
15
+ MetaTags,
16
+ } from '$lib/components';
17
+ import { ServicesContent } from '$lib/pages';
18
+
19
+ /**
20
+ * @type {string}
21
+ * Style class for the div element.
22
+ */
23
+ const spaceStyle = 'spacer';
24
+
25
+ export let data;
26
+ </script>
27
+
28
+ <MetaTags title={data.meta.title} description={data.meta.description} />
29
+
30
+ <link rel="canonical" href="https://netwk.pro/services" />
31
+
32
+ <section id="services">
33
+ <FullWidthSection>
34
+ <!-- BEGIN PRIVACY POLICY -->
35
+ <section id="main-content">
36
+ <ServicesContent />
37
+ </section>
38
+ <!-- END PRIVACY POLICY -->
39
+
40
+ <div class={spaceStyle}></div>
41
+
42
+ <!-- BEGIN SOCIAL MEDIA -->
43
+ <section id="social-media">
44
+ <SocialMedia />
45
+ </section>
46
+ <!-- END SOCIAL MEDIA -->
47
+
48
+ <hr />
49
+
50
+ <div class={spaceStyle}></div>
51
+
52
+ <!-- BEGIN LEGAL -->
53
+ <section id="legal-nav">
54
+ <LegalNav />
55
+ </section>
56
+ <!-- END LEGAL -->
57
+
58
+ <div class={spaceStyle}></div>
59
+
60
+ <!-- BEGIN BADGES -->
61
+ <section id="badges">
62
+ <Badges />
63
+ </section>
64
+ </FullWidthSection>
65
+ </section>
@@ -15,7 +15,7 @@ This file is part of Network Pro.
15
15
  * injected and available during runtime in Netlify's SSR context.
16
16
  *
17
17
  * @module src/routes/status
18
- * @author SunDevil311
18
+ * @author Scott Lopez
19
19
  * @updated 2025-05-31
20
20
  */
21
21
 
@@ -39,8 +39,6 @@ const IGNORE_PATHS = new Set([
39
39
  '/pgp/github@sl.neteng.cc.asc',
40
40
  '/pgp/security@s.neteng.pro.asc',
41
41
  '/pgp/support@neteng.pro.asc',
42
- '/pgp/vcard.png',
43
- '/pgp/vcard.webp',
44
42
  '/screenshots/desktop-foss.png',
45
43
  '/webfonts/fa-brands-400.ttf',
46
44
  '/webfonts/fa-solid-900.ttf',
@@ -96,6 +94,8 @@ const REQUIRED_ASSETS = [
96
94
  '/pgp/pgp-security.webp',
97
95
  '/pgp/pgp-support.png',
98
96
  '/pgp/pgp-support.webp',
97
+ '/pgp/vcard.png',
98
+ '/pgp/vcard.webp',
99
99
  '/manifest.json',
100
100
  '/offline.html',
101
101
  '/offline.min.css',
@@ -3,11 +3,10 @@ VERSION:3.0
3
3
  FN:Scott Lopez
4
4
  N:Lopez;Scott
5
5
  TEL;TYPE=WORK,PREF=1:(623) 252-4350
6
- EMAIL;TYPE=HOME:github@sl.neteng.cc
7
6
  EMAIL;TYPE=WORK:support@neteng.pro
8
7
  EMAIL;TYPE=Secure:business@s.neteng.pro
9
8
  ADR;TYPE=WORK:;;Peoria\, AZ 85382\nUS
10
9
  ORG:Network Pro Strategies
11
- TITLE:Security Consultant
10
+ TITLE:Network Engineer
12
11
  URL:https://netwk.pro
13
12
  END:VCARD
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file disableSw.js
11
11
  * @description Allows for Service Worker to be disabled for debugging by appending ?nosw to the path.
12
12
  * @module static
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-10-05
15
15
  */
16
16
 
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Sitemap last updated 2025-10-06 -->
2
+ <!-- Sitemap last updated 2025-10-17 -->
3
3
 
4
4
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
5
5
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  <loc>https://netwk.pro</loc>
9
9
 
10
- <lastmod>2025-10-06</lastmod>
10
+ <lastmod>2025-10-17</lastmod>
11
11
 
12
12
  <changefreq>weekly</changefreq>
13
13
 
@@ -15,6 +15,18 @@
15
15
 
16
16
  </url>
17
17
 
18
+ <url>
19
+
20
+ <loc>https://netwk.pro/services</loc>
21
+
22
+ <lastmod>2025-10-17</lastmod>
23
+
24
+ <changefreq>monthly</changefreq>
25
+
26
+ <priority>0.8</priority>
27
+
28
+ </url>
29
+
18
30
  <url>
19
31
 
20
32
  <loc>https://netwk.pro/foss-spotlight</loc>
@@ -31,7 +43,7 @@
31
43
 
32
44
  <loc>https://netwk.pro/about</loc>
33
45
 
34
- <lastmod>2025-10-06</lastmod>
46
+ <lastmod>2025-10-17</lastmod>
35
47
 
36
48
  <changefreq>monthly</changefreq>
37
49
 
@@ -55,7 +67,7 @@
55
67
 
56
68
  <loc>https://netwk.pro/privacy</loc>
57
69
 
58
- <lastmod>2025-06-30</lastmod>
70
+ <lastmod>2025-10-17</lastmod>
59
71
 
60
72
  <changefreq>monthly</changefreq>
61
73
 
@@ -67,7 +79,7 @@
67
79
 
68
80
  <loc>https://netwk.pro/license</loc>
69
81
 
70
- <lastmod>2025-06-10</lastmod>
82
+ <lastmod>2025-10-09</lastmod>
71
83
 
72
84
  <changefreq>monthly</changefreq>
73
85
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file app.spec.js
11
11
  * @description Runs Playwright E2E tests with desktop and root route assertions.
12
12
  * @module tests/e2e
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-09-17
15
15
  */
16
16
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file mobile.spec.js
11
11
  * @description Runs Playwright E2E tests with mobile assertions.
12
12
  * @module tests/e2e
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-09-17
15
15
  */
16
16
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file helpers.js
11
11
  * @description Stores commonly used functions for importing into E2E tests.
12
12
  * @module tests/e2e/shared
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-05-29
15
15
  */
16
16
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file meta.test.js
11
11
  * @description Checks for correct metadata population in CI
12
12
  * @module tests/meta
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-09-17
15
15
  */
16
16
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file redirect.test.js
11
11
  * @description Unit test for PWA install component
12
12
  * @module tests/unit/lib
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-10-05
15
15
  */
16
16
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file redirect.test.js
11
11
  * @description Unit test for src/lib/utils/redirect.js
12
12
  * @module tests/unit/lib/util/
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-07-01
15
15
  */
16
16
 
@@ -11,7 +11,7 @@ This file is part of Network Pro.
11
11
  * @description Scans all .js files in src/ and scripts/ for matching unit
12
12
  * tests
13
13
  * @module tests/unit/server/internal
14
- * @author SunDevil311
14
+ * @author Scott Lopez
15
15
  * @updated 2025-09-17
16
16
  */
17
17
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file purify.test.js
11
11
  * @description Unit test for src/lib/utils/purify.js
12
12
  * @module tests/unit/lib/util
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-06-01
15
15
  */
16
16
 
@@ -10,7 +10,7 @@ This file is part of Network Pro.
10
10
  * @file meta.test.js
11
11
  * @description Checks for correct metadata population
12
12
  * @module tests/unit/server
13
- * @author SunDevil311
13
+ * @author Scott Lopez
14
14
  * @updated 2025-09-17
15
15
  */
16
16
 
package/vercel.json CHANGED
@@ -1,4 +1,6 @@
1
1
  {
2
+ "$schema": "https://openapi.vercel.sh/vercel.json",
3
+ "version": 2,
2
4
  "redirects": [
3
5
  {
4
6
  "source": "/privacy-policy",
@@ -30,5 +32,15 @@
30
32
  "destination": "/foss-spotlight/:path*",
31
33
  "permanent": true
32
34
  }
35
+ ],
36
+ "rewrites": [
37
+ {
38
+ "source": "/relay-MSR0/static/(.*)",
39
+ "destination": "https://us-assets.i.posthog.com/static/$1"
40
+ },
41
+ {
42
+ "source": "/relay-MSR0/(.*)",
43
+ "destination": "https://us.i.posthog.com/$1"
44
+ }
33
45
  ]
34
46
  }