@omega.js/extension 0.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 (684) hide show
  1. package/LICENSE +98 -0
  2. package/README.md +194 -0
  3. package/bin/omega +2 -0
  4. package/bin/omega-extension +2 -0
  5. package/bin/omg +2 -0
  6. package/dist/assets/css/bundles/.gitkeep +0 -0
  7. package/dist/assets/css/components/content/index.scss +5 -0
  8. package/dist/assets/css/components/options/index.scss +9 -0
  9. package/dist/assets/css/components/pages/index.scss +5 -0
  10. package/dist/assets/css/components/popup/index.scss +9 -0
  11. package/dist/assets/css/core/_animations.scss +64 -0
  12. package/dist/assets/css/core/_fontawesome.scss +146 -0
  13. package/dist/assets/css/core/_initialize.scss +23 -0
  14. package/dist/assets/css/core/_utilities.scss +80 -0
  15. package/dist/assets/css/omega-extension.scss +43 -0
  16. package/dist/assets/css/shell/_index.scss +207 -0
  17. package/dist/assets/css/tokens/_index.scss +166 -0
  18. package/dist/assets/js/core/app-shell.js +136 -0
  19. package/dist/assets/js/libs/initialize-tooltips.js +31 -0
  20. package/dist/assets/js/libs/recaptcha.js +94 -0
  21. package/dist/assets/js/main.js +4 -0
  22. package/dist/assets/themes/_template/README.md +115 -0
  23. package/dist/assets/themes/_template/_config.scss +60 -0
  24. package/dist/assets/themes/_template/_theme.js +14 -0
  25. package/dist/assets/themes/_template/_theme.scss +28 -0
  26. package/dist/assets/themes/_template/css/base/_root.scss +19 -0
  27. package/dist/assets/themes/_template/css/components/_components.scss +23 -0
  28. package/dist/assets/themes/base/README.md +5 -0
  29. package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
  30. package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
  31. package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
  32. package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
  33. package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
  34. package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
  35. package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
  36. package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
  37. package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
  38. package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
  39. package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
  40. package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
  41. package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
  42. package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
  43. package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
  44. package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
  45. package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
  46. package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
  47. package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
  48. package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
  49. package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
  50. package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
  51. package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
  52. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
  53. package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
  54. package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
  55. package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
  56. package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
  57. package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
  58. package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
  59. package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
  60. package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
  61. package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
  62. package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
  63. package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
  64. package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
  65. package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
  66. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
  67. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
  68. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
  69. package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
  70. package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
  71. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
  72. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
  73. package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
  74. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
  75. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
  76. package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
  77. package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
  78. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
  79. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
  80. package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
  81. package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
  82. package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
  83. package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
  84. package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
  85. package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
  86. package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
  87. package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
  88. package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
  89. package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
  90. package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
  91. package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
  92. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
  93. package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
  94. package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
  95. package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
  96. package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
  97. package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
  98. package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
  99. package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
  100. package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
  101. package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
  102. package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
  103. package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
  104. package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
  105. package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
  106. package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
  107. package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
  108. package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
  109. package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
  110. package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
  111. package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
  112. package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
  113. package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
  114. package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
  115. package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
  116. package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
  117. package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
  118. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
  119. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
  120. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
  121. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
  122. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
  123. package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
  124. package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
  125. package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
  126. package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
  127. package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
  128. package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
  129. package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
  130. package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
  131. package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
  132. package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
  133. package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
  134. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
  135. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
  136. package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
  137. package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
  138. package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
  139. package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
  140. package/dist/assets/themes/base/_theme.js +13 -0
  141. package/dist/assets/themes/base/_theme.scss +4 -0
  142. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  143. package/dist/assets/themes/bootstrap/_theme.scss +11 -0
  144. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  145. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  146. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  147. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  148. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  149. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  150. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  151. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  152. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  153. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  154. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  155. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  156. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  157. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  158. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  159. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  160. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  161. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  162. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  163. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  164. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  165. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  166. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  167. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  168. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  169. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  170. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  171. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  172. package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
  173. package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
  174. package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
  175. package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
  176. package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
  177. package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
  178. package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
  179. package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
  180. package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
  181. package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
  182. package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
  183. package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
  184. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  185. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  186. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  187. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  188. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  189. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  190. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  191. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  192. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  193. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  194. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  195. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  196. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  197. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  198. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  199. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  200. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  201. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  202. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  203. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  204. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  205. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  206. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  207. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  208. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  209. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  210. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  211. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  212. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  213. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  214. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  215. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  216. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  217. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  218. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  219. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  220. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  221. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  222. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  223. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  224. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  225. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  226. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  227. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  228. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  229. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  230. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  231. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  232. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  233. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  234. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  235. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  236. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  237. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  238. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  239. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  240. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  241. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  242. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  243. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  244. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  245. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  246. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  247. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  248. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  249. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  250. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  251. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  252. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  253. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  254. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  255. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  256. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  257. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  258. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  259. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  260. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  261. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  262. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  263. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  264. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  265. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  266. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  267. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  268. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  269. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  270. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  271. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  272. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  273. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  274. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  275. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  276. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  277. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  278. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  279. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  280. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  281. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  282. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  283. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  284. package/dist/assets/themes/classy/README.md +89 -0
  285. package/dist/assets/themes/classy/_config.scss +245 -0
  286. package/dist/assets/themes/classy/_theme.js +31 -0
  287. package/dist/assets/themes/classy/_theme.scss +57 -0
  288. package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
  289. package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
  290. package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
  291. package/dist/assets/themes/classy/css/base/_root.scss +113 -0
  292. package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
  293. package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
  294. package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
  295. package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
  296. package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
  297. package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
  298. package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
  299. package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
  300. package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
  301. package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
  302. package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
  303. package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
  304. package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
  305. package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
  306. package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
  307. package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
  308. package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
  309. package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
  310. package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
  311. package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
  312. package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
  313. package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
  314. package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
  315. package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
  316. package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
  317. package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
  318. package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
  319. package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
  320. package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
  321. package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
  322. package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
  323. package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
  324. package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
  325. package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
  326. package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
  327. package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
  328. package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
  329. package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
  330. package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
  331. package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
  332. package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
  333. package/dist/assets/themes/neobrutalism/README.md +118 -0
  334. package/dist/assets/themes/neobrutalism/_config.scss +139 -0
  335. package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
  336. package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
  337. package/dist/assets/themes/neobrutalism/_theme.js +24 -0
  338. package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
  339. package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
  340. package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
  341. package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
  342. package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
  343. package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
  344. package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
  345. package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
  346. package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
  347. package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
  348. package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
  349. package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
  350. package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
  351. package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
  352. package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
  353. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
  354. package/dist/assets/themes/newsflash/README.md +117 -0
  355. package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
  356. package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
  357. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
  358. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
  359. package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
  360. package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
  361. package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
  362. package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
  363. package/dist/assets/themes/newsflash/_config.scss +147 -0
  364. package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
  365. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
  366. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
  367. package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
  368. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
  369. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
  370. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
  371. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
  372. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
  373. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
  374. package/dist/assets/themes/newsflash/_theme.js +24 -0
  375. package/dist/assets/themes/newsflash/_theme.scss +70 -0
  376. package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
  377. package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
  378. package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
  379. package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
  380. package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
  381. package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
  382. package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
  383. package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
  384. package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
  385. package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
  386. package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
  387. package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
  388. package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
  389. package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
  390. package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
  391. package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
  392. package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
  393. package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
  394. package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
  395. package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
  396. package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
  397. package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
  398. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
  399. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
  400. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
  401. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
  402. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
  403. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
  404. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
  405. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
  406. package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
  407. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
  408. package/dist/background.js +684 -0
  409. package/dist/build.js +268 -0
  410. package/dist/cli-run.js +25 -0
  411. package/dist/cli.js +30 -0
  412. package/dist/commands/build.js +67 -0
  413. package/dist/commands/clean.js +29 -0
  414. package/dist/commands/deploy.js +97 -0
  415. package/dist/commands/install.js +58 -0
  416. package/dist/commands/lib/dependencies.js +33 -0
  417. package/dist/commands/lib/deploy-precheck.js +57 -0
  418. package/dist/commands/lib/ensure-target.js +151 -0
  419. package/dist/commands/lib/push-secrets.js +60 -0
  420. package/dist/commands/migrate.js +77 -0
  421. package/dist/commands/test.js +110 -0
  422. package/dist/commands/update.js +21 -0
  423. package/dist/commands/version.js +12 -0
  424. package/dist/config/manifest.json +117 -0
  425. package/dist/config/page-template.html +21 -0
  426. package/dist/content.js +37 -0
  427. package/dist/defaults/.github/workflows/publish.yml +86 -0
  428. package/dist/defaults/.nvmrc +1 -0
  429. package/dist/defaults/.vscode/settings.json +8 -0
  430. package/dist/defaults/AGENTS.md +113 -0
  431. package/dist/defaults/CHANGELOG.md +15 -0
  432. package/dist/defaults/CLAUDE.md +1 -0
  433. package/dist/defaults/_.gitignore +75 -0
  434. package/dist/defaults/config/description.md +46 -0
  435. package/dist/defaults/config/messages.json +20 -0
  436. package/dist/defaults/config/omega.json5 +64 -0
  437. package/dist/defaults/docs/README.md +17 -0
  438. package/dist/defaults/gulpfile.js +6 -0
  439. package/dist/defaults/hooks/build/post.js +8 -0
  440. package/dist/defaults/hooks/build/pre.js +8 -0
  441. package/dist/defaults/src/assets/css/bundles/.gitkeep +0 -0
  442. package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
  443. package/dist/defaults/src/assets/css/components/offscreen/index.scss +4 -0
  444. package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
  445. package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
  446. package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
  447. package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
  448. package/dist/defaults/src/assets/css/main.scss +32 -0
  449. package/dist/defaults/src/assets/images/.gitkeep +0 -0
  450. package/dist/defaults/src/assets/js/components/background/index.js +25 -0
  451. package/dist/defaults/src/assets/js/components/content/index.js +22 -0
  452. package/dist/defaults/src/assets/js/components/offscreen/index.js +25 -0
  453. package/dist/defaults/src/assets/js/components/options/index.js +22 -0
  454. package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
  455. package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
  456. package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
  457. package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
  458. package/dist/defaults/src/manifest.json +131 -0
  459. package/dist/defaults/src/views/offscreen/index.html +3 -0
  460. package/dist/defaults/src/views/options/index.html +8 -0
  461. package/dist/defaults/src/views/pages/index.html +10 -0
  462. package/dist/defaults/src/views/popup/index.html +4 -0
  463. package/dist/defaults/src/views/sidepanel/index.html +4 -0
  464. package/dist/defaults/test/README.md +41 -0
  465. package/dist/defaults/test/_init.js +10 -0
  466. package/dist/defaults/test/boot/externally-connectable.test.js +28 -0
  467. package/dist/gulp/config/locales.js +12 -0
  468. package/dist/gulp/main.js +78 -0
  469. package/dist/gulp/tasks/_.js +18 -0
  470. package/dist/gulp/tasks/audit.js +222 -0
  471. package/dist/gulp/tasks/bundle.js +687 -0
  472. package/dist/gulp/tasks/defaults.js +281 -0
  473. package/dist/gulp/tasks/distribute.js +172 -0
  474. package/dist/gulp/tasks/fontawesome.js +25 -0
  475. package/dist/gulp/tasks/html.js +163 -0
  476. package/dist/gulp/tasks/icons.js +126 -0
  477. package/dist/gulp/tasks/package.js +742 -0
  478. package/dist/gulp/tasks/publish.js +417 -0
  479. package/dist/gulp/tasks/sass.js +252 -0
  480. package/dist/gulp/tasks/serve.js +103 -0
  481. package/dist/gulp/tasks/translate.js +252 -0
  482. package/dist/gulp/tasks/utils/build-json.js +43 -0
  483. package/dist/gulp/tasks/utils/template-transform.js +50 -0
  484. package/dist/gulp/templates/BUILD_INSTRUCTIONS.md +69 -0
  485. package/dist/index.js +46 -0
  486. package/dist/lib/affiliatizer.js +224 -0
  487. package/dist/lib/analytics.js +26 -0
  488. package/dist/lib/auth-helpers.js +213 -0
  489. package/dist/lib/extension.js +116 -0
  490. package/dist/lib/icons.js +36 -0
  491. package/dist/lib/logger-lite.js +35 -0
  492. package/dist/lib/logger.js +4 -0
  493. package/dist/lib/messaging.js +48 -0
  494. package/dist/lib/safe-install.js +4 -0
  495. package/dist/lib/theme.js +73 -0
  496. package/dist/lib/verts.js +68 -0
  497. package/dist/offscreen.js +31 -0
  498. package/dist/omega-bin.js +6 -0
  499. package/dist/options.js +80 -0
  500. package/dist/page.js +80 -0
  501. package/dist/popup.js +80 -0
  502. package/dist/sidepanel.js +80 -0
  503. package/dist/test/assert.js +4 -0
  504. package/dist/test/fixtures/consumer-extension/dist/background.js +23 -0
  505. package/dist/test/fixtures/consumer-extension/dist/manifest.json +20 -0
  506. package/dist/test/fixtures/consumer-extension/dist/options.html +10 -0
  507. package/dist/test/fixtures/consumer-extension/dist/popup.bundle.js +5 -0
  508. package/dist/test/fixtures/consumer-extension/dist/popup.html +12 -0
  509. package/dist/test/harness/extension/background.js +26 -0
  510. package/dist/test/harness/extension/manifest.json +27 -0
  511. package/dist/test/harness/extension/options.html +12 -0
  512. package/dist/test/harness/extension/popup.html +12 -0
  513. package/dist/test/harness/extension/sidepanel.html +12 -0
  514. package/dist/test/index.js +63 -0
  515. package/dist/test/runner.js +99 -0
  516. package/dist/test/runners/boot.js +221 -0
  517. package/dist/test/runners/chromium.js +391 -0
  518. package/dist/test/runners/helpers.js +24 -0
  519. package/dist/test/suites/background/messaging.test.js +44 -0
  520. package/dist/test/suites/background/storage.test.js +46 -0
  521. package/dist/test/suites/background/sw-context.test.js +49 -0
  522. package/dist/test/suites/boot/build-json-bake.test.js +80 -0
  523. package/dist/test/suites/boot/extension-loads.test.js +58 -0
  524. package/dist/test/suites/build/affiliatizer.test.js +64 -0
  525. package/dist/test/suites/build/app-launch.test.js +65 -0
  526. package/dist/test/suites/build/attach-log-file.test.js +99 -0
  527. package/dist/test/suites/build/auth-emulator-gate.test.js +118 -0
  528. package/dist/test/suites/build/auth-triggers.test.js +71 -0
  529. package/dist/test/suites/build/boot-discovery.test.js +134 -0
  530. package/dist/test/suites/build/boot-timeout.test.js +92 -0
  531. package/dist/test/suites/build/build-error-notification.test.js +122 -0
  532. package/dist/test/suites/build/build-json-bake.test.js +302 -0
  533. package/dist/test/suites/build/build-verb.test.js +138 -0
  534. package/dist/test/suites/build/bundle-targets.test.js +66 -0
  535. package/dist/test/suites/build/cache-warming.test.js +44 -0
  536. package/dist/test/suites/build/cli.test.js +150 -0
  537. package/dist/test/suites/build/default-boot-test.test.js +100 -0
  538. package/dist/test/suites/build/defaults-scaffold.test.js +287 -0
  539. package/dist/test/suites/build/deploy-dispatch.test.js +76 -0
  540. package/dist/test/suites/build/distribute-task.test.js +111 -0
  541. package/dist/test/suites/build/ensure-target.test.js +141 -0
  542. package/dist/test/suites/build/env-delivery.test.js +239 -0
  543. package/dist/test/suites/build/env-watch.test.js +86 -0
  544. package/dist/test/suites/build/expect.test.js +48 -0
  545. package/dist/test/suites/build/exports.test.js +53 -0
  546. package/dist/test/suites/build/extension-fallback.test.js +82 -0
  547. package/dist/test/suites/build/framework-deps.test.js +176 -0
  548. package/dist/test/suites/build/global-handlers.test.js +70 -0
  549. package/dist/test/suites/build/icon-sheet.test.js +74 -0
  550. package/dist/test/suites/build/logger-lite.test.js +61 -0
  551. package/dist/test/suites/build/manager.test.js +249 -0
  552. package/dist/test/suites/build/mode-helpers.test.js +136 -0
  553. package/dist/test/suites/build/omega-shell.test.js +103 -0
  554. package/dist/test/suites/build/omega-tokens.test.js +76 -0
  555. package/dist/test/suites/build/package-task.test.js +831 -0
  556. package/dist/test/suites/build/setup-scripts.test.js +172 -0
  557. package/dist/test/suites/build/strip-dev-blocks.test.js +122 -0
  558. package/dist/test/suites/build/template-replace.test.js +116 -0
  559. package/dist/test/suites/build/test-discovery.test.js +64 -0
  560. package/dist/test/suites/build/test-target-no-match.test.js +119 -0
  561. package/dist/test/suites/build/theme-resolve.test.js +115 -0
  562. package/dist/test/suites/build/translate.test.js +85 -0
  563. package/dist/test/suites/build/url-helpers.test.js +119 -0
  564. package/dist/test/suites/build/verb-logs.test.js +43 -0
  565. package/dist/test/suites/build/verts-binding.test.js +67 -0
  566. package/dist/test/suites/build/wakeup-ping.test.js +90 -0
  567. package/dist/test/suites/build/wave5-messenger.test.js +80 -0
  568. package/dist/test/suites/view/options-and-sidepanel.test.js +16 -0
  569. package/dist/test/suites/view/popup-context.test.js +53 -0
  570. package/dist/test/suites/view/sidepanel.test.js +16 -0
  571. package/dist/test/utils/extended-mode-warning.js +13 -0
  572. package/dist/utils/attach-log-file.js +4 -0
  573. package/dist/utils/mode-helpers.js +117 -0
  574. package/dist/utils/url-helpers.js +69 -0
  575. package/dist/vendor/account/engine.js +182 -0
  576. package/dist/vendor/account/features.js +220 -0
  577. package/dist/vendor/account/index.js +53 -0
  578. package/dist/vendor/account/schema.js +272 -0
  579. package/dist/vendor/account/subscription.js +38 -0
  580. package/dist/vendor/config/company.js +31 -0
  581. package/dist/vendor/config/defaults.js +173 -0
  582. package/dist/vendor/config/demo.js +18 -0
  583. package/dist/vendor/config/desktop-artifacts.js +110 -0
  584. package/dist/vendor/config/edit.js +769 -0
  585. package/dist/vendor/config/env-delivery.js +145 -0
  586. package/dist/vendor/config/env-rules.js +93 -0
  587. package/dist/vendor/config/env-schema.js +1078 -0
  588. package/dist/vendor/config/env.js +445 -0
  589. package/dist/vendor/config/hooks.js +97 -0
  590. package/dist/vendor/config/index.js +237 -0
  591. package/dist/vendor/config/instances.js +208 -0
  592. package/dist/vendor/config/load.js +490 -0
  593. package/dist/vendor/config/merge.js +68 -0
  594. package/dist/vendor/config/order.js +139 -0
  595. package/dist/vendor/config/ports.js +374 -0
  596. package/dist/vendor/config/providers.js +32 -0
  597. package/dist/vendor/config/repo.js +142 -0
  598. package/dist/vendor/config/retired-keys.js +430 -0
  599. package/dist/vendor/config/schema.js +1610 -0
  600. package/dist/vendor/config/secrets.js +50 -0
  601. package/dist/vendor/config/seed.js +34 -0
  602. package/dist/vendor/config/site-global.js +205 -0
  603. package/dist/vendor/config/validate.js +554 -0
  604. package/dist/vendor/config/winback.js +61 -0
  605. package/dist/vendor/devkit/actions-secrets.js +145 -0
  606. package/dist/vendor/devkit/attach-log-file.js +262 -0
  607. package/dist/vendor/devkit/bundle.js +292 -0
  608. package/dist/vendor/devkit/ci-workflows.js +520 -0
  609. package/dist/vendor/devkit/clean-dirs.js +28 -0
  610. package/dist/vendor/devkit/cli-router.js +156 -0
  611. package/dist/vendor/devkit/defaults-engine.js +372 -0
  612. package/dist/vendor/devkit/deploy-precheck.js +54 -0
  613. package/dist/vendor/devkit/deploy-record.js +180 -0
  614. package/dist/vendor/devkit/deploy.js +286 -0
  615. package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
  616. package/dist/vendor/devkit/env-watch.js +132 -0
  617. package/dist/vendor/devkit/framework-deps.js +46 -0
  618. package/dist/vendor/devkit/icons.js +178 -0
  619. package/dist/vendor/devkit/license.js +155 -0
  620. package/dist/vendor/devkit/local.js +1905 -0
  621. package/dist/vendor/devkit/logger.js +128 -0
  622. package/dist/vendor/devkit/merge-line-files.js +296 -0
  623. package/dist/vendor/devkit/npm-registry.js +52 -0
  624. package/dist/vendor/devkit/omega-bin.js +345 -0
  625. package/dist/vendor/devkit/safe-install.js +18 -0
  626. package/dist/vendor/devkit/scaffold-guard.js +96 -0
  627. package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
  628. package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
  629. package/dist/vendor/devkit/target-dependencies.js +137 -0
  630. package/dist/vendor/devkit/target-secrets.js +165 -0
  631. package/dist/vendor/devkit/test/assert.js +120 -0
  632. package/dist/vendor/devkit/test/define-cases.js +104 -0
  633. package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
  634. package/dist/vendor/devkit/test/runner-core.js +554 -0
  635. package/dist/vendor/devkit/test/scope.js +162 -0
  636. package/dist/vendor/devkit/translate/cache.js +84 -0
  637. package/dist/vendor/devkit/translate/engine.js +243 -0
  638. package/dist/vendor/devkit/translate/index.js +49 -0
  639. package/dist/vendor/devkit/translate/languages.js +134 -0
  640. package/dist/vendor/devkit/translate/providers.js +188 -0
  641. package/dist/vendor/devkit/update.js +569 -0
  642. package/docs/affiliatizer.md +81 -0
  643. package/docs/audit.md +67 -0
  644. package/docs/auth.md +149 -0
  645. package/docs/build-system.md +176 -0
  646. package/docs/cdp-debugging.md +42 -0
  647. package/docs/cli.md +73 -0
  648. package/docs/common-mistakes.md +10 -0
  649. package/docs/components.md +87 -0
  650. package/docs/css.md +133 -0
  651. package/docs/defaults.md +72 -0
  652. package/docs/environment-detection.md +79 -0
  653. package/docs/extension.md +93 -0
  654. package/docs/hooks.md +111 -0
  655. package/docs/icons.md +47 -0
  656. package/docs/index.md +291 -0
  657. package/docs/logging.md +33 -0
  658. package/docs/managers.md +100 -0
  659. package/docs/offscreen.md +57 -0
  660. package/docs/publishing.md +182 -0
  661. package/docs/shared/agent-docs.md +89 -0
  662. package/docs/shared/analytics.md +612 -0
  663. package/docs/shared/brands.md +51 -0
  664. package/docs/shared/breaking-changes.md +497 -0
  665. package/docs/shared/config.md +1387 -0
  666. package/docs/shared/deploys.md +215 -0
  667. package/docs/shared/icons.md +201 -0
  668. package/docs/shared/local-dev.md +147 -0
  669. package/docs/shared/logging.md +202 -0
  670. package/docs/shared/monitoring.md +153 -0
  671. package/docs/shared/publishing.md +183 -0
  672. package/docs/shared/rulings.md +34 -0
  673. package/docs/shared/testing.md +147 -0
  674. package/docs/shared/theming.md +604 -0
  675. package/docs/shared/translation.md +291 -0
  676. package/docs/shared/updates.md +61 -0
  677. package/docs/templating.md +66 -0
  678. package/docs/test-boot-layer.md +143 -0
  679. package/docs/test-framework.md +411 -0
  680. package/docs/themes.md +89 -0
  681. package/docs/translations.md +73 -0
  682. package/docs/verts.md +67 -0
  683. package/docs/xss-prevention.md +95 -0
  684. package/package.json +159 -0
@@ -0,0 +1,596 @@
1
+ ---
2
+ layout: frontend/core/base
3
+
4
+ # Marketing-section defaults (Ian 2026-07-11: deliberate product behavior —
5
+ # promo banner, social proof, testimonials, FAQs ship ON by default and are
6
+ # consumer-overridable). PLANS never live here: payment.products is the only
7
+ # pricing source (C2) — the enterprise row included.
8
+
9
+ # Hero Section — the page's copy (shared heading/masthead cluster; the old
10
+ # inline | default: fallbacks in markup live here now)
11
+ hero:
12
+ headline: "The right plans,"
13
+ headline_accent: "for the right price"
14
+ subheadline: "Simple and affordable pricing. No hidden fees, no surprises."
15
+
16
+ # Social Proof Section
17
+ social_proof:
18
+ items:
19
+ - number: "5M"
20
+ label: "Customers"
21
+ sublabel: "90 countries"
22
+ - number: "#1"
23
+ label: "Product of the month"
24
+ sublabel: "Product Hunt"
25
+ - number: "4.8"
26
+ label: "Capterra"
27
+ show_stars: true
28
+ - number: "4.8"
29
+ label: "G2"
30
+ show_stars: true
31
+
32
+ # CTA Section — the page's copy (shared marketing/cta band; the old inline
33
+ # | default: fallbacks in markup live here now)
34
+ cta:
35
+ headline: "Need help finding the right plan?"
36
+ subheadline: "Talk to our support team. We'll point you to exactly what you need."
37
+ primary_button:
38
+ text: "Talk to us"
39
+ href: "/contact"
40
+
41
+ # Testimonials Section — no avatar: by default, so the quotes wear the
42
+ # initial badge (the framework never loads an external portrait at runtime).
43
+ # A brand adds avatar: pointing at its own shipped image.
44
+ testimonials:
45
+ superheadline: "Testimonials"
46
+ items:
47
+ - quote: "This platform <em>transformed</em> my business. The support is incredible!"
48
+ author: "Sarah Johnson"
49
+ role: "CEO"
50
+ company: "TechStart Inc"
51
+ initial: "S"
52
+ - quote: "Best investment I've made. Achieved more here than with <em>any</em> consultant."
53
+ author: "Michael Chen"
54
+ role: "Founder"
55
+ company: "DataFlow"
56
+ initial: "M"
57
+ - quote: "The community support made all the difference in our <em>growth journey</em>."
58
+ author: "Emily Davis"
59
+ role: "Director"
60
+ company: "Creative Studio"
61
+ initial: "E"
62
+
63
+ # FAQs Section
64
+ faqs:
65
+ superheadline:
66
+ text: "FAQs"
67
+ headline: "Frequently asked <em>questions</em>"
68
+ subheadline: "Everything you need to know about {{ resolved.config.brand.name }} billing & subscriptions."
69
+ # Trial copy DERIVES from the catalog (#273): the answer renders empty when
70
+ # no product carries `trial.days`, and the renderers drop answerless items —
71
+ # so a brand with no trial ships no trial claim. A refund policy is brand
72
+ # copy, never a framework default: the defaults state only what the catalog
73
+ # knows.
74
+ items:
75
+ - question: "Can I cancel at any time?"
76
+ answer: "Yes, you can cancel anytime, no questions asked. However, we would highly appreciate it if you could give us some feedback so we can improve."
77
+ - question: "Is there a free trial?"
78
+ answer: "{% if resolved.pricing.trialDays > 0 %}Yes, every paid plan starts with a {{ resolved.pricing.trialDays }}-day free trial, and you can cancel any time before it ends.{% endif %}"
79
+ ---
80
+
81
+ {% comment %}
82
+ Pricing renders from config alone (C2): resolved.pricing is composed from
83
+ payment.products by the engine — plans, one-time products, billing toggle
84
+ availability, savings %, comparison matrix. The marketing chrome above
85
+ (banner, social proof, testimonials, FAQs) ships ON by default; consumer
86
+ page frontmatter overrides any of it (pricing.promo: false kills the
87
+ banner). The enterprise row is DATA, not chrome: it renders only for the
88
+ catalog product marked `enterprise: true`.
89
+ {% endcomment %}
90
+
91
+ {% assign _plans = resolved.pricing.plans %}
92
+ {% assign _plan_count = _plans | size %}
93
+ {% assign _onetime = resolved.pricing.oneTime %}
94
+ {% assign _onetime_count = _onetime | size %}
95
+ {% assign _enterprise = resolved.pricing.enterprise %}
96
+ {% assign _show_toggle = false %}
97
+ {% if resolved.pricing.billing.monthly and resolved.pricing.billing.annually %}
98
+ {% assign _show_toggle = true %}
99
+ {% endif %}
100
+ {% assign _default_annual = resolved.pricing.billing.annually %}
101
+
102
+ <!-- Promo Banner — ON by default; pricing.promo overrides badge/text/code, pricing.promo: false kills it -->
103
+ {% unless resolved.pricing.promo == false %}
104
+ <div id="pricing-promo-banner" class="omega-promo position-fixed top-0 start-0 w-100" style="z-index: 1050;" hidden>
105
+ <div class="py-2 position-relative">
106
+ <button type="button" class="btn-close position-absolute top-50 end-0 translate-middle-y me-3" aria-label="Close" onclick="this.closest('#pricing-promo-banner').hidden=true;var n=document.querySelector('.omega-nav');if(n)n.style.marginTop=''"></button>
107
+ <div class="container-fluid">
108
+ <div class="d-flex align-items-center justify-content-center gap-3 flex-wrap pe-5">
109
+ <span id="pricing-promo-badge" class="omega-chip omega-chip--accent">
110
+ {{ resolved.pricing.promo.badge | default: "15% OFF!" }}
111
+ </span>
112
+ <span id="pricing-promo-text" class="fw-semibold text-body">
113
+ {{ resolved.pricing.promo.text | default: "Flash sale" }}
114
+ </span>
115
+ <span>
116
+ Ending in <span id="pricing-promo-countdown" class="omega-promo__countdown">--</span>
117
+ </span>
118
+ <span>
119
+ Use code <span id="pricing-promo-code" class="omega-promo__code omega-chip">{{ resolved.pricing.promo.code | default: "WELCOME15" }}</span>
120
+ </span>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ </div>
125
+ {% endunless %}
126
+
127
+ <!-- Hero Section -->
128
+ {% comment %} #467 (after #749): this masthead IS the page's first viewport, so
129
+ the band paints with the document — data-omega-first-paint on the section, no
130
+ stagger container, and the masthead cluster on its first_paint switch. The
131
+ bands below keep the reveal lane. {% endcomment %}
132
+ <section class="omega-dotgrid pb-4" data-omega-first-paint data-omega-dotfield>
133
+ <div class="container">
134
+ <div class="row justify-content-center text-center">
135
+ <div class="col-lg-10">
136
+ {% component "heading/masthead", eyebrow: "Pricing", headline: resolved.hero.headline, headline_accent: resolved.hero.headline_accent, sub: resolved.hero.subheadline, sub_class: "omega-hero__sub mx-auto", first_paint: true %}
137
+ </div>
138
+ </div>
139
+ </div>
140
+ </section>
141
+
142
+ {% if _plan_count == 0 and _onetime_count == 0 and _enterprise == nil %}
143
+ <!-- Empty state: no published catalog (payment.products) — never render fiction -->
144
+ <section class="pt-0">
145
+ <div class="container">
146
+ <div class="row justify-content-center text-center">
147
+ <div class="col-lg-8">
148
+ <div id="pricing-empty" class="card p-5" data-omega-reveal>
149
+ <h2 class="h3 mb-3">Pricing isn't published yet</h2>
150
+ <p class="text-muted mb-4">We're putting the finishing touches on our plans. Reach out and we'll get you set up in the meantime.</p>
151
+ <div>
152
+ <a href="/contact" class="btn btn-adaptive btn-lg px-4">
153
+ <i class="fa-solid fa-envelope me-2"></i>
154
+ Contact us
155
+ </a>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </section>
162
+ {% endif %}
163
+
164
+ {% if _plan_count > 0 %}
165
+ <!-- Pricing Plans Section -->
166
+ <section class="pt-0">
167
+ <div class="container">
168
+ <div class="row justify-content-center">
169
+ <div class="col-12">
170
+ {% comment %} The band's heading (#270): the card names are h3s, so
171
+ without it the page skips from the hero h1 straight to h3. Visually
172
+ hidden — the design carries the band by its cards, not a title. {% endcomment %}
173
+ <h2 class="visually-hidden">Subscription plans</h2>
174
+
175
+ {% if _show_toggle %}
176
+ {% if resolved.pricing.savingsPercent > 0 %}
177
+ {% assign _savings = resolved.pricing.savingsPercent %}
178
+ {% else %}
179
+ {% assign _savings = 20 %}
180
+ {% endif %}
181
+ <div class="d-flex align-items-center justify-content-center mb-5" data-omega-reveal>
182
+ <div class="omega-billing-toggle" role="group" aria-label="Billing toggle" data-omega-segmented>
183
+ <input type="radio" class="btn-check" name="billing" id="monthly" autocomplete="off" data-billing="monthly" {% unless _default_annual %}checked{% endunless %}>
184
+ <label class="btn" for="monthly">Monthly</label>
185
+
186
+ <input type="radio" class="btn-check" name="billing" id="annually" autocomplete="off" {% if _default_annual %}checked{% endif %} data-billing="annually">
187
+ <label class="btn" for="annually">Annually <span class="omega-chip omega-chip--accent omega-billing-toggle__save ms-1">Save {{ _savings }}%</span></label>
188
+ </div>
189
+ </div>
190
+ {% endif %}
191
+
192
+ {% comment %} Enterprise left the grid (issue #44 item 8) — it gets its
193
+ own full-width row below, so the cards are peers of each other {% endcomment %}
194
+ {% assign _card_count = _plan_count %}
195
+
196
+ <!-- Determine column classes based on number of cards -->
197
+ {% if _card_count == 1 %}
198
+ {% assign col_classes = "col-12 col-md-8 col-lg-6 col-xl-5" %}
199
+ {% elsif _card_count == 2 %}
200
+ {% assign col_classes = "col-12 col-md-6 col-lg-5 col-xl-5" %}
201
+ {% elsif _card_count == 3 %}
202
+ {% assign col_classes = "col-12 col-md-6 col-lg-6 col-xl-4" %}
203
+ {% elsif _card_count == 4 %}
204
+ {% assign col_classes = "col-12 col-md-6 col-lg-6 col-xl-3" %}
205
+ {% elsif _card_count == 5 %}
206
+ {% assign col_classes = "col-12 col-md-6 col-lg-4 col-xl-4 col-xxl-2" %}
207
+ {% else %}
208
+ {% assign col_classes = "col-12 col-md-6 col-lg-4 col-xl-3 col-xxl-2" %}
209
+ {% endif %}
210
+
211
+ <div class="row g-4 g-xl-5 mb-4 justify-content-center" data-omega-reveal-stagger="80">
212
+ {% for plan in _plans %}
213
+ <div class="{{ col_classes }}" data-omega-reveal>
214
+ <div class="card omega-price-card {% if plan.popular %}omega-price-card--popular{% endif %} h-100">
215
+ {% if plan.popular %}
216
+ <span class="omega-chip omega-chip--ink omega-price-card__popular">Most popular</span>
217
+ {% endif %}
218
+
219
+ <!-- Header (fixed rhythm — every card's features start on the same row) -->
220
+ <h3 class="card-title omega-price-card__name mb-0">{{ plan.name }}</h3>
221
+ <p class="omega-price-card__tagline">{{ plan.tagline }}</p>
222
+
223
+ <!-- Price -->
224
+ {% if plan.free %}
225
+ <div class="omega-price-card__price">
226
+ <span class="omega-price-card__amount">Free</span>
227
+ </div>
228
+ {% else %}
229
+ {% if _default_annual and plan.prices.annually > 0 %}
230
+ {% assign _initial_amount = plan.prices.annuallyPerMonth %}
231
+ {% else %}
232
+ {% assign _initial_amount = plan.prices.monthly %}
233
+ {% endif %}
234
+ <div class="omega-price-card__price">
235
+ <span class="omega-price-card__currency">$</span>
236
+ <span class="omega-price-card__amount amount" data-monthly="{{ plan.prices.monthly }}" data-annually="{{ plan.prices.annuallyPerMonth }}">{{ _initial_amount }}</span>
237
+ <span class="omega-price-card__per">/month</span>
238
+ </div>
239
+ {% endif %}
240
+
241
+ <!-- Billing info line (swaps with the toggle — JS contract) -->
242
+ <p class="omega-price-card__billing">
243
+ {% if plan.free %}
244
+ <span>No credit card required</span>
245
+ {% else %}
246
+ {% if _default_annual and plan.prices.annually > 0 %}
247
+ {% capture _initial_billing %}Billed ${{ plan.prices.annually | omega_commaify }} annually{% endcapture %}
248
+ {% else %}
249
+ {% capture _initial_billing %}Billed ${{ plan.prices.monthly | omega_commaify }} monthly{% endcapture %}
250
+ {% endif %}
251
+ <span class="billing-info" data-monthly="Billed ${{ plan.prices.monthly | omega_commaify }} monthly" data-annually="Billed ${{ plan.prices.annually | omega_commaify }} annually">
252
+ {{ _initial_billing }}
253
+ </span>
254
+ {% if resolved.pricing.price_per_unit.enabled %}
255
+ {% include core/pricing/price-per-unit.html plan=plan %}
256
+ {% if monthly_price_per_unit %}
257
+ · <span class="price-per-unit" data-monthly="${{ monthly_price_per_unit }}" data-annually="${{ annual_price_per_unit }}">${{ annual_price_per_unit }}</span> per {{ resolved.pricing.price_per_unit.label }}
258
+ {% endif %}
259
+ {% endif %}
260
+ {% endif %}
261
+ </p>
262
+
263
+ {% if plan.features.size > 0 %}
264
+ <!-- Features (definitions from config → dotted underline +
265
+ tooltip): the ONE list component the homepage plan band
266
+ renders too (#539) -->
267
+ {% component "pricing/features", features: plan.commonFeatures %}
268
+
269
+ {% if plan.extraFeatures.size > 0 %}
270
+ {% unless forloop.first %}
271
+ {% assign _prev_index = forloop.index0 | minus: 1 %}
272
+ {% assign _prev_plan = _plans[_prev_index] %}
273
+ <div class="omega-price-card__tier-note">
274
+ Everything in <strong>{{ _prev_plan.name }}</strong>, and:
275
+ </div>
276
+ {% endunless %}
277
+ {% component "pricing/features", features: plan.extraFeatures %}
278
+ {% elsif forloop.first == false %}
279
+ {% assign _prev_index = forloop.index0 | minus: 1 %}
280
+ {% assign _prev_plan = _plans[_prev_index] %}
281
+ <div class="omega-price-card__tier-note">
282
+ Everything in <strong>{{ _prev_plan.name }}</strong>
283
+ </div>
284
+ {% endif %}
285
+ {% endif %}
286
+
287
+ <!-- CTA — pinned to the card floor; buttons align across the row -->
288
+ <div class="d-grid omega-price-card__cta">
289
+ {% if plan.popular %}
290
+ {% assign _plan_btn = "btn-adaptive omega-btn-ring" %}
291
+ {% else %}
292
+ {% assign _plan_btn = "btn-outline-adaptive" %}
293
+ {% endif %}
294
+ {% iftruthy plan.url %}
295
+ <a href="{{ plan.url }}" class="btn {{ _plan_btn }} fw-semibold omega-hover-nudge">
296
+ {% if plan.trialDays > 0 %}
297
+ Get free trial
298
+ {% else %}
299
+ Get started
300
+ {% endif %}
301
+ <span class="omega-nudge ms-2"><i class="fa-solid fa-arrow-right fa-sm"></i></span>
302
+ </a>
303
+ {% endiftruthy %}
304
+ {% iffalsy plan.url %}
305
+ <button class="btn {{ _plan_btn }} fw-semibold omega-hover-nudge" data-plan-id="{{ plan.id }}" data-plan-type="subscription">
306
+ {% if plan.trialDays > 0 %}
307
+ Get free trial
308
+ {% else %}
309
+ Get started
310
+ {% endif %}
311
+ <span class="omega-nudge ms-2"><i class="fa-solid fa-arrow-right fa-sm"></i></span>
312
+ </button>
313
+ {% endiffalsy %}
314
+ </div>
315
+ </div>
316
+ </div>
317
+ {% endfor %}
318
+ </div>
319
+
320
+ {% comment %} The guarantee line is BRAND copy (#273): a refund window
321
+ is a policy the framework cannot know, so there is no default — a brand
322
+ sets pricing.guarantee and the line appears. {% endcomment %}
323
+ {% iftruthy resolved.pricing.guarantee %}
324
+ <p class="small text-center omega-quiet mb-0" data-omega-reveal>
325
+ <span class="omega-guarantee-icon me-1"><i class="fa-solid fa-shield-halved"></i></span>
326
+ {{ resolved.pricing.guarantee }}
327
+ </p>
328
+ {% endiftruthy %}
329
+
330
+ </div>
331
+ </div>
332
+ </div>
333
+ </section>
334
+ {% endif %}
335
+
336
+ {% iftruthy _enterprise %}
337
+ <!-- Enterprise — its own full-width row under the cards (the catalog product
338
+ marked enterprise: true; no such product, no row) -->
339
+ <section class="pt-0">
340
+ <div class="container">
341
+ {% comment %} The band's heading (#270): its title is an h3, and an
342
+ enterprise-only catalog renders no plans band above it — so the h2 rides
343
+ here too. Visually hidden — the row carries itself. {% endcomment %}
344
+ <h2 class="visually-hidden">Enterprise</h2>
345
+
346
+ <div class="omega-band omega-band--enterprise" data-omega-reveal>
347
+ <div class="omega-band__body">
348
+ <h3 class="omega-band__title">{{ _enterprise.name }}</h3>
349
+ {% iftruthy _enterprise.tagline %}
350
+ <p class="omega-band__desc">{{ _enterprise.tagline }}</p>
351
+ {% endiftruthy %}
352
+ {% if _enterprise.features.size > 0 %}
353
+ <ul class="omega-band__features">
354
+ {% for feature in _enterprise.features %}
355
+ <li>
356
+ <span class="omega-feature-check text-success"><i class="fa-solid fa-check fa-sm"></i></span>
357
+ <span>
358
+ {% if feature.value == 'Unlimited' %}
359
+ Unlimited
360
+ {% elsif feature.value and feature.value != true %}
361
+ {{ feature.value | omega_commaify }}
362
+ {% endif %}
363
+ {% iftruthy feature.definition %}
364
+ <span class="text-decoration-underline text-decoration-dotted cursor-help" data-bs-toggle="tooltip" data-bs-title="{{ feature.definition }}">{{ feature.name }}</span>
365
+ {% endiftruthy %}
366
+ {% iffalsy feature.definition %}
367
+ {{ feature.name }}
368
+ {% endiffalsy %}
369
+ </span>
370
+ </li>
371
+ {% endfor %}
372
+ </ul>
373
+ {% endif %}
374
+ </div>
375
+
376
+ <div class="omega-band__actions">
377
+ <a href="{{ _enterprise.url }}" class="btn btn-outline-adaptive fw-semibold omega-hover-nudge" data-plan-enterprise="{{ _enterprise.id }}">
378
+ Contact us
379
+ <span class="omega-nudge ms-2"><i class="fa-solid fa-arrow-right fa-sm"></i></span>
380
+ </a>
381
+ </div>
382
+ </div>
383
+ </div>
384
+ </section>
385
+ {% endiftruthy %}
386
+
387
+ {% if _onetime_count > 0 %}
388
+ <!-- One-time Purchases Section (friction #7: presented per type, no billing cadence) -->
389
+ <section class="pt-0">
390
+ <div class="container">
391
+ <div class="omega-section-head omega-section-head--center mb-5" data-omega-reveal>
392
+ {% comment %} resolved.pricing is engine-composed from payment.products
393
+ (C2) — copy defaults stay INLINE filter args, never frontmatter. {% endcomment %}
394
+ {% component "heading/section-head", headline: resolved.pricing.one_time_headline | default: "One-time", headline_accent: resolved.pricing.one_time_headline_accent | default: "purchases", sub: resolved.pricing.one_time_subheadline | default: "Pay once, keep it forever. No subscription required." %}
395
+ </div>
396
+
397
+ <div class="row g-4 justify-content-center" data-omega-reveal-stagger="80">
398
+ {% for product in _onetime %}
399
+ <div class="col-12 col-md-6 col-lg-5 col-xl-4" data-omega-reveal>
400
+ <div class="card omega-price-card h-100">
401
+ <h3 class="card-title omega-price-card__name mb-0">{{ product.name }}</h3>
402
+ <p class="omega-price-card__tagline">{{ product.tagline }}</p>
403
+
404
+ <div class="omega-price-card__price">
405
+ <span class="omega-price-card__currency">$</span>
406
+ <span class="omega-price-card__amount">{{ product.price | omega_commaify }}</span>
407
+ <span class="omega-price-card__per">one-time</span>
408
+ </div>
409
+
410
+ <p class="omega-price-card__billing">
411
+ <span>Yours forever, pay once</span>
412
+ </p>
413
+
414
+ {% component "pricing/features", features: product.features %}
415
+
416
+ <div class="d-grid omega-price-card__cta">
417
+ <button class="btn btn-adaptive fw-semibold omega-hover-nudge" data-plan-id="{{ product.id }}" data-plan-type="one-time">
418
+ Buy now
419
+ <span class="omega-nudge ms-2"><i class="fa-solid fa-arrow-right fa-sm"></i></span>
420
+ </button>
421
+ </div>
422
+ </div>
423
+ </div>
424
+ {% endfor %}
425
+ </div>
426
+ </div>
427
+ </section>
428
+ {% endif %}
429
+
430
+ {% assign _comparison_features = resolved.pricing.comparison.features %}
431
+ {% assign _comparison_count = _comparison_features | size %}
432
+ {% if _plan_count > 1 and _comparison_count > 0 %}
433
+ <!-- Feature Comparison Grid -->
434
+ <section class="omega-compare">
435
+ <div class="container">
436
+ <div class="omega-section-head omega-section-head--center mb-5" data-omega-reveal>
437
+ {% component "heading/section-head", superheadline: resolved.feature_comparison.superheadline.text | default: "Compare", headline: resolved.feature_comparison.headline | default: "Compare all", headline_accent: resolved.feature_comparison.headline_accent | default: "plans", sub: resolved.feature_comparison.subheadline | default: "See exactly what's included in each plan" %}
438
+ <!-- Mobile scroll indicator -->
439
+ <div class="d-md-none">
440
+ <small class="text-muted">
441
+ <span class="me-2">Swipe to see more</span>
442
+ <i class="fa-solid fa-arrow-right fa-sm"></i>
443
+ </small>
444
+ </div>
445
+ </div>
446
+ </div>
447
+
448
+ <div class="container">
449
+ <div class="table-responsive" data-omega-reveal>
450
+ <table class="table caption-top">
451
+ <caption>Compare features</caption>
452
+ <thead>
453
+ <tr>
454
+ <th scope="col">Feature</th>
455
+ {% for plan in _plans %}
456
+ <th scope="col">{{ plan.name }}</th>
457
+ {% endfor %}
458
+ </tr>
459
+ </thead>
460
+ <tbody>
461
+ {% for feature in _comparison_features %}
462
+ <tr>
463
+ <th scope="row">
464
+ {% iftruthy feature.definition %}
465
+ <span class="text-decoration-underline text-decoration-dotted cursor-help" data-bs-toggle="tooltip" data-bs-title="{{ feature.definition }}">{{ feature.name }}</span>
466
+ {% endiftruthy %}
467
+ {% iffalsy feature.definition %}
468
+ {{ feature.name }}
469
+ {% endiffalsy %}
470
+ </th>
471
+ {% for plan in _plans %}
472
+ {% assign _cell = feature.values[plan.id] %}
473
+ <td>
474
+ {%- comment %} One catalog value, both surfaces (#562): a
475
+ truthy cell is a YES, and a cell that is not a bare `true`
476
+ carries its own value as the label — exactly what the plan
477
+ cards render beside their check. A row of "Included" beside
478
+ circle-xmark icons was the same data telling two stories.
479
+ {% endcomment -%}
480
+ {% if _cell %}
481
+ <span class="omega-compare__yes text-success"><i class="fa-solid fa-circle-check fa-md"></i></span>
482
+ {% if _cell != true %}
483
+ <span class="omega-compare__label">{{ _cell | omega_commaify | escape_once }}</span>
484
+ {% endif %}
485
+ {% else %}
486
+ <span class="omega-compare__no"><i class="fa-solid fa-circle-xmark fa-md"></i></span>
487
+ {% endif %}
488
+ </td>
489
+ {% endfor %}
490
+ </tr>
491
+ {% endfor %}
492
+ </tbody>
493
+ </table>
494
+ </div>
495
+ </div>
496
+ </section>
497
+ {% endif %}
498
+
499
+ <!-- Social Proof Section (consumer-provided: social_proof.items) -->
500
+ {% iftruthy resolved.social_proof.items %}
501
+ <section>
502
+ <div class="container">
503
+ <div class="omega-stats" data-omega-reveal-stagger="80">
504
+ {% for item in resolved.social_proof.items %}
505
+ <div class="omega-stat" data-omega-reveal>
506
+ <div class="omega-stat__num" data-omega-countup>{{ item.number }}</div>
507
+ {% iftruthy item.show_stars %}
508
+ <div class="mt-1" style="color: var(--omega-accent);">
509
+ {% for i in (1..5) %}
510
+ <i class="fa-solid fa-star fa-xs"></i>
511
+ {% endfor %}
512
+ </div>
513
+ {% endiftruthy %}
514
+ <div class="omega-stat__label">{{ item.label }}</div>
515
+ {% iftruthy item.sublabel %}
516
+ <div class="omega-stat__sub">{{ item.sublabel }}</div>
517
+ {% endiftruthy %}
518
+ </div>
519
+ {% endfor %}
520
+ </div>
521
+ </div>
522
+ </section>
523
+ {% endiftruthy %}
524
+
525
+ <!-- CTA Section -->
526
+ {% section "marketing/cta", data: resolved.cta %}
527
+
528
+ {% iftruthy resolved.testimonials.items %}
529
+ {% section "marketing/testimonials", data: resolved.testimonials %}
530
+ {% endiftruthy %}
531
+
532
+ <!-- FAQ Section (consumer-provided: faqs.items) -->
533
+ {% comment %} An answerless item is a DERIVED one whose condition didn't hold
534
+ (#273 — the trial FAQ on a catalog with no trial): it drops out of the
535
+ accordion here and out of the FAQPage schema in core/foot.html. The test is
536
+ `!= ''` on purpose — `!= blank` does not filter inside where_exp here.
537
+ {% endcomment %}
538
+ {% assign _faqs = resolved.faqs.items | where_exp: "faq", "faq.answer != ''" %}
539
+ {% assign _faq_count = _faqs | size %}
540
+ {% if _faq_count > 0 %}
541
+ <section>
542
+ <div class="container">
543
+ <div class="omega-duo">
544
+ <div class="omega-duo__aside omega-section-head" data-omega-reveal>
545
+ {% component "heading/section-head", superheadline: resolved.faqs.superheadline.text, headline: resolved.faqs.headline | default: "Frequently asked <em>questions</em>", headline_accent: resolved.faqs.headline_accent, sub: resolved.faqs.subheadline %}
546
+
547
+ {% comment %} The billing object states what the framework KNOWS: the
548
+ plan-switch route really does prorate. Its refund half — the fragment
549
+ and the floating chip — is the same brand copy as the guarantee line
550
+ above (#273), so it rides the same `pricing.guarantee` gate and the
551
+ object drops its chip clearance with it. {% endcomment %}
552
+ <div class="omega-object position-relative pe-4 mt-4 d-none d-lg-block">
553
+ <div class="omega-fragment{% iftruthy resolved.pricing.guarantee %} pb-5{% endiftruthy %}">
554
+ <span class="omega-micro omega-fragment__label">How billing behaves</span>
555
+ <div class="omega-fragment__msg">
556
+ <span class="omega-fragment__msg-mark"><i class="fa-solid fa-arrows-rotate fa-xs"></i></span>
557
+ <span>Switch plans anytime, <strong>prorated</strong> automatically</span>
558
+ </div>
559
+ {% iftruthy resolved.pricing.guarantee %}
560
+ <div class="omega-fragment__msg">
561
+ <span class="omega-fragment__msg-mark"><i class="fa-solid fa-rotate-left fa-xs"></i></span>
562
+ <span>Changed your mind? <strong>Refunded.</strong></span>
563
+ </div>
564
+ {% endiftruthy %}
565
+ </div>
566
+ {% iftruthy resolved.pricing.guarantee %}
567
+ <div class="omega-fragment-chip omega-float position-absolute bottom-0 end-0 translate-middle-y">
568
+ <span class="omega-dot omega-status--ok"></span>
569
+ Money-back guarantee
570
+ </div>
571
+ {% endiftruthy %}
572
+ </div>
573
+ </div>
574
+
575
+ <div class="accordion omega-faq" id="faqAccordion" data-omega-reveal>
576
+ {% for faq in _faqs %}
577
+ <div class="accordion-item">
578
+ <h2 class="accordion-header">
579
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq{{ forloop.index }}" aria-expanded="false" aria-controls="faq{{ forloop.index }}">
580
+ <span>{{ faq.question }}</span>
581
+ </button>
582
+ </h2>
583
+ <div id="faq{{ forloop.index }}" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
584
+ <div class="accordion-body">
585
+ {{ faq.answer }}
586
+ </div>
587
+ </div>
588
+ </div>
589
+ {% endfor %}
590
+ </div>
591
+ </div>
592
+ </div>
593
+ </section>
594
+ {% endif %}
595
+
596
+ {{ content | omega_content_format }}