@networkpro/web 0.13.2 → 1.0.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 (282) hide show
  1. package/CODE_OF_CONDUCT.md +172 -0
  2. package/LICENSE.md +4 -4
  3. package/README.md +11 -10
  4. package/assets/bin/contact.vcf +13 -0
  5. package/assets/bin/contact@s.neteng.pro.aexpk +17 -0
  6. package/assets/bin/contact@s.neteng.pro.asc +17 -0
  7. package/assets/bin/github@sl.neteng.cc.aexpk +29 -0
  8. package/assets/bin/github@sl.neteng.cc.asc +29 -0
  9. package/assets/bin/linksheet.json +8 -0
  10. package/assets/bin/support@neteng.pro.aexpk +47 -0
  11. package/assets/bin/support@neteng.pro.asc +47 -0
  12. package/assets/consulting-terms.pdf +0 -0
  13. package/eslint.config.mjs +112 -0
  14. package/jsconfig.json +28 -0
  15. package/netlify.toml +13 -0
  16. package/package.json +64 -61
  17. package/playwright.config.js +79 -0
  18. package/postcss.config.mjs +14 -0
  19. package/scripts/bundleCss.js +40 -0
  20. package/src/app.d.ts +15 -0
  21. package/src/app.html +81 -0
  22. package/src/demo.spec.js +14 -0
  23. package/src/lib/components/Badges.svelte +74 -0
  24. package/src/lib/components/ContainerSection.svelte +19 -0
  25. package/src/lib/components/FullWidthSection.svelte +13 -0
  26. package/src/lib/components/LegalNav.svelte +75 -0
  27. package/src/lib/components/Logo.svelte +110 -0
  28. package/src/lib/components/SocialMedia.svelte +70 -0
  29. package/src/lib/components/foss/FossFeatures.svelte +24 -0
  30. package/src/lib/components/foss/FossItemContent.svelte +153 -0
  31. package/src/lib/components/layout/Footer.svelte +188 -0
  32. package/src/lib/components/layout/HeaderDefault.svelte +86 -0
  33. package/src/lib/components/layout/HeaderHome.svelte +84 -0
  34. package/src/lib/data/fossData.js +233 -0
  35. package/src/lib/images.js +77 -0
  36. package/src/lib/img/badges/cc-by-badge.png +0 -0
  37. package/src/lib/img/badges/gpl-badge.svg +1 -0
  38. package/src/lib/img/by.svg +1 -0
  39. package/src/lib/img/cc.svg +1 -0
  40. package/src/lib/img/logo-web.png +0 -0
  41. package/src/lib/img/logo-web.webp +0 -0
  42. package/src/lib/img/obtainium.webp +0 -0
  43. package/src/lib/img/posts/acode.png +0 -0
  44. package/src/lib/img/posts/acode.webp +0 -0
  45. package/src/lib/img/posts/linksheet.png +0 -0
  46. package/src/lib/img/posts/linksheet.webp +0 -0
  47. package/src/lib/img/posts/pmx.png +0 -0
  48. package/src/lib/img/posts/pmx.webp +0 -0
  49. package/src/lib/img/posts/tosdr.png +0 -0
  50. package/src/lib/img/posts/tosdr.webp +0 -0
  51. package/src/lib/img/posts/urlcheck.png +0 -0
  52. package/src/lib/img/posts/urlcheck.webp +0 -0
  53. package/src/lib/index.js +43 -0
  54. package/src/lib/pages/AboutContent.svelte +294 -0
  55. package/src/lib/pages/FossContent.svelte +109 -0
  56. package/src/lib/pages/HomeContent.svelte +120 -0
  57. package/src/lib/pages/LicenseContent.svelte +486 -0
  58. package/src/lib/pages/PrivacyContent.svelte +249 -0
  59. package/src/lib/pages/TermsConditionsContent.svelte +240 -0
  60. package/src/lib/pages/TermsUseContent.svelte +236 -0
  61. package/src/lib/registerServiceWorker.js +65 -0
  62. package/src/lib/styles/css/brands.css +76 -0
  63. package/src/lib/styles/css/brands.min.css +6 -0
  64. package/src/lib/styles/css/default.css +454 -0
  65. package/src/lib/styles/css/fontawesome.min.css +9 -0
  66. package/src/lib/styles/css/global.css +10 -0
  67. package/src/lib/styles/css/normalize.css +349 -0
  68. package/src/lib/styles/css/offline.css +120 -0
  69. package/src/lib/styles/css/solid.min.css +6 -0
  70. package/src/lib/styles/css/style.css +310 -0
  71. package/src/lib/styles/fa-global.css +10 -0
  72. package/src/lib/styles/global.min.css +9 -0
  73. package/src/lib/styles/index.js +11 -0
  74. package/src/lib/styles/webfonts/fa-brands-400.ttf +0 -0
  75. package/src/lib/styles/webfonts/fa-brands-400.woff2 +0 -0
  76. package/src/lib/styles/webfonts/fa-solid-900.ttf +0 -0
  77. package/src/lib/styles/webfonts/fa-solid-900.woff2 +0 -0
  78. package/src/routes/+error.svelte +43 -0
  79. package/src/routes/+layout.js +94 -0
  80. package/src/routes/+layout.svelte +110 -0
  81. package/src/routes/+page.svelte +77 -0
  82. package/src/routes/about/+page.svelte +61 -0
  83. package/src/routes/contact/+page.server.js +24 -0
  84. package/src/routes/example.svx +9 -0
  85. package/src/routes/foss-spotlight/+page.svelte +63 -0
  86. package/src/routes/license/+page.svelte +63 -0
  87. package/src/routes/page.svelte.test.js +18 -0
  88. package/src/routes/privacy-policy/+page.svelte +63 -0
  89. package/src/routes/privacy-rights/+page.server.js +24 -0
  90. package/src/routes/terms-conditions/+page.svelte +63 -0
  91. package/src/routes/terms-of-use/+page.svelte +63 -0
  92. package/src/service-worker.d.ts +4 -0
  93. package/src/service-worker.js +90 -0
  94. package/static/icon-512x512-maskable.png +0 -0
  95. package/static/icon-contact.png +0 -0
  96. package/static/icon-services.png +0 -0
  97. package/static/img/svelte.png +0 -0
  98. package/static/manifest.json +64 -0
  99. package/static/offline.html +79 -0
  100. package/static/offline.min.css +7 -0
  101. package/{robots.txt → static/robots.txt} +0 -2
  102. package/static/sitemap.xml +102 -0
  103. package/stylelint.config.js +118 -0
  104. package/svelte.config.js +56 -0
  105. package/tests/app.spec.js +67 -0
  106. package/tests/mobile.spec.js +58 -0
  107. package/tests-examples/demo-todo-app.spec.js +504 -0
  108. package/tsconfig.custom.json +39 -0
  109. package/vite.config.js +19 -0
  110. package/vitest-setup-client.js +33 -0
  111. package/vitest.config.client.js +34 -0
  112. package/vitest.config.server.js +30 -0
  113. package/404.html +0 -84
  114. package/about.html +0 -334
  115. package/about.html.br +0 -0
  116. package/about.html.gz +0 -0
  117. package/css/default.css +0 -1
  118. package/css/normalize.css +0 -1
  119. package/css/style.css +0 -1
  120. package/docs/404.html +0 -1187
  121. package/docs/assets/external/avatars.githubusercontent.com/u/170266279.png +0 -0
  122. package/docs/assets/external/img.shields.io/badge/GitHub_Package_Registry-white.ed8def48.svg +0 -1
  123. package/docs/assets/external/img.shields.io/badge/npmjs-white.681714c1.svg +0 -1
  124. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/by.svg +0 -20
  125. package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/cc.svg +0 -27
  126. package/docs/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js +0 -2607
  127. package/docs/assets/images/favicon.png +0 -0
  128. package/docs/assets/javascripts/bundle.c8b220af.min.js +0 -16
  129. package/docs/assets/javascripts/bundle.c8b220af.min.js.map +0 -7
  130. package/docs/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
  131. package/docs/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
  132. package/docs/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
  133. package/docs/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
  134. package/docs/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
  135. package/docs/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
  136. package/docs/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
  137. package/docs/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
  138. package/docs/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
  139. package/docs/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
  140. package/docs/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
  141. package/docs/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
  142. package/docs/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
  143. package/docs/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
  144. package/docs/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
  145. package/docs/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
  146. package/docs/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
  147. package/docs/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
  148. package/docs/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
  149. package/docs/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
  150. package/docs/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
  151. package/docs/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
  152. package/docs/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
  153. package/docs/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
  154. package/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
  155. package/docs/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
  156. package/docs/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
  157. package/docs/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
  158. package/docs/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
  159. package/docs/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
  160. package/docs/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
  161. package/docs/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
  162. package/docs/assets/javascripts/lunr/tinyseg.js +0 -206
  163. package/docs/assets/javascripts/lunr/wordcut.js +0 -6708
  164. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js +0 -42
  165. package/docs/assets/javascripts/workers/search.f8cc74c7.min.js.map +0 -7
  166. package/docs/assets/stylesheets/main.2afb09e1.min.css +0 -1
  167. package/docs/assets/stylesheets/main.2afb09e1.min.css.map +0 -1
  168. package/docs/assets/stylesheets/palette.06af60db.min.css +0 -1
  169. package/docs/assets/stylesheets/palette.06af60db.min.css.map +0 -1
  170. package/docs/blog/2015/01/04/secure-secure-shell/index.html +0 -1771
  171. package/docs/blog/2025/04/30/our-blog-is-live/index.html +0 -1436
  172. package/docs/blog/archive/2015/index.html +0 -1303
  173. package/docs/blog/archive/2025/index.html +0 -1291
  174. package/docs/blog/category/security/index.html +0 -1303
  175. package/docs/blog/index.html +0 -1350
  176. package/docs/conduct/index.html +0 -1509
  177. package/docs/feed_json_created.json +0 -1
  178. package/docs/feed_json_updated.json +0 -1
  179. package/docs/feed_rss_created.xml +0 -1
  180. package/docs/feed_rss_updated.xml +0 -1
  181. package/docs/fontawesome/LICENSE.txt +0 -165
  182. package/docs/fontawesome/brands/facebook.svg +0 -1
  183. package/docs/fontawesome/brands/instagram.svg +0 -1
  184. package/docs/fontawesome/brands/linkedin.svg +0 -1
  185. package/docs/fontawesome/brands/mastodon.svg +0 -1
  186. package/docs/fontawesome/solid/at.svg +0 -1
  187. package/docs/index.html +0 -1395
  188. package/docs/legal/index.html +0 -1740
  189. package/docs/privacy/index.html +0 -1615
  190. package/docs/search/search_index.json +0 -1
  191. package/docs/sitemap.xml +0 -55
  192. package/docs/sitemap.xml.gz +0 -0
  193. package/docs/tags/index.html +0 -2084
  194. package/docs/terms-conditions/index.html +0 -1655
  195. package/docs/terms-use/index.html +0 -1584
  196. package/favicon-192.png +0 -0
  197. package/favicon-512.png +0 -0
  198. package/favicon.svg.br +0 -0
  199. package/favicon.svg.gz +0 -0
  200. package/html/spotlight.html +0 -516
  201. package/html/spotlight.html.br +0 -0
  202. package/html/spotlight.html.gz +0 -0
  203. package/img/banner-1280x640.png +0 -0
  204. package/img/banner-1440.png +0 -0
  205. package/img/banner-og-1200x630.png +0 -0
  206. package/img/favicon-template.png +0 -0
  207. package/img/fb-cover.png +0 -0
  208. package/img/fb-cover2.png +0 -0
  209. package/img/fsf-member.png +0 -0
  210. package/img/gh-logo.png +0 -0
  211. package/img/gpl3-small.png +0 -0
  212. package/img/gpl3.png +0 -0
  213. package/img/linkedin-banner-new.png +0 -0
  214. package/img/linkedin-banner.png +0 -0
  215. package/img/linkedin-banner2.png +0 -0
  216. package/img/logo-1024x1024.png +0 -0
  217. package/img/logo-alt.png +0 -0
  218. package/img/logo-elevated.png +0 -0
  219. package/img/logo-light-elevated.png +0 -0
  220. package/img/logo-light-slogan.png +0 -0
  221. package/img/logo-light.png +0 -0
  222. package/img/logo-slogan.png +0 -0
  223. package/img/logo-transparent-black-small.png +0 -0
  224. package/img/logo-transparent-black.png +0 -0
  225. package/img/logo-transparent-elevated.png +0 -0
  226. package/img/logo-transparent-slogan.png +0 -0
  227. package/img/mastodon-banner.png +0 -0
  228. package/img/netpro-logo-transparent.png +0 -0
  229. package/img/posts/acode.png +0 -0
  230. package/img/posts/linksheet.png +0 -0
  231. package/img/posts/pmx.png +0 -0
  232. package/img/posts/tosdr.png +0 -0
  233. package/img/posts/urlcheck.png +0 -0
  234. package/img/qr/pgp-contact.png +0 -0
  235. package/img/qr/pgp-support.png +0 -0
  236. package/img/qr/vcard.png +0 -0
  237. package/img/sd311.png +0 -0
  238. package/img/shield.png +0 -0
  239. package/img/shield.svg +0 -1
  240. package/img/shield.svg.br +0 -0
  241. package/img/shield.svg.gz +0 -0
  242. package/img/shield2.png +0 -0
  243. package/img/shield3-2000x2000.png +0 -0
  244. package/img/shield3-black-1024x1024.png +0 -0
  245. package/img/shield3-black.png +0 -0
  246. package/img/shield3-white.png +0 -0
  247. package/img/trademark.jpg +0 -0
  248. package/index.html +0 -268
  249. package/index.html.br +0 -0
  250. package/index.html.gz +0 -0
  251. package/js/app.d544156ea2ba85a7d486.mjs +0 -1
  252. package/js/runtime.52b1ac291305b90de3df.mjs +0 -1
  253. package/js/vendor/.gitkeep +0 -0
  254. package/legal.html +0 -535
  255. package/legal.html.br +0 -0
  256. package/legal.html.gz +0 -0
  257. package/privacy.html +0 -404
  258. package/privacy.html.br +0 -0
  259. package/privacy.html.gz +0 -0
  260. package/site.webmanifest +0 -25
  261. package/sitemap.xml +0 -177
  262. package/terms-and-conditions.html +0 -409
  263. package/terms-and-conditions.html.br +0 -0
  264. package/terms-and-conditions.html.gz +0 -0
  265. package/terms-of-use.html +0 -380
  266. package/terms-of-use.html.br +0 -0
  267. package/terms-of-use.html.gz +0 -0
  268. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets → assets}/nsa-happy-dance.png +0 -0
  269. /package/{favicon.svg → src/lib/img/favicon.svg} +0 -0
  270. /package/{favicon-180.png → src/lib/img/icon-180x180.png} +0 -0
  271. /package/{img/badge_obtainium.png → src/lib/img/obtainium.png} +0 -0
  272. /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
  273. /package/{img → src/lib/img}/qr/pgp-github.png +0 -0
  274. /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
  275. /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/vcard.png +0 -0
  276. /package/{CNAME → static/CNAME} +0 -0
  277. /package/{favicon.ico → static/favicon.ico} +0 -0
  278. /package/{docs/img/favicon.png → static/icon-192x192.png} +0 -0
  279. /package/{docs/img/logo.png → static/icon-512x512.png} +0 -0
  280. /package/{favicon-splash.png → static/icon-splash.png} +0 -0
  281. /package/{img → static/img}/logo-transparent.png +0 -0
  282. /package/{img → static/img}/logo.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,94 @@
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
+ * @type {Record<string, MetaData>}
16
+ * Defines metadata for specific routes. The key is the pathname (string),
17
+ * and the value is an object containing the title and description for the route.
18
+ */
19
+ const meta = {
20
+ "/": {
21
+ title:
22
+ "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
23
+ description:
24
+ "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
25
+ },
26
+ "/about": {
27
+ title: "About Us — Network Pro™",
28
+ description: "About Us | Security, Networking, Privacy — Network Pro™",
29
+ },
30
+ "/privacy-policy": {
31
+ title: "Privacy Policy — Network Pro™",
32
+ description:
33
+ "Privacy Policy | Security, Networking, Privacy — Network Pro™",
34
+ },
35
+ "/terms-of-use": {
36
+ title: "Website Terms of Use — Network Pro™",
37
+ description:
38
+ "Website Terms of Use | Security, Networking, Privacy — Network Pro™",
39
+ },
40
+ "/license": {
41
+ title: "Legal, Copyright, and Licensing — Network Pro™",
42
+ description:
43
+ "Legal, Copyright, and Licensing | Security, Networking, Privacy — Network Pro™",
44
+ },
45
+ "/terms-conditions": {
46
+ title: "Consulting Terms and Conditions — Network Pro™",
47
+ description:
48
+ "Terms and Conditions | Security, Networking, Privacy — Network Pro™",
49
+ },
50
+ "/foss-spotlight": {
51
+ title: "FOSS Spotlight — Network Pro™",
52
+ description:
53
+ "FOSS Spotlight | Security, Networking, Privacy — Network Pro™",
54
+ },
55
+ "/contact": {
56
+ title: "Contact Form — Network Pro™",
57
+ description: "Contact Form | Security, Networking, Privacy — Network Pro™",
58
+ },
59
+ "/privacy-rights": {
60
+ title: "Privacy Rights Request Form — Network Pro™",
61
+ description:
62
+ "Privacy Rights Request Form | Security, Networking, Privacy — Network Pro™",
63
+ },
64
+ };
65
+
66
+ // Fallback metadata for all routes
67
+ const defaultMeta = {
68
+ title: "Loading... | Network Pro™",
69
+ description:
70
+ "Please wait while the content loads... | Security, Networking, Privacy — Network Pro™",
71
+ };
72
+
73
+ export const prerender = "auto";
74
+ export const trailingSlash = "never";
75
+
76
+ /**
77
+ * @param {{ url: URL }} param0
78
+ * @returns {{ pathname: string, meta: MetaData }}
79
+ * The load function returns the current pathname and the appropriate metadata
80
+ * for the route, ensuring that default metadata is used if no specific route is defined.
81
+ */
82
+ export function load({ url }) {
83
+ // Normalize the pathname to remove trailing slashes
84
+ const normalizedPathname = url.pathname.replace(/\/+$/, "") || "/";
85
+
86
+ // Determine metadata based on static routes, fallback to defaultMeta
87
+ const currentMeta = meta[normalizedPathname] || defaultMeta;
88
+
89
+ // Return the metadata and pathname to the layout
90
+ return {
91
+ pathname: normalizedPathname,
92
+ meta: currentMeta,
93
+ };
94
+ }
@@ -0,0 +1,110 @@
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
+ import ContainerSection from "$lib/components/ContainerSection.svelte";
10
+ import Footer from "$lib/components/layout/Footer.svelte";
11
+ import HeaderDefault from "$lib/components/layout/HeaderDefault.svelte";
12
+ import HeaderHome from "$lib/components/layout/HeaderHome.svelte";
13
+ import { browser } from "$app/environment";
14
+ // TODO: Testing in progress
15
+ import { registerServiceWorker } from "$lib/registerServiceWorker.js";
16
+
17
+ // Import logo images and favicons and format for preloading
18
+ import logoPng from "$lib/img/logo-web.png";
19
+ import logoWbp from "$lib/img/logo-web.webp";
20
+ import faviconSvg from "$lib/img/favicon.svg";
21
+ import appleTouchIcon from "$lib/img/icon-180x180.png";
22
+
23
+ /**
24
+ * @type {string}
25
+ * Style class for the mobile-web-app-capable meta tag.
26
+ */
27
+ const webApp = "mobile-web-app-capable";
28
+
29
+ if (browser) {
30
+ // Preload logo images
31
+ [logoPng, logoWbp].forEach((src) => {
32
+ const img = new Image();
33
+ img.src = src;
34
+ });
35
+
36
+ // Preload favicon SVG
37
+ fetch(faviconSvg).then((response) => response.text());
38
+
39
+ // Preload Apple Touch icon
40
+ const touchImg = new Image();
41
+ touchImg.src = appleTouchIcon;
42
+
43
+ // TODO: Testing in progress
44
+ // Register the service worker
45
+ registerServiceWorker();
46
+ }
47
+
48
+ // Import global and FontAwesome styles and web fonts
49
+ import "$lib/styles";
50
+
51
+ export let data;
52
+
53
+ // Pathname normalization takes place in +layout.js
54
+ </script>
55
+
56
+ <!-- Update the document's metadata dynamically -->
57
+ <svelte:head>
58
+ <title>{data?.meta?.title || "Network Pro Strategies (Network Pro™)"}</title>
59
+ <meta
60
+ name="description"
61
+ content={data?.meta?.description ||
62
+ "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™"} />
63
+
64
+ <!-- Standard favicon and Apple Touch icon references -->
65
+ <link rel="icon" href={faviconSvg} type="image/svg+xml" />
66
+ <link rel="apple-touch-icon" href={appleTouchIcon} />
67
+
68
+ <!-- Preload links for all four critical assets -->
69
+ {#if browser}
70
+ <link rel="preload" href={logoWbp} as="image" type="image/webp" />
71
+ <link rel="preload" href={logoPng} as="image" type="image/png" />
72
+ <link rel="preload" href={faviconSvg} as="image" type="image/svg+xml" />
73
+ <link rel="preload" href={appleTouchIcon} as="image" type="image/png" />
74
+ {/if}
75
+
76
+ <!-- PWA-specific meta tags -->
77
+ <link rel="manifest" href="/manifest.json" />
78
+ <meta name={webApp} content="yes" />
79
+ <meta name={"apple-" + webApp} content="yes" />
80
+ <meta
81
+ name="apple-mobile-web-app-status-bar-style"
82
+ content="black-translucent" />
83
+ <meta name="theme-color" content="#ffc627" />
84
+ </svelte:head>
85
+
86
+ <!-- BEGIN HEADER -->
87
+ <header id="header-nav">
88
+ <ContainerSection>
89
+ {#if data.pathname === "/"}
90
+ <!-- Render the Home Header for the root route -->
91
+ <HeaderHome />
92
+ {:else}
93
+ <!-- Render the Default Header for all other routes -->
94
+ <HeaderDefault />
95
+ {/if}
96
+ </ContainerSection>
97
+ </header>
98
+ <!-- END HEADER -->
99
+
100
+ <main>
101
+ <slot />
102
+ </main>
103
+
104
+ <!-- BEGIN FOOTER -->
105
+ <footer id="licensing">
106
+ <ContainerSection>
107
+ <Footer />
108
+ </ContainerSection>
109
+ </footer>
110
+ <!-- END FOOTER -->
@@ -0,0 +1,77 @@
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
+
16
+ /**
17
+ * @type {string}
18
+ * Style class for the horizontal rule element.
19
+ */
20
+ const hrStyle = "hr-styled";
21
+
22
+ /**
23
+ * @type {string}
24
+ * Style class for the div element.
25
+ */
26
+ const spaceStyle = "spacer";
27
+ </script>
28
+
29
+ <link rel="canonical" href="https://netwk.pro" />
30
+
31
+ <section id="home-page" data-testid="home-page">
32
+ <FullWidthSection>
33
+ <!-- BEGIN TITLE -->
34
+ <section id="page-title">
35
+ <Logo />
36
+ </section>
37
+ <!-- END TITLE -->
38
+
39
+ <div class={spaceStyle}></div>
40
+
41
+ <hr class={hrStyle} />
42
+
43
+ <div class={spaceStyle}></div>
44
+
45
+ <!-- BEGIN MAIN CONTENT -->
46
+ <section id="main-content">
47
+ <HomeContent />
48
+ </section>
49
+ <!-- END MAIN CONTENT -->
50
+
51
+ <div class={spaceStyle}></div>
52
+
53
+ <!-- BEGIN SOCIAL MEDIA -->
54
+ <section id="social-media">
55
+ <SocialMedia />
56
+ </section>
57
+ <!-- END SOCIAL MEDIA -->
58
+
59
+ <hr class={hrStyle} />
60
+
61
+ <div class={spaceStyle}></div>
62
+
63
+ <!-- BEGIN LEGAL -->
64
+ <section id="legal-nav">
65
+ <LegalNav />
66
+ </section>
67
+ <!-- END LEGAL -->
68
+
69
+ <div class={spaceStyle}></div>
70
+
71
+ <!-- BEGIN BADGES -->
72
+ <section id="badges">
73
+ <Badges />
74
+ </section>
75
+ <!-- END BADGES -->
76
+ </FullWidthSection>
77
+ </section>