@omega.js/desktop 0.50.0 → 0.51.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 (267) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/css/tokens/_index.scss +1 -1
  3. package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +4 -1
  4. package/dist/assets/themes/base/_includes/frontend/sections/footer.html +13 -6
  5. package/dist/assets/themes/base/_includes/frontend/sections/nav.html +10 -8
  6. package/dist/assets/themes/base/_includes/global/sections/account.html +3 -1
  7. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +12 -8
  8. package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +10 -6
  9. package/dist/assets/themes/base/_includes/global/sections/page-header.html +8 -4
  10. package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +24 -24
  11. package/dist/assets/themes/base/_layouts/frontend/pages/about.html +10 -10
  12. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +35 -35
  13. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +4 -4
  14. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +1 -1
  15. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +4 -4
  16. package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +3 -3
  17. package/dist/assets/themes/base/_layouts/frontend/pages/download.html +34 -33
  18. package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +11 -11
  19. package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +1 -1
  20. package/dist/assets/themes/base/_layouts/frontend/pages/status.html +1 -1
  21. package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +9 -7
  22. package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +5 -3
  23. package/dist/assets/themes/base/_sections/about/letter/section.html +1 -1
  24. package/dist/assets/themes/base/_sections/about/letter/section.json5 +4 -4
  25. package/dist/assets/themes/base/_sections/marketing/bento/section.html +1 -1
  26. package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +15 -15
  27. package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +1 -1
  28. package/dist/assets/themes/base/_sections/marketing/hero/section.html +6 -6
  29. package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +10 -10
  30. package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +1 -1
  31. package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +2 -2
  32. package/dist/assets/themes/base/_sections/marketing/stats/section.html +1 -1
  33. package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +5 -5
  34. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +1 -1
  35. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +2 -2
  36. package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +10 -10
  37. package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +10 -10
  38. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +2 -2
  39. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +4 -4
  40. package/dist/build.js +69 -28
  41. package/dist/cli-run.js +20 -13
  42. package/dist/cli.js +12 -7
  43. package/dist/commands/build.js +0 -2
  44. package/dist/commands/deploy.js +116 -44
  45. package/dist/commands/finalize-release.js +5 -4
  46. package/dist/commands/launch.js +12 -7
  47. package/dist/commands/lib/deploy-precheck.js +66 -34
  48. package/dist/commands/lib/ensure-target.js +71 -11
  49. package/dist/commands/package.js +0 -1
  50. package/dist/commands/publish.js +11 -4
  51. package/dist/commands/release.js +99 -252
  52. package/dist/commands/runner.js +42 -5
  53. package/dist/commands/sign-windows.js +46 -15
  54. package/dist/commands/test.js +4 -3
  55. package/dist/commands/validate-certs.js +291 -115
  56. package/dist/config/page-template.html +4 -0
  57. package/dist/defaults/.github/workflows/build.yml +144 -64
  58. package/dist/defaults/AGENTS.md +3 -2
  59. package/dist/defaults/_.gitignore +4 -2
  60. package/dist/defaults/config/certs/README.md +25 -45
  61. package/dist/defaults/config/omega.json5 +66 -32
  62. package/dist/defaults/hooks/deploy/pre.js +10 -0
  63. package/dist/defaults/src/assets/scss/main.scss +12 -2
  64. package/dist/defaults/src/integrations/tray/index.js +1 -1
  65. package/dist/gulp/main.js +13 -25
  66. package/dist/gulp/tasks/audit.js +18 -6
  67. package/dist/gulp/tasks/build-config.js +181 -60
  68. package/dist/gulp/tasks/bundle.js +108 -36
  69. package/dist/gulp/tasks/release.js +86 -4
  70. package/dist/gulp/tasks/sass.js +11 -0
  71. package/dist/hooks/lib/notarize-tools.js +137 -0
  72. package/dist/hooks/notarize-artifacts.js +57 -0
  73. package/dist/hooks/notarize.js +59 -8
  74. package/dist/lib/auth-persistence.js +25 -0
  75. package/dist/lib/client-bridge.js +11 -8
  76. package/dist/lib/deep-link.js +15 -8
  77. package/dist/lib/protocol.js +7 -1
  78. package/dist/lib/restart-manager/install.js +6 -3
  79. package/dist/lib/sign-helpers/auto-unlock.js +65 -27
  80. package/dist/lib/sign-helpers/console-lock.js +34 -0
  81. package/dist/lib/sign-helpers/exec-with-limit.js +68 -0
  82. package/dist/lib/sign-helpers/resolve-icons.js +6 -4
  83. package/dist/lib/tray.js +7 -6
  84. package/dist/main.js +16 -0
  85. package/dist/preload.js +8 -0
  86. package/dist/renderer.js +16 -4
  87. package/dist/runner/job-started.js +104 -0
  88. package/dist/test/fixtures/consumer-app/config/omega.json5 +7 -0
  89. package/dist/test/fixtures/consumer-app/package.json +1 -1
  90. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +7 -1
  91. package/dist/test/harness/main-entry.js +2 -1
  92. package/dist/test/harness/renderer-preload.js +12 -3
  93. package/dist/test/runners/boot.js +101 -11
  94. package/dist/test/runners/electron.js +1 -1
  95. package/dist/test/suites/boot/consumer-app-boots.test.js +54 -0
  96. package/dist/test/suites/build/audit.test.js +45 -6
  97. package/dist/test/suites/build/auth-persistence-resolve.test.js +119 -0
  98. package/dist/test/suites/build/auto-unlock.test.js +105 -0
  99. package/dist/test/suites/build/boot-runner-timeout.test.js +253 -0
  100. package/dist/test/suites/build/brand-scss.test.js +106 -0
  101. package/dist/test/suites/build/build-config.test.js +146 -36
  102. package/dist/test/suites/build/build-json-bake.test.js +245 -0
  103. package/dist/test/suites/build/build-verbs.test.js +48 -15
  104. package/dist/test/suites/build/build-workflow-jobs.test.js +190 -0
  105. package/dist/test/suites/build/cli.test.js +32 -10
  106. package/dist/test/suites/build/config-schema.test.js +4 -4
  107. package/dist/test/suites/build/console-lock.test.js +51 -0
  108. package/dist/test/suites/build/defaults-scaffold.test.js +71 -2
  109. package/dist/test/suites/build/deploy-direct.test.js +241 -0
  110. package/dist/test/suites/build/deploy-dispatch.test.js +287 -0
  111. package/dist/test/suites/build/deploy-hook.test.js +169 -0
  112. package/dist/test/suites/build/ensure-target.test.js +14 -2
  113. package/dist/test/suites/build/env-delivery.test.js +19 -10
  114. package/dist/test/suites/build/env-watch.test.js +18 -7
  115. package/dist/test/suites/build/esm-only-dependency.test.js +127 -0
  116. package/dist/test/suites/build/exec-with-limit.test.js +53 -0
  117. package/dist/test/suites/build/finalize-release.test.js +2 -2
  118. package/dist/test/suites/build/get-config.test.js +120 -8
  119. package/dist/test/suites/build/github-utils.test.js +12 -6
  120. package/dist/test/suites/build/license-stamp.test.js +6 -4
  121. package/dist/test/suites/build/manager.test.js +88 -68
  122. package/dist/test/suites/build/manifest-deps.test.js +116 -0
  123. package/dist/test/suites/build/merge-line-files.test.js +27 -4
  124. package/dist/test/suites/build/notarize-artifacts.test.js +135 -0
  125. package/dist/test/suites/build/notarize-tools.test.js +38 -0
  126. package/dist/test/suites/build/notarize.test.js +207 -0
  127. package/dist/test/suites/build/release-pipeline.test.js +38 -60
  128. package/dist/test/suites/build/release-skipped-upload.test.js +107 -0
  129. package/dist/test/suites/build/resolve-icons.test.js +35 -35
  130. package/dist/test/suites/build/runner-job-guard.test.js +182 -0
  131. package/dist/test/suites/build/runner.test.js +25 -2
  132. package/dist/test/suites/build/sentry.test.js +8 -3
  133. package/dist/test/suites/build/setup-scripts.test.js +3 -0
  134. package/dist/test/suites/build/sign-windows.test.js +92 -8
  135. package/dist/test/suites/build/test-stealth.test.js +17 -11
  136. package/dist/test/suites/build/url-helpers.test.js +37 -17
  137. package/dist/test/suites/build/validate-certs.test.js +428 -55
  138. package/dist/test/suites/build/validate-config.test.js +3 -3
  139. package/dist/test/suites/main/auth-flow.test.js +12 -0
  140. package/dist/test/suites/main/auth-persistence.test.js +14 -17
  141. package/dist/test/suites/main/auto-updater.test.js +2 -2
  142. package/dist/test/suites/main/boot-sequence.test.js +1 -1
  143. package/dist/test/suites/main/client-bridge.integration.test.js +5 -82
  144. package/dist/test/suites/main/client-bridge.test.js +19 -6
  145. package/dist/test/suites/main/deep-link.test.js +54 -0
  146. package/dist/test/suites/main/startup-paths-and-ua.test.js +1 -1
  147. package/dist/test/suites/main/url-helpers.test.js +81 -72
  148. package/dist/test/suites/renderer/cross-context-helpers.test.js +19 -16
  149. package/dist/utils/build-pipeline.js +10 -10
  150. package/dist/utils/github.js +12 -51
  151. package/dist/utils/load-env.js +66 -0
  152. package/dist/utils/mode-helpers.js +43 -111
  153. package/dist/utils/platform.js +37 -0
  154. package/dist/utils/runner-env.js +2 -1
  155. package/dist/utils/runner-job-guard.js +149 -0
  156. package/dist/utils/ship-keys.js +52 -0
  157. package/dist/utils/test-stealth.js +5 -3
  158. package/dist/utils/url-helpers.js +33 -17
  159. package/dist/vendor/config/bundle-id.js +53 -0
  160. package/dist/vendor/config/client-config.js +141 -0
  161. package/dist/vendor/config/company.js +334 -15
  162. package/dist/vendor/config/dev-facts.js +48 -0
  163. package/dist/vendor/config/env-delivery.js +231 -9
  164. package/dist/vendor/config/env-retired.js +137 -0
  165. package/dist/vendor/config/env-rules.js +22 -3
  166. package/dist/vendor/config/env-schema.js +234 -117
  167. package/dist/vendor/config/env.js +55 -26
  168. package/dist/vendor/config/environment.js +189 -0
  169. package/dist/vendor/config/hooks.js +13 -11
  170. package/dist/vendor/config/index.js +121 -44
  171. package/dist/vendor/config/load.js +366 -115
  172. package/dist/vendor/config/merge.js +2 -2
  173. package/dist/vendor/config/order.js +3 -3
  174. package/dist/vendor/config/platforms.js +276 -0
  175. package/dist/vendor/config/repo.js +226 -104
  176. package/dist/vendor/config/retired-keys.js +232 -27
  177. package/dist/vendor/config/schema.js +525 -99
  178. package/dist/vendor/config/site-global.js +63 -53
  179. package/dist/vendor/config/targets.js +187 -0
  180. package/dist/vendor/config/validate.js +119 -59
  181. package/dist/vendor/devkit/argv.js +118 -0
  182. package/dist/vendor/devkit/attach-log-file.js +21 -13
  183. package/dist/vendor/devkit/brand-tokens.js +278 -0
  184. package/dist/vendor/devkit/brand-version.js +264 -0
  185. package/dist/vendor/devkit/build-json.js +91 -0
  186. package/dist/vendor/devkit/bundle.js +48 -0
  187. package/dist/vendor/devkit/certificate-expiry.js +108 -0
  188. package/dist/vendor/devkit/certs.js +16 -194
  189. package/dist/vendor/devkit/ci-workflows.js +124 -8
  190. package/dist/vendor/devkit/cli-router.js +3 -3
  191. package/dist/vendor/devkit/defaults-engine.js +69 -7
  192. package/dist/vendor/devkit/deploy-follow.js +297 -0
  193. package/dist/vendor/devkit/deploy-precheck.js +23 -8
  194. package/dist/vendor/devkit/deploy-record.js +11 -27
  195. package/dist/vendor/devkit/deploy-snapshot.js +661 -0
  196. package/dist/vendor/devkit/deploy.js +445 -75
  197. package/dist/vendor/devkit/git-auth.js +73 -0
  198. package/dist/vendor/devkit/git-remote.js +95 -0
  199. package/dist/vendor/devkit/github-repo.js +290 -0
  200. package/dist/vendor/devkit/local.js +47 -0
  201. package/dist/vendor/devkit/merge-line-files.js +23 -16
  202. package/dist/vendor/devkit/omega-bin.js +18 -3
  203. package/dist/vendor/devkit/pack-local.js +391 -0
  204. package/dist/vendor/devkit/preludes/index.js +120 -0
  205. package/dist/vendor/devkit/preludes/origin-heal.js +156 -0
  206. package/dist/vendor/devkit/service-account.js +43 -0
  207. package/dist/vendor/devkit/ship-plan.js +112 -0
  208. package/dist/vendor/devkit/signing-env.js +180 -0
  209. package/dist/vendor/devkit/signing-tree.js +92 -0
  210. package/dist/vendor/devkit/target-seams.js +142 -0
  211. package/dist/vendor/devkit/target-secrets.js +235 -50
  212. package/dist/vendor/devkit/test/esm-only-fixture.js +48 -0
  213. package/dist/vendor/devkit/test/fixtures/esm-only-package/browser.js +19 -0
  214. package/dist/vendor/devkit/test/fixtures/esm-only-package/index.js +20 -0
  215. package/dist/vendor/devkit/test/fixtures/esm-only-package/package.json +13 -0
  216. package/dist/vendor/monitoring/env.js +20 -10
  217. package/dist/vendor/monitoring/main.js +1 -1
  218. package/dist/vendor/monitoring/preload.js +1 -1
  219. package/dist/vendor/monitoring/renderer.js +1 -1
  220. package/docs/analytics.md +1 -1
  221. package/docs/auto-updater.md +5 -5
  222. package/docs/boot-sequence.md +1 -1
  223. package/docs/build-system.md +15 -7
  224. package/docs/client-bridge.md +9 -7
  225. package/docs/config-schema.md +4 -4
  226. package/docs/css.md +8 -2
  227. package/docs/deep-link.md +12 -4
  228. package/docs/environment-detection.md +32 -24
  229. package/docs/hooks.md +3 -1
  230. package/docs/icons.md +7 -7
  231. package/docs/index.md +61 -23
  232. package/docs/installer-options.md +24 -21
  233. package/docs/logging.md +5 -5
  234. package/docs/releasing.md +25 -17
  235. package/docs/runner.md +40 -5
  236. package/docs/shared/brands.md +12 -6
  237. package/docs/shared/breaking-changes.md +375 -21
  238. package/docs/shared/config.md +757 -199
  239. package/docs/shared/deploys.md +194 -91
  240. package/docs/shared/icons.md +18 -0
  241. package/docs/shared/local-dev.md +24 -6
  242. package/docs/shared/logging.md +9 -6
  243. package/docs/shared/monitoring.md +27 -13
  244. package/docs/shared/publishing.md +3 -3
  245. package/docs/shared/rulings.md +2 -2
  246. package/docs/shared/testing.md +1 -1
  247. package/docs/shared/theming.md +26 -1
  248. package/docs/shared/translation.md +49 -7
  249. package/docs/shared/updates.md +1 -1
  250. package/docs/signing.md +59 -33
  251. package/docs/test-framework.md +10 -5
  252. package/docs/themes.md +15 -1
  253. package/package.json +18 -12
  254. package/bin/omega-desktop +0 -2
  255. package/dist/commands/push-secrets.js +0 -141
  256. package/dist/test/suites/build/deliver-certs.test.js +0 -95
  257. package/dist/test/suites/build/derive-signing-env.test.js +0 -122
  258. package/dist/test/suites/build/push-secrets.test.js +0 -226
  259. package/dist/test/suites/build/resolve-signing-cert.test.js +0 -342
  260. package/dist/utils/deliver-certs.js +0 -69
  261. package/dist/utils/derive-signing-env.js +0 -56
  262. package/dist/utils/resolve-signing-cert.js +0 -175
  263. package/dist/vendor/config/desktop-artifacts.js +0 -110
  264. package/dist/vendor/config/instances.js +0 -208
  265. /package/dist/defaults/config/icons/{macos → mac}/dmg.png +0 -0
  266. /package/dist/defaults/config/icons/{macos → mac}/icon.png +0 -0
  267. /package/dist/defaults/config/icons/{macos → mac}/tray.png +0 -0
@@ -13,45 +13,45 @@ layout: backend/core/minimal
13
13
  sections:
14
14
  - id: "profile"
15
15
  name: "Profile"
16
- icon: "user-circle"
16
+ icon: "fa-solid fa-user-circle"
17
17
  - id: "security"
18
18
  name: "Security"
19
- icon: "shield-halved"
19
+ icon: "fa-solid fa-shield-halved"
20
20
  - id: "connections"
21
21
  name: "Connections"
22
- icon: "link"
22
+ icon: "fa-solid fa-link"
23
23
  - id: "billing"
24
24
  name: "Billing"
25
- icon: "credit-card"
25
+ icon: "fa-solid fa-credit-card"
26
26
  - id: "orders"
27
27
  name: "Orders"
28
- icon: "receipt"
28
+ icon: "fa-solid fa-receipt"
29
29
  - id: "referrals"
30
30
  name: "Referrals"
31
- icon: "user-plus"
31
+ icon: "fa-solid fa-user-plus"
32
32
  - id: "team"
33
33
  name: "Team"
34
- icon: "users"
34
+ icon: "fa-solid fa-users"
35
35
  - id: "notifications"
36
36
  name: "Notifications"
37
- icon: "bell"
37
+ icon: "fa-solid fa-bell"
38
38
  - id: "api-keys"
39
39
  name: "API & MCP"
40
- icon: "key"
40
+ icon: "fa-solid fa-key"
41
41
  - id: "data-request"
42
42
  name: "Data request"
43
- icon: "file-export"
43
+ icon: "fa-solid fa-file-export"
44
44
  - id: "delete"
45
45
  name: "Delete account"
46
- icon: "trash"
46
+ icon: "fa-solid fa-trash"
47
47
  - id: "refund"
48
48
  name: "Refund"
49
- icon: "rotate-left"
49
+ icon: "fa-solid fa-rotate-left"
50
50
 
51
51
  signin_methods:
52
52
  - id: "password"
53
53
  name: "Password"
54
- icon: "key"
54
+ icon: "fa-solid fa-key"
55
55
  - id: "google"
56
56
  name: "Google"
57
57
  logo: "https://cdn.itwcreativeworks.com/assets/general/images/brands/color/google.svg"
@@ -59,32 +59,32 @@ signin_methods:
59
59
  badges:
60
60
  - id: "member"
61
61
  name: "Member"
62
- icon: "sailboat"
62
+ icon: "fa-solid fa-sailboat"
63
63
  chip_class: "omega-chip"
64
64
  always_visible: true
65
65
  - id: "admin"
66
66
  name: "Admin"
67
- icon: "hat-wizard"
67
+ icon: "fa-solid fa-hat-wizard"
68
68
  chip_class: "omega-chip omega-chip--ink"
69
69
  - id: "premium"
70
70
  name: "Premium"
71
- icon: "crown"
71
+ icon: "fa-solid fa-crown"
72
72
  chip_class: "omega-chip omega-chip--accent"
73
73
  - id: "beta"
74
74
  name: "Beta"
75
- icon: "bolt"
75
+ icon: "fa-solid fa-bolt"
76
76
  chip_class: "omega-chip"
77
77
  - id: "coder"
78
78
  name: "Developer"
79
- icon: "code"
79
+ icon: "fa-solid fa-code"
80
80
  chip_class: "omega-chip"
81
81
  - id: "moderator"
82
82
  name: "Moderator"
83
- icon: "shield-halved"
83
+ icon: "fa-solid fa-shield-halved"
84
84
  chip_class: "omega-chip"
85
85
  - id: "vip"
86
86
  name: "VIP"
87
- icon: "award"
87
+ icon: "fa-solid fa-award"
88
88
  chip_class: "omega-chip omega-chip--accent"
89
89
  config:
90
90
  theme:
@@ -130,7 +130,7 @@ config:
130
130
  href="#{{ section.id }}"
131
131
  data-section="{{ section.id }}"
132
132
  role="tab">
133
- <span class="omega-side__icon"><i class="fa-solid fa-{{ section.icon }} fa-sm"></i></span>
133
+ <span class="omega-side__icon"><i class="{{ section.icon }} fa-sm" aria-hidden="true"></i></span>
134
134
  <span>{{ section.name }}</span>
135
135
  </a>
136
136
  </li>
@@ -156,7 +156,7 @@ config:
156
156
 
157
157
  <!-- Profile Section -->
158
158
  <section id="profile-section" class="account-section d-none">
159
- {% include frontend/sections/account-section-header.html title="My profile" icon="user-circle" %}
159
+ {% include frontend/sections/account-section-header.html title="My profile" icon="fa-solid fa-user-circle" %}
160
160
 
161
161
  <form id="profile-form" novalidate data-form-state="initializing" onsubmit="return false">
162
162
  <!-- Avatar and Edit Button -->
@@ -182,7 +182,7 @@ config:
182
182
  <div id="role-badges" class="mt-2 d-flex gap-2 flex-wrap">
183
183
  {% for badge in resolved.badges %}
184
184
  <span id="badge-{{ badge.id }}" class="{{ badge.chip_class }} {% unless badge.always_visible %}d-none{% endunless %}">
185
- <i class="fa-solid fa-{{ badge.icon }} fa-sm"></i>
185
+ <i class="{{ badge.icon }} fa-sm" aria-hidden="true"></i>
186
186
  {{ badge.name }}
187
187
  </span>
188
188
  {% endfor %}
@@ -706,7 +706,7 @@ config:
706
706
 
707
707
  <!-- Security Section -->
708
708
  <section id="security-section" class="account-section d-none">
709
- {% include frontend/sections/account-section-header.html title="Security and data" icon="shield-halved" %}
709
+ {% include frontend/sections/account-section-header.html title="Security and data" icon="fa-solid fa-shield-halved" %}
710
710
 
711
711
  <!-- Sign-in Methods Section -->
712
712
  <div class="card mb-3">
@@ -722,7 +722,7 @@ config:
722
722
  <div class="d-flex align-items-center">
723
723
  <div class="d-flex align-items-center justify-content-center me-3 flex-shrink-0 {% iftruthy method.icon %}text-muted{% endiftruthy %} fa fa-3xl">
724
724
  {% iftruthy method.icon %}
725
- <i class="fa-solid fa-{{ method.icon }} fa-3xl"></i>
725
+ <i class="{{ method.icon }} fa-3xl" aria-hidden="true"></i>
726
726
  {% endiftruthy %}
727
727
  {% iftruthy method.logo %}
728
728
  <img src="{{ method.logo | omega_cachebreak }}" class="object-fit-contain" alt="{{ method.name }} Logo"/>
@@ -869,7 +869,7 @@ config:
869
869
 
870
870
  <!-- Connections Section -->
871
871
  <section id="connections-section" class="account-section d-none">
872
- {% include frontend/sections/account-section-header.html title="Connected accounts" icon="link" %}
872
+ {% include frontend/sections/account-section-header.html title="Connected accounts" icon="fa-solid fa-link" %}
873
873
 
874
874
  <div class="card">
875
875
  <div class="card-header">
@@ -885,7 +885,7 @@ config:
885
885
 
886
886
  <!-- Billing Section -->
887
887
  <section id="billing-section" class="account-section d-none">
888
- {% include frontend/sections/account-section-header.html title="Billing and usage" icon="credit-card" %}
888
+ {% include frontend/sections/account-section-header.html title="Billing and usage" icon="fa-solid fa-credit-card" %}
889
889
 
890
890
  <!-- Plan Overview Card -->
891
891
  <div class="card mb-3">
@@ -1293,7 +1293,7 @@ config:
1293
1293
  page and the receipt email have always promised them (#672). Rows are
1294
1294
  rendered by sections/orders.js off GET /user/orders. -->
1295
1295
  <section id="orders-section" class="account-section d-none">
1296
- {% include frontend/sections/account-section-header.html title="Orders" icon="receipt" %}
1296
+ {% include frontend/sections/account-section-header.html title="Orders" icon="fa-solid fa-receipt" %}
1297
1297
 
1298
1298
  <div class="card">
1299
1299
  <div class="card-header d-flex justify-content-between align-items-center">
@@ -1315,7 +1315,7 @@ config:
1315
1315
 
1316
1316
  <!-- Referrals Section -->
1317
1317
  <section id="referrals-section" class="account-section d-none">
1318
- {% include frontend/sections/account-section-header.html title="Referrals" icon="user-plus" %}
1318
+ {% include frontend/sections/account-section-header.html title="Referrals" icon="fa-solid fa-user-plus" %}
1319
1319
 
1320
1320
  <!-- Referral Code Card -->
1321
1321
  <div class="card mb-3">
@@ -1389,7 +1389,7 @@ config:
1389
1389
 
1390
1390
  <!-- Team Section -->
1391
1391
  <section id="team-section" class="account-section d-none">
1392
- {% include frontend/sections/account-section-header.html title="Team" icon="users" %}
1392
+ {% include frontend/sections/account-section-header.html title="Team" icon="fa-solid fa-users" %}
1393
1393
 
1394
1394
  <div class="card">
1395
1395
  <div class="card-header d-flex justify-content-between align-items-center">
@@ -1419,7 +1419,7 @@ config:
1419
1419
 
1420
1420
  <!-- Notifications Section -->
1421
1421
  <section id="notifications-section" class="account-section d-none">
1422
- {% include frontend/sections/account-section-header.html title="Notifications" icon="bell" %}
1422
+ {% include frontend/sections/account-section-header.html title="Notifications" icon="fa-solid fa-bell" %}
1423
1423
 
1424
1424
  <div class="card">
1425
1425
  <div class="card-header">
@@ -1476,7 +1476,7 @@ config:
1476
1476
 
1477
1477
  <!-- API Keys Section -->
1478
1478
  <section id="api-keys-section" class="account-section d-none">
1479
- {% include frontend/sections/account-section-header.html title="API & MCP" icon="key" %}
1479
+ {% include frontend/sections/account-section-header.html title="API & MCP" icon="fa-solid fa-key" %}
1480
1480
 
1481
1481
  <!-- API Key Card -->
1482
1482
  <div class="card mb-4">
@@ -1729,7 +1729,7 @@ config:
1729
1729
 
1730
1730
  <!-- Data Request Section (Hidden by default) -->
1731
1731
  <section id="data-request-section" class="account-section d-none">
1732
- {% include frontend/sections/account-section-header.html title="Request your data" icon="file-export" %}
1732
+ {% include frontend/sections/account-section-header.html title="Request your data" icon="fa-solid fa-file-export" %}
1733
1733
 
1734
1734
  <!-- Info card (always shown) -->
1735
1735
  <div class="card mb-4">
@@ -1863,7 +1863,7 @@ config:
1863
1863
 
1864
1864
  <!-- Delete Account Section (Hidden by default) -->
1865
1865
  <section id="delete-section" class="account-section d-none">
1866
- {% include frontend/sections/account-section-header.html title="Delete account" icon="trash" %}
1866
+ {% include frontend/sections/account-section-header.html title="Delete account" icon="fa-solid fa-trash" %}
1867
1867
 
1868
1868
  <div class="card mb-4">
1869
1869
  <div class="card-header">
@@ -1962,7 +1962,7 @@ config:
1962
1962
 
1963
1963
  <!-- Refund Section (Hidden by default) -->
1964
1964
  <section id="refund-section" class="account-section d-none">
1965
- {% include frontend/sections/account-section-header.html title="Request a refund" icon="rotate-left" %}
1965
+ {% include frontend/sections/account-section-header.html title="Request a refund" icon="fa-solid fa-rotate-left" %}
1966
1966
 
1967
1967
  <!-- Refund policy info card -->
1968
1968
  <div class="card mb-4">
@@ -36,13 +36,13 @@ value_props:
36
36
  items:
37
37
  - title: "Lightning fast"
38
38
  description: "Built on modern infrastructure for blazing performance. No more waiting around."
39
- icon: "bolt"
39
+ icon: "fa-solid fa-bolt"
40
40
  - title: "AI-powered"
41
41
  description: "Smart automation built into every workflow to save you hours every week."
42
- icon: "wand-magic-sparkles"
42
+ icon: "fa-solid fa-wand-magic-sparkles"
43
43
  - title: "24/7 support"
44
44
  description: "Real humans ready to help whenever you need it. Average response time under 5 minutes."
45
- icon: "headset"
45
+ icon: "fa-solid fa-headset"
46
46
 
47
47
  # Stats Section
48
48
  stats:
@@ -163,7 +163,7 @@ bands below keep the reveal lane. {% endcomment %}
163
163
  {% for prop in resolved.value_props.items %}
164
164
  <div class="omega-rowlist__item" data-omega-reveal>
165
165
  <span class="d-inline-flex align-items-center gap-3">
166
- <span class="omega-icon-chip omega-icon-chip--neutral"><i class="fa-solid fa-{{ prop.icon }} fa-sm"></i></span>
166
+ <span class="omega-icon-chip omega-icon-chip--neutral"><i class="{{ prop.icon }} fa-sm" aria-hidden="true"></i></span>
167
167
  <strong>{{ prop.title }}</strong>
168
168
  </span>
169
169
  <span class="omega-rowlist__meta">{{ prop.description }}</span>
@@ -41,7 +41,7 @@ social_signin:
41
41
  <span class="d-inline-flex me-2" aria-hidden="true">{% omega_logo provider.logo, "brandmarks" %}</span>
42
42
  {% endiftruthy %}
43
43
  {% iffalsy provider.logo %}
44
- <i class="fa-solid fa-{{ provider.icon }} me-2"></i>
44
+ <i class="{{ provider.icon }} me-2" aria-hidden="true"></i>
45
45
  {% endiffalsy %}
46
46
  <span class="button-text">Continue with {{ provider.name }}</span>
47
47
  </button>
@@ -4,13 +4,13 @@ layout: frontend/core/cover
4
4
  benefits:
5
5
  - title: "Free forever"
6
6
  description: "Start free, upgrade when you're ready"
7
- icon: "gift"
7
+ icon: "fa-solid fa-gift"
8
8
  - title: "No setup fees"
9
9
  description: "Instant start, no hidden costs"
10
- icon: "credit-card"
10
+ icon: "fa-solid fa-credit-card"
11
11
  - title: "24/7 support"
12
12
  description: "Real humans, whenever you need them"
13
- icon: "headset"
13
+ icon: "fa-solid fa-headset"
14
14
 
15
15
  social_signup:
16
16
  - id: "google.com"
@@ -53,7 +53,7 @@ social_signup:
53
53
  <span class="d-inline-flex me-2" aria-hidden="true">{% omega_logo provider.logo, "brandmarks" %}</span>
54
54
  {% endiftruthy %}
55
55
  {% iffalsy provider.logo %}
56
- <i class="fa-solid fa-{{ provider.icon }} me-2"></i>
56
+ <i class="{{ provider.icon }} me-2" aria-hidden="true"></i>
57
57
  {% endiffalsy %}
58
58
  <span class="button-text">Sign up with {{ provider.name }}</span>
59
59
  </button>
@@ -11,12 +11,12 @@ hero:
11
11
  contact_methods:
12
12
  - title: "Email support"
13
13
  description: "Get help within 24 hours"
14
- icon: "envelope"
14
+ icon: "fa-solid fa-envelope"
15
15
  value: "Email us"
16
16
  link: "#form"
17
17
  - title: "Live chat"
18
18
  description: "Chat with our team now 24/7"
19
- icon: "comments"
19
+ icon: "fa-solid fa-comments"
20
20
  value: "Chat now"
21
21
  link: "#chat"
22
22
 
@@ -82,7 +82,7 @@ bands below keep the reveal lane. {% endcomment %}
82
82
  <div class="mb-5">
83
83
  {% for method in resolved.contact_methods %}
84
84
  <a href="{{ method.link }}" class="omega-channel" data-omega-reveal>
85
- <span class="omega-icon-chip"><i class="fa-solid fa-{{ method.icon }} fa-sm"></i></span>
85
+ <span class="omega-icon-chip"><i class="{{ method.icon }} fa-sm" aria-hidden="true"></i></span>
86
86
  <span class="omega-channel__body">
87
87
  <span class="omega-channel__title d-block">{{ method.title }}</span>
88
88
  <span class="omega-channel__desc d-block">{{ method.description }}</span>
@@ -4,11 +4,12 @@ layout: frontend/core/base
4
4
  # ═══ /download — reimagined 2026-07-16 (manus-grade: the page knows your
5
5
  # platform and leads with YOUR button; everything else is one scroll away).
6
6
  # Data contract preserved: resolved.downloads.platforms drives cards + the
7
- # detection JS; site.targets.desktop.downloads[platform][artifact] supplies the
7
+ # detection JS; site.targets.desktop.downloads[platform][format] supplies the
8
8
  # desktop URLs (#610 — the curated targets view is the ONE home). Each is a
9
9
  # DIRECT download of a versionless asset (#620), so a button hands over the
10
- # file and a desktop release never touches this page. The platform/artifact
11
- # keys below are the catalog's: a `type` with no derived URL renders no button.
10
+ # file and a desktop release never touches this page. The platform/format keys
11
+ # below are the format table's, the one vocabulary (#867: mac/dmg,
12
+ # windows/nsis, linux/deb): a `type` with no derived URL renders no button.
12
13
  # Mobile derives nothing while MAM is parked, so every mobile store stays on
13
14
  # the notify form.
14
15
 
@@ -39,49 +40,49 @@ downloads:
39
40
  platforms:
40
41
  - id: "mac"
41
42
  name: "macOS"
42
- icon: "apple"
43
+ icon: "fa-brands fa-apple"
43
44
  description: "macOS 10.15+ (Apple Silicon & Intel)"
44
45
  types:
45
- - type: "universal"
46
+ - type: "dmg"
46
47
  name: "Download for macOS"
47
- icon: "apple"
48
+ icon: "fa-brands fa-apple"
48
49
  - id: "windows"
49
50
  name: "Windows"
50
- icon: "windows"
51
+ icon: "fa-brands fa-windows"
51
52
  description: "Windows 10 and later"
52
53
  types:
53
- - type: "universal"
54
+ - type: "nsis"
54
55
  name: "Download for Windows"
55
- icon: "windows"
56
+ icon: "fa-brands fa-windows"
56
57
  - id: "linux"
57
58
  name: "Linux"
58
- icon: "linux"
59
+ icon: "fa-brands fa-linux"
59
60
  description: "Ubuntu 18.04+ and friends"
60
61
  types:
61
- - type: "debian"
62
+ - type: "deb"
62
63
  name: "Debian package"
63
- icon: "linux"
64
+ icon: "fa-brands fa-linux"
64
65
  - type: "appimage"
65
66
  name: "AppImage"
66
- icon: "linux"
67
+ icon: "fa-brands fa-linux"
67
68
  - id: "ios"
68
69
  name: "iOS"
69
- icon: "apple"
70
+ icon: "fa-brands fa-apple"
70
71
  description: "iOS 13 and later"
71
72
  store_badge: "apple-app-store"
72
73
  types:
73
74
  - type: "universal"
74
75
  name: "App Store"
75
- icon: "apple"
76
+ icon: "fa-brands fa-apple"
76
77
  - id: "android"
77
78
  name: "Android"
78
- icon: "android"
79
+ icon: "fa-brands fa-android"
79
80
  description: "Android 8.0 and later"
80
81
  store_badge: "google-play-store"
81
82
  types:
82
83
  - type: "universal"
83
84
  name: "Google Play"
84
- icon: "android"
85
+ icon: "fa-brands fa-android"
85
86
 
86
87
  # What travels with you — hairline rows. Named `highlights`, not `features`:
87
88
  # `features` is a CONFIG section now (the feature catalog, #647) and a page key
@@ -95,16 +96,16 @@ highlights:
95
96
  items:
96
97
  - title: "Everything syncs"
97
98
  description: "Sign in anywhere and your work is already there: desktop, mobile, browser."
98
- icon: "rotate"
99
+ icon: "fa-solid fa-rotate"
99
100
  - title: "Updates itself"
100
101
  description: "New versions arrive quietly in the background. You never install twice."
101
- icon: "cloud-arrow-down"
102
+ icon: "fa-solid fa-cloud-arrow-down"
102
103
  - title: "Fast to first use"
103
104
  description: "Small download, no bundled extras, running in under a minute."
104
- icon: "bolt"
105
+ icon: "fa-solid fa-bolt"
105
106
  - title: "Secure by default"
106
107
  description: "Signed builds and encrypted sync, on every platform."
107
- icon: "shield-halved"
108
+ icon: "fa-solid fa-shield-halved"
108
109
 
109
110
  # System Requirements Section
110
111
  system_requirements:
@@ -115,20 +116,20 @@ system_requirements:
115
116
  subheadline: "Almost certainly. Here's the fine print."
116
117
  desktop:
117
118
  label: "Desktop"
118
- icon: "desktop"
119
+ icon: "fa-solid fa-desktop"
119
120
  items:
120
121
  - text: "2GB RAM minimum"
121
- icon: "check"
122
+ icon: "fa-solid fa-check"
122
123
  - text: "500MB free disk space"
123
- icon: "check"
124
+ icon: "fa-solid fa-check"
124
125
  mobile:
125
126
  label: "Mobile"
126
- icon: "mobile"
127
+ icon: "fa-solid fa-mobile"
127
128
  items:
128
129
  - text: "100MB free storage"
129
- icon: "check"
130
+ icon: "fa-solid fa-check"
130
131
  - text: "Internet connection required"
131
- icon: "check"
132
+ icon: "fa-solid fa-check"
132
133
 
133
134
  # FAQ Section
134
135
  faqs:
@@ -156,11 +157,11 @@ cta:
156
157
  subheadline: "Real humans answer. Bring your error message."
157
158
  primary_button:
158
159
  text: "Contact support"
159
- icon: "headset"
160
+ icon: "fa-solid fa-headset"
160
161
  href: "/contact"
161
162
  secondary_button:
162
163
  text: "Release notes"
163
- icon: "book"
164
+ icon: "fa-solid fa-book"
164
165
  href: "/updates"
165
166
  nudge: true
166
167
  ---
@@ -219,7 +220,7 @@ bands below keep the reveal lane. {% endcomment %}
219
220
  <div class="col-md-6 col-lg-4 d-flex" data-omega-reveal>
220
221
  <div class="omega-dl-card omega-hover-lift" data-download-card data-platform="{{ platform.id }}">
221
222
  <span class="omega-dl-card__mark">
222
- <i class="fa-solid fa-{{ platform.icon }} fa-2xl"></i>
223
+ <i class="{{ platform.icon }} fa-2xl" aria-hidden="true"></i>
223
224
  </span>
224
225
  <h3 class="omega-dl-card__name">{{ platform.name }}</h3>
225
226
  <p class="omega-dl-card__req omega-quiet small">{{ platform.description }}</p>
@@ -307,7 +308,7 @@ bands below keep the reveal lane. {% endcomment %}
307
308
  {% endfor %}
308
309
  {% unless has_download %}
309
310
  <span class="d-inline-flex align-items-center gap-2">
310
- <i class="fa-solid fa-{{ platform.icon }} fa-sm"></i>
311
+ <i class="{{ platform.icon }} fa-sm" aria-hidden="true"></i>
311
312
  <strong>{{ platform.name }}</strong>
312
313
  </span>
313
314
  {% endunless %}
@@ -353,7 +354,7 @@ bands below keep the reveal lane. {% endcomment %}
353
354
  {% for feature in resolved.highlights.items %}
354
355
  <div class="omega-rowlist__item" data-omega-reveal>
355
356
  <span class="d-inline-flex align-items-center gap-3">
356
- <span class="omega-icon-chip omega-icon-chip--neutral"><i class="fa-solid fa-{{ feature.icon }} fa-sm"></i></span>
357
+ <span class="omega-icon-chip omega-icon-chip--neutral"><i class="{{ feature.icon }} fa-sm" aria-hidden="true"></i></span>
357
358
  <strong>{{ feature.title }}</strong>
358
359
  </span>
359
360
  <span class="omega-rowlist__meta">{{ feature.description }}</span>
@@ -670,7 +671,7 @@ bands below keep the reveal lane. {% endcomment %}
670
671
  hand-spelled rule. Debian is the only install step there is —
671
672
  the pipeline builds a .deb and an AppImage (which needs no
672
673
  install), and never an .rpm. -->
673
- {% assign deb_file = site.targets.desktop.downloads.linux.debian | split: "/" | last %}
674
+ {% assign deb_file = site.targets.desktop.downloads.linux.deb | split: "/" | last %}
674
675
  <div class="omega-dl-modal__pane p-4 overflow-hidden position-relative">
675
676
  <div>
676
677
  <small class="text-muted d-block mb-2 fw-bold" id="linux-debian-label">For Debian/Ubuntu:</small>
@@ -64,13 +64,13 @@ setup:
64
64
  steps:
65
65
  - title: "Install from your store"
66
66
  description: "One click on the button above. The store handles the rest."
67
- icon: "puzzle-piece"
67
+ icon: "fa-solid fa-puzzle-piece"
68
68
  - title: "Pin it to the toolbar"
69
69
  description: "Click the puzzle piece in your toolbar, then the pin next to {{ resolved.config.brand.name }}."
70
- icon: "thumbtack"
70
+ icon: "fa-solid fa-thumbtack"
71
71
  - title: "Sign in once"
72
72
  description: "Your account carries over. Everything you have here is in the popup."
73
- icon: "user-check"
73
+ icon: "fa-solid fa-user-check"
74
74
 
75
75
  # Highlights Section — named `highlights`, not `features`: `features` is a
76
76
  # CONFIG section now (the feature catalog, #647) and a page key may not shadow one
@@ -83,16 +83,16 @@ highlights:
83
83
  items:
84
84
  - title: "One-click access"
85
85
  description: "The popup is the product: no new tab, no context switch."
86
- icon: "bolt"
86
+ icon: "fa-solid fa-bolt"
87
87
  - title: "Works where you work"
88
88
  description: "Actions available on the page you're already reading."
89
- icon: "link"
89
+ icon: "fa-solid fa-link"
90
90
  - title: "Real-time alerts"
91
91
  description: "Badge counts and notifications the moment something needs you."
92
- icon: "bell"
92
+ icon: "fa-solid fa-bell"
93
93
  - title: "Least-privilege by design"
94
94
  description: "It asks only for the permissions it demonstrably needs."
95
- icon: "shield-halved"
95
+ icon: "fa-solid fa-shield-halved"
96
96
 
97
97
  # FAQ Section
98
98
  faqs:
@@ -120,11 +120,11 @@ cta:
120
120
  subheadline: "Tell us the browser and what you clicked, and we'll take it from there."
121
121
  primary_button:
122
122
  text: "Contact support"
123
- icon: "headset"
123
+ icon: "fa-solid fa-headset"
124
124
  href: "/contact"
125
125
  secondary_button:
126
126
  text: "Release notes"
127
- icon: "book"
127
+ icon: "fa-solid fa-book"
128
128
  href: "/updates"
129
129
  nudge: true
130
130
  ---
@@ -210,7 +210,7 @@ bands below keep the reveal lane. {% endcomment %}
210
210
  {% for step in resolved.setup.steps %}
211
211
  <div class="omega-rowlist__item" data-omega-reveal>
212
212
  <span class="d-inline-flex align-items-center gap-3">
213
- <span class="omega-icon-chip omega-icon-chip--neutral"><i class="fa-solid fa-{{ step.icon }} fa-sm"></i></span>
213
+ <span class="omega-icon-chip omega-icon-chip--neutral"><i class="{{ step.icon }} fa-sm" aria-hidden="true"></i></span>
214
214
  <strong>{{ forloop.index }}. {{ step.title }}</strong>
215
215
  </span>
216
216
  <span class="omega-rowlist__meta">{{ step.description }}</span>
@@ -233,7 +233,7 @@ bands below keep the reveal lane. {% endcomment %}
233
233
  {% for feature in resolved.highlights.items %}
234
234
  <div class="omega-rowlist__item" data-omega-reveal>
235
235
  <span class="d-inline-flex align-items-center gap-3">
236
- <span class="omega-icon-chip omega-icon-chip--neutral"><i class="fa-solid fa-{{ feature.icon }} fa-sm"></i></span>
236
+ <span class="omega-icon-chip omega-icon-chip--neutral"><i class="{{ feature.icon }} fa-sm" aria-hidden="true"></i></span>
237
237
  <strong>{{ feature.title }}</strong>
238
238
  </span>
239
239
  <span class="omega-rowlist__meta">{{ feature.description }}</span>
@@ -14,7 +14,7 @@ config:
14
14
  enabled: true
15
15
  ---
16
16
 
17
- {% capture company %}{{ resolved.config.brand.company | default: resolved.config.brand.name }}{% endcapture %}
17
+ {% capture company %}{{ resolved.config.company.name | default: resolved.config.brand.name }}{% endcapture %}
18
18
 
19
19
  <!-- ═══ Document header ═══ -->
20
20
  {% comment %} #467 (after #749): this masthead IS the page's first viewport, so
@@ -50,7 +50,7 @@ updates:
50
50
  subheadline: "Status changes land in your inbox the moment they happen."
51
51
  button:
52
52
  text: "Subscribe"
53
- icon: "envelope"
53
+ icon: "fa-solid fa-envelope"
54
54
 
55
55
  # Maintenance Section
56
56
  maintenance:
@@ -30,13 +30,13 @@ principles:
30
30
  items:
31
31
  - title: "We ship weekly"
32
32
  description: "Small releases, every week. Momentum beats ceremony."
33
- icon: "rocket"
33
+ icon: "fa-solid fa-rocket"
34
34
  - title: "Everyone talks to users"
35
35
  description: "Support isn't a department. The person who built it answers for it."
36
- icon: "comments"
36
+ icon: "fa-solid fa-comments"
37
37
  - title: "Writing over meetings"
38
38
  description: "Decisions get written down where everyone can read them."
39
- icon: "pen-nib"
39
+ icon: "fa-solid fa-pen-nib"
40
40
 
41
41
  # Join CTA
42
42
  join_cta:
@@ -113,10 +113,12 @@ bands below keep the reveal lane. {% endcomment %}
113
113
  {% iftruthy member.member.links %}
114
114
  <div class="omega-person__links">
115
115
  {% for link in member.member.links %}
116
- {% assign link_icon = link.id %}
117
- {% if link.id == "website" %}{% assign link_icon = "globe" %}{% endif %}
116
+ {% comment %} The id names a PLATFORM, not an icon (#929): a profile
117
+ link is always a brand mark, and `website` is the one that is not. {% endcomment %}
118
+ {% assign link_icon = 'fa-brands fa-' | append: link.id %}
119
+ {% if link.id == "website" %}{% assign link_icon = "fa-solid fa-globe" %}{% endif %}
118
120
  <a href="{{ link.url }}" class="omega-icon-link" target="_blank" rel="nofollow noopener" title="{{ link.title }}">
119
- <i class="fa-solid fa-{{ link_icon }} fa-sm"></i>
121
+ <i class="{{ link_icon }} fa-sm" aria-hidden="true"></i>
120
122
  </a>
121
123
  {% endfor %}
122
124
  </div>
@@ -142,7 +144,7 @@ bands below keep the reveal lane. {% endcomment %}
142
144
  {% for item in resolved.principles.items %}
143
145
  <div class="omega-rowlist__item" data-omega-reveal>
144
146
  <span class="d-inline-flex align-items-center gap-3">
145
- <span class="omega-icon-chip omega-icon-chip--neutral"><i class="fa-solid fa-{{ item.icon }} fa-sm"></i></span>
147
+ <span class="omega-icon-chip omega-icon-chip--neutral"><i class="{{ item.icon }} fa-sm" aria-hidden="true"></i></span>
146
148
  <strong>{{ item.title }}</strong>
147
149
  </span>
148
150
  <span class="omega-rowlist__meta">{{ item.description }}</span>
@@ -51,10 +51,12 @@ layout: frontend/core/base
51
51
  {% iftruthy resolved.member.links %}
52
52
  <span class="d-inline-flex gap-2">
53
53
  {% for link in resolved.member.links %}
54
- {% assign link_icon = link.id %}
55
- {% if link.id == "website" %}{% assign link_icon = "globe" %}{% endif %}
54
+ {% comment %} The id names a PLATFORM, not an icon (#929): a profile link
55
+ is always a brand mark, and `website` is the one that is not. {% endcomment %}
56
+ {% assign link_icon = 'fa-brands fa-' | append: link.id %}
57
+ {% if link.id == "website" %}{% assign link_icon = "fa-solid fa-globe" %}{% endif %}
56
58
  <a href="{{ link.url }}" class="omega-icon-link" target="_blank" rel="nofollow noopener" title="{{ link.title }}">
57
- <i class="fa-solid fa-{{ link_icon }} fa-sm"></i>
59
+ <i class="{{ link_icon }} fa-sm" aria-hidden="true"></i>
58
60
  </a>
59
61
  {% endfor %}
60
62
  </span>