@mohasinac/appkit 3.6.5 → 3.8.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 (298) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +17 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +7 -2
  3. package/dist/_internal/client/features/tour/TourProvider.d.ts +5 -2
  4. package/dist/_internal/client/features/tour/TourProvider.js +125 -12
  5. package/dist/_internal/client/theme/ThemeProvider.js +1 -1
  6. package/dist/_internal/server/features/categories/data.js +2 -2
  7. package/dist/_internal/server/features/faqs/og.js +5 -1
  8. package/dist/_internal/server/features/reviews/og.js +5 -1
  9. package/dist/_internal/server/features/seo/manifest.js +2 -1
  10. package/dist/_internal/server/features/seo/og.js +7 -1
  11. package/dist/_internal/server/features/tester/visibility.d.ts +13 -0
  12. package/dist/_internal/server/features/tester/visibility.js +28 -0
  13. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  14. package/dist/_internal/server/functions/scheduled.js +9 -1
  15. package/dist/_internal/server/jobs/core/jobRunners.js +5 -0
  16. package/dist/_internal/server/jobs/core/resetOtpVerification.d.ts +17 -0
  17. package/dist/_internal/server/jobs/core/resetOtpVerification.js +88 -0
  18. package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +6 -0
  19. package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +35 -0
  20. package/dist/_internal/server/jobs/handlers/_helpers.d.ts +6 -0
  21. package/dist/_internal/server/jobs/handlers/_helpers.js +12 -0
  22. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
  23. package/dist/_internal/server/jobs/handlers/index.js +2 -0
  24. package/dist/_internal/server/jobs/handlers/messages.d.ts +2 -0
  25. package/dist/_internal/server/jobs/handlers/messages.js +2 -0
  26. package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.d.ts +2 -0
  27. package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.js +2 -0
  28. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  29. package/dist/_internal/shared/actions/action-registry.js +56 -0
  30. package/dist/_internal/shared/tokens/index.d.ts +12 -12
  31. package/dist/client.d.ts +15 -3
  32. package/dist/client.js +10 -2
  33. package/dist/constants/api-endpoints.d.ts +39 -12
  34. package/dist/constants/api-endpoints.js +17 -8
  35. package/dist/constants/field-names.d.ts +9 -0
  36. package/dist/constants/field-names.js +12 -0
  37. package/dist/constants/index.d.ts +1 -1
  38. package/dist/constants/index.js +1 -1
  39. package/dist/features/account/components/LinkedAccountsSection.d.ts +11 -0
  40. package/dist/features/account/components/LinkedAccountsSection.js +11 -0
  41. package/dist/features/account/components/UserSidebar.d.ts +3 -1
  42. package/dist/features/account/components/UserSidebar.js +9 -13
  43. package/dist/features/account/hooks/useCollapsedSections.d.ts +20 -0
  44. package/dist/features/account/hooks/useCollapsedSections.js +63 -0
  45. package/dist/features/account/hooks/useProfile.d.ts +8 -0
  46. package/dist/features/account/index.d.ts +1 -0
  47. package/dist/features/account/index.js +1 -0
  48. package/dist/features/admin/components/AdminAddressEditorView.js +2 -2
  49. package/dist/features/admin/components/AdminBidsView.js +6 -6
  50. package/dist/features/admin/components/AdminBrandsView.js +2 -2
  51. package/dist/features/admin/components/AdminCarouselView.js +2 -2
  52. package/dist/features/admin/components/AdminCategoryEditorView.js +2 -2
  53. package/dist/features/admin/components/AdminPrizeDrawsView.js +3 -3
  54. package/dist/features/admin/components/AdminProductEditorView.js +5 -2
  55. package/dist/features/admin/components/AdminReviewsView.js +5 -5
  56. package/dist/features/admin/components/AdminSectionsView.js +3 -18
  57. package/dist/features/admin/components/AdminSidebar.js +8 -6
  58. package/dist/features/admin/components/AdminSiteSettingsView.js +133 -127
  59. package/dist/features/admin/components/AdminSublistingCategoriesView.js +1 -1
  60. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.d.ts +9 -0
  61. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +129 -0
  62. package/dist/features/admin/components/AdminTesterChecklistView.d.ts +6 -0
  63. package/dist/features/admin/components/AdminTesterChecklistView.js +93 -0
  64. package/dist/features/admin/components/AdminUserEditorView.d.ts +3 -1
  65. package/dist/features/admin/components/AdminUserEditorView.js +7 -1
  66. package/dist/features/admin/components/AdminUsersView.js +1 -1
  67. package/dist/features/admin/components/DataListingView.js +2 -2
  68. package/dist/features/admin/components/analytics/AdminPageViewsReportView.d.ts +8 -0
  69. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +41 -0
  70. package/dist/features/admin/components/index.d.ts +6 -0
  71. package/dist/features/admin/components/index.js +3 -0
  72. package/dist/features/admin/schemas/firestore.d.ts +0 -7
  73. package/dist/features/admin/schemas/firestore.js +6 -6
  74. package/dist/features/analytics/components/PageViewTracker.d.ts +12 -0
  75. package/dist/features/analytics/components/PageViewTracker.js +22 -0
  76. package/dist/features/analytics/repository/page-views.repository.d.ts +32 -0
  77. package/dist/features/analytics/repository/page-views.repository.js +43 -0
  78. package/dist/features/analytics/types.d.ts +6 -0
  79. package/dist/features/analytics/types.js +13 -0
  80. package/dist/features/auth/components/SocialAuthButtons.js +1 -1
  81. package/dist/features/auth/hooks/useAuth.d.ts +12 -0
  82. package/dist/features/auth/hooks/useAuth.js +109 -0
  83. package/dist/features/auth/permissions/constants.d.ts +1 -1
  84. package/dist/features/auth/repository/session.repository.d.ts +2 -0
  85. package/dist/features/auth/repository/session.repository.js +4 -1
  86. package/dist/features/auth/schemas/firestore.d.ts +17 -1
  87. package/dist/features/auth/schemas/firestore.js +2 -0
  88. package/dist/features/blog/components/BlogIndexListing.js +2 -2
  89. package/dist/features/blog/schemas/firestore.d.ts +4 -0
  90. package/dist/features/cart/actions/cart-actions.js +20 -2
  91. package/dist/features/categories/api/route.js +2 -2
  92. package/dist/features/categories/components/CategoriesIndexListing.js +3 -3
  93. package/dist/features/categories/components/CategoryBundlesListing.js +2 -2
  94. package/dist/features/categories/components/CategoryDetailPageView.js +3 -1
  95. package/dist/features/categories/components/CategoryProductsListing.js +2 -2
  96. package/dist/features/categories/schemas/firestore.d.ts +4 -0
  97. package/dist/features/classified/components/ClassifiedIndexListing.js +2 -2
  98. package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +2 -2
  99. package/dist/features/email/primitives.d.ts +2 -2
  100. package/dist/features/email/primitives.js +2 -2
  101. package/dist/features/events/components/EventsIndexListing.js +2 -2
  102. package/dist/features/events/repository/event-entry.repository.js +1 -0
  103. package/dist/features/events/schemas/firestore.d.ts +7 -1
  104. package/dist/features/events/schemas/firestore.js +1 -0
  105. package/dist/features/layout/BackToTop.d.ts +6 -1
  106. package/dist/features/layout/BackToTop.js +31 -6
  107. package/dist/features/layout/BottomNavbar.js +1 -1
  108. package/dist/features/layout/NavItem.js +1 -1
  109. package/dist/features/layout/NavbarLayout.js +2 -2
  110. package/dist/features/live/components/LiveItemsIndexListing.js +2 -2
  111. package/dist/features/media/MediaVideo.js +5 -1
  112. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -2
  113. package/dist/features/products/components/AuctionsIndexListing.js +2 -2
  114. package/dist/features/products/components/PrizeDrawsIndexListing.js +2 -2
  115. package/dist/features/products/components/ProductsIndexListing.js +2 -2
  116. package/dist/features/products/constants/action-defs.d.ts +2 -0
  117. package/dist/features/products/constants/action-defs.js +2 -0
  118. package/dist/features/products/constants/sieve.d.ts +0 -6
  119. package/dist/features/products/constants/sieve.js +4 -2
  120. package/dist/features/products/repository/products.repository.d.ts +20 -0
  121. package/dist/features/products/repository/products.repository.js +5 -0
  122. package/dist/features/products/schemas/firestore.d.ts +4 -0
  123. package/dist/features/promotions/components/CouponsIndexListing.js +18 -5
  124. package/dist/features/reviews/components/ReviewsIndexListing.js +2 -2
  125. package/dist/features/search/hooks/useNavSuggestions.js +20 -1
  126. package/dist/features/seller/actions/seller-actions.js +11 -6
  127. package/dist/features/seller/components/SellerAddressesView.js +2 -2
  128. package/dist/features/seller/components/SellerBidsView.js +2 -2
  129. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  130. package/dist/features/seller/components/SellerOrdersView.js +2 -2
  131. package/dist/features/seller/components/SellerProductsView.js +2 -2
  132. package/dist/features/seller/components/SellerSidebar.d.ts +3 -1
  133. package/dist/features/seller/components/SellerSidebar.js +9 -8
  134. package/dist/features/seller/components/SellerStoreCategoriesView.js +2 -2
  135. package/dist/features/seller/components/SellerTemplatesView.js +2 -2
  136. package/dist/features/shell/StepForm.js +4 -4
  137. package/dist/features/stores/actions/store-query-actions.d.ts +5 -4
  138. package/dist/features/stores/actions/store-query-actions.js +11 -8
  139. package/dist/features/stores/components/StoreAuctionsListing.js +2 -2
  140. package/dist/features/stores/components/StoreClassifiedsListing.js +2 -2
  141. package/dist/features/stores/components/StoreDetailLayoutView.js +1 -1
  142. package/dist/features/stores/components/StoreDigitalCodesListing.js +2 -2
  143. package/dist/features/stores/components/StoreLiveItemsListing.js +2 -2
  144. package/dist/features/stores/components/StorePreOrdersListing.js +2 -2
  145. package/dist/features/stores/components/StoreProductsListing.js +2 -2
  146. package/dist/features/stores/components/StoreReviewsListing.js +2 -2
  147. package/dist/features/stores/components/StoresIndexListing.js +2 -2
  148. package/dist/features/stores/repository/store.repository.js +3 -0
  149. package/dist/features/stores/schemas/firestore.d.ts +4 -0
  150. package/dist/features/tester/actions/checklist-item-actions.d.ts +69 -0
  151. package/dist/features/tester/actions/checklist-item-actions.js +42 -0
  152. package/dist/features/tester/actions/index.d.ts +1 -0
  153. package/dist/features/tester/actions/index.js +1 -0
  154. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.d.ts +2 -0
  155. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +22 -0
  156. package/dist/features/tester/components/AdminTesterFeedbackListView.d.ts +3 -0
  157. package/dist/features/tester/components/AdminTesterFeedbackListView.js +100 -0
  158. package/dist/features/tester/components/AdminTesterFeedbackReportView.d.ts +2 -0
  159. package/dist/features/tester/components/AdminTesterFeedbackReportView.js +30 -0
  160. package/dist/features/tester/components/AdminTesterFeedbackView.d.ts +2 -0
  161. package/dist/features/tester/components/AdminTesterFeedbackView.js +29 -0
  162. package/dist/features/tester/components/TesterChecklistStepRow.d.ts +18 -0
  163. package/dist/features/tester/components/TesterChecklistStepRow.js +29 -0
  164. package/dist/features/tester/components/TesterFeedbackChart.d.ts +14 -0
  165. package/dist/features/tester/components/TesterFeedbackChart.js +18 -0
  166. package/dist/features/tester/components/TesterHubView.d.ts +5 -0
  167. package/dist/features/tester/components/TesterHubView.js +71 -0
  168. package/dist/features/tester/components/index.d.ts +11 -0
  169. package/dist/features/tester/components/index.js +7 -0
  170. package/dist/features/tester/index.d.ts +2 -0
  171. package/dist/features/tester/index.js +2 -0
  172. package/dist/features/tester/repository/index.d.ts +2 -0
  173. package/dist/features/tester/repository/index.js +2 -0
  174. package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +13 -0
  175. package/dist/features/tester/repository/tester-checklist-item.repository.js +55 -0
  176. package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +50 -0
  177. package/dist/features/tester/repository/tester-checklist-response.repository.js +196 -0
  178. package/dist/features/tester/schemas/firestore.d.ts +85 -0
  179. package/dist/features/tester/schemas/firestore.js +93 -0
  180. package/dist/features/tester/schemas/index.d.ts +1 -0
  181. package/dist/features/tester/schemas/index.js +1 -0
  182. package/dist/features/tester/seed-data/blog-tester-seed-data.d.ts +2 -0
  183. package/dist/features/tester/seed-data/blog-tester-seed-data.js +40 -0
  184. package/dist/features/tester/seed-data/categories-tester-seed-data.d.ts +2 -0
  185. package/dist/features/tester/seed-data/categories-tester-seed-data.js +177 -0
  186. package/dist/features/tester/seed-data/events-tester-seed-data.d.ts +2 -0
  187. package/dist/features/tester/seed-data/events-tester-seed-data.js +50 -0
  188. package/dist/features/tester/seed-data/index.d.ts +6 -0
  189. package/dist/features/tester/seed-data/index.js +6 -0
  190. package/dist/features/tester/seed-data/products-tester-seed-data.d.ts +2 -0
  191. package/dist/features/tester/seed-data/products-tester-seed-data.js +151 -0
  192. package/dist/features/tester/seed-data/stores-tester-seed-data.d.ts +2 -0
  193. package/dist/features/tester/seed-data/stores-tester-seed-data.js +40 -0
  194. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +2 -0
  195. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +248 -0
  196. package/dist/features/tester/seed-data/tester-ttl.d.ts +4 -0
  197. package/dist/features/tester/seed-data/tester-ttl.js +6 -0
  198. package/dist/features/tester/server.d.ts +9 -0
  199. package/dist/features/tester/server.js +8 -0
  200. package/dist/index.d.ts +28 -2
  201. package/dist/index.js +51 -1
  202. package/dist/next/api/api-response.js +5 -1
  203. package/dist/next/api/routeHandler.js +10 -1
  204. package/dist/next/middleware/chain.js +1 -1
  205. package/dist/next/routing/route-map.d.ts +6 -7
  206. package/dist/next/routing/route-map.js +3 -7
  207. package/dist/providers/payment-manual/index.d.ts +2 -2
  208. package/dist/providers/payment-manual/index.js +2 -2
  209. package/dist/react/contexts/SessionContext.d.ts +4 -0
  210. package/dist/react/contexts/SessionContext.js +4 -0
  211. package/dist/repositories/index.d.ts +4 -0
  212. package/dist/repositories/index.js +3 -0
  213. package/dist/security/pii-encrypt.js +12 -2
  214. package/dist/seed/addresses-seed-data.js +1 -1
  215. package/dist/seed/bids-seed-data.js +64 -185
  216. package/dist/seed/blog-posts-seed-data.js +1 -1
  217. package/dist/seed/carousel-slides-seed-data.js +22 -16
  218. package/dist/seed/carousels-seed-data.js +1 -1
  219. package/dist/seed/cart-seed-data.js +1 -1
  220. package/dist/seed/categories-seed-data.js +1 -1
  221. package/dist/seed/claimed-coupons-seed-data.js +1 -1
  222. package/dist/seed/conversations-seed-data.js +1 -1
  223. package/dist/seed/coupon-usage-seed-data.js +1 -1
  224. package/dist/seed/coupons-seed-data.js +1 -1
  225. package/dist/seed/events-seed-data.js +1 -1
  226. package/dist/seed/faq-seed-data.js +119 -3
  227. package/dist/seed/grouped-listings-seed-data.d.ts +2 -0
  228. package/dist/seed/grouped-listings-seed-data.js +1 -1
  229. package/dist/seed/history-seed-data.js +1 -1
  230. package/dist/seed/homepage-sections-seed-data.js +1 -1
  231. package/dist/seed/index.d.ts +2 -2
  232. package/dist/seed/index.js +7 -3
  233. package/dist/seed/lottery-entries-seed-data.js +1 -1
  234. package/dist/seed/manifest.d.ts +4 -3
  235. package/dist/seed/manifest.js +13 -6
  236. package/dist/seed/notifications-seed-data.js +1 -1
  237. package/dist/seed/offers-seed-data.js +1 -1
  238. package/dist/seed/orders-seed-data.js +1 -1
  239. package/dist/seed/payouts-seed-data.js +1 -1
  240. package/dist/seed/products-art-seed-data.js +1 -1
  241. package/dist/seed/products-auctions-seed-data.js +1 -1
  242. package/dist/seed/products-classifieds-seed-data.js +1 -1
  243. package/dist/seed/products-digital-codes-seed-data.js +1 -1
  244. package/dist/seed/products-live-items-seed-data.js +1 -1
  245. package/dist/seed/products-preorders-seed-data.d.ts +2 -0
  246. package/dist/seed/products-preorders-seed-data.js +1 -1
  247. package/dist/seed/products-prize-draws-seed-data.js +1 -1
  248. package/dist/seed/products-standard-seed-data.js +1 -1
  249. package/dist/seed/products-stickers-seed-data.js +1 -1
  250. package/dist/seed/reviews-seed-data.js +1 -1
  251. package/dist/seed/scammers-seed-data.js +1 -1
  252. package/dist/seed/sessions-seed-data.js +1 -1
  253. package/dist/seed/site-settings-seed-data.js +22 -16
  254. package/dist/seed/store-addresses-seed-data.js +1 -1
  255. package/dist/seed/store-extensions-seed-data.js +1 -1
  256. package/dist/seed/stores-seed-data.js +1 -1
  257. package/dist/seed/support-tickets-seed-data.js +1 -1
  258. package/dist/seed/tester-checklist-seed-data.d.ts +2 -0
  259. package/dist/seed/tester-checklist-seed-data.js +248 -0
  260. package/dist/seed/users-seed-data.js +1 -1
  261. package/dist/seed/wishlists-seed-data.js +1 -1
  262. package/dist/server.d.ts +7 -2
  263. package/dist/server.js +19 -12
  264. package/dist/styles.css +181 -165
  265. package/dist/tailwind-utilities.css +1 -1
  266. package/dist/tokens/color-pairs.d.ts +46 -0
  267. package/dist/tokens/color-pairs.js +93 -0
  268. package/dist/tokens/index.d.ts +60 -60
  269. package/dist/tokens/index.js +30 -30
  270. package/dist/tokens/themes/cobalt-night.d.ts +3 -2
  271. package/dist/tokens/themes/cobalt-night.js +3 -2
  272. package/dist/tokens/themes/default-dark.d.ts +4 -1
  273. package/dist/tokens/themes/default-dark.js +53 -50
  274. package/dist/tokens/themes/default-light.d.ts +5 -1
  275. package/dist/tokens/themes/default-light.js +48 -44
  276. package/dist/tokens/themes/sunset.js +4 -4
  277. package/dist/tokens/tokens.css +128 -122
  278. package/dist/ui/components/CollapsibleSection.d.ts +15 -0
  279. package/dist/ui/components/CollapsibleSection.js +13 -0
  280. package/dist/ui/components/ListingToolbar.js +3 -2
  281. package/dist/ui/components/Semantic.style.css +3 -3
  282. package/dist/ui/components/SideDrawer.style.css +19 -19
  283. package/dist/ui/components/Slider.js +1 -1
  284. package/dist/ui/components/StickyToolbar.d.ts +36 -7
  285. package/dist/ui/components/StickyToolbar.js +63 -5
  286. package/dist/ui/components/Tabs.js +17 -1
  287. package/dist/ui/components/Tabs.style.css +10 -0
  288. package/dist/ui/components/Typography.js +7 -0
  289. package/dist/ui/components/surface-tokens.d.ts +0 -7
  290. package/dist/ui/components/surface-tokens.js +7 -0
  291. package/dist/ui/index.d.ts +6 -0
  292. package/dist/ui/index.js +3 -0
  293. package/dist/ui/rich-text/RichText.style.css +20 -20
  294. package/dist/utils/id-generators.d.ts +13 -0
  295. package/dist/utils/id-generators.js +17 -0
  296. package/package.json +1 -1
  297. package/scripts/seed-cli-loader.mjs +15 -0
  298. package/scripts/seed-cli.mjs +71 -17
@@ -1,5 +1,9 @@
1
1
  /**
2
- * Built-in light theme — cobalt blue primary + lime green secondary.
2
+ * Built-in light theme — teal-blue primary + magenta secondary-highlight.
3
+ * Rebranded 2026-08-17 from the previous cobalt+lime identity to match the
4
+ * teal/magenta Beyblade reference art supplied for the rebrand (turquoise
5
+ * metallic body + magenta energy-ring highlight + silver accents), paired
6
+ * with the new red/cyan dark theme.
3
7
  * Mirrors the `:root` block in `appkit/src/tokens/tokens.css`.
4
8
  * Cannot be deleted; can be cloned by the admin into a new theme.
5
9
  *
@@ -8,35 +12,35 @@
8
12
  */
9
13
  export const DEFAULT_LIGHT_THEME = {
10
14
  id: "default-light",
11
- name: "Default Light (Cobalt + Lime)",
15
+ name: "Default Light (Teal + Magenta)",
12
16
  mode: "light",
13
17
  builtIn: true,
14
18
  tokens: {
15
- "appkit-color-primary": "#3570fc",
16
- "appkit-color-primary-50": "#eef5ff",
17
- "appkit-color-primary-100": "#d9e8ff",
18
- "appkit-color-primary-200": "#bcd4ff",
19
- "appkit-color-primary-300": "#8eb9ff",
20
- "appkit-color-primary-400": "#5992ff",
21
- "appkit-color-primary-500": "#3570fc",
22
- "appkit-color-primary-600": "#1a55f2",
23
- "appkit-color-primary-700": "#1343de",
24
- "appkit-color-primary-800": "#1536b4",
25
- "appkit-color-primary-900": "#18318e",
26
- "appkit-color-primary-950": "#111e58",
27
- "appkit-color-secondary": "#65c408",
28
- "appkit-color-secondary-50": "#f3ffe3",
29
- "appkit-color-secondary-100": "#e4ffc5",
30
- "appkit-color-secondary-200": "#c8ff90",
31
- "appkit-color-secondary-300": "#a3f550",
32
- "appkit-color-secondary-400": "#84e122",
33
- "appkit-color-secondary-500": "#65c408",
34
- "appkit-color-secondary-600": "#509c02",
35
- "appkit-color-secondary-700": "#3e7708",
36
- "appkit-color-secondary-800": "#345e0d",
37
- "appkit-color-secondary-900": "#2c5011",
38
- "appkit-color-secondary-950": "#142d03",
39
- "appkit-color-cobalt": "#3570fc",
19
+ "appkit-color-primary": "#0d9488",
20
+ "appkit-color-primary-50": "#f0fdfa",
21
+ "appkit-color-primary-100": "#ccfbf1",
22
+ "appkit-color-primary-200": "#99f6e4",
23
+ "appkit-color-primary-300": "#5eead4",
24
+ "appkit-color-primary-400": "#2dd4bf",
25
+ "appkit-color-primary-500": "#14b8a6",
26
+ "appkit-color-primary-600": "#0d9488",
27
+ "appkit-color-primary-700": "#0f766e",
28
+ "appkit-color-primary-800": "#115e59",
29
+ "appkit-color-primary-900": "#134e4a",
30
+ "appkit-color-primary-950": "#042f2e",
31
+ "appkit-color-secondary": "#c026d3",
32
+ "appkit-color-secondary-50": "#fdf4ff",
33
+ "appkit-color-secondary-100": "#fae8ff",
34
+ "appkit-color-secondary-200": "#f5d0fe",
35
+ "appkit-color-secondary-300": "#f0abfc",
36
+ "appkit-color-secondary-400": "#e879f9",
37
+ "appkit-color-secondary-500": "#d946ef",
38
+ "appkit-color-secondary-600": "#c026d3",
39
+ "appkit-color-secondary-700": "#a21caf",
40
+ "appkit-color-secondary-800": "#86198f",
41
+ "appkit-color-secondary-900": "#701a75",
42
+ "appkit-color-secondary-950": "#4a044e",
43
+ "appkit-color-cobalt": "#0d9488",
40
44
  "appkit-color-accent": "#8393b2",
41
45
  "appkit-color-bg": "#fafafa",
42
46
  "appkit-color-surface": "#ffffff",
@@ -48,20 +52,20 @@ export const DEFAULT_LIGHT_THEME = {
48
52
  "appkit-color-text-muted": "#71717a",
49
53
  "appkit-color-text-faint": "#87878f",
50
54
  "appkit-color-text-on-primary": "#ffffff",
51
- "appkit-color-success": "#059669",
52
- "appkit-color-success-surface": "#ecfdf5",
53
- "appkit-color-warning": "#d97706",
55
+ "appkit-color-success": "#15803d",
56
+ "appkit-color-success-surface": "#f0fdf4",
57
+ "appkit-color-warning": "#b45309",
54
58
  "appkit-color-warning-surface": "#fffbeb",
55
- "appkit-color-error": "#dc2626",
59
+ "appkit-color-error": "#b91c1c",
56
60
  "appkit-color-error-surface": "#fef2f2",
57
- "appkit-color-info": "#0284c7",
61
+ "appkit-color-info": "#0369a1",
58
62
  "appkit-color-info-surface": "#f0f9ff",
59
63
  "appkit-color-star": "#facc15",
60
64
  "appkit-color-whatsapp-light": "#1ebe5d",
61
65
  "appkit-color-whatsapp-bg": "#ECE5DD",
62
- "appkit-color-focus-ring": "#3570fc",
63
- "appkit-shadow-glow": "0 0 0 1px rgba(53,112,252,0.10), 0 4px 16px -4px rgba(53,112,252,0.20)",
64
- "appkit-shadow-glow-pink": "0 0 0 1px rgba(233,30,140,0.12), 0 4px 16px -4px rgba(233,30,140,0.22)",
66
+ "appkit-color-focus-ring": "#0d9488",
67
+ "appkit-shadow-glow": "0 0 0 1px rgba(13,148,136,0.10), 0 4px 16px -4px rgba(13,148,136,0.20)",
68
+ "appkit-shadow-glow-pink": "0 0 0 1px rgba(192,38,211,0.12), 0 4px 16px -4px rgba(192,38,211,0.22)",
65
69
  "appkit-font-display": "var(--font-display), \"Poppins\", ui-sans-serif, system-ui, sans-serif",
66
70
  "appkit-font-sans": "var(--font-body), ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
67
71
  "appkit-font-editorial": "var(--font-editorial), \"Georgia\", serif",
@@ -85,15 +89,15 @@ export const DEFAULT_LIGHT_THEME = {
85
89
  "appkit-space-20": "5rem",
86
90
  "appkit-space-24": "6rem",
87
91
  "appkit-text-2xs": "0.625rem",
88
- "appkit-text-xs": "0.75rem",
89
- "appkit-text-sm": "0.875rem",
90
- "appkit-text-base": "1rem",
91
- "appkit-text-lg": "1.125rem",
92
- "appkit-text-xl": "1.25rem",
93
- "appkit-text-2xl": "1.5rem",
94
- "appkit-text-3xl": "1.875rem",
95
- "appkit-text-4xl": "2.25rem",
96
- "appkit-text-5xl": "3rem",
92
+ "appkit-text-xs": "0.6875rem",
93
+ "appkit-text-sm": "0.8125rem",
94
+ "appkit-text-base": "0.9375rem",
95
+ "appkit-text-lg": "1rem",
96
+ "appkit-text-xl": "1.125rem",
97
+ "appkit-text-2xl": "1.375rem",
98
+ "appkit-text-3xl": "1.625rem",
99
+ "appkit-text-4xl": "1.875rem",
100
+ "appkit-text-5xl": "2.5rem",
97
101
  },
98
102
  gradients: {
99
103
  brand: "linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary))",
@@ -35,13 +35,13 @@ export const SUNSET_THEME = {
35
35
  "appkit-color-text": "#431407",
36
36
  "appkit-color-text-muted": "#9a3412",
37
37
  "appkit-color-text-faint": "#c2410c",
38
- "appkit-color-success": "#16a34a",
38
+ "appkit-color-success": "#15803d",
39
39
  "appkit-color-success-surface": "#f0fdf4",
40
- "appkit-color-warning": "#d97706",
40
+ "appkit-color-warning": "#b45309",
41
41
  "appkit-color-warning-surface": "#fef3c7",
42
- "appkit-color-error": "#dc2626",
42
+ "appkit-color-error": "#b91c1c",
43
43
  "appkit-color-error-surface": "#fef2f2",
44
- "appkit-color-info": "#0284c7",
44
+ "appkit-color-info": "#0369a1",
45
45
  "appkit-color-info-surface": "#f0f9ff",
46
46
  "appkit-color-focus-ring": "#f59e0b",
47
47
  "appkit-shadow-glow": "0 0 0 1px rgba(245,158,11,0.18), 0 4px 16px -4px rgba(245,158,11,0.30)",
@@ -11,61 +11,65 @@
11
11
  * --appkit-color-secondary: #your-secondary;
12
12
  * }
13
13
  *
14
- * Default values reflect a lime + magenta palette (override --appkit-color-primary etc. to rebrand).
14
+ * Default values reflect a teal + magenta / crimson + cyan palette (override
15
+ * --appkit-color-primary etc. to rebrand).
15
16
  */
16
17
 
17
18
  /* --- Colour — Brand ------------------------------------------------------- */
18
19
  /*
19
- * Light mode (image 1 cobalt-blue body + lime-green blades):
20
- * primary = Cobalt Blue (dominant body colour)
21
- * secondary = Lime Green (blade / accent colour)
20
+ * Rebranded 2026-08-17 to match two Beyblade reference images (silver/chrome
21
+ * frame shared across both, distinguishing body + energy-ring colours):
22
22
  *
23
- * Dark mode (image 2hot-pink blades + near-black body):
24
- * primary = Hot Pink (dominant accent colour) ← overridden in .dark below
25
- * secondary = Hot Pink (same unified accent) ← overridden in .dark below
23
+ * Light mode (teal/magenta bladeturquoise body + magenta squiggle highlight):
24
+ * primary = Teal (dominant body colour)
25
+ * secondary = Magenta (energy-ring / accent colour)
26
+ *
27
+ * Dark mode (red/cyan blade — crimson body + cyan squiggle highlight):
28
+ * primary = Crimson Red (dominant body colour) ← overridden in [data-theme="default-dark"] below
29
+ * secondary = Cyan (energy-ring / accent colour) ← overridden in [data-theme="default-dark"] below
26
30
  */
27
31
  :root {
28
- /* Primary — Cobalt Blue (light mode dominant, matches Beyblade 1 blue body) */
29
- --appkit-color-primary: #3570fc;
30
- --appkit-color-primary-50: #eef5ff;
31
- --appkit-color-primary-100: #d9e8ff;
32
- --appkit-color-primary-200: #bcd4ff;
33
- --appkit-color-primary-300: #8eb9ff;
34
- --appkit-color-primary-400: #5992ff;
35
- --appkit-color-primary-500: #3570fc;
36
- --appkit-color-primary-600: #1a55f2;
37
- --appkit-color-primary-700: #1343de;
38
- --appkit-color-primary-800: #1536b4;
39
- --appkit-color-primary-900: #18318e;
40
- --appkit-color-primary-950: #111e58;
41
-
42
- /* Secondary — Lime Green (light mode accent, matches Beyblade 1 green blades) */
43
- --appkit-color-secondary: #65c408;
44
- --appkit-color-secondary-50: #f3ffe3;
45
- --appkit-color-secondary-100: #e4ffc5;
46
- --appkit-color-secondary-200: #c8ff90;
47
- --appkit-color-secondary-300: #a3f550;
48
- --appkit-color-secondary-400: #84e122;
49
- --appkit-color-secondary-500: #65c408;
50
- --appkit-color-secondary-600: #509c02;
51
- --appkit-color-secondary-700: #3e7708;
52
- --appkit-color-secondary-800: #345e0d;
53
- --appkit-color-secondary-900: #2c5011;
54
- --appkit-color-secondary-950: #142d03;
55
-
56
- /* Cobalt — Blue accent (links, nav) */
57
- --appkit-color-cobalt: #3570fc;
58
- --appkit-color-cobalt-50: #eef5ff;
59
- --appkit-color-cobalt-100: #d9e8ff;
60
- --appkit-color-cobalt-200: #bcd4ff;
61
- --appkit-color-cobalt-300: #8eb9ff;
62
- --appkit-color-cobalt-400: #5992ff;
63
- --appkit-color-cobalt-500: #3570fc;
64
- --appkit-color-cobalt-600: #1a55f2;
65
- --appkit-color-cobalt-700: #1343de;
66
- --appkit-color-cobalt-800: #1536b4;
67
- --appkit-color-cobalt-900: #18318e;
68
- --appkit-color-cobalt-950: #111e58;
32
+ /* Primary — Teal (light mode dominant, matches the teal/magenta Beyblade's turquoise body) */
33
+ --appkit-color-primary: #0d9488;
34
+ --appkit-color-primary-50: #f0fdfa;
35
+ --appkit-color-primary-100: #ccfbf1;
36
+ --appkit-color-primary-200: #99f6e4;
37
+ --appkit-color-primary-300: #5eead4;
38
+ --appkit-color-primary-400: #2dd4bf;
39
+ --appkit-color-primary-500: #14b8a6;
40
+ --appkit-color-primary-600: #0d9488;
41
+ --appkit-color-primary-700: #0f766e;
42
+ --appkit-color-primary-800: #115e59;
43
+ --appkit-color-primary-900: #134e4a;
44
+ --appkit-color-primary-950: #042f2e;
45
+
46
+ /* Secondary — Magenta (light mode highlight, matches the teal/magenta Beyblade's squiggle accent) */
47
+ --appkit-color-secondary: #c026d3;
48
+ --appkit-color-secondary-50: #fdf4ff;
49
+ --appkit-color-secondary-100: #fae8ff;
50
+ --appkit-color-secondary-200: #f5d0fe;
51
+ --appkit-color-secondary-300: #f0abfc;
52
+ --appkit-color-secondary-400: #e879f9;
53
+ --appkit-color-secondary-500: #d946ef;
54
+ --appkit-color-secondary-600: #c026d3;
55
+ --appkit-color-secondary-700: #a21caf;
56
+ --appkit-color-secondary-800: #86198f;
57
+ --appkit-color-secondary-900: #701a75;
58
+ --appkit-color-secondary-950: #4a044e;
59
+
60
+ /* Cobalt — legacy alias, now mirrors primary teal (links, nav) */
61
+ --appkit-color-cobalt: #0d9488;
62
+ --appkit-color-cobalt-50: #f0fdfa;
63
+ --appkit-color-cobalt-100: #ccfbf1;
64
+ --appkit-color-cobalt-200: #99f6e4;
65
+ --appkit-color-cobalt-300: #5eead4;
66
+ --appkit-color-cobalt-400: #2dd4bf;
67
+ --appkit-color-cobalt-500: #14b8a6;
68
+ --appkit-color-cobalt-600: #0d9488;
69
+ --appkit-color-cobalt-700: #0f766e;
70
+ --appkit-color-cobalt-800: #115e59;
71
+ --appkit-color-cobalt-900: #134e4a;
72
+ --appkit-color-cobalt-950: #042f2e;
69
73
 
70
74
  /* Accent — Metallic Steel (frame silver) */
71
75
  --appkit-color-accent: #8393b2;
@@ -267,20 +271,20 @@
267
271
  --appkit-color-text-on-primary: #ffffff;
268
272
  --appkit-color-text-on-dark: #ffffff;
269
273
 
270
- --appkit-color-success: #059669; /* emerald-600 */
271
- --appkit-color-success-surface: #ecfdf5; /* emerald-50 */
272
- --appkit-color-warning: #d97706; /* amber-600 */
274
+ --appkit-color-success: #15803d; /* green-700 — 4.5:1 AA against success-surface, distinct from the new teal primary */
275
+ --appkit-color-success-surface: #f0fdf4; /* green-50 */
276
+ --appkit-color-warning: #b45309; /* amber-700 — 4.5:1 AA against warning-surface */
273
277
  --appkit-color-warning-surface: #fffbeb; /* amber-50 */
274
- --appkit-color-error: #dc2626; /* red-600 */
278
+ --appkit-color-error: #b91c1c; /* red-700 — 4.5:1 AA against error-surface */
275
279
  --appkit-color-error-hover: #ef4444; /* red-500 — danger button hover */
276
280
  --appkit-color-error-surface: #fef2f2; /* red-50 */
277
281
  --appkit-color-error-title: #7f1d1d; /* red-900 */
278
282
  --appkit-color-error-text: #991b1b; /* red-800 */
279
- --appkit-color-info: #0284c7; /* sky-600 */
283
+ --appkit-color-info: #0369a1; /* sky-700 — 4.5:1 AA against info-surface */
280
284
  --appkit-color-info-surface: #f0f9ff; /* sky-50 */
281
285
  --appkit-color-star: #facc15; /* yellow-400 — star ratings (decorative convention) */
282
286
 
283
- --appkit-color-focus-ring: #3570fc; /* primary-500 = cobalt blue */
287
+ --appkit-color-focus-ring: #0d9488; /* primary-600 = teal */
284
288
  }
285
289
 
286
290
  /* --- Gradients — default-light defaults (overridden at runtime by ThemeProvider) - */
@@ -312,40 +316,42 @@
312
316
  }
313
317
 
314
318
  /* --- Theme — Dark ([data-theme="default-dark"]) ---------------------------- */
315
- /* Dark mode: both primary & secondary become Hot Pink (Beyblade 2 dominant colour).
319
+ /* Dark mode: primary = Crimson Red, secondary = Cyan (the red/cyan Beyblade
320
+ reference art's body + energy-ring highlight). Rebranded 2026-08-17 from
321
+ the previous unified Hot Pink identity.
316
322
  Selector MUST match ThemeRecord.id ("default-dark"), not the ThemeMode ("dark") —
317
323
  ThemeProvider.applyTheme() sets data-theme to the record id, never "dark" literally.
318
324
  A prior mismatch here left this whole block unreachable (dead CSS), which also
319
325
  caused a "swamp green" FOUC flash: the anti-FOUC script sets .dark + the correct
320
326
  data-theme id before hydration, but with no matching CSS selector the page kept
321
- painting :root's light-mode secondary (lime green) until React's inline styles
322
- landed a moment later. */
327
+ painting :root's light-mode secondary until React's inline styles landed a
328
+ moment later. */
323
329
  [data-theme="default-dark"] {
324
- --appkit-color-primary: #e91e8c;
325
- --appkit-color-primary-50: #fdf0f8;
326
- --appkit-color-primary-100: #fce2f2;
327
- --appkit-color-primary-200: #fac6e6;
328
- --appkit-color-primary-300: #f79dd2;
329
- --appkit-color-primary-400: #f063b9;
330
- --appkit-color-primary-500: #e91e8c;
331
- --appkit-color-primary-600: #d4107a;
332
- --appkit-color-primary-700: #b00d66;
333
- --appkit-color-primary-800: #900f56;
334
- --appkit-color-primary-900: #771249;
335
- --appkit-color-primary-950: #480525;
336
-
337
- --appkit-color-secondary: #e91e8c;
338
- --appkit-color-secondary-50: #fdf0f8;
339
- --appkit-color-secondary-100: #fce2f2;
340
- --appkit-color-secondary-200: #fac6e6;
341
- --appkit-color-secondary-300: #f79dd2;
342
- --appkit-color-secondary-400: #f063b9;
343
- --appkit-color-secondary-500: #e91e8c;
344
- --appkit-color-secondary-600: #d4107a;
345
- --appkit-color-secondary-700: #b00d66;
346
- --appkit-color-secondary-800: #900f56;
347
- --appkit-color-secondary-900: #771249;
348
- --appkit-color-secondary-950: #480525;
330
+ --appkit-color-primary: #ef4444;
331
+ --appkit-color-primary-50: #fef2f2;
332
+ --appkit-color-primary-100: #fee2e2;
333
+ --appkit-color-primary-200: #fecaca;
334
+ --appkit-color-primary-300: #fca5a5;
335
+ --appkit-color-primary-400: #f87171;
336
+ --appkit-color-primary-500: #ef4444;
337
+ --appkit-color-primary-600: #dc2626;
338
+ --appkit-color-primary-700: #b91c1c;
339
+ --appkit-color-primary-800: #991b1b;
340
+ --appkit-color-primary-900: #7f1d1d;
341
+ --appkit-color-primary-950: #450a0a;
342
+
343
+ --appkit-color-secondary: #06b6d4;
344
+ --appkit-color-secondary-50: #ecfeff;
345
+ --appkit-color-secondary-100: #cffafe;
346
+ --appkit-color-secondary-200: #a5f3fc;
347
+ --appkit-color-secondary-300: #67e8f9;
348
+ --appkit-color-secondary-400: #22d3ee;
349
+ --appkit-color-secondary-500: #06b6d4;
350
+ --appkit-color-secondary-600: #0891b2;
351
+ --appkit-color-secondary-700: #0e7490;
352
+ --appkit-color-secondary-800: #155e75;
353
+ --appkit-color-secondary-900: #164e63;
354
+ --appkit-color-secondary-950: #083344;
349
355
 
350
356
  --appkit-color-bg: #020617; /* slate-950 */
351
357
  --appkit-color-surface: #0f172a; /* slate-900 */
@@ -363,41 +369,41 @@
363
369
  --appkit-color-success-surface: rgba(6, 78, 59, 0.25);
364
370
  --appkit-color-warning: #fbbf24; /* amber-400 */
365
371
  --appkit-color-warning-surface: #1c1508; /* dark amber tint */
366
- --appkit-color-error: #f87171; /* red-400 */
372
+ --appkit-color-error: #fb7185; /* rose-400 — distinct from the new red primary */
367
373
  --appkit-color-error-surface: rgba(127, 29, 29, 0.25);
368
374
  --appkit-color-error-title: #fecaca; /* red-200 */
369
375
  --appkit-color-error-text: #fca5a5; /* red-300 */
370
376
  --appkit-color-info: #38bdf8; /* sky-400 */
371
377
  --appkit-color-info-surface: rgba(12, 74, 110, 0.25);
372
378
 
373
- --appkit-color-focus-ring: #f063b9; /* primary-400 in dark = hot pink */
374
- --appkit-shadow-glow: 0 0 0 1px rgba(233,30,140,0.12), 0 4px 16px -4px rgba(233,30,140,0.22);
375
- --appkit-shadow-glow-pink: 0 0 0 1px rgba(233,30,140,0.14), 0 4px 20px -4px rgba(233,30,140,0.28);
379
+ --appkit-color-focus-ring: #f87171; /* primary-400 */
380
+ --appkit-shadow-glow: 0 0 0 1px rgba(239,68,68,0.12), 0 4px 16px -4px rgba(239,68,68,0.22);
381
+ --appkit-shadow-glow-pink: 0 0 0 1px rgba(6,182,212,0.14), 0 4px 20px -4px rgba(6,182,212,0.28);
376
382
 
377
383
  /* Dark-mode gradient overrides */
378
- --appkit-gradient-brand: linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-info));
384
+ --appkit-gradient-brand: linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary));
379
385
  --appkit-gradient-brand-tri: linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary), var(--appkit-color-info));
380
- --appkit-gradient-accent: linear-gradient(to right, var(--appkit-color-info), var(--appkit-color-primary));
386
+ --appkit-gradient-accent: linear-gradient(to right, var(--appkit-color-secondary), var(--appkit-color-primary));
381
387
  --appkit-gradient-accent-divider: linear-gradient(to right, transparent, var(--appkit-color-primary), transparent);
382
- --appkit-gradient-page-header: linear-gradient(to bottom right, rgba(233,30,140,0.10), transparent 60%, transparent);
388
+ --appkit-gradient-page-header: linear-gradient(to bottom right, rgba(239,68,68,0.10), transparent 60%, transparent);
383
389
  --appkit-gradient-section-warm: linear-gradient(to bottom right, var(--appkit-color-warning-surface), transparent);
384
- --appkit-gradient-section-cool: linear-gradient(to bottom right, rgba(56,189,248,0.10), transparent);
385
- --appkit-gradient-section-mesh: radial-gradient(ellipse at top, rgba(233,30,140,0.10), var(--appkit-color-surface), rgba(56,189,248,0.08));
386
- --appkit-gradient-accent-banner: linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-info));
390
+ --appkit-gradient-section-cool: linear-gradient(to bottom right, rgba(6,182,212,0.10), transparent);
391
+ --appkit-gradient-section-mesh: radial-gradient(ellipse at top, rgba(239,68,68,0.10), var(--appkit-color-surface), rgba(6,182,212,0.08));
392
+ --appkit-gradient-accent-banner: linear-gradient(to right, var(--appkit-color-primary), var(--appkit-color-secondary));
387
393
  --appkit-gradient-promotion: linear-gradient(to bottom right, var(--appkit-color-error), var(--appkit-color-primary), var(--appkit-color-warning));
388
- --appkit-gradient-spotlight: linear-gradient(to bottom right, rgba(56,189,248,0.10), var(--appkit-color-bg), rgba(56,189,248,0.10));
394
+ --appkit-gradient-spotlight: linear-gradient(to bottom right, rgba(6,182,212,0.10), var(--appkit-color-bg), rgba(6,182,212,0.10));
389
395
  --appkit-gradient-whatsapp-card: linear-gradient(to bottom right, var(--appkit-color-success), var(--appkit-color-success));
390
396
  --appkit-gradient-glass: linear-gradient(to bottom right, color-mix(in srgb, var(--appkit-color-surface) 85%, transparent), color-mix(in srgb, var(--appkit-color-surface) 65%, transparent));
391
- --appkit-gradient-card-indigo: linear-gradient(to bottom right, rgba(233,30,140,0.10), var(--appkit-color-surface), var(--appkit-color-surface));
392
- --appkit-gradient-card-teal: linear-gradient(to bottom right, rgba(56,189,248,0.10), var(--appkit-color-surface), var(--appkit-color-surface));
397
+ --appkit-gradient-card-indigo: linear-gradient(to bottom right, rgba(239,68,68,0.10), var(--appkit-color-surface), var(--appkit-color-surface));
398
+ --appkit-gradient-card-teal: linear-gradient(to bottom right, rgba(6,182,212,0.10), var(--appkit-color-surface), var(--appkit-color-surface));
393
399
  --appkit-gradient-card-amber: linear-gradient(to bottom right, var(--appkit-color-warning-surface), var(--appkit-color-surface), var(--appkit-color-surface));
394
400
  --appkit-gradient-card-rose: linear-gradient(to bottom right, var(--appkit-color-error-surface), var(--appkit-color-surface), var(--appkit-color-surface));
395
- --appkit-gradient-logo: linear-gradient(to right, var(--appkit-color-primary-300) 0%, var(--appkit-color-primary-400) 55%, var(--appkit-color-info) 100%);
396
- --appkit-gradient-sidebar: linear-gradient(to bottom, var(--appkit-color-primary), var(--appkit-color-info));
401
+ --appkit-gradient-logo: linear-gradient(to right, var(--appkit-color-primary-300) 0%, var(--appkit-color-primary-400) 55%, var(--appkit-color-secondary) 100%);
402
+ --appkit-gradient-sidebar: linear-gradient(to bottom, var(--appkit-color-primary), var(--appkit-color-secondary));
397
403
  /* Logo stop overrides — lighter shades visible on dark (#020617) background */
398
404
  --appkit-logo-stop-from: var(--appkit-color-primary-300);
399
405
  --appkit-logo-stop-mid: var(--appkit-color-primary-400);
400
- --appkit-logo-stop-to: var(--appkit-color-info);
406
+ --appkit-logo-stop-to: var(--appkit-color-secondary);
401
407
 
402
408
  /* Spacing + font-size scale — identical to :root; declared here only so the
403
409
  built-in dark theme record can satisfy audit-theme-drift (which diffs
@@ -423,15 +429,15 @@
423
429
  --appkit-space-24: 6rem;
424
430
 
425
431
  --appkit-text-2xs: 0.625rem;
426
- --appkit-text-xs: 0.75rem;
427
- --appkit-text-sm: 0.875rem;
428
- --appkit-text-base: 1rem;
429
- --appkit-text-lg: 1.125rem;
430
- --appkit-text-xl: 1.25rem;
431
- --appkit-text-2xl: 1.5rem;
432
- --appkit-text-3xl: 1.875rem;
433
- --appkit-text-4xl: 2.25rem;
434
- --appkit-text-5xl: 3rem;
432
+ --appkit-text-xs: 0.6875rem;
433
+ --appkit-text-sm: 0.8125rem;
434
+ --appkit-text-base: 0.9375rem;
435
+ --appkit-text-lg: 1rem;
436
+ --appkit-text-xl: 1.125rem;
437
+ --appkit-text-2xl: 1.375rem;
438
+ --appkit-text-3xl: 1.625rem;
439
+ --appkit-text-4xl: 1.875rem;
440
+ --appkit-text-5xl: 2.5rem;
435
441
  }
436
442
 
437
443
  /* --- Theme — Cobalt Night ([data-theme="cobalt-night"]) ------------------- */
@@ -494,13 +500,13 @@
494
500
  --appkit-color-text-muted: #9a3412; /* orange-800 */
495
501
  --appkit-color-text-faint: #c2410c; /* orange-700 */
496
502
 
497
- --appkit-color-success: #16a34a;
503
+ --appkit-color-success: #15803d;
498
504
  --appkit-color-success-surface: #f0fdf4;
499
- --appkit-color-warning: #d97706;
505
+ --appkit-color-warning: #b45309;
500
506
  --appkit-color-warning-surface: #fef3c7;
501
- --appkit-color-error: #dc2626;
507
+ --appkit-color-error: #b91c1c;
502
508
  --appkit-color-error-surface: #fef2f2;
503
- --appkit-color-info: #0284c7;
509
+ --appkit-color-info: #0369a1;
504
510
  --appkit-color-info-surface: #f0f9ff;
505
511
 
506
512
  --appkit-color-focus-ring: #f59e0b;
@@ -516,15 +522,15 @@
516
522
  --appkit-font-mono: ui-monospace, "SFMono-Regular", "Cascadia Mono", "Consolas", monospace;
517
523
 
518
524
  --appkit-text-2xs: 0.625rem; /* 10px */
519
- --appkit-text-xs: 0.75rem; /* 12px */
520
- --appkit-text-sm: 0.875rem; /* 14px */
521
- --appkit-text-base: 1rem; /* 16px */
522
- --appkit-text-lg: 1.125rem; /* 18px */
523
- --appkit-text-xl: 1.25rem; /* 20px */
524
- --appkit-text-2xl: 1.5rem; /* 24px */
525
- --appkit-text-3xl: 1.875rem; /* 30px */
526
- --appkit-text-4xl: 2.25rem; /* 36px */
527
- --appkit-text-5xl: 3rem; /* 48px */
525
+ --appkit-text-xs: 0.6875rem; /* 11px */
526
+ --appkit-text-sm: 0.8125rem; /* 13px */
527
+ --appkit-text-base: 0.9375rem; /* 15px */
528
+ --appkit-text-lg: 1rem; /* 16px */
529
+ --appkit-text-xl: 1.125rem; /* 18px */
530
+ --appkit-text-2xl: 1.375rem; /* 22px */
531
+ --appkit-text-3xl: 1.625rem; /* 26px */
532
+ --appkit-text-4xl: 1.875rem; /* 30px */
533
+ --appkit-text-5xl: 2.5rem; /* 40px */
528
534
 
529
535
  --appkit-leading-tight: 1.15;
530
536
  --appkit-leading-snug: 1.375;
@@ -581,8 +587,8 @@
581
587
  --appkit-shadow-xl: 0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1);
582
588
  --appkit-shadow-soft: 0 2px 15px -3px rgba(0,0,0,0.07), 0 10px 20px -2px rgba(0,0,0,0.04);
583
589
  /* Themed glow: tight ring + soft bloom — no bleed into neighbours */
584
- --appkit-shadow-glow: 0 0 0 1px rgba(53,112,252,0.10), 0 4px 16px -4px rgba(53,112,252,0.20);
585
- --appkit-shadow-glow-pink: 0 0 0 1px rgba(233,30,140,0.12), 0 4px 16px -4px rgba(233,30,140,0.22);
590
+ --appkit-shadow-glow: 0 0 0 1px rgba(13,148,136,0.10), 0 4px 16px -4px rgba(13,148,136,0.20);
591
+ --appkit-shadow-glow-pink: 0 0 0 1px rgba(192,38,211,0.12), 0 4px 16px -4px rgba(192,38,211,0.22);
586
592
  }
587
593
 
588
594
  /* --- Z-index -------------------------------------------------------------- */
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ export interface CollapsibleSectionProps {
3
+ title: React.ReactNode;
4
+ isCollapsed: boolean;
5
+ onToggle: () => void;
6
+ /** Optional right-aligned content next to the title (badges, counts). */
7
+ renderHeaderExtra?: () => React.ReactNode;
8
+ className?: string;
9
+ children?: React.ReactNode;
10
+ }
11
+ /** Dashboard-section wrapper backed by useCollapsedSections — a persisted,
12
+ * per-user, accordion-scoped collapse state (see that hook for the
13
+ * server-side merge/default-collapsed semantics). Purely presentational
14
+ * here: isCollapsed/onToggle are always controlled by the caller. */
15
+ export declare function CollapsibleSection({ title, isCollapsed, onToggle, renderHeaderExtra, className, children, }: CollapsibleSectionProps): React.JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from "./Button";
3
+ import { Div } from "./Div";
4
+ import { Row } from "./Layout";
5
+ import { Span } from "./Typography";
6
+ import { Collapse } from "./Motion";
7
+ /** Dashboard-section wrapper backed by useCollapsedSections — a persisted,
8
+ * per-user, accordion-scoped collapse state (see that hook for the
9
+ * server-side merge/default-collapsed semantics). Purely presentational
10
+ * here: isCollapsed/onToggle are always controlled by the caller. */
11
+ export function CollapsibleSection({ title, isCollapsed, onToggle, renderHeaderExtra, className = "", children, }) {
12
+ return (_jsxs(Div, { className: className, rounded: "xl", border: "default", surface: "default", children: [_jsxs(Row, { align: "center", justify: "between", paddingX: "x-md", paddingY: "y-sm", children: [_jsx(Button, { type: "button", variant: "ghost", onClick: onToggle, paddingX: "none", paddingY: "none", rounded: "none", className: "min-w-0 flex-1", "aria-expanded": !isCollapsed, children: _jsxs(Row, { align: "center", justify: "between", className: "w-full", children: [_jsx(Span, { weight: "semibold", size: "sm", children: title }), _jsx("svg", { className: `w-4 h-4 transition-transform duration-150 ${isCollapsed ? "" : "rotate-180"}`, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", "aria-hidden": "true", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })] }) }), renderHeaderExtra && _jsx(Div, { className: "ml-3 shrink-0", children: renderHeaderExtra() })] }), _jsx(Collapse, { isOpen: !isCollapsed, children: _jsx(Div, { padding: "md", border: "top", children: children }) })] }));
13
+ }
@@ -4,6 +4,7 @@ import { CheckSquare, Search, SlidersHorizontal, LayoutGrid, List, Table2, Rotat
4
4
  import { SortDropdown } from "./SortDropdown";
5
5
  import { Div } from "./Div";
6
6
  import { Span } from "./Typography";
7
+ import { StickyToolbar } from "./StickyToolbar";
7
8
  const CLS_CLEAR_LINK = "text-xs text-zinc-400 hover:text-error text-[var(--appkit-color-text-muted)] transition-colors";
8
9
  const CLS_CLEAR_ICON_BTN = "flex shrink-0 items-center justify-center rounded-lg border border-[var(--appkit-color-border)] p-1.5 sm:p-2 text-[var(--appkit-color-text-muted)] hover:bg-zinc-50 hover:bg-[var(--appkit-color-surface-elevated)] hover:text-error dark:hover:text-error transition-colors";
9
10
  const DEFAULT_LABELS = {
@@ -33,9 +34,9 @@ export function ListingToolbar({ filterCount = 0, onFiltersClick, searchValue =
33
34
  }
34
35
  };
35
36
  const allSelected = bulkTotalCount > 0 && bulkSelectedCount === bulkTotalCount;
36
- return (_jsx("div", { "data-testid": "listing-toolbar", className: `sticky top-[var(--header-height,0px)] z-20 border-b border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)]/95 backdrop-blur-sm py-2 px-3 sm:py-2.5 sm:px-4 ${className}`, children: _jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-2.5", children: [bulkMode ? (_jsxs("div", { className: "flex flex-1 items-center gap-2", children: [_jsxs("button", { type: "button", onClick: onBulkSelectAll, className: "flex items-center gap-1.5 rounded-lg border border-[var(--appkit-color-border)] px-3 py-1.5 text-sm font-medium text-[var(--appkit-color-text-muted)] hover:bg-zinc-50 hover:bg-[var(--appkit-color-surface-elevated)] transition-colors", children: [allSelected
37
+ return (_jsx(StickyToolbar, { dataTestId: "listing-toolbar", offset: "header", tone: "translucent", border: true, padding: "none", z: "above-toolbar", className: `py-2 px-3 sm:py-2.5 sm:px-4 ${className}`, children: _jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-2.5", children: [bulkMode ? (_jsxs("div", { className: "flex flex-1 items-center gap-2", children: [_jsxs("button", { type: "button", onClick: onBulkSelectAll, className: "flex items-center gap-1.5 rounded-lg border border-[var(--appkit-color-border)] px-3 py-1.5 text-sm font-medium text-[var(--appkit-color-text-muted)] hover:bg-zinc-50 hover:bg-[var(--appkit-color-surface-elevated)] transition-colors", children: [allSelected
37
38
  ? _jsx(CheckSquare, { className: "h-4 w-4 text-[var(--appkit-color-primary)]" })
38
- : _jsx(Square, { className: "h-4 w-4" }), allSelected ? l.deselectAll : l.selectAll(bulkTotalCount)] }), _jsx(Span, { size: "sm", color: "muted", children: l.selected(bulkSelectedCount) }), _jsx("button", { type: "button", onClick: onBulkClear, className: CLS_CLEAR_LINK, children: l.clearSelection })] })) : onSearchChange ? (_jsxs("div", { className: "flex flex-1 items-center overflow-hidden rounded-lg border border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)] min-w-0", children: [_jsx("input", { type: "text", value: searchValue, onChange: (e) => onSearchChange(e.target.value), onKeyDown: handleKeyDown, placeholder: searchPlaceholder, className: "min-w-0 flex-1 bg-transparent px-3 py-2 text-sm text-[var(--appkit-color-text)] placeholder-zinc-400 outline-none" }), _jsx("button", { type: "button", onClick: onSearchCommit, className: "flex shrink-0 items-center justify-center px-2.5 py-2 text-zinc-400 hover:text-[var(--appkit-color-primary)] transition-colors", "aria-label": l.search, children: _jsx(Search, { className: "h-4 w-4" }) })] })) : null, _jsxs("div", { className: "flex items-center gap-1.5 sm:gap-2 shrink-0", children: [onFiltersClick && (_jsxs("button", { type: "button", onClick: onFiltersClick, className: "relative flex shrink-0 items-center gap-1.5 rounded-lg border border-[var(--appkit-color-border)] px-2.5 py-1.5 sm:px-3.5 sm:py-2 text-sm font-medium text-[var(--appkit-color-text-muted)] hover:bg-zinc-50 hover:bg-[var(--appkit-color-surface-elevated)] transition-colors", children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), _jsx("span", { className: "hidden sm:inline", children: l.filters }), filterCount > 0 && (_jsx(Span, { weight: "bold", className: "absolute -top-1.5 -right-1.5 flex h-4 w-4 items-center justify-center rounded-full bg-[var(--appkit-color-primary)] text-[10px] text-white", children: filterCount }))] })), sortOptions && sortValue !== undefined && onSortChange && (_jsxs(Div, { className: "flex items-center gap-1.5 text-[var(--appkit-color-text-muted)]", children: [_jsx(Span, { size: "xs", className: "hidden md:inline whitespace-nowrap", children: l.sort }), _jsx(SortDropdown, { value: sortValue, onChange: onSortChange, options: sortOptions })] })), !hideViewToggle && onViewChange && (_jsxs("div", { className: "flex items-center rounded-lg border border-[var(--appkit-color-border)] overflow-hidden", children: [_jsx("button", { type: "button", onClick: () => onViewChange("grid"), "aria-label": l.gridView, className: `${VIEW_BTN_BASE} ${view === "grid" ? VIEW_BTN_ACTIVE : VIEW_BTN_INACTIVE}`, children: _jsx(LayoutGrid, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: () => onViewChange("list"), "aria-label": l.listView, className: `${VIEW_BTN_BASE} ${view === "list" ? VIEW_BTN_ACTIVE : VIEW_BTN_INACTIVE}`, children: _jsx(List, { className: "h-4 w-4" }) }), showTableView && (_jsx("button", { type: "button", onClick: () => onViewChange("table"), "aria-label": l.tableView, className: `${VIEW_BTN_BASE} ${view === "table" ? VIEW_BTN_ACTIVE : VIEW_BTN_INACTIVE}`, children: _jsx(Table2, { className: "h-4 w-4" }) }))] })), onResetAll && hasActiveState && (_jsx("button", { type: "button", onClick: onResetAll, "aria-label": l.resetAll, title: l.resetAll, className: CLS_CLEAR_ICON_BTN, children: _jsx(RotateCcw, { className: "h-4 w-4" }) })), toggles && toggles.length > 0 && (_jsx("div", { className: "flex items-center gap-1", children: toggles.map((t) => (_jsx("button", { type: "button", role: "switch", "aria-checked": t.active, onClick: () => t.onChange(!t.active), className: `rounded-full border px-2.5 py-1 text-xs font-medium transition-colors whitespace-nowrap ${t.active
39
+ : _jsx(Square, { className: "h-4 w-4" }), allSelected ? l.deselectAll : l.selectAll(bulkTotalCount)] }), _jsx(Span, { size: "sm", color: "muted", children: l.selected(bulkSelectedCount) }), _jsx("button", { type: "button", onClick: onBulkClear, className: CLS_CLEAR_LINK, children: l.clearSelection })] })) : onSearchChange ? (_jsxs("div", { className: "flex flex-1 items-center overflow-hidden rounded-lg border border-[var(--appkit-color-border)] bg-[var(--appkit-color-surface)] min-w-0", children: [_jsx("input", { type: "text", value: searchValue, onChange: (e) => onSearchChange(e.target.value), onKeyDown: handleKeyDown, placeholder: searchPlaceholder, className: "min-w-0 flex-1 bg-transparent px-3 py-2 text-sm text-[var(--appkit-color-text)] placeholder-zinc-400 outline-none" }), _jsx("button", { type: "button", onClick: onSearchCommit, className: "flex shrink-0 items-center justify-center px-2.5 py-2 text-zinc-400 hover:text-[var(--appkit-color-primary)] transition-colors", "aria-label": l.search, children: _jsx(Search, { className: "h-4 w-4" }) })] })) : null, _jsxs("div", { className: "flex flex-wrap items-center gap-1.5 sm:gap-2 sm:shrink-0", children: [onFiltersClick && (_jsxs("button", { type: "button", onClick: onFiltersClick, className: "relative flex shrink-0 items-center gap-1.5 rounded-lg border border-[var(--appkit-color-border)] px-2.5 py-1.5 sm:px-3.5 sm:py-2 text-sm font-medium text-[var(--appkit-color-text-muted)] hover:bg-zinc-50 hover:bg-[var(--appkit-color-surface-elevated)] transition-colors", children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), _jsx("span", { className: "hidden sm:inline", children: l.filters }), filterCount > 0 && (_jsx(Span, { weight: "bold", className: "absolute -top-1.5 -right-1.5 flex h-4 w-4 items-center justify-center rounded-full bg-[var(--appkit-color-primary)] text-[10px] text-white", children: filterCount }))] })), sortOptions && sortValue !== undefined && onSortChange && (_jsxs(Div, { className: "flex items-center gap-1.5 text-[var(--appkit-color-text-muted)]", children: [_jsx(Span, { size: "xs", className: "hidden md:inline whitespace-nowrap", children: l.sort }), _jsx(SortDropdown, { value: sortValue, onChange: onSortChange, options: sortOptions })] })), !hideViewToggle && onViewChange && (_jsxs("div", { className: "flex items-center rounded-lg border border-[var(--appkit-color-border)] overflow-hidden", children: [_jsx("button", { type: "button", onClick: () => onViewChange("grid"), "aria-label": l.gridView, className: `${VIEW_BTN_BASE} ${view === "grid" ? VIEW_BTN_ACTIVE : VIEW_BTN_INACTIVE}`, children: _jsx(LayoutGrid, { className: "h-4 w-4" }) }), _jsx("button", { type: "button", onClick: () => onViewChange("list"), "aria-label": l.listView, className: `${VIEW_BTN_BASE} ${view === "list" ? VIEW_BTN_ACTIVE : VIEW_BTN_INACTIVE}`, children: _jsx(List, { className: "h-4 w-4" }) }), showTableView && (_jsx("button", { type: "button", onClick: () => onViewChange("table"), "aria-label": l.tableView, className: `${VIEW_BTN_BASE} ${view === "table" ? VIEW_BTN_ACTIVE : VIEW_BTN_INACTIVE}`, children: _jsx(Table2, { className: "h-4 w-4" }) }))] })), onResetAll && hasActiveState && (_jsx("button", { type: "button", onClick: onResetAll, "aria-label": l.resetAll, title: l.resetAll, className: CLS_CLEAR_ICON_BTN, children: _jsx(RotateCcw, { className: "h-4 w-4" }) })), toggles && toggles.length > 0 && (_jsx("div", { className: "flex items-center gap-1", children: toggles.map((t) => (_jsx("button", { type: "button", role: "switch", "aria-checked": t.active, onClick: () => t.onChange(!t.active), className: `rounded-full border px-2.5 py-1 text-xs font-medium transition-colors whitespace-nowrap ${t.active
39
40
  ? "border-transparent bg-[var(--appkit-color-primary)] text-white"
40
41
  : "border-[var(--appkit-color-border)] text-[var(--appkit-color-text-muted)] hover:bg-zinc-50 hover:bg-[var(--appkit-color-surface-elevated)]"}`, children: t.label }, t.label))) })), extra] })] }) }));
41
42
  }
@@ -114,8 +114,8 @@
114
114
  }
115
115
 
116
116
  .appkit-code--primary {
117
- background: var(--appkit-color-primary-50, #eef5ff);
118
- color: var(--appkit-color-primary-700, #1343de);
117
+ background: var(--appkit-color-primary-50);
118
+ color: var(--appkit-color-primary-700);
119
119
  }
120
120
 
121
121
  .dark .appkit-code--primary {
@@ -179,7 +179,7 @@
179
179
 
180
180
  .appkit-blockquote--primary {
181
181
  border-left-color: var(--appkit-color-primary);
182
- color: var(--appkit-color-primary-700, #1343de);
182
+ color: var(--appkit-color-primary-700);
183
183
  }
184
184
 
185
185
  .dark .appkit-blockquote--primary {