@networkpro/web 0.13.2 → 1.1.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 (293) hide show
  1. package/CODE_OF_CONDUCT.md +172 -0
  2. package/LICENSE.md +4 -4
  3. package/README.md +13 -12
  4. package/_headers +2 -0
  5. package/assets/bin/contact.vcf +13 -0
  6. package/assets/bin/contact@s.neteng.pro.aexpk +17 -0
  7. package/assets/bin/contact@s.neteng.pro.asc +17 -0
  8. package/assets/bin/github@sl.neteng.cc.aexpk +29 -0
  9. package/assets/bin/github@sl.neteng.cc.asc +29 -0
  10. package/assets/bin/linksheet.json +8 -0
  11. package/assets/bin/support@neteng.pro.aexpk +47 -0
  12. package/assets/bin/support@neteng.pro.asc +47 -0
  13. package/assets/consulting-terms.pdf +0 -0
  14. package/eslint.config.mjs +112 -0
  15. package/jsconfig.json +28 -0
  16. package/netlify.toml +3 -0
  17. package/package.json +63 -60
  18. package/playwright.config.js +79 -0
  19. package/postcss.config.mjs +14 -0
  20. package/scripts/bundleCss.js +40 -0
  21. package/src/app.d.ts +15 -0
  22. package/src/app.html +83 -0
  23. package/src/demo.spec.js +14 -0
  24. package/src/lib/components/Badges.svelte +74 -0
  25. package/src/lib/components/ContainerSection.svelte +19 -0
  26. package/src/lib/components/FullWidthSection.svelte +13 -0
  27. package/src/lib/components/LegalNav.svelte +75 -0
  28. package/src/lib/components/Logo.svelte +110 -0
  29. package/src/lib/components/MetaTags.svelte +41 -0
  30. package/src/lib/components/SocialMedia.svelte +70 -0
  31. package/src/lib/components/foss/FossFeatures.svelte +24 -0
  32. package/src/lib/components/foss/FossItemContent.svelte +153 -0
  33. package/src/lib/components/layout/Footer.svelte +188 -0
  34. package/src/lib/components/layout/HeaderDefault.svelte +86 -0
  35. package/src/lib/components/layout/HeaderHome.svelte +84 -0
  36. package/src/lib/data/fossData.js +233 -0
  37. package/src/lib/images.js +77 -0
  38. package/src/lib/img/badges/cc-by-badge.png +0 -0
  39. package/src/lib/img/badges/gpl-badge.svg +1 -0
  40. package/src/lib/img/by.svg +1 -0
  41. package/src/lib/img/cc.svg +1 -0
  42. package/src/lib/img/logo-web.png +0 -0
  43. package/src/lib/img/logo-web.webp +0 -0
  44. package/src/lib/img/obtainium.webp +0 -0
  45. package/src/lib/img/posts/acode.png +0 -0
  46. package/src/lib/img/posts/acode.webp +0 -0
  47. package/src/lib/img/posts/linksheet.png +0 -0
  48. package/src/lib/img/posts/linksheet.webp +0 -0
  49. package/src/lib/img/posts/pmx.png +0 -0
  50. package/src/lib/img/posts/pmx.webp +0 -0
  51. package/src/lib/img/posts/tosdr.png +0 -0
  52. package/src/lib/img/posts/tosdr.webp +0 -0
  53. package/src/lib/img/posts/urlcheck.png +0 -0
  54. package/src/lib/img/posts/urlcheck.webp +0 -0
  55. package/src/lib/index.js +43 -0
  56. package/src/lib/meta.js +73 -0
  57. package/src/lib/pages/AboutContent.svelte +294 -0
  58. package/src/lib/pages/FossContent.svelte +109 -0
  59. package/src/lib/pages/HomeContent.svelte +120 -0
  60. package/src/lib/pages/LicenseContent.svelte +486 -0
  61. package/src/lib/pages/PrivacyContent.svelte +249 -0
  62. package/src/lib/pages/TermsConditionsContent.svelte +240 -0
  63. package/src/lib/pages/TermsUseContent.svelte +236 -0
  64. package/src/lib/registerServiceWorker.js +65 -0
  65. package/src/lib/styles/css/brands.css +76 -0
  66. package/src/lib/styles/css/brands.min.css +6 -0
  67. package/src/lib/styles/css/default.css +454 -0
  68. package/src/lib/styles/css/fontawesome.min.css +9 -0
  69. package/src/lib/styles/css/global.css +10 -0
  70. package/src/lib/styles/css/normalize.css +349 -0
  71. package/src/lib/styles/css/offline.css +120 -0
  72. package/src/lib/styles/css/solid.min.css +6 -0
  73. package/src/lib/styles/css/style.css +310 -0
  74. package/src/lib/styles/fa-global.css +10 -0
  75. package/src/lib/styles/global.min.css +9 -0
  76. package/src/lib/styles/index.js +11 -0
  77. package/src/lib/styles/webfonts/fa-brands-400.ttf +0 -0
  78. package/src/lib/styles/webfonts/fa-brands-400.woff2 +0 -0
  79. package/src/lib/styles/webfonts/fa-solid-900.ttf +0 -0
  80. package/src/lib/styles/webfonts/fa-solid-900.woff2 +0 -0
  81. package/src/routes/+error.svelte +43 -0
  82. package/src/routes/+layout.js +38 -0
  83. package/src/routes/+layout.svelte +113 -0
  84. package/src/routes/+page.server.js +27 -0
  85. package/src/routes/+page.svelte +82 -0
  86. package/src/routes/about/+page.server.js +17 -0
  87. package/src/routes/about/+page.svelte +66 -0
  88. package/src/routes/contact/+page.server.js +24 -0
  89. package/src/routes/example.svx +9 -0
  90. package/src/routes/foss-spotlight/+page.server.js +17 -0
  91. package/src/routes/foss-spotlight/+page.svelte +68 -0
  92. package/src/routes/license/+page.server.js +17 -0
  93. package/src/routes/license/+page.svelte +68 -0
  94. package/src/routes/page.svelte.test.js +29 -0
  95. package/src/routes/privacy-policy/+page.server.js +17 -0
  96. package/src/routes/privacy-policy/+page.svelte +68 -0
  97. package/src/routes/privacy-rights/+page.server.js +24 -0
  98. package/src/routes/terms-conditions/+page.server.js +17 -0
  99. package/src/routes/terms-conditions/+page.svelte +68 -0
  100. package/src/routes/terms-of-use/+page.server.js +17 -0
  101. package/src/routes/terms-of-use/+page.svelte +68 -0
  102. package/src/service-worker.d.ts +4 -0
  103. package/src/service-worker.js +90 -0
  104. package/static/icon-512x512-maskable.png +0 -0
  105. package/static/icon-contact.png +0 -0
  106. package/static/icon-services.png +0 -0
  107. package/static/img/qr/pgp-github.png +0 -0
  108. package/static/img/svelte.png +0 -0
  109. package/static/manifest.json +64 -0
  110. package/static/offline.html +79 -0
  111. package/static/offline.min.css +7 -0
  112. package/{robots.txt → static/robots.txt} +0 -2
  113. package/static/sitemap.xml +102 -0
  114. package/stylelint.config.js +118 -0
  115. package/svelte.config.js +56 -0
  116. package/tests/app.spec.js +67 -0
  117. package/tests/mobile.spec.js +58 -0
  118. package/tests-examples/demo-todo-app.spec.js +504 -0
  119. package/tsconfig.custom.json +39 -0
  120. package/vite.config.js +19 -0
  121. package/vitest-setup-client.js +33 -0
  122. package/vitest.config.client.js +34 -0
  123. package/vitest.config.server.js +30 -0
  124. package/404.html +0 -84
  125. package/about.html +0 -334
  126. package/about.html.br +0 -0
  127. package/about.html.gz +0 -0
  128. package/css/default.css +0 -1
  129. package/css/normalize.css +0 -1
  130. package/css/style.css +0 -1
  131. package/docs/404.html +0 -1187
  132. package/docs/assets/external/avatars.githubusercontent.com/u/170266279.png +0 -0
  133. package/docs/assets/external/img.shields.io/badge/GitHub_Package_Registry-white.ed8def48.svg +0 -1
  134. package/docs/assets/external/img.shields.io/badge/npmjs-white.681714c1.svg +0 -1
  135. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/by.svg +0 -20
  136. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/cc.svg +0 -27
  137. package/docs/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js +0 -2607
  138. package/docs/assets/images/favicon.png +0 -0
  139. package/docs/assets/javascripts/bundle.c8b220af.min.js +0 -16
  140. package/docs/assets/javascripts/bundle.c8b220af.min.js.map +0 -7
  141. package/docs/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
  142. package/docs/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
  143. package/docs/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
  144. package/docs/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
  145. package/docs/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
  146. package/docs/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
  147. package/docs/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
  148. package/docs/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
  149. package/docs/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
  150. package/docs/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
  151. package/docs/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
  152. package/docs/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
  153. package/docs/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
  154. package/docs/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
  155. package/docs/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
  156. package/docs/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
  157. package/docs/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
  158. package/docs/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
  159. package/docs/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
  160. package/docs/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
  161. package/docs/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
  162. package/docs/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
  163. package/docs/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
  164. package/docs/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
  165. package/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
  166. package/docs/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
  167. package/docs/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
  168. package/docs/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
  169. package/docs/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
  170. package/docs/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
  171. package/docs/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
  172. package/docs/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
  173. package/docs/assets/javascripts/lunr/tinyseg.js +0 -206
  174. package/docs/assets/javascripts/lunr/wordcut.js +0 -6708
  175. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js +0 -42
  176. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js.map +0 -7
  177. package/docs/assets/stylesheets/main.2afb09e1.min.css +0 -1
  178. package/docs/assets/stylesheets/main.2afb09e1.min.css.map +0 -1
  179. package/docs/assets/stylesheets/palette.06af60db.min.css +0 -1
  180. package/docs/assets/stylesheets/palette.06af60db.min.css.map +0 -1
  181. package/docs/blog/2015/01/04/secure-secure-shell/index.html +0 -1771
  182. package/docs/blog/2025/04/30/our-blog-is-live/index.html +0 -1436
  183. package/docs/blog/archive/2015/index.html +0 -1303
  184. package/docs/blog/archive/2025/index.html +0 -1291
  185. package/docs/blog/category/security/index.html +0 -1303
  186. package/docs/blog/index.html +0 -1350
  187. package/docs/conduct/index.html +0 -1509
  188. package/docs/feed_json_created.json +0 -1
  189. package/docs/feed_json_updated.json +0 -1
  190. package/docs/feed_rss_created.xml +0 -1
  191. package/docs/feed_rss_updated.xml +0 -1
  192. package/docs/fontawesome/LICENSE.txt +0 -165
  193. package/docs/fontawesome/brands/facebook.svg +0 -1
  194. package/docs/fontawesome/brands/instagram.svg +0 -1
  195. package/docs/fontawesome/brands/linkedin.svg +0 -1
  196. package/docs/fontawesome/brands/mastodon.svg +0 -1
  197. package/docs/fontawesome/solid/at.svg +0 -1
  198. package/docs/index.html +0 -1395
  199. package/docs/legal/index.html +0 -1740
  200. package/docs/privacy/index.html +0 -1615
  201. package/docs/search/search_index.json +0 -1
  202. package/docs/sitemap.xml +0 -55
  203. package/docs/sitemap.xml.gz +0 -0
  204. package/docs/tags/index.html +0 -2084
  205. package/docs/terms-conditions/index.html +0 -1655
  206. package/docs/terms-use/index.html +0 -1584
  207. package/favicon-192.png +0 -0
  208. package/favicon-512.png +0 -0
  209. package/favicon.svg.br +0 -0
  210. package/favicon.svg.gz +0 -0
  211. package/html/spotlight.html +0 -516
  212. package/html/spotlight.html.br +0 -0
  213. package/html/spotlight.html.gz +0 -0
  214. package/img/banner-1440.png +0 -0
  215. package/img/favicon-template.png +0 -0
  216. package/img/fb-cover.png +0 -0
  217. package/img/fb-cover2.png +0 -0
  218. package/img/fsf-member.png +0 -0
  219. package/img/gh-logo.png +0 -0
  220. package/img/gpl3-small.png +0 -0
  221. package/img/gpl3.png +0 -0
  222. package/img/linkedin-banner-new.png +0 -0
  223. package/img/linkedin-banner.png +0 -0
  224. package/img/linkedin-banner2.png +0 -0
  225. package/img/logo-1024x1024.png +0 -0
  226. package/img/logo-alt.png +0 -0
  227. package/img/logo-elevated.png +0 -0
  228. package/img/logo-light-elevated.png +0 -0
  229. package/img/logo-light-slogan.png +0 -0
  230. package/img/logo-light.png +0 -0
  231. package/img/logo-slogan.png +0 -0
  232. package/img/logo-transparent-black-small.png +0 -0
  233. package/img/logo-transparent-black.png +0 -0
  234. package/img/logo-transparent-elevated.png +0 -0
  235. package/img/logo-transparent-slogan.png +0 -0
  236. package/img/mastodon-banner.png +0 -0
  237. package/img/netpro-logo-transparent.png +0 -0
  238. package/img/posts/acode.png +0 -0
  239. package/img/posts/linksheet.png +0 -0
  240. package/img/posts/pmx.png +0 -0
  241. package/img/posts/tosdr.png +0 -0
  242. package/img/posts/urlcheck.png +0 -0
  243. package/img/sd311.png +0 -0
  244. package/img/shield.png +0 -0
  245. package/img/shield.svg +0 -1
  246. package/img/shield.svg.br +0 -0
  247. package/img/shield.svg.gz +0 -0
  248. package/img/shield2.png +0 -0
  249. package/img/shield3-2000x2000.png +0 -0
  250. package/img/shield3-black-1024x1024.png +0 -0
  251. package/img/shield3-black.png +0 -0
  252. package/img/shield3-white.png +0 -0
  253. package/img/trademark.jpg +0 -0
  254. package/index.html +0 -268
  255. package/index.html.br +0 -0
  256. package/index.html.gz +0 -0
  257. package/js/app.d544156ea2ba85a7d486.mjs +0 -1
  258. package/js/runtime.52b1ac291305b90de3df.mjs +0 -1
  259. package/js/vendor/.gitkeep +0 -0
  260. package/legal.html +0 -535
  261. package/legal.html.br +0 -0
  262. package/legal.html.gz +0 -0
  263. package/privacy.html +0 -404
  264. package/privacy.html.br +0 -0
  265. package/privacy.html.gz +0 -0
  266. package/site.webmanifest +0 -25
  267. package/sitemap.xml +0 -177
  268. package/terms-and-conditions.html +0 -409
  269. package/terms-and-conditions.html.br +0 -0
  270. package/terms-and-conditions.html.gz +0 -0
  271. package/terms-of-use.html +0 -380
  272. package/terms-of-use.html.br +0 -0
  273. package/terms-of-use.html.gz +0 -0
  274. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets → assets}/nsa-happy-dance.png +0 -0
  275. /package/{favicon.svg → src/lib/img/favicon.svg} +0 -0
  276. /package/{favicon-180.png → src/lib/img/icon-180x180.png} +0 -0
  277. /package/{img/badge_obtainium.png → src/lib/img/obtainium.png} +0 -0
  278. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/pgp-contact.png +0 -0
  279. /package/{img → src/lib/img}/qr/pgp-github.png +0 -0
  280. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/pgp-support.png +0 -0
  281. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/vcard.png +0 -0
  282. /package/{CNAME → static/CNAME} +0 -0
  283. /package/{favicon.ico → static/favicon.ico} +0 -0
  284. /package/{docs/img/favicon.png → static/icon-192x192.png} +0 -0
  285. /package/{docs/img/logo.png → static/icon-512x512.png} +0 -0
  286. /package/{favicon-splash.png → static/icon-splash.png} +0 -0
  287. /package/{img → static/img}/banner-1280x640.png +0 -0
  288. /package/{img → static/img}/banner-og-1200x630.png +0 -0
  289. /package/{img → static/img}/logo-transparent.png +0 -0
  290. /package/{img → static/img}/logo.png +0 -0
  291. /package/{img → static/img}/qr/pgp-contact.png +0 -0
  292. /package/{img → static/img}/qr/pgp-support.png +0 -0
  293. /package/{img → static/img}/qr/vcard.png +0 -0
@@ -0,0 +1,310 @@
1
+ /*! ==========================================================================
2
+ src/lib/styles/style.css
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ =========================================================================== */
7
+
8
+ /*! Modified from HTML5 Boilerplate v9.0.1 | MIT License | https://html5boilerplate.com/ */
9
+
10
+ /* https://github.com/h5bp/main.css#readme */
11
+
12
+ /*
13
+ * What follows is the result of much research on cross-browser styling.
14
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
15
+ * Kroc Camen, and the H5BP dev community and team.
16
+ */
17
+
18
+ /* ==========================================================================
19
+ Base styles: opinionated defaults
20
+ ========================================================================== */
21
+
22
+ html {
23
+ font-size: 1em;
24
+ line-height: 1.4;
25
+ color: #222;
26
+ scroll-behavior: smooth;
27
+ }
28
+
29
+ /*
30
+ * Remove text-shadow in selection highlight:
31
+ * https://twitter.com/miketaylr/status/12228805301
32
+ *
33
+ * Customize the background color to match your design.
34
+ */
35
+
36
+ ::-moz-selection {
37
+ background: #191919;
38
+ text-shadow: none;
39
+ }
40
+
41
+ ::selection {
42
+ background: #191919;
43
+ text-shadow: none;
44
+ }
45
+
46
+ /*
47
+ * A better looking default horizontal rule
48
+ * 1. Show the overflow in Edge and IE.
49
+ */
50
+
51
+ hr {
52
+ display: block;
53
+ height: 1px;
54
+ padding: 0;
55
+ margin: 1em 0;
56
+ border: 0;
57
+ border-top: 1px solid #ccc;
58
+ overflow: visible; /* 1 */
59
+ }
60
+
61
+ /*
62
+ * Remove the gap between audio, canvas, iframes,
63
+ * images, videos and the bottom of their containers:
64
+ * https://github.com/h5bp/html5-boilerplate/issues/440
65
+ */
66
+
67
+ audio,
68
+ canvas,
69
+ iframe,
70
+ img,
71
+ svg,
72
+ video {
73
+ vertical-align: middle;
74
+ }
75
+
76
+ /*
77
+ * Remove default fieldset styles.
78
+ */
79
+
80
+ fieldset {
81
+ padding: 0;
82
+ margin: 0;
83
+ border: 0;
84
+ }
85
+
86
+ /*
87
+ * Allow only vertical resizing of textareas.
88
+ */
89
+
90
+ textarea {
91
+ resize: vertical;
92
+ }
93
+
94
+ /* ==========================================================================
95
+ Author's custom styles
96
+ ========================================================================== */
97
+
98
+ /*
99
+ * Additional line added to hr{} under 'Base Styles'
100
+ */
101
+
102
+ body {
103
+ margin: 10px;
104
+ color: #fafafa;
105
+ background-color: #191919;
106
+ font-family: Arial, Helvetica, sans-serif;
107
+ }
108
+
109
+ /* parent link element */
110
+ a {
111
+ text-decoration: none;
112
+ }
113
+
114
+ /* unvisited link */
115
+ a:link {
116
+ color: #ffc627;
117
+ }
118
+
119
+ /* mouse over link */
120
+ a:hover {
121
+ color: #ffc627;
122
+ text-decoration: underline;
123
+ }
124
+
125
+ /* selected link */
126
+ a:active {
127
+ color: #ffc627;
128
+ text-decoration: underline;
129
+ }
130
+
131
+ /* focused link */
132
+ a:focus {
133
+ color: #191919; /* Black text when focused */
134
+ background-color: #ffc627; /* Gold background when focused */
135
+ }
136
+
137
+ /* visited link */
138
+ a:visited {
139
+ color: #7f6227;
140
+ }
141
+
142
+ /* visited and mouse over */
143
+ a:visited:hover {
144
+ color: #7f6227;
145
+ }
146
+
147
+ /* ==========================================================================
148
+ Helper classes
149
+ ========================================================================== */
150
+
151
+ /*
152
+ * Hide visually and from screen readers
153
+ */
154
+
155
+ .hidden,
156
+ [hidden] {
157
+ display: none !important;
158
+ }
159
+
160
+ /*
161
+ * Hide only visually, but have it available for screen readers:
162
+ * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility
163
+ *
164
+ * 1. For long content, line feeds are not interpreted as spaces and small width
165
+ * causes content to wrap 1 word per line:
166
+ * https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe
167
+ */
168
+
169
+ .visually-hidden {
170
+ position: absolute;
171
+ width: 1px;
172
+ height: 1px;
173
+ padding: 0;
174
+ margin: -1px;
175
+ border: 0;
176
+ clip: rect(0, 0, 0, 0);
177
+ overflow: hidden;
178
+ white-space: nowrap;
179
+
180
+ /* 1 */
181
+ }
182
+
183
+ /*
184
+ * Extends the .visually-hidden class to allow the element
185
+ * to be focusable when navigated to via the keyboard:
186
+ * https://www.drupal.org/node/897638
187
+ */
188
+
189
+ .visually-hidden.focusable:active,
190
+ .visually-hidden.focusable:focus {
191
+ position: static;
192
+ width: auto;
193
+ height: auto;
194
+ margin: 0;
195
+ clip: auto;
196
+ overflow: visible;
197
+ white-space: inherit;
198
+ }
199
+
200
+ /*
201
+ * Hide visually and from screen readers, but maintain layout
202
+ */
203
+
204
+ .invisible {
205
+ visibility: hidden;
206
+ }
207
+
208
+ /*
209
+ * Clearfix: contain floats
210
+ *
211
+ * The use of `table` rather than `block` is only necessary if using
212
+ * `::before` to contain the top-margins of child elements.
213
+ */
214
+
215
+ .clearfix::before,
216
+ .clearfix::after {
217
+ display: table;
218
+ content: "";
219
+ }
220
+
221
+ .clearfix::after {
222
+ clear: both;
223
+ }
224
+
225
+ /* ==========================================================================
226
+ EXAMPLE Media Queries for Responsive Design.
227
+ These examples override the primary ('mobile first') styles.
228
+ Modify as content requires.
229
+ ========================================================================== */
230
+
231
+ @media only screen and (width >= 35em) {
232
+ /* Style adjustments for viewports that meet the condition */
233
+ }
234
+
235
+ @media print,
236
+ (-webkit-min-device-pixel-ratio: 1.25),
237
+ (resolution >= 1.25dppx),
238
+ (resolution >= 120dpi) {
239
+ /* Style adjustments for high resolution devices */
240
+ }
241
+
242
+ /* ==========================================================================
243
+ Print styles.
244
+ Inlined to avoid the additional HTTP request:
245
+ https://www.phpied.com/delay-loading-your-print-css/
246
+ ========================================================================== */
247
+
248
+ /* stylelint-disable order/properties-order -- Maintain spreadsheet consistency */
249
+ @media print {
250
+ *,
251
+ *::before,
252
+ *::after {
253
+ background: #fff !important;
254
+ color: #000 !important;
255
+
256
+ /* Black prints faster */
257
+ box-shadow: none !important;
258
+ text-shadow: none !important;
259
+ }
260
+ /* stylelint-enable order/properties-order */
261
+
262
+ a,
263
+ a:visited {
264
+ text-decoration: underline;
265
+ }
266
+
267
+ a[href]::after {
268
+ content: " (" attr(href) ")";
269
+ }
270
+
271
+ abbr[title]::after {
272
+ content: " (" attr(title) ")";
273
+ }
274
+
275
+ /*
276
+ * Don't show links that are fragment identifiers,
277
+ * or use the `javascript:` pseudo protocol
278
+ */
279
+ a[href^="#"]::after,
280
+ a[href^="javascript:"]::after {
281
+ content: "";
282
+ }
283
+
284
+ pre {
285
+ white-space: pre-wrap !important;
286
+ }
287
+
288
+ pre,
289
+ blockquote {
290
+ border: 1px solid #999;
291
+ page-break-inside: avoid;
292
+ }
293
+
294
+ tr,
295
+ img {
296
+ page-break-inside: avoid;
297
+ }
298
+
299
+ p,
300
+ h2,
301
+ h3 {
302
+ orphans: 3;
303
+ widows: 3;
304
+ }
305
+
306
+ h2,
307
+ h3 {
308
+ page-break-after: avoid;
309
+ }
310
+ }
@@ -0,0 +1,10 @@
1
+ /*! ==========================================================================
2
+ src/lib/styles/fa-global.css
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ @import "./css/fontawesome.min.css";
9
+ @import "./css/brands.min.css";
10
+ @import "./css/solid.min.css";
@@ -0,0 +1,9 @@
1
+ /*! ==========================================================================
2
+ src/lib/styles/global.min.css
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ =========================================================================== */
7
+ /*! Modified from normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css
8
+ /*! Modified from HTML5 Boilerplate v9.0.1 | MIT License | https://html5boilerplate.com/ */
9
+ html{-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{margin:.67em 0;font-size:2em}hr{box-sizing:content-box}pre{font-family:monospace;font-size:1em}a{background-color:#0000}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted buttontext}fieldset{padding:.35em .75em .625em}legend{color:inherit;box-sizing:border-box;white-space:normal;max-width:100%;padding:0;display:table}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details{display:block}summary{display:list-item}template{display:none}html{color:#222;scroll-behavior:smooth;font-size:1em;line-height:1.4}::-moz-selection{text-shadow:none;background:#191919}::selection{text-shadow:none;background:#191919}hr{border:0;border-top:1px solid #ccc;height:1px;margin:1em 0;padding:0;display:block;overflow:visible}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}body{color:#fafafa;background-color:#191919;margin:10px;font-family:Arial,Helvetica,sans-serif}a{text-decoration:none}a:link{color:#ffc627}a:hover,a:active{color:#ffc627;text-decoration:underline}a:focus{color:#191919;background-color:#ffc627}a:visited,a:visited:hover{color:#7f6227}.hidden,[hidden]{display:none!important}.visually-hidden{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visually-hidden.focusable:active,.visually-hidden.focusable:focus{clip:auto;width:auto;height:auto;white-space:inherit;margin:0;position:static;overflow:visible}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}@media print{*,:before,:after{color:#000!important;box-shadow:none!important;text-shadow:none!important;background:#fff!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^=\#]:after,a[href^=javascript\:]:after{content:""}pre{white-space:pre-wrap!important}pre,blockquote{page-break-inside:avoid;border:1px solid #999}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.full-width-section{background-position:50%;background-size:cover;width:100%;max-width:1920px;margin:0 auto}.container{max-width:1200px;margin:0 auto;padding:0 12px}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{border-collapse:collapse;border-spacing:0;margin:0 auto}.bnav td{word-break:normal;border-style:none;padding:10px;font-size:.875rem;font-weight:700;line-height:1.125rem;overflow:hidden}.bnav th{word-break:normal;border-style:none;padding:10px;font-size:.875rem;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}.subhead{letter-spacing:-.035em;font-variant:small-caps;font-size:1.5rem;line-height:1.75rem}.bolditalic{font-style:italic;font-weight:700}.bquote{border-left:3px solid #9e9e9e;margin-left:30px;padding-left:10px;font-style:italic}.small-text{font-size:.75rem;line-height:1.125rem}.large-text-center{text-align:center;font-size:1.25rem;line-height:1.75rem}.prewrap{white-space:pre-wrap;display:block}.hr-styled{width:75%;margin:auto}.center-text{text-align:center}.copyright{text-align:center;font-size:.75rem;line-height:1.125rem}.visited{color:#7f6227}.center-nav{text-align:center;padding:5px;font-size:.875rem;line-height:1.125rem}.block{resize:none;background:0 0;border:none;border-radius:0;outline:none;width:100%;font-size:.75rem;line-height:1.125rem}.fingerprint{white-space:pre-line;font-weight:700;display:block}.pgp-image{width:125px;height:125px}.spacer{margin:2rem 0}.separator{margin:0 .5rem}
@@ -0,0 +1,11 @@
1
+ /* ==========================================================================
2
+ src/lib/styles/index.js
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ // Import transformed and minified stylsheets
9
+ import "./global.min.css";
10
+ import "./fa-global.css";
11
+
@@ -0,0 +1,43 @@
1
+ <!-- ==========================================================================
2
+ src/routes/+error.svelte
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== -->
7
+
8
+ <script>
9
+ /**
10
+ * @typedef {Object} Error
11
+ * @property {string} [message] - The message explaining the error.
12
+ */
13
+
14
+ /**
15
+ * The HTTP status code of the error (e.g., 404, 500).
16
+ * @type {number}
17
+ */
18
+ export let status;
19
+
20
+ /**
21
+ * The error object, containing details about what went wrong.
22
+ * @type {Error}
23
+ */
24
+ export let error;
25
+
26
+ const centerText = "center-text";
27
+
28
+ // Get the pathname from the URL if available
29
+ const pathname =
30
+ typeof window !== "undefined" ? window.location.pathname : "/";
31
+ </script>
32
+
33
+ <main>
34
+ <h1 class={centerText}
35
+ >{status} - {status === 404 ? "Page Not Found" : "Error"}</h1>
36
+ <p class={centerText}>
37
+ {#if status === 404}
38
+ The page "{pathname}" does not exist.
39
+ {:else}
40
+ {error?.message || "An error occurred"}
41
+ {/if}
42
+ </p>
43
+ </main>
@@ -0,0 +1,38 @@
1
+ /* ==========================================================================
2
+ src/routes/+layout.js
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ /**
9
+ * @typedef {object} MetaData
10
+ * @property {string} title - The title of the page
11
+ * @property {string} description - The description of the page
12
+ */
13
+
14
+ /**
15
+ * Fallback metadata to satisfy typing in +layout.svelte and +page.svelte.
16
+ * Actual meta content is provided per-route via +page.server.js.
17
+ */
18
+ const fallbackMeta = {
19
+ title: "Security, Networking, Privacy — Network Pro™",
20
+ description:
21
+ "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
22
+ };
23
+
24
+ export const prerender = "auto";
25
+ export const trailingSlash = "never";
26
+
27
+ /**
28
+ * @param {{ url: URL }} param0
29
+ * @returns {{ pathname: string, meta: MetaData }}
30
+ */
31
+ export function load({ url }) {
32
+ const normalizedPathname = url.pathname.replace(/\/+$/, "") || "/";
33
+
34
+ return {
35
+ pathname: normalizedPathname,
36
+ meta: fallbackMeta, // Required to ensure meta always exists for typing
37
+ };
38
+ }
@@ -0,0 +1,113 @@
1
+ <!-- ==========================================================================
2
+ src/routes/+layout.svelte
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== -->
7
+
8
+ <script>
9
+ export let data;
10
+
11
+ import ContainerSection from "$lib/components/ContainerSection.svelte";
12
+ import Footer from "$lib/components/layout/Footer.svelte";
13
+ import HeaderDefault from "$lib/components/layout/HeaderDefault.svelte";
14
+ import HeaderHome from "$lib/components/layout/HeaderHome.svelte";
15
+ import { browser } from "$app/environment";
16
+ // TODO: Testing in progress
17
+ import { registerServiceWorker } from "$lib/registerServiceWorker.js";
18
+ import "$lib/styles";
19
+
20
+ // Import favicon images
21
+ import logoPng from "$lib/img/logo-web.png";
22
+ import logoWbp from "$lib/img/logo-web.webp";
23
+ import faviconSvg from "$lib/img/favicon.svg";
24
+ import appleTouchIcon from "$lib/img/icon-180x180.png";
25
+
26
+ /**
27
+ * @type {string}
28
+ * Style class for the mobile-web-app-capable meta tag.
29
+ * OpenGraph URL for the website.
30
+ * Company name for the website.
31
+ * Twitter account for the website.
32
+ */
33
+ const webApp = "mobile-web-app-capable";
34
+ const ogUrl = "https://netwk.pro";
35
+ const companyName = "Network Pro Strategies";
36
+ const twitterAct = "@NetEng_Pro";
37
+
38
+ if (browser) {
39
+ // Preload logo images
40
+ [logoPng, logoWbp].forEach((src) => {
41
+ const img = new Image();
42
+ img.src = src;
43
+ });
44
+
45
+ // Preload favicon SVG
46
+ const touchImg = new Image();
47
+ // Preload Apple Touch icon
48
+ touchImg.src = appleTouchIcon;
49
+
50
+ // TODO: Testing in progress
51
+ // Register the service worker
52
+ registerServiceWorker();
53
+ }
54
+
55
+ // fallback values if data.meta not set
56
+ const metaTitle =
57
+ data?.meta?.title || "Security, Networking, Privacy — Network Pro™";
58
+ const metaDescription =
59
+ data?.meta?.description ||
60
+ "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™";
61
+
62
+ // Pathname normalization takes place in +layout.js
63
+ </script>
64
+
65
+ <svelte:head>
66
+ <!-- Static only, dynamic content moved to $lib/components/MetaTags.svelte -->
67
+ <link rel="preload" href={logoWbp} as="image" type="image/webp" />
68
+ <link rel="preload" href={logoPng} as="image" type="image/png" />
69
+ <link rel="preload" href={faviconSvg} as="image" type="image/svg+xml" />
70
+ <link rel="preload" href={appleTouchIcon} as="image" type="image/png" />
71
+
72
+ <link rel="icon" href={faviconSvg} type="image/svg+xml" />
73
+ <link rel="apple-touch-icon" href={appleTouchIcon} />
74
+
75
+ <!-- PWA -->
76
+ <link rel="manifest" href="/manifest.json" />
77
+ <meta name={webApp} content="yes" />
78
+ <meta name={"apple-" + webApp} content="yes" />
79
+ <meta
80
+ name="apple-mobile-web-app-status-bar-style"
81
+ content="black-translucent" />
82
+ <meta name="theme-color" content="#ffc627" />
83
+
84
+ <meta
85
+ name="facebook-domain-verification"
86
+ content="bx4ham0zkpvzztzu213bhpt76m9siq" />
87
+ </svelte:head>
88
+
89
+ <!-- BEGIN HEADER -->
90
+ <header id="header-nav">
91
+ <ContainerSection>
92
+ {#if data.pathname === "/"}
93
+ <!-- Render the Home Header for the root route -->
94
+ <HeaderHome />
95
+ {:else}
96
+ <!-- Render the Default Header for all other routes -->
97
+ <HeaderDefault />
98
+ {/if}
99
+ </ContainerSection>
100
+ </header>
101
+ <!-- END HEADER -->
102
+
103
+ <main>
104
+ <slot />
105
+ </main>
106
+
107
+ <!-- BEGIN FOOTER -->
108
+ <footer id="licensing">
109
+ <ContainerSection>
110
+ <Footer />
111
+ </ContainerSection>
112
+ </footer>
113
+ <!-- END FOOTER -->
@@ -0,0 +1,27 @@
1
+ /* ==========================================================================
2
+ src/routes/+page.server.js
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ import { defaultMeta, meta } from "$lib/meta.js";
9
+
10
+ export const prerender = false;
11
+
12
+ /**
13
+ * @typedef {object} MetaData
14
+ * @property {string} title - The title of the page
15
+ * @property {string} description - The description of the page
16
+ */
17
+
18
+ /**
19
+ * Load metadata for the root route.
20
+ *
21
+ * @returns {{ meta: MetaData }}
22
+ */
23
+ export function load() {
24
+ return {
25
+ meta: meta["/"] || defaultMeta,
26
+ };
27
+ }
@@ -0,0 +1,82 @@
1
+ <!-- ==========================================================================
2
+ src/routes/+page.svelte
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== -->
7
+
8
+ <script>
9
+ import Badges from "$lib/components/Badges.svelte";
10
+ import FullWidthSection from "$lib/components/FullWidthSection.svelte";
11
+ import HomeContent from "$lib/pages/HomeContent.svelte";
12
+ import LegalNav from "$lib/components/LegalNav.svelte";
13
+ import Logo from "$lib/components/Logo.svelte";
14
+ import SocialMedia from "$lib/components/SocialMedia.svelte";
15
+ import MetaTags from "$lib/components/MetaTags.svelte";
16
+
17
+ /**
18
+ * @type {string}
19
+ * Style class for the horizontal rule element.
20
+ */
21
+ const hrStyle = "hr-styled";
22
+
23
+ /**
24
+ * @type {string}
25
+ * Style class for the div element.
26
+ */
27
+ const spaceStyle = "spacer";
28
+
29
+ export let data;
30
+ </script>
31
+
32
+ <MetaTags title={data.meta.title} description={data.meta.description} />
33
+
34
+ <link rel="canonical" href="https://netwk.pro" />
35
+
36
+ <section id="home-page" data-testid="home-page">
37
+ <FullWidthSection>
38
+ <!-- BEGIN TITLE -->
39
+ <section id="page-title">
40
+ <Logo />
41
+ </section>
42
+ <!-- END TITLE -->
43
+
44
+ <div class={spaceStyle}></div>
45
+
46
+ <hr class={hrStyle} />
47
+
48
+ <div class={spaceStyle}></div>
49
+
50
+ <!-- BEGIN MAIN CONTENT -->
51
+ <section id="main-content">
52
+ <HomeContent />
53
+ </section>
54
+ <!-- END MAIN CONTENT -->
55
+
56
+ <div class={spaceStyle}></div>
57
+
58
+ <!-- BEGIN SOCIAL MEDIA -->
59
+ <section id="social-media">
60
+ <SocialMedia />
61
+ </section>
62
+ <!-- END SOCIAL MEDIA -->
63
+
64
+ <hr class={hrStyle} />
65
+
66
+ <div class={spaceStyle}></div>
67
+
68
+ <!-- BEGIN LEGAL -->
69
+ <section id="legal-nav">
70
+ <LegalNav />
71
+ </section>
72
+ <!-- END LEGAL -->
73
+
74
+ <div class={spaceStyle}></div>
75
+
76
+ <!-- BEGIN BADGES -->
77
+ <section id="badges">
78
+ <Badges />
79
+ </section>
80
+ <!-- END BADGES -->
81
+ </FullWidthSection>
82
+ </section>
@@ -0,0 +1,17 @@
1
+ /* ==========================================================================
2
+ src/routes/about/+page.server.js
3
+
4
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ This file is part of Network Pro.
6
+ ========================================================================== */
7
+
8
+ import { defaultMeta, meta } from "$lib/meta.js";
9
+
10
+ export const prerender = false;
11
+
12
+ /** @type {import('./$types').PageServerLoad} */
13
+ export function load() {
14
+ return {
15
+ meta: meta["/about"] || defaultMeta,
16
+ };
17
+ }