@canvas-digital/blog-sdk 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/README.md +110 -0
  2. package/dist/BlogPlatform.d.ts +40 -0
  3. package/dist/BlogPlatform.d.ts.map +1 -0
  4. package/dist/BlogPlatform.js +38 -0
  5. package/dist/admin/components/BlogAdmin.d.ts +10 -0
  6. package/dist/admin/components/BlogAdmin.d.ts.map +1 -0
  7. package/dist/admin/components/BlogAdmin.js +36 -0
  8. package/dist/admin/components/CategoryManager.d.ts +5 -0
  9. package/dist/admin/components/CategoryManager.d.ts.map +1 -0
  10. package/dist/admin/components/CategoryManager.js +43 -0
  11. package/dist/admin/components/MediaManager.d.ts +7 -0
  12. package/dist/admin/components/MediaManager.d.ts.map +1 -0
  13. package/dist/admin/components/MediaManager.js +37 -0
  14. package/dist/admin/components/PostEditor.d.ts +7 -0
  15. package/dist/admin/components/PostEditor.d.ts.map +1 -0
  16. package/dist/admin/components/PostEditor.js +160 -0
  17. package/dist/admin/components/PostList.d.ts +8 -0
  18. package/dist/admin/components/PostList.d.ts.map +1 -0
  19. package/dist/admin/components/PostList.js +32 -0
  20. package/dist/admin/components/TagManager.d.ts +5 -0
  21. package/dist/admin/components/TagManager.d.ts.map +1 -0
  22. package/dist/admin/components/TagManager.js +41 -0
  23. package/dist/admin/components/editor/RichTextEditor.d.ts +8 -0
  24. package/dist/admin/components/editor/RichTextEditor.d.ts.map +1 -0
  25. package/dist/admin/components/editor/RichTextEditor.js +47 -0
  26. package/dist/admin/components/internal/States.d.ts +16 -0
  27. package/dist/admin/components/internal/States.d.ts.map +1 -0
  28. package/dist/admin/components/internal/States.js +15 -0
  29. package/dist/admin/hooks/useAsync.d.ts +23 -0
  30. package/dist/admin/hooks/useAsync.d.ts.map +1 -0
  31. package/dist/admin/hooks/useAsync.js +40 -0
  32. package/dist/admin/index.d.ts +10 -0
  33. package/dist/admin/index.d.ts.map +1 -0
  34. package/dist/admin/index.js +9 -0
  35. package/dist/admin/theme.d.ts +6 -0
  36. package/dist/admin/theme.d.ts.map +1 -0
  37. package/dist/admin/theme.js +52 -0
  38. package/dist/admin/types.d.ts +27 -0
  39. package/dist/admin/types.d.ts.map +1 -0
  40. package/dist/admin/types.js +1 -0
  41. package/dist/blog-client.iife.js +1 -0
  42. package/dist/client/admin-client.d.ts +33 -0
  43. package/dist/client/admin-client.d.ts.map +1 -0
  44. package/dist/client/admin-client.js +153 -0
  45. package/dist/client/errors.d.ts +14 -0
  46. package/dist/client/errors.d.ts.map +1 -0
  47. package/dist/client/errors.js +26 -0
  48. package/dist/client/http.d.ts +12 -0
  49. package/dist/client/http.d.ts.map +1 -0
  50. package/dist/client/http.js +135 -0
  51. package/dist/client/index.d.ts +7 -0
  52. package/dist/client/index.d.ts.map +1 -0
  53. package/dist/client/index.js +6 -0
  54. package/dist/client/pagination.d.ts +4 -0
  55. package/dist/client/pagination.d.ts.map +1 -0
  56. package/dist/client/pagination.js +32 -0
  57. package/dist/client/public-client.d.ts +23 -0
  58. package/dist/client/public-client.d.ts.map +1 -0
  59. package/dist/client/public-client.js +94 -0
  60. package/dist/client/types.d.ts +115 -0
  61. package/dist/client/types.d.ts.map +1 -0
  62. package/dist/client/types.js +1 -0
  63. package/dist/components/BlogUploader/BackButton.d.ts +5 -0
  64. package/dist/components/BlogUploader/BackButton.d.ts.map +1 -0
  65. package/dist/components/BlogUploader/BackButton.js +27 -0
  66. package/dist/components/BlogUploader/CommentSection.d.ts +12 -0
  67. package/dist/components/BlogUploader/CommentSection.d.ts.map +1 -0
  68. package/dist/components/BlogUploader/CommentSection.js +65 -0
  69. package/dist/components/BlogUploader/PostCard.d.ts +17 -0
  70. package/dist/components/BlogUploader/PostCard.d.ts.map +1 -0
  71. package/dist/components/BlogUploader/PostCard.js +42 -0
  72. package/dist/components/BlogUploader/PostFormatHero.d.ts +7 -0
  73. package/dist/components/BlogUploader/PostFormatHero.d.ts.map +1 -0
  74. package/dist/components/BlogUploader/PostFormatHero.js +47 -0
  75. package/dist/components/BlogUploader/ReadingProgress.d.ts +9 -0
  76. package/dist/components/BlogUploader/ReadingProgress.d.ts.map +1 -0
  77. package/dist/components/BlogUploader/ReadingProgress.js +28 -0
  78. package/dist/components/BlogUploader/RichText.d.ts +5 -0
  79. package/dist/components/BlogUploader/RichText.d.ts.map +1 -0
  80. package/dist/components/BlogUploader/RichText.js +59 -0
  81. package/dist/components/BlogUploader/ShareRow.d.ts +12 -0
  82. package/dist/components/BlogUploader/ShareRow.d.ts.map +1 -0
  83. package/dist/components/BlogUploader/ShareRow.js +13 -0
  84. package/dist/components/BlogUploader/ViewBeacon.d.ts +12 -0
  85. package/dist/components/BlogUploader/ViewBeacon.d.ts.map +1 -0
  86. package/dist/components/BlogUploader/ViewBeacon.js +37 -0
  87. package/dist/components/BlogUploader/dashboard/BrandSettings.d.ts +28 -0
  88. package/dist/components/BlogUploader/dashboard/BrandSettings.d.ts.map +1 -0
  89. package/dist/components/BlogUploader/dashboard/BrandSettings.js +60 -0
  90. package/dist/components/BlogUploader/dashboard/BrandSwitcher.d.ts +14 -0
  91. package/dist/components/BlogUploader/dashboard/BrandSwitcher.d.ts.map +1 -0
  92. package/dist/components/BlogUploader/dashboard/BrandSwitcher.js +25 -0
  93. package/dist/components/BlogUploader/dashboard/Chips.d.ts +15 -0
  94. package/dist/components/BlogUploader/dashboard/Chips.d.ts.map +1 -0
  95. package/dist/components/BlogUploader/dashboard/Chips.js +15 -0
  96. package/dist/components/BlogUploader/dashboard/CommentsManager.d.ts +19 -0
  97. package/dist/components/BlogUploader/dashboard/CommentsManager.d.ts.map +1 -0
  98. package/dist/components/BlogUploader/dashboard/CommentsManager.js +32 -0
  99. package/dist/components/BlogUploader/dashboard/LogOutButton.d.ts +4 -0
  100. package/dist/components/BlogUploader/dashboard/LogOutButton.d.ts.map +1 -0
  101. package/dist/components/BlogUploader/dashboard/LogOutButton.js +22 -0
  102. package/dist/components/BlogUploader/dashboard/MediaLibrary.d.ts +16 -0
  103. package/dist/components/BlogUploader/dashboard/MediaLibrary.d.ts.map +1 -0
  104. package/dist/components/BlogUploader/dashboard/MediaLibrary.js +124 -0
  105. package/dist/components/BlogUploader/dashboard/MediaPicker.d.ts +19 -0
  106. package/dist/components/BlogUploader/dashboard/MediaPicker.d.ts.map +1 -0
  107. package/dist/components/BlogUploader/dashboard/MediaPicker.js +99 -0
  108. package/dist/components/BlogUploader/dashboard/PostsTable.d.ts +46 -0
  109. package/dist/components/BlogUploader/dashboard/PostsTable.d.ts.map +1 -0
  110. package/dist/components/BlogUploader/dashboard/PostsTable.js +109 -0
  111. package/dist/components/BlogUploader/dashboard/Shell.d.ts +25 -0
  112. package/dist/components/BlogUploader/dashboard/Shell.d.ts.map +1 -0
  113. package/dist/components/BlogUploader/dashboard/Shell.js +128 -0
  114. package/dist/components/BlogUploader/dashboard/TermManager.d.ts +29 -0
  115. package/dist/components/BlogUploader/dashboard/TermManager.d.ts.map +1 -0
  116. package/dist/components/BlogUploader/dashboard/TermManager.js +96 -0
  117. package/dist/components/BlogUploader/dashboard/ToastProvider.d.ts +6 -0
  118. package/dist/components/BlogUploader/dashboard/ToastProvider.d.ts.map +1 -0
  119. package/dist/components/BlogUploader/dashboard/ToastProvider.js +5 -0
  120. package/dist/components/BlogUploader/dashboard/UsersManager.d.ts +32 -0
  121. package/dist/components/BlogUploader/dashboard/UsersManager.d.ts.map +1 -0
  122. package/dist/components/BlogUploader/dashboard/UsersManager.js +98 -0
  123. package/dist/components/BlogUploader/dashboard/charts.d.ts +22 -0
  124. package/dist/components/BlogUploader/dashboard/charts.d.ts.map +1 -0
  125. package/dist/components/BlogUploader/dashboard/charts.js +79 -0
  126. package/dist/components/BlogUploader/dashboard/editor/FormatContentPanel.d.ts +25 -0
  127. package/dist/components/BlogUploader/dashboard/editor/FormatContentPanel.d.ts.map +1 -0
  128. package/dist/components/BlogUploader/dashboard/editor/FormatContentPanel.js +62 -0
  129. package/dist/components/BlogUploader/dashboard/editor/PostEditor.d.ts +95 -0
  130. package/dist/components/BlogUploader/dashboard/editor/PostEditor.d.ts.map +1 -0
  131. package/dist/components/BlogUploader/dashboard/editor/PostEditor.js +649 -0
  132. package/dist/components/BlogUploader/dashboard/editor/RichTextEditor.d.ts +37 -0
  133. package/dist/components/BlogUploader/dashboard/editor/RichTextEditor.d.ts.map +1 -0
  134. package/dist/components/BlogUploader/dashboard/editor/RichTextEditor.js +475 -0
  135. package/dist/components/BlogUploader/dashboard/editor/SeoAnalysisPanel.d.ts +11 -0
  136. package/dist/components/BlogUploader/dashboard/editor/SeoAnalysisPanel.d.ts.map +1 -0
  137. package/dist/components/BlogUploader/dashboard/editor/SeoAnalysisPanel.js +31 -0
  138. package/dist/components/BlogUploader/dashboard/editor/YoastCollapsible.d.ts +12 -0
  139. package/dist/components/BlogUploader/dashboard/editor/YoastCollapsible.d.ts.map +1 -0
  140. package/dist/components/BlogUploader/dashboard/editor/YoastCollapsible.js +5 -0
  141. package/dist/components/BlogUploader/dashboard/editor/YoastInsightsPanel.d.ts +4 -0
  142. package/dist/components/BlogUploader/dashboard/editor/YoastInsightsPanel.d.ts.map +1 -0
  143. package/dist/components/BlogUploader/dashboard/editor/YoastInsightsPanel.js +31 -0
  144. package/dist/components/BlogUploader/dashboard/editor/YoastInternalLinksPanel.d.ts +4 -0
  145. package/dist/components/BlogUploader/dashboard/editor/YoastInternalLinksPanel.d.ts.map +1 -0
  146. package/dist/components/BlogUploader/dashboard/editor/YoastInternalLinksPanel.js +35 -0
  147. package/dist/components/BlogUploader/dashboard/editor/YoastSeoAnalysisPanel.d.ts +11 -0
  148. package/dist/components/BlogUploader/dashboard/editor/YoastSeoAnalysisPanel.d.ts.map +1 -0
  149. package/dist/components/BlogUploader/dashboard/editor/YoastSeoAnalysisPanel.js +23 -0
  150. package/dist/components/BlogUploader/dashboard/editor/YoastSeoMetabox.d.ts +50 -0
  151. package/dist/components/BlogUploader/dashboard/editor/YoastSeoMetabox.d.ts.map +1 -0
  152. package/dist/components/BlogUploader/dashboard/editor/YoastSeoMetabox.js +101 -0
  153. package/dist/components/BlogUploader/dashboard/editor/YoastSnippetField.d.ts +22 -0
  154. package/dist/components/BlogUploader/dashboard/editor/YoastSnippetField.d.ts.map +1 -0
  155. package/dist/components/BlogUploader/dashboard/editor/YoastSnippetField.js +51 -0
  156. package/dist/components/BlogUploader/dashboard/editor/load.d.ts +10 -0
  157. package/dist/components/BlogUploader/dashboard/editor/load.d.ts.map +1 -0
  158. package/dist/components/BlogUploader/dashboard/editor/load.js +141 -0
  159. package/dist/components/BlogUploader/dashboard/loadTerms.d.ts +13 -0
  160. package/dist/components/BlogUploader/dashboard/loadTerms.d.ts.map +1 -0
  161. package/dist/components/BlogUploader/dashboard/loadTerms.js +41 -0
  162. package/dist/components/BlogUploader/dashboard/seo/BrandSeoActions.d.ts +8 -0
  163. package/dist/components/BlogUploader/dashboard/seo/BrandSeoActions.d.ts.map +1 -0
  164. package/dist/components/BlogUploader/dashboard/seo/BrandSeoActions.js +35 -0
  165. package/dist/components/BlogUploader/dashboard/seo/Ga4Settings.d.ts +9 -0
  166. package/dist/components/BlogUploader/dashboard/seo/Ga4Settings.d.ts.map +1 -0
  167. package/dist/components/BlogUploader/dashboard/seo/Ga4Settings.js +40 -0
  168. package/dist/components/BlogUploader/dashboard/seo/RedirectAnalyticsDashboard.d.ts +5 -0
  169. package/dist/components/BlogUploader/dashboard/seo/RedirectAnalyticsDashboard.d.ts.map +1 -0
  170. package/dist/components/BlogUploader/dashboard/seo/RedirectAnalyticsDashboard.js +29 -0
  171. package/dist/components/BlogUploader/dashboard/seo/RedirectDetail.d.ts +10 -0
  172. package/dist/components/BlogUploader/dashboard/seo/RedirectDetail.d.ts.map +1 -0
  173. package/dist/components/BlogUploader/dashboard/seo/RedirectDetail.js +31 -0
  174. package/dist/components/BlogUploader/dashboard/seo/RedirectForm.d.ts +27 -0
  175. package/dist/components/BlogUploader/dashboard/seo/RedirectForm.d.ts.map +1 -0
  176. package/dist/components/BlogUploader/dashboard/seo/RedirectForm.js +79 -0
  177. package/dist/components/BlogUploader/dashboard/seo/RedirectList.d.ts +20 -0
  178. package/dist/components/BlogUploader/dashboard/seo/RedirectList.d.ts.map +1 -0
  179. package/dist/components/BlogUploader/dashboard/seo/RedirectList.js +33 -0
  180. package/dist/components/BlogUploader/dashboard/seo/RobotsEditor.d.ts +11 -0
  181. package/dist/components/BlogUploader/dashboard/seo/RobotsEditor.d.ts.map +1 -0
  182. package/dist/components/BlogUploader/dashboard/seo/RobotsEditor.js +54 -0
  183. package/dist/components/BlogUploader/dashboard/seo/SearchConsoleSettings.d.ts +9 -0
  184. package/dist/components/BlogUploader/dashboard/seo/SearchConsoleSettings.d.ts.map +1 -0
  185. package/dist/components/BlogUploader/dashboard/seo/SearchConsoleSettings.js +38 -0
  186. package/dist/components/BlogUploader/dashboard/seo/SeoBrandList.d.ts +28 -0
  187. package/dist/components/BlogUploader/dashboard/seo/SeoBrandList.d.ts.map +1 -0
  188. package/dist/components/BlogUploader/dashboard/seo/SeoBrandList.js +29 -0
  189. package/dist/components/BlogUploader/dashboard/seo/SeoBrandLists.d.ts +17 -0
  190. package/dist/components/BlogUploader/dashboard/seo/SeoBrandLists.d.ts.map +1 -0
  191. package/dist/components/BlogUploader/dashboard/seo/SeoBrandLists.js +8 -0
  192. package/dist/components/BlogUploader/dashboard/seo/shared.d.ts +18 -0
  193. package/dist/components/BlogUploader/dashboard/seo/shared.d.ts.map +1 -0
  194. package/dist/components/BlogUploader/dashboard/seo/shared.js +6 -0
  195. package/dist/components/BlogUploader/dashboard/tools/ExportTool.d.ts +8 -0
  196. package/dist/components/BlogUploader/dashboard/tools/ExportTool.d.ts.map +1 -0
  197. package/dist/components/BlogUploader/dashboard/tools/ExportTool.js +78 -0
  198. package/dist/components/BlogUploader/dashboard/tools/ImportTool.d.ts +7 -0
  199. package/dist/components/BlogUploader/dashboard/tools/ImportTool.d.ts.map +1 -0
  200. package/dist/components/BlogUploader/dashboard/tools/ImportTool.js +70 -0
  201. package/dist/components/BlogUploader/dashboard/upload.d.ts +47 -0
  202. package/dist/components/BlogUploader/dashboard/upload.d.ts.map +1 -0
  203. package/dist/components/BlogUploader/dashboard/upload.js +68 -0
  204. package/dist/components/BlogUploader/site/ArticleDetailHero.d.ts +27 -0
  205. package/dist/components/BlogUploader/site/ArticleDetailHero.d.ts.map +1 -0
  206. package/dist/components/BlogUploader/site/ArticleDetailHero.js +13 -0
  207. package/dist/components/BlogUploader/site/ArticleRailDetails.d.ts +27 -0
  208. package/dist/components/BlogUploader/site/ArticleRailDetails.d.ts.map +1 -0
  209. package/dist/components/BlogUploader/site/ArticleRailDetails.js +17 -0
  210. package/dist/components/BlogUploader/site/BlogIndexView.d.ts +28 -0
  211. package/dist/components/BlogUploader/site/BlogIndexView.d.ts.map +1 -0
  212. package/dist/components/BlogUploader/site/BlogIndexView.js +34 -0
  213. package/dist/components/BlogUploader/site/BrandTableOfContents.d.ts +18 -0
  214. package/dist/components/BlogUploader/site/BrandTableOfContents.d.ts.map +1 -0
  215. package/dist/components/BlogUploader/site/BrandTableOfContents.js +15 -0
  216. package/dist/components/BlogUploader/site/HeroFadeSlide.d.ts +11 -0
  217. package/dist/components/BlogUploader/site/HeroFadeSlide.d.ts.map +1 -0
  218. package/dist/components/BlogUploader/site/HeroFadeSlide.js +3 -0
  219. package/dist/components/BlogUploader/site/HeroMediaVisual.d.ts +23 -0
  220. package/dist/components/BlogUploader/site/HeroMediaVisual.d.ts.map +1 -0
  221. package/dist/components/BlogUploader/site/HeroMediaVisual.js +50 -0
  222. package/dist/components/BlogUploader/site/IndexFeedSection.d.ts +14 -0
  223. package/dist/components/BlogUploader/site/IndexFeedSection.d.ts.map +1 -0
  224. package/dist/components/BlogUploader/site/IndexFeedSection.js +12 -0
  225. package/dist/components/BlogUploader/site/InfinitePostFeed.d.ts +23 -0
  226. package/dist/components/BlogUploader/site/InfinitePostFeed.d.ts.map +1 -0
  227. package/dist/components/BlogUploader/site/InfinitePostFeed.js +152 -0
  228. package/dist/components/BlogUploader/site/SiteMediaHero.d.ts +12 -0
  229. package/dist/components/BlogUploader/site/SiteMediaHero.d.ts.map +1 -0
  230. package/dist/components/BlogUploader/site/SiteMediaHero.js +80 -0
  231. package/dist/components/BlogUploader/site/SiteMotion.d.ts +12 -0
  232. package/dist/components/BlogUploader/site/SiteMotion.d.ts.map +1 -0
  233. package/dist/components/BlogUploader/site/SiteMotion.js +27 -0
  234. package/dist/components/BlogUploader/site/SiteNavAuth.d.ts +8 -0
  235. package/dist/components/BlogUploader/site/SiteNavAuth.d.ts.map +1 -0
  236. package/dist/components/BlogUploader/site/SiteNavAuth.js +36 -0
  237. package/dist/components/admin/AdminPostDetail.d.ts +7 -0
  238. package/dist/components/admin/AdminPostDetail.d.ts.map +1 -0
  239. package/dist/components/admin/AdminPostDetail.js +105 -0
  240. package/dist/components/admin/BrandSettings.d.ts +11 -0
  241. package/dist/components/admin/BrandSettings.d.ts.map +1 -0
  242. package/dist/components/admin/BrandSettings.js +71 -0
  243. package/dist/components/admin/BrandSwitcher.d.ts +3 -0
  244. package/dist/components/admin/BrandSwitcher.d.ts.map +1 -0
  245. package/dist/components/admin/BrandSwitcher.js +12 -0
  246. package/dist/components/admin/CategoryManager.d.ts +2 -0
  247. package/dist/components/admin/CategoryManager.d.ts.map +1 -0
  248. package/dist/components/admin/CategoryManager.js +1 -0
  249. package/dist/components/admin/Chips.d.ts +15 -0
  250. package/dist/components/admin/Chips.d.ts.map +1 -0
  251. package/dist/components/admin/Chips.js +15 -0
  252. package/dist/components/admin/CommentsManager.d.ts +6 -0
  253. package/dist/components/admin/CommentsManager.d.ts.map +1 -0
  254. package/dist/components/admin/CommentsManager.js +30 -0
  255. package/dist/components/admin/Dashboard.d.ts +3 -0
  256. package/dist/components/admin/Dashboard.d.ts.map +1 -0
  257. package/dist/components/admin/Dashboard.js +34 -0
  258. package/dist/components/admin/MediaLibrary.d.ts +4 -0
  259. package/dist/components/admin/MediaLibrary.d.ts.map +1 -0
  260. package/dist/components/admin/MediaLibrary.js +119 -0
  261. package/dist/components/admin/MediaManager.d.ts +2 -0
  262. package/dist/components/admin/MediaManager.d.ts.map +1 -0
  263. package/dist/components/admin/MediaManager.js +1 -0
  264. package/dist/components/admin/MediaPicker.d.ts +10 -0
  265. package/dist/components/admin/MediaPicker.d.ts.map +1 -0
  266. package/dist/components/admin/MediaPicker.js +86 -0
  267. package/dist/components/admin/PostEditor.d.ts +2 -0
  268. package/dist/components/admin/PostEditor.d.ts.map +1 -0
  269. package/dist/components/admin/PostEditor.js +1 -0
  270. package/dist/components/admin/PostList.d.ts +13 -0
  271. package/dist/components/admin/PostList.d.ts.map +1 -0
  272. package/dist/components/admin/PostList.js +93 -0
  273. package/dist/components/admin/PostsTable.d.ts +15 -0
  274. package/dist/components/admin/PostsTable.d.ts.map +1 -0
  275. package/dist/components/admin/PostsTable.js +106 -0
  276. package/dist/components/admin/Shell.d.ts +18 -0
  277. package/dist/components/admin/Shell.d.ts.map +1 -0
  278. package/dist/components/admin/Shell.js +99 -0
  279. package/dist/components/admin/TagManager.d.ts +2 -0
  280. package/dist/components/admin/TagManager.d.ts.map +1 -0
  281. package/dist/components/admin/TagManager.js +1 -0
  282. package/dist/components/admin/TermManager.d.ts +9 -0
  283. package/dist/components/admin/TermManager.d.ts.map +1 -0
  284. package/dist/components/admin/TermManager.js +105 -0
  285. package/dist/components/admin/UsersManager.d.ts +5 -0
  286. package/dist/components/admin/UsersManager.d.ts.map +1 -0
  287. package/dist/components/admin/UsersManager.js +96 -0
  288. package/dist/components/admin/api/mappers.d.ts +37 -0
  289. package/dist/components/admin/api/mappers.d.ts.map +1 -0
  290. package/dist/components/admin/api/mappers.js +174 -0
  291. package/dist/components/admin/charts.d.ts +30 -0
  292. package/dist/components/admin/charts.d.ts.map +1 -0
  293. package/dist/components/admin/charts.js +79 -0
  294. package/dist/components/admin/editor/FormatContentPanel.d.ts +25 -0
  295. package/dist/components/admin/editor/FormatContentPanel.d.ts.map +1 -0
  296. package/dist/components/admin/editor/FormatContentPanel.js +62 -0
  297. package/dist/components/admin/editor/PostEditor.d.ts +5 -0
  298. package/dist/components/admin/editor/PostEditor.d.ts.map +1 -0
  299. package/dist/components/admin/editor/PostEditor.js +404 -0
  300. package/dist/components/admin/editor/RichTextEditor.d.ts +42 -0
  301. package/dist/components/admin/editor/RichTextEditor.d.ts.map +1 -0
  302. package/dist/components/admin/editor/RichTextEditor.js +475 -0
  303. package/dist/components/admin/editor/SeoAnalysisPanel.d.ts +11 -0
  304. package/dist/components/admin/editor/SeoAnalysisPanel.d.ts.map +1 -0
  305. package/dist/components/admin/editor/SeoAnalysisPanel.js +31 -0
  306. package/dist/components/admin/editor/YoastCollapsible.d.ts +12 -0
  307. package/dist/components/admin/editor/YoastCollapsible.d.ts.map +1 -0
  308. package/dist/components/admin/editor/YoastCollapsible.js +5 -0
  309. package/dist/components/admin/editor/YoastInsightsPanel.d.ts +4 -0
  310. package/dist/components/admin/editor/YoastInsightsPanel.d.ts.map +1 -0
  311. package/dist/components/admin/editor/YoastInsightsPanel.js +31 -0
  312. package/dist/components/admin/editor/YoastInternalLinksPanel.d.ts +4 -0
  313. package/dist/components/admin/editor/YoastInternalLinksPanel.d.ts.map +1 -0
  314. package/dist/components/admin/editor/YoastInternalLinksPanel.js +35 -0
  315. package/dist/components/admin/editor/YoastSeoAnalysisPanel.d.ts +11 -0
  316. package/dist/components/admin/editor/YoastSeoAnalysisPanel.d.ts.map +1 -0
  317. package/dist/components/admin/editor/YoastSeoAnalysisPanel.js +23 -0
  318. package/dist/components/admin/editor/YoastSeoMetabox.d.ts +54 -0
  319. package/dist/components/admin/editor/YoastSeoMetabox.d.ts.map +1 -0
  320. package/dist/components/admin/editor/YoastSeoMetabox.js +101 -0
  321. package/dist/components/admin/editor/YoastSnippetField.d.ts +22 -0
  322. package/dist/components/admin/editor/YoastSnippetField.d.ts.map +1 -0
  323. package/dist/components/admin/editor/YoastSnippetField.js +51 -0
  324. package/dist/components/admin/editor/load.d.ts +10 -0
  325. package/dist/components/admin/editor/load.d.ts.map +1 -0
  326. package/dist/components/admin/editor/load.js +141 -0
  327. package/dist/components/admin/index.d.ts +28 -0
  328. package/dist/components/admin/index.d.ts.map +1 -0
  329. package/dist/components/admin/index.js +27 -0
  330. package/dist/components/admin/internal/States.d.ts +16 -0
  331. package/dist/components/admin/internal/States.d.ts.map +1 -0
  332. package/dist/components/admin/internal/States.js +15 -0
  333. package/dist/components/admin/lib/format.d.ts +7 -0
  334. package/dist/components/admin/lib/format.d.ts.map +1 -0
  335. package/dist/components/admin/lib/format.js +43 -0
  336. package/dist/components/admin/lib/publishing.d.ts +8 -0
  337. package/dist/components/admin/lib/publishing.d.ts.map +1 -0
  338. package/dist/components/admin/lib/publishing.js +10 -0
  339. package/dist/components/admin/lib/robots.d.ts +13 -0
  340. package/dist/components/admin/lib/robots.d.ts.map +1 -0
  341. package/dist/components/admin/lib/robots.js +22 -0
  342. package/dist/components/admin/mock/fixtures.d.ts +240 -0
  343. package/dist/components/admin/mock/fixtures.d.ts.map +1 -0
  344. package/dist/components/admin/mock/fixtures.js +546 -0
  345. package/dist/components/admin/mock/store.d.ts +139 -0
  346. package/dist/components/admin/mock/store.d.ts.map +1 -0
  347. package/dist/components/admin/mock/store.js +1067 -0
  348. package/dist/components/admin/seo/Ga4Settings.d.ts +34 -0
  349. package/dist/components/admin/seo/Ga4Settings.d.ts.map +1 -0
  350. package/dist/components/admin/seo/Ga4Settings.js +80 -0
  351. package/dist/components/admin/seo/RedirectAnalyticsDashboard.d.ts +5 -0
  352. package/dist/components/admin/seo/RedirectAnalyticsDashboard.d.ts.map +1 -0
  353. package/dist/components/admin/seo/RedirectAnalyticsDashboard.js +24 -0
  354. package/dist/components/admin/seo/RedirectDetail.d.ts +11 -0
  355. package/dist/components/admin/seo/RedirectDetail.d.ts.map +1 -0
  356. package/dist/components/admin/seo/RedirectDetail.js +30 -0
  357. package/dist/components/admin/seo/RedirectForm.d.ts +29 -0
  358. package/dist/components/admin/seo/RedirectForm.d.ts.map +1 -0
  359. package/dist/components/admin/seo/RedirectForm.js +89 -0
  360. package/dist/components/admin/seo/RedirectList.d.ts +10 -0
  361. package/dist/components/admin/seo/RedirectList.d.ts.map +1 -0
  362. package/dist/components/admin/seo/RedirectList.js +28 -0
  363. package/dist/components/admin/seo/RobotsEditor.d.ts +5 -0
  364. package/dist/components/admin/seo/RobotsEditor.d.ts.map +1 -0
  365. package/dist/components/admin/seo/RobotsEditor.js +50 -0
  366. package/dist/components/admin/seo/SearchConsoleSettings.d.ts +3 -0
  367. package/dist/components/admin/seo/SearchConsoleSettings.d.ts.map +1 -0
  368. package/dist/components/admin/seo/SearchConsoleSettings.js +1 -0
  369. package/dist/components/admin/seo/SeoBrandList.d.ts +3 -0
  370. package/dist/components/admin/seo/SeoBrandList.d.ts.map +1 -0
  371. package/dist/components/admin/seo/SeoBrandList.js +1 -0
  372. package/dist/components/admin/seo/shared.d.ts +17 -0
  373. package/dist/components/admin/seo/shared.d.ts.map +1 -0
  374. package/dist/components/admin/seo/shared.js +7 -0
  375. package/dist/components/admin/tools/ExportTool.d.ts +3 -0
  376. package/dist/components/admin/tools/ExportTool.d.ts.map +1 -0
  377. package/dist/components/admin/tools/ExportTool.js +1 -0
  378. package/dist/components/admin/tools/ImportTool.d.ts +3 -0
  379. package/dist/components/admin/tools/ImportTool.d.ts.map +1 -0
  380. package/dist/components/admin/tools/ImportTool.js +1 -0
  381. package/dist/components/admin/tools/ToolsHub.d.ts +10 -0
  382. package/dist/components/admin/tools/ToolsHub.d.ts.map +1 -0
  383. package/dist/components/admin/tools/ToolsHub.js +106 -0
  384. package/dist/components/admin/tools/index.d.ts +3 -0
  385. package/dist/components/admin/tools/index.d.ts.map +1 -0
  386. package/dist/components/admin/tools/index.js +1 -0
  387. package/dist/components/index.d.ts +3 -0
  388. package/dist/components/index.d.ts.map +1 -0
  389. package/dist/components/index.js +2 -0
  390. package/dist/components/user/BlogCard.d.ts +20 -0
  391. package/dist/components/user/BlogCard.d.ts.map +1 -0
  392. package/dist/components/user/BlogCard.js +22 -0
  393. package/dist/components/user/BlogCategories.d.ts +6 -0
  394. package/dist/components/user/BlogCategories.d.ts.map +1 -0
  395. package/dist/components/user/BlogCategories.js +11 -0
  396. package/dist/components/user/BlogDetail.d.ts +25 -0
  397. package/dist/components/user/BlogDetail.d.ts.map +1 -0
  398. package/dist/components/user/BlogDetail.js +90 -0
  399. package/dist/components/user/BlogList.d.ts +20 -0
  400. package/dist/components/user/BlogList.d.ts.map +1 -0
  401. package/dist/components/user/BlogList.js +56 -0
  402. package/dist/components/user/BlogSearch.d.ts +8 -0
  403. package/dist/components/user/BlogSearch.d.ts.map +1 -0
  404. package/dist/components/user/BlogSearch.js +19 -0
  405. package/dist/components/user/BlogTags.d.ts +6 -0
  406. package/dist/components/user/BlogTags.d.ts.map +1 -0
  407. package/dist/components/user/BlogTags.js +11 -0
  408. package/dist/components/user/FeaturedBlogs.d.ts +8 -0
  409. package/dist/components/user/FeaturedBlogs.d.ts.map +1 -0
  410. package/dist/components/user/FeaturedBlogs.js +12 -0
  411. package/dist/components/user/RelatedBlogs.d.ts +9 -0
  412. package/dist/components/user/RelatedBlogs.d.ts.map +1 -0
  413. package/dist/components/user/RelatedBlogs.js +12 -0
  414. package/dist/components/user/SiteMediaHero.d.ts +14 -0
  415. package/dist/components/user/SiteMediaHero.d.ts.map +1 -0
  416. package/dist/components/user/SiteMediaHero.js +43 -0
  417. package/dist/components/user/detail/ArticleDetailHero.d.ts +30 -0
  418. package/dist/components/user/detail/ArticleDetailHero.d.ts.map +1 -0
  419. package/dist/components/user/detail/ArticleDetailHero.js +29 -0
  420. package/dist/components/user/detail/ArticleRailDetails.d.ts +24 -0
  421. package/dist/components/user/detail/ArticleRailDetails.d.ts.map +1 -0
  422. package/dist/components/user/detail/ArticleRailDetails.js +12 -0
  423. package/dist/components/user/detail/BackButton.d.ts +7 -0
  424. package/dist/components/user/detail/BackButton.d.ts.map +1 -0
  425. package/dist/components/user/detail/BackButton.js +18 -0
  426. package/dist/components/user/detail/CommentSection.d.ts +28 -0
  427. package/dist/components/user/detail/CommentSection.d.ts.map +1 -0
  428. package/dist/components/user/detail/CommentSection.js +68 -0
  429. package/dist/components/user/detail/HeroFadeSlide.d.ts +12 -0
  430. package/dist/components/user/detail/HeroFadeSlide.d.ts.map +1 -0
  431. package/dist/components/user/detail/HeroFadeSlide.js +5 -0
  432. package/dist/components/user/detail/ReadingProgress.d.ts +2 -0
  433. package/dist/components/user/detail/ReadingProgress.d.ts.map +1 -0
  434. package/dist/components/user/detail/ReadingProgress.js +20 -0
  435. package/dist/components/user/detail/ShareRow.d.ts +7 -0
  436. package/dist/components/user/detail/ShareRow.d.ts.map +1 -0
  437. package/dist/components/user/detail/ShareRow.js +7 -0
  438. package/dist/components/user/detail/toc.d.ts +14 -0
  439. package/dist/components/user/detail/toc.d.ts.map +1 -0
  440. package/dist/components/user/detail/toc.js +106 -0
  441. package/dist/components/user/index.d.ts +14 -0
  442. package/dist/components/user/index.d.ts.map +1 -0
  443. package/dist/components/user/index.js +13 -0
  444. package/dist/components/user/internal/States.d.ts +18 -0
  445. package/dist/components/user/internal/States.d.ts.map +1 -0
  446. package/dist/components/user/internal/States.js +21 -0
  447. package/dist/constants/index.d.ts +4 -0
  448. package/dist/constants/index.d.ts.map +1 -0
  449. package/dist/constants/index.js +3 -0
  450. package/dist/hooks/index.d.ts +2 -0
  451. package/dist/hooks/index.d.ts.map +1 -0
  452. package/dist/hooks/index.js +1 -0
  453. package/dist/hooks/useAsync.d.ts +23 -0
  454. package/dist/hooks/useAsync.d.ts.map +1 -0
  455. package/dist/hooks/useAsync.js +40 -0
  456. package/dist/index.d.ts +12 -0
  457. package/dist/index.d.ts.map +1 -0
  458. package/dist/index.js +9 -0
  459. package/dist/lib/access.d.ts +64 -0
  460. package/dist/lib/access.d.ts.map +1 -0
  461. package/dist/lib/access.js +127 -0
  462. package/dist/lib/canonical.d.ts +15 -0
  463. package/dist/lib/canonical.d.ts.map +1 -0
  464. package/dist/lib/canonical.js +34 -0
  465. package/dist/lib/comments.d.ts +9 -0
  466. package/dist/lib/comments.d.ts.map +1 -0
  467. package/dist/lib/comments.js +23 -0
  468. package/dist/lib/dashboard.d.ts +39 -0
  469. package/dist/lib/dashboard.d.ts.map +1 -0
  470. package/dist/lib/dashboard.js +157 -0
  471. package/dist/lib/data-transfer.d.ts +23 -0
  472. package/dist/lib/data-transfer.d.ts.map +1 -0
  473. package/dist/lib/data-transfer.js +436 -0
  474. package/dist/lib/default-author.d.ts +12 -0
  475. package/dist/lib/default-author.d.ts.map +1 -0
  476. package/dist/lib/default-author.js +57 -0
  477. package/dist/lib/format-media.d.ts +6 -0
  478. package/dist/lib/format-media.d.ts.map +1 -0
  479. package/dist/lib/format-media.js +18 -0
  480. package/dist/lib/format.d.ts +7 -0
  481. package/dist/lib/format.d.ts.map +1 -0
  482. package/dist/lib/format.js +43 -0
  483. package/dist/lib/hero-post.d.ts +24 -0
  484. package/dist/lib/hero-post.d.ts.map +1 -0
  485. package/dist/lib/hero-post.js +95 -0
  486. package/dist/lib/lexical-build.d.ts +30 -0
  487. package/dist/lib/lexical-build.d.ts.map +1 -0
  488. package/dist/lib/lexical-build.js +57 -0
  489. package/dist/lib/lexical-doc.d.ts +88 -0
  490. package/dist/lib/lexical-doc.d.ts.map +1 -0
  491. package/dist/lib/lexical-doc.js +385 -0
  492. package/dist/lib/lexical-dom.d.ts +19 -0
  493. package/dist/lib/lexical-dom.d.ts.map +1 -0
  494. package/dist/lib/lexical-dom.js +181 -0
  495. package/dist/lib/lexical.d.ts +31 -0
  496. package/dist/lib/lexical.d.ts.map +1 -0
  497. package/dist/lib/lexical.js +59 -0
  498. package/dist/lib/post-categories.d.ts +11 -0
  499. package/dist/lib/post-categories.d.ts.map +1 -0
  500. package/dist/lib/post-categories.js +27 -0
  501. package/dist/lib/post-format.d.ts +39 -0
  502. package/dist/lib/post-format.d.ts.map +1 -0
  503. package/dist/lib/post-format.js +82 -0
  504. package/dist/lib/publishing.d.ts +3 -0
  505. package/dist/lib/publishing.d.ts.map +1 -0
  506. package/dist/lib/publishing.js +1 -0
  507. package/dist/lib/queries.d.ts +49 -0
  508. package/dist/lib/queries.d.ts.map +1 -0
  509. package/dist/lib/queries.js +340 -0
  510. package/dist/lib/redirect-analytics.d.ts +27 -0
  511. package/dist/lib/redirect-analytics.d.ts.map +1 -0
  512. package/dist/lib/redirect-analytics.js +147 -0
  513. package/dist/lib/redirects.d.ts +39 -0
  514. package/dist/lib/redirects.d.ts.map +1 -0
  515. package/dist/lib/redirects.js +96 -0
  516. package/dist/lib/revalidate.d.ts +30 -0
  517. package/dist/lib/revalidate.d.ts.map +1 -0
  518. package/dist/lib/revalidate.js +91 -0
  519. package/dist/lib/robots.d.ts +19 -0
  520. package/dist/lib/robots.d.ts.map +1 -0
  521. package/dist/lib/robots.js +38 -0
  522. package/dist/lib/seo-analysis.d.ts +28 -0
  523. package/dist/lib/seo-analysis.d.ts.map +1 -0
  524. package/dist/lib/seo-analysis.js +153 -0
  525. package/dist/lib/seo-limits.d.ts +19 -0
  526. package/dist/lib/seo-limits.d.ts.map +1 -0
  527. package/dist/lib/seo-limits.js +39 -0
  528. package/dist/lib/seo.d.ts +50 -0
  529. package/dist/lib/seo.d.ts.map +1 -0
  530. package/dist/lib/seo.js +238 -0
  531. package/dist/lib/slug.d.ts +3 -0
  532. package/dist/lib/slug.d.ts.map +1 -0
  533. package/dist/lib/slug.js +9 -0
  534. package/dist/lib/stats.d.ts +71 -0
  535. package/dist/lib/stats.d.ts.map +1 -0
  536. package/dist/lib/stats.js +207 -0
  537. package/dist/lib/tenant-host.d.ts +9 -0
  538. package/dist/lib/tenant-host.d.ts.map +1 -0
  539. package/dist/lib/tenant-host.js +15 -0
  540. package/dist/lib/tenant.d.ts +41 -0
  541. package/dist/lib/tenant.d.ts.map +1 -0
  542. package/dist/lib/tenant.js +140 -0
  543. package/dist/lib/toc.d.ts +16 -0
  544. package/dist/lib/toc.d.ts.map +1 -0
  545. package/dist/lib/toc.js +28 -0
  546. package/dist/lib/yoast-snippet.d.ts +25 -0
  547. package/dist/lib/yoast-snippet.d.ts.map +1 -0
  548. package/dist/lib/yoast-snippet.js +79 -0
  549. package/dist/pages/admin/BlogAdmin.d.ts +9 -0
  550. package/dist/pages/admin/BlogAdmin.d.ts.map +1 -0
  551. package/dist/pages/admin/BlogAdmin.js +234 -0
  552. package/dist/pages/admin/index.d.ts +2 -0
  553. package/dist/pages/admin/index.d.ts.map +1 -0
  554. package/dist/pages/admin/index.js +1 -0
  555. package/dist/pages/index.d.ts +3 -0
  556. package/dist/pages/index.d.ts.map +1 -0
  557. package/dist/pages/index.js +2 -0
  558. package/dist/pages/user/UserBlogPage.d.ts +10 -0
  559. package/dist/pages/user/UserBlogPage.d.ts.map +1 -0
  560. package/dist/pages/user/UserBlogPage.js +15 -0
  561. package/dist/pages/user/index.d.ts +2 -0
  562. package/dist/pages/user/index.d.ts.map +1 -0
  563. package/dist/pages/user/index.js +1 -0
  564. package/dist/services/admin-client.d.ts +33 -0
  565. package/dist/services/admin-client.d.ts.map +1 -0
  566. package/dist/services/admin-client.js +154 -0
  567. package/dist/services/admin-sdk-client.d.ts +285 -0
  568. package/dist/services/admin-sdk-client.d.ts.map +1 -0
  569. package/dist/services/admin-sdk-client.js +242 -0
  570. package/dist/services/errors.d.ts +14 -0
  571. package/dist/services/errors.d.ts.map +1 -0
  572. package/dist/services/errors.js +26 -0
  573. package/dist/services/http.d.ts +24 -0
  574. package/dist/services/http.d.ts.map +1 -0
  575. package/dist/services/http.js +159 -0
  576. package/dist/services/index.d.ts +8 -0
  577. package/dist/services/index.d.ts.map +1 -0
  578. package/dist/services/index.js +7 -0
  579. package/dist/services/pagination.d.ts +4 -0
  580. package/dist/services/pagination.d.ts.map +1 -0
  581. package/dist/services/pagination.js +32 -0
  582. package/dist/services/public-client.d.ts +23 -0
  583. package/dist/services/public-client.d.ts.map +1 -0
  584. package/dist/services/public-client.js +94 -0
  585. package/dist/services/types.d.ts +124 -0
  586. package/dist/services/types.d.ts.map +1 -0
  587. package/dist/services/types.js +1 -0
  588. package/dist/style.css +3105 -0
  589. package/dist/styles/adminTheme.d.ts +6 -0
  590. package/dist/styles/adminTheme.d.ts.map +1 -0
  591. package/dist/styles/adminTheme.js +52 -0
  592. package/dist/styles/index.d.ts +3 -0
  593. package/dist/styles/index.d.ts.map +1 -0
  594. package/dist/styles/index.js +2 -0
  595. package/dist/styles/userTheme.d.ts +8 -0
  596. package/dist/styles/userTheme.d.ts.map +1 -0
  597. package/dist/styles/userTheme.js +60 -0
  598. package/dist/types/admin.d.ts +28 -0
  599. package/dist/types/admin.d.ts.map +1 -0
  600. package/dist/types/admin.js +1 -0
  601. package/dist/types/index.d.ts +4 -0
  602. package/dist/types/index.d.ts.map +1 -0
  603. package/dist/types/index.js +1 -0
  604. package/dist/types/user.d.ts +41 -0
  605. package/dist/types/user.d.ts.map +1 -0
  606. package/dist/types/user.js +1 -0
  607. package/dist/user/components/BlogCard.d.ts +15 -0
  608. package/dist/user/components/BlogCard.d.ts.map +1 -0
  609. package/dist/user/components/BlogCard.js +31 -0
  610. package/dist/user/components/BlogCategories.d.ts +6 -0
  611. package/dist/user/components/BlogCategories.d.ts.map +1 -0
  612. package/dist/user/components/BlogCategories.js +11 -0
  613. package/dist/user/components/BlogDetail.d.ts +7 -0
  614. package/dist/user/components/BlogDetail.d.ts.map +1 -0
  615. package/dist/user/components/BlogDetail.js +19 -0
  616. package/dist/user/components/BlogList.d.ts +8 -0
  617. package/dist/user/components/BlogList.d.ts.map +1 -0
  618. package/dist/user/components/BlogList.js +18 -0
  619. package/dist/user/components/BlogSearch.d.ts +8 -0
  620. package/dist/user/components/BlogSearch.d.ts.map +1 -0
  621. package/dist/user/components/BlogSearch.js +19 -0
  622. package/dist/user/components/BlogTags.d.ts +6 -0
  623. package/dist/user/components/BlogTags.d.ts.map +1 -0
  624. package/dist/user/components/BlogTags.js +11 -0
  625. package/dist/user/components/FeaturedBlogs.d.ts +8 -0
  626. package/dist/user/components/FeaturedBlogs.d.ts.map +1 -0
  627. package/dist/user/components/FeaturedBlogs.js +12 -0
  628. package/dist/user/components/RelatedBlogs.d.ts +9 -0
  629. package/dist/user/components/RelatedBlogs.d.ts.map +1 -0
  630. package/dist/user/components/RelatedBlogs.js +12 -0
  631. package/dist/user/components/internal/States.d.ts +18 -0
  632. package/dist/user/components/internal/States.d.ts.map +1 -0
  633. package/dist/user/components/internal/States.js +16 -0
  634. package/dist/user/hooks/useAsync.d.ts +21 -0
  635. package/dist/user/hooks/useAsync.d.ts.map +1 -0
  636. package/dist/user/hooks/useAsync.js +40 -0
  637. package/dist/user/index.d.ts +11 -0
  638. package/dist/user/index.d.ts.map +1 -0
  639. package/dist/user/index.js +10 -0
  640. package/dist/user/sanitize.d.ts +2 -0
  641. package/dist/user/sanitize.d.ts.map +1 -0
  642. package/dist/user/sanitize.js +120 -0
  643. package/dist/user/theme.d.ts +8 -0
  644. package/dist/user/theme.d.ts.map +1 -0
  645. package/dist/user/theme.js +60 -0
  646. package/dist/user/types.d.ts +41 -0
  647. package/dist/user/types.d.ts.map +1 -0
  648. package/dist/user/types.js +1 -0
  649. package/dist/utils/env.d.ts +16 -0
  650. package/dist/utils/env.d.ts.map +1 -0
  651. package/dist/utils/env.js +57 -0
  652. package/dist/utils/index.d.ts +3 -0
  653. package/dist/utils/index.d.ts.map +1 -0
  654. package/dist/utils/index.js +2 -0
  655. package/dist/utils/sanitize.d.ts +2 -0
  656. package/dist/utils/sanitize.d.ts.map +1 -0
  657. package/dist/utils/sanitize.js +120 -0
  658. package/package.json +63 -0
package/dist/style.css ADDED
@@ -0,0 +1,3105 @@
1
+ /* Single entry for admin + public site styles (hero animations live in site-*). */
2
+
3
+ /*
4
+ * Editorial dashboard.
5
+ *
6
+ * Scanned, not read — so the craft is information density and state legibility.
7
+ * Anything needing action must be findable without reading a sentence.
8
+ *
9
+ * Structure: tokens, shell, then one section per surface (list, editor, forms,
10
+ * modals). Every colour is a token; nothing here hard-codes a hex outside the
11
+ * token blocks, which is what makes the dark theme a redefinition rather than a
12
+ * second stylesheet.
13
+ *
14
+ * Chart colours (--viz-*, --ord-*) are the validated data-viz palette: separate
15
+ * steps chosen for each surface, never an automatic inversion of the other mode.
16
+ */
17
+
18
+ :root {
19
+ --d-bg: #f4f4f7;
20
+ --d-surface: #ffffff;
21
+ --d-surface-2: #fafafc;
22
+ --d-sunk: #f0f0f5;
23
+ --d-side: #14152a;
24
+ --d-side-2: #1e2040;
25
+ --d-side-ink: #b8bad6;
26
+ --d-side-ink-2: #7b7d9c;
27
+ --d-ink: #16172b;
28
+ --d-ink-2: #4b4d66;
29
+ --d-ink-3: #7a7c94;
30
+ --d-rule: #e5e5ec;
31
+ --d-rule-2: #eeeef3;
32
+ --d-accent: #4f46e5;
33
+ --d-accent-ink: #4338ca;
34
+ --d-accent-soft: #eef0ff;
35
+
36
+ --d-good: #0ca30c;
37
+ --d-good-soft: #e3f4e3;
38
+ --d-warn: #b57900;
39
+ --d-warn-soft: #fdf3dd;
40
+ --d-serious: #ec835a;
41
+ --d-crit: #d03b3b;
42
+ --d-crit-soft: #fae7e7;
43
+ --d-delta-up: #006300;
44
+
45
+ /* data-viz: light steps, validated against #ffffff */
46
+ --viz-1: #2a78d6;
47
+ --viz-2: #eb6834;
48
+ --viz-3: #1baf7a;
49
+ --viz-grid: #eceef2;
50
+ --viz-axis: #c3c2b7;
51
+ --viz-muted: #898781;
52
+ --ord-1: #86b6ef;
53
+ --ord-2: #5598e7;
54
+ --ord-3: #2a78d6;
55
+ --ord-4: #184f95;
56
+
57
+ --d-ui: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
58
+ --d-read: Georgia, 'Iowan Old Style', 'Times New Roman', serif;
59
+ --d-mono: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
60
+
61
+ --d-radius: 12px;
62
+ --d-radius-sm: 8px;
63
+ --d-shadow: 0 1px 2px rgba(22, 23, 43, 0.04), 0 10px 24px -18px rgba(22, 23, 43, 0.3);
64
+ --d-shadow-lg: 0 2px 6px rgba(22, 23, 43, 0.06), 0 28px 60px -26px rgba(22, 23, 43, 0.42);
65
+ --d-ring: 0 0 0 3px rgba(79, 70, 229, 0.18);
66
+ }
67
+
68
+ @media (prefers-color-scheme: dark) {
69
+ :root:not([data-theme='light']) {
70
+ --d-bg: #0c0d16;
71
+ --d-surface: #151626;
72
+ --d-surface-2: #1a1b2d;
73
+ --d-sunk: #1d1e31;
74
+ --d-side: #0a0a14;
75
+ --d-side-2: #12132a;
76
+ --d-side-ink: #aeb0cf;
77
+ --d-side-ink-2: #6e708f;
78
+ --d-ink: #eceef6;
79
+ --d-ink-2: #b3b5cc;
80
+ --d-ink-3: #8688a3;
81
+ --d-rule: #272840;
82
+ --d-rule-2: #202136;
83
+ --d-accent: #7c73f0;
84
+ --d-accent-ink: #a9a2f7;
85
+ --d-accent-soft: #1e1c40;
86
+
87
+ --d-good: #3fbf3f;
88
+ --d-good-soft: #10240f;
89
+ --d-warn: #e0a92c;
90
+ --d-warn-soft: #2a2211;
91
+ --d-serious: #ec835a;
92
+ --d-crit: #e26060;
93
+ --d-crit-soft: #2a1414;
94
+ --d-delta-up: #3fbf3f;
95
+
96
+ /* data-viz: dark steps, validated against #14161e */
97
+ --viz-1: #3987e5;
98
+ --viz-2: #d95926;
99
+ --viz-3: #199e70;
100
+ --viz-grid: #22252f;
101
+ --viz-axis: #383835;
102
+ --viz-muted: #898781;
103
+ --ord-1: #9ec5f4;
104
+ --ord-2: #6da7ec;
105
+ --ord-3: #3987e5;
106
+ --ord-4: #1c5cab;
107
+
108
+ --d-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 8px 22px -16px rgba(0, 0, 0, 0.8);
109
+ --d-shadow-lg: 0 2px 8px rgba(0, 0, 0, 0.5), 0 24px 56px -24px rgba(0, 0, 0, 0.9);
110
+ --d-ring: 0 0 0 3px rgba(124, 115, 240, 0.3);
111
+ }
112
+ }
113
+
114
+ :root[data-theme='dark'] {
115
+ --d-bg: #0c0d16;
116
+ --d-surface: #151626;
117
+ --d-surface-2: #1a1b2d;
118
+ --d-sunk: #1d1e31;
119
+ --d-side: #0a0a14;
120
+ --d-side-2: #12132a;
121
+ --d-side-ink: #aeb0cf;
122
+ --d-side-ink-2: #6e708f;
123
+ --d-ink: #eceef6;
124
+ --d-ink-2: #b3b5cc;
125
+ --d-ink-3: #8688a3;
126
+ --d-rule: #272840;
127
+ --d-rule-2: #202136;
128
+ --d-accent: #7c73f0;
129
+ --d-accent-ink: #a9a2f7;
130
+ --d-accent-soft: #1e1c40;
131
+ --d-good: #3fbf3f;
132
+ --d-good-soft: #10240f;
133
+ --d-warn: #e0a92c;
134
+ --d-warn-soft: #2a2211;
135
+ --d-serious: #ec835a;
136
+ --d-crit: #e26060;
137
+ --d-crit-soft: #2a1414;
138
+ --d-delta-up: #3fbf3f;
139
+ --viz-1: #3987e5;
140
+ --viz-2: #d95926;
141
+ --viz-3: #199e70;
142
+ --viz-grid: #22252f;
143
+ --viz-axis: #383835;
144
+ --viz-muted: #898781;
145
+ --ord-1: #9ec5f4;
146
+ --ord-2: #6da7ec;
147
+ --ord-3: #3987e5;
148
+ --ord-4: #1c5cab;
149
+ --d-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 8px 22px -16px rgba(0, 0, 0, 0.8);
150
+ --d-shadow-lg: 0 2px 8px rgba(0, 0, 0, 0.5), 0 24px 56px -24px rgba(0, 0, 0, 0.9);
151
+ --d-ring: 0 0 0 3px rgba(124, 115, 240, 0.3);
152
+ }
153
+
154
+ * { box-sizing: border-box; }
155
+
156
+ body {
157
+ margin: 0;
158
+ background: var(--d-bg);
159
+ color: var(--d-ink);
160
+ font-family: var(--d-ui);
161
+ font-size: 14px;
162
+ line-height: 1.5;
163
+ -webkit-font-smoothing: antialiased;
164
+ }
165
+
166
+ a { color: var(--d-accent); }
167
+ :focus-visible { outline: 2px solid var(--d-accent); outline-offset: 2px; border-radius: 4px; }
168
+ .mono { font-family: var(--d-mono); font-size: 0.92em; }
169
+ .muted { color: var(--d-ink-3); }
170
+ .trunc { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; display: inline-block; }
171
+
172
+ /* ============================ app shell ============================ */
173
+
174
+ .bp-admin-wrapper {
175
+ display: block;
176
+ width: 100%;
177
+ max-width: 100%;
178
+ height: 100vh;
179
+ height: 100dvh;
180
+ overflow: hidden;
181
+ box-sizing: border-box;
182
+ }
183
+
184
+ .shell {
185
+ display: grid;
186
+ grid-template-columns: 1fr;
187
+ width: 100%;
188
+ max-width: 100%;
189
+ height: 100%;
190
+ min-height: 0;
191
+ overflow: hidden;
192
+ box-sizing: border-box;
193
+ }
194
+ @media (min-width: 1000px) { .shell { grid-template-columns: 250px minmax(0, 1fr); } }
195
+
196
+ .side {
197
+ background: linear-gradient(180deg, var(--d-side-2), var(--d-side));
198
+ color: var(--d-side-ink);
199
+ padding: 18px 14px;
200
+ display: flex;
201
+ flex-direction: column;
202
+ gap: 16px;
203
+ border-right: 1px solid rgba(255, 255, 255, 0.06);
204
+ min-height: 0;
205
+ overflow: hidden;
206
+ }
207
+ @media (min-width: 1000px) {
208
+ .side {
209
+ position: sticky;
210
+ top: 0;
211
+ height: 100%;
212
+ max-height: 100vh;
213
+ max-height: 100dvh;
214
+ align-self: start;
215
+ }
216
+ }
217
+
218
+ .side-brand { display: flex; align-items: center; gap: 10px; padding: 2px 8px 0; }
219
+ .side-mark {
220
+ width: 30px; height: 30px; border-radius: 8px; flex-shrink: 0;
221
+ background: linear-gradient(135deg, var(--viz-1), var(--ord-4));
222
+ display: grid; place-items: center; color: #fff; font-weight: 800; font-size: 13px;
223
+ }
224
+ .side-name { color: #fff; font-weight: 700; font-size: 14.5px; letter-spacing: -0.01em; line-height: 1.2; }
225
+ .side-role { color: var(--d-side-ink-2); font-size: 11.5px; margin-top: 1px; }
226
+
227
+ .side-new, button.side-new {
228
+ display: flex; align-items: center; justify-content: center; gap: 7px;
229
+ background: rgb(79, 70, 229); color: #fff; text-decoration: none;
230
+ font-size: 13.2px; font-weight: 650; padding: 9px 12px; border-radius: 8px;
231
+ height: 38px; border: none; cursor: pointer; width: 100%;
232
+ }
233
+ .side-new:hover, button.side-new:hover { filter: brightness(1.08); }
234
+
235
+ .side-scroll {
236
+ display: flex;
237
+ flex-direction: column;
238
+ gap: 18px;
239
+ overflow-x: hidden;
240
+ overflow-y: auto;
241
+ flex: 1 1 auto;
242
+ min-height: 0;
243
+ margin: 0 -4px;
244
+ padding: 0 4px;
245
+ overscroll-behavior: contain;
246
+ scrollbar-width: thin;
247
+ scrollbar-color: rgba(255, 255, 255, 0.28) transparent;
248
+ }
249
+ .side-scroll::-webkit-scrollbar { width: 6px; }
250
+ .side-scroll::-webkit-scrollbar-track { background: transparent; }
251
+ .side-scroll::-webkit-scrollbar-thumb {
252
+ background: rgba(255, 255, 255, 0.28);
253
+ border-radius: 999px;
254
+ }
255
+ .side-brand, .side-new, .side-foot { flex: 0 0 auto; }
256
+ .side-group { display: flex; flex-direction: column; gap: 4px; }
257
+ .side-sect {
258
+ font-size: 10px; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase;
259
+ color: var(--d-side-ink-2); padding: 0 8px; margin: 0 0 2px;
260
+ }
261
+ .side-nav { display: flex; flex-direction: column; gap: 1px; }
262
+ .side-nav a, .side-nav button {
263
+ display: flex; align-items: center; gap: 10px;
264
+ padding: 8px 10px; border-radius: 7px;
265
+ color: var(--d-side-ink); text-decoration: none; font-size: 13.4px; font-weight: 520;
266
+ }
267
+ .side-nav button { font-family: inherit; background: none; border: none; cursor: pointer; text-align: left; width: 100%; }
268
+ .side-nav a:hover, .side-nav button:hover { background: rgba(255, 255, 255, 0.06); color: #fff; }
269
+ .side-nav a.is-open, .side-nav button.is-open { color: #fff; }
270
+ .side-nav a[aria-current='page'], .side-nav button[aria-current='page'] {
271
+ background: rgba(255, 255, 255, 0.08);
272
+ color: #fff; font-weight: 650;
273
+ }
274
+ .nav-icon { width: 17px; height: 17px; flex-shrink: 0; opacity: 0.85; }
275
+ .side-nav .badge {
276
+ margin-left: auto; font-size: 10.8px; font-weight: 700; padding: 1px 7px;
277
+ border-radius: 100px; background: rgba(255, 255, 255, 0.14); color: #fff;
278
+ font-variant-numeric: tabular-nums;
279
+ }
280
+ .side-sub { display: flex; flex-direction: column; gap: 1px; margin: 2px 0 4px 20px; padding-left: 10px; border-left: 1px solid rgba(255, 255, 255, 0.1); }
281
+ .side-sub a { font-size: 12.6px; padding: 6px 9px; font-weight: 500; color: var(--d-side-ink-2); }
282
+ .side-sub a:hover { color: #fff; }
283
+ .side-sub a[aria-current='page'] { color: #fff; background: rgba(255, 255, 255, 0.08); }
284
+
285
+ .side-foot { margin-top: auto; padding: 12px 8px 10px; border-top: 1px solid rgba(255, 255, 255, 0.07); }
286
+ .side-user-card {
287
+ display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: var(--d-radius-sm);
288
+ text-decoration: none; color: inherit; transition: background 0.12s ease;
289
+ }
290
+ .side-user-card:hover { background: rgba(255, 255, 255, 0.06); }
291
+ .side-user-card.is-active,
292
+ .side-user-card[aria-current='page'] { background: rgba(255, 255, 255, 0.08); }
293
+ .side-user-avatar {
294
+ width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0; object-fit: cover;
295
+ border: 1px solid rgba(255, 255, 255, 0.14);
296
+ }
297
+ .side-user-avatar-fallback {
298
+ display: grid; place-items: center; background: rgba(255, 255, 255, 0.12); color: #fff;
299
+ font-size: 14px; font-weight: 700;
300
+ }
301
+ .side-user-meta { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
302
+ .side-user-name {
303
+ font-size: 13px; font-weight: 650; color: var(--d-side-ink); line-height: 1.25;
304
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
305
+ }
306
+ .side-user-role {
307
+ font-size: 11.5px; color: var(--d-side-ink-2); line-height: 1.25;
308
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
309
+ }
310
+
311
+ .main {
312
+ min-width: 0;
313
+ min-height: 0;
314
+ height: 100%;
315
+ display: flex;
316
+ flex-direction: column;
317
+ overflow: hidden;
318
+ }
319
+
320
+ /* ============================ top bar ============================ */
321
+
322
+ .top {
323
+ background: color-mix(in srgb, var(--d-surface) 88%, transparent);
324
+ backdrop-filter: saturate(180%) blur(8px);
325
+ border-bottom: 1px solid var(--d-rule);
326
+ padding: 14px 26px; display: flex; align-items: center; justify-content: space-between;
327
+ gap: 16px; flex-wrap: wrap; position: sticky; top: 0; z-index: 30;
328
+ flex: 0 0 auto;
329
+ }
330
+ .top h1 { font-size: 19px; font-weight: 700; letter-spacing: -0.02em; margin: 0; }
331
+ .top .sub { font-size: 12.5px; color: var(--d-ink-3); margin: 2px 0 0; }
332
+ .top-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
333
+
334
+ .body {
335
+ padding: 20px 26px 72px;
336
+ display: flex;
337
+ flex-direction: column;
338
+ gap: 16px;
339
+ flex: 1 1 auto;
340
+ min-height: 0;
341
+ overflow-x: hidden;
342
+ overflow-y: auto;
343
+ overscroll-behavior: contain;
344
+ }
345
+ .body-wide { padding-left: 20px; padding-right: 20px; }
346
+
347
+ /* brand switcher */
348
+ .menu { position: relative; }
349
+ .menu > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; gap: 7px; }
350
+ .menu > summary::-webkit-details-marker { display: none; }
351
+ .menu .caret { font-size: 10px; color: var(--d-ink-3); }
352
+ .menu-panel {
353
+ position: absolute; right: 0; top: calc(100% + 6px); z-index: 40; min-width: 210px;
354
+ background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius);
355
+ box-shadow: var(--d-shadow-lg); padding: 5px; display: flex; flex-direction: column;
356
+ }
357
+ .menu-panel a,
358
+ .menu-panel button {
359
+ display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: var(--d-radius-sm);
360
+ color: var(--d-ink-2); text-decoration: none; font-size: 13px; font-weight: 550;
361
+ border: 0; background: none; width: 100%; text-align: left; cursor: pointer; font: inherit;
362
+ }
363
+ .menu-panel a:hover,
364
+ .menu-panel button:hover { background: var(--d-sunk); color: var(--d-ink); }
365
+ .menu-panel a[aria-current='true'],
366
+ .menu-panel button[aria-current='true'] { background: var(--d-accent-soft); color: var(--d-accent-ink); }
367
+ .dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; display: inline-block; }
368
+
369
+ /* ============================ buttons ============================ */
370
+
371
+ .btn {
372
+ font: inherit; font-size: 13px; font-weight: 600; text-decoration: none;
373
+ padding: 7px 13px; border-radius: var(--d-radius-sm); border: 1px solid var(--d-rule);
374
+ color: var(--d-ink-2); background: var(--d-surface); white-space: nowrap; cursor: pointer;
375
+ display: inline-flex; align-items: center; gap: 6px; line-height: 1.35;
376
+ }
377
+ .btn { transition: border-color 0.12s ease, color 0.12s ease, background 0.12s ease; }
378
+ .btn:hover:not(:disabled) { border-color: var(--d-accent); color: var(--d-accent-ink); background: var(--d-accent-soft); }
379
+ .btn:disabled { opacity: 0.45; cursor: not-allowed; }
380
+ .btn-primary {
381
+ background: var(--d-accent); border-color: var(--d-accent); color: #fff;
382
+ box-shadow: 0 6px 16px -10px color-mix(in srgb, var(--d-accent) 90%, transparent);
383
+ }
384
+ .btn-primary:hover:not(:disabled) { color: #fff; filter: brightness(1.08); background: var(--d-accent); }
385
+ .btn-ghost { border-style: dashed; color: var(--d-ink-3); }
386
+ .btn-tiny { font-size: 12px; padding: 4px 9px; }
387
+ .btn-block { width: 100%; justify-content: center; }
388
+ .btn-row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
389
+ .icon-btn {
390
+ font: inherit; border: 0; background: transparent; color: var(--d-ink-3); cursor: pointer;
391
+ width: 30px; height: 30px; border-radius: var(--d-radius-sm); display: grid; place-items: center;
392
+ }
393
+ .icon-btn:hover { background: var(--d-sunk); color: var(--d-ink); }
394
+ .btn-danger-link {
395
+ font: inherit; font-size: 12.5px; font-weight: 600; border: 0; background: none;
396
+ color: var(--d-crit); cursor: pointer; padding: 0; text-align: left; text-decoration: underline;
397
+ text-underline-offset: 2px;
398
+ }
399
+ .btn-danger-link:disabled { opacity: 0.5; cursor: not-allowed; }
400
+
401
+ .seg { display: inline-flex; border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); overflow: hidden; }
402
+ .seg a {
403
+ font-size: 12.5px; font-weight: 600; padding: 6px 11px; text-decoration: none;
404
+ color: var(--d-ink-3); background: var(--d-surface); border-right: 1px solid var(--d-rule);
405
+ }
406
+ .seg a:last-child { border-right: 0; }
407
+ .seg a[aria-current='true'] { background: var(--d-accent-soft); color: var(--d-accent-ink); }
408
+
409
+ /* ============================ stat cards ============================ */
410
+
411
+ .kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(212px, 1fr)); gap: 14px; }
412
+ .kpi {
413
+ background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius);
414
+ padding: 15px 17px; box-shadow: var(--d-shadow);
415
+ display: flex; flex-direction: column; gap: 5px; text-decoration: none; color: inherit;
416
+ }
417
+ .kpi { transition: border-color 0.12s ease, box-shadow 0.12s ease, transform 0.12s ease; }
418
+ a.kpi:hover { border-color: var(--d-accent); transform: translateY(-1px); box-shadow: var(--d-shadow-lg); }
419
+ .kpi-l { font-size: 11px; font-weight: 680; letter-spacing: 0.09em; text-transform: uppercase; color: var(--d-ink-3); }
420
+ .kpi-row { display: flex; align-items: flex-end; justify-content: space-between; gap: 10px; }
421
+ .kpi-n { font-size: 29px; font-weight: 700; letter-spacing: -0.028em; line-height: 1.05; font-variant-numeric: tabular-nums; }
422
+ .kpi-delta { font-size: 12px; font-weight: 650; display: inline-flex; align-items: center; gap: 5px; }
423
+ .kpi-delta.up { color: var(--d-delta-up); }
424
+ .kpi-delta.down { color: var(--d-crit); }
425
+ .kpi-delta.flat { color: var(--d-ink-3); }
426
+ .kpi-delta-sub { color: var(--d-ink-3); font-weight: 400; }
427
+ .kpi-sub { font-size: 12px; color: var(--d-ink-3); }
428
+ .spark { width: 120px; height: 32px; display: block; }
429
+
430
+ /* ============================ panels ============================ */
431
+
432
+ .grid { display: grid; gap: 16px; }
433
+ @media (min-width: 1160px) { .grid-2 { grid-template-columns: 1.55fr 1fr; } }
434
+ @media (min-width: 1160px) { .grid-3 { grid-template-columns: 1fr 1fr 1fr; } }
435
+ @media (min-width: 820px) and (max-width: 1159px) { .grid-3 { grid-template-columns: 1fr 1fr; } }
436
+
437
+ .panel {
438
+ background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius);
439
+ box-shadow: var(--d-shadow); overflow: hidden; display: flex; flex-direction: column;
440
+ }
441
+ .panel-head {
442
+ padding: 13px 17px; border-bottom: 1px solid var(--d-rule);
443
+ display: flex; align-items: center; justify-content: space-between; gap: 12px;
444
+ background: var(--d-surface);
445
+ }
446
+ .panel-head h2 { font-size: 13.5px; font-weight: 680; letter-spacing: -0.005em; margin: 0; display: flex; gap: 8px; align-items: baseline; }
447
+ .panel-head .hint { font-size: 11.5px; color: var(--d-ink-3); font-weight: 500; }
448
+ .hint-link { font-size: 12px; color: var(--d-accent); text-decoration: none; font-weight: 600; }
449
+ .hint-link:hover { text-decoration: underline; }
450
+ .panel-body { padding: 15px 17px; }
451
+ .panel-body.flush { padding: 0; }
452
+ .split { display: grid; gap: 16px; align-items: start; }
453
+ @media (min-width: 1000px) { .split { grid-template-columns: 340px 1fr; } }
454
+ .panel-form { position: sticky; top: 86px; }
455
+
456
+ /* ============================ charts ============================ */
457
+
458
+ .chart-holder { position: relative; }
459
+ .chart-svg { display: block; width: 100%; height: auto; }
460
+ .axis-label { font-size: 10.5px; font-family: var(--d-ui); font-variant-numeric: tabular-nums; }
461
+ .chart-tip {
462
+ position: absolute; top: 4px; transform: translateX(-50%);
463
+ background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
464
+ box-shadow: var(--d-shadow); padding: 8px 11px; pointer-events: none; min-width: 116px;
465
+ font-size: 12.5px;
466
+ }
467
+ .tip-date { font-weight: 700; margin-bottom: 3px; font-size: 12px; }
468
+ .tip-row { display: flex; align-items: center; gap: 6px; font-variant-numeric: tabular-nums; }
469
+ .tip-swatch { width: 9px; height: 9px; border-radius: 2px; flex-shrink: 0; }
470
+ .tip-sub { color: var(--d-ink-3); font-size: 11.5px; margin-top: 2px; font-variant-numeric: tabular-nums; }
471
+
472
+ .barlist { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 13px; }
473
+ .bl-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 5px; }
474
+ .bl-link { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; width: 100%; text-decoration: none; color: inherit; }
475
+ .bl-link:hover .bl-label { color: var(--d-accent); }
476
+ .bl-label { font-size: 13px; font-weight: 550; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
477
+ .bl-value { font-size: 12.5px; font-weight: 700; color: var(--d-ink-2); font-variant-numeric: tabular-nums; flex-shrink: 0; }
478
+ .bl-track { height: 7px; background: var(--d-sunk); border-radius: 4px; overflow: hidden; }
479
+ .bl-fill { height: 100%; border-radius: 4px; }
480
+
481
+ .funnel { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 13px; }
482
+ .fn-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 5px; }
483
+ .fn-label { font-size: 13px; font-weight: 550; }
484
+ .fn-value { font-size: 13px; font-weight: 700; font-variant-numeric: tabular-nums; }
485
+ .fn-track { height: 9px; background: var(--d-sunk); border-radius: 5px; overflow: hidden; }
486
+ .fn-fill { height: 100%; border-radius: 5px; }
487
+
488
+ /* ============================ rows ============================ */
489
+
490
+ .row {
491
+ display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 14px;
492
+ align-items: start; padding: 12px 17px; border-bottom: 1px solid var(--d-rule-2);
493
+ }
494
+ .row:last-child { border-bottom: 0; }
495
+ .row:hover { background: var(--d-surface-2); }
496
+ .row-main a.t { font-size: 14px; font-weight: 620; color: var(--d-ink); text-decoration: none; letter-spacing: -0.005em; }
497
+ .row-main a.t:hover { color: var(--d-accent); }
498
+ .row-sub { font-size: 12.2px; color: var(--d-ink-3); margin-top: 3px; display: flex; flex-wrap: wrap; gap: 3px 12px; align-items: center; }
499
+ .row-right { display: flex; gap: 7px; align-items: center; flex-shrink: 0; flex-wrap: wrap; justify-content: flex-end; }
500
+
501
+ /* ============================ chips ============================ */
502
+
503
+ .chip {
504
+ display: inline-flex; align-items: center; gap: 4px;
505
+ font-size: 10.6px; font-weight: 700; letter-spacing: 0.045em; text-transform: uppercase;
506
+ padding: 3px 8px; border-radius: 100px; border: 1px solid transparent; white-space: nowrap;
507
+ }
508
+ .chips { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
509
+ .chip-review { background: var(--d-warn-soft); color: var(--d-warn); border-color: var(--d-warn); }
510
+ .chip-writing { background: var(--d-sunk); color: var(--d-ink-3); border-color: var(--d-rule); }
511
+ .chip-approved { background: var(--d-accent-soft); color: var(--d-accent-ink); border-color: var(--d-accent); }
512
+ .chip-live { background: var(--d-good-soft); color: var(--d-good); border-color: var(--d-good); }
513
+ .chip-blocked { background: var(--d-crit-soft); color: var(--d-crit); border-color: var(--d-crit); }
514
+ .chip-brand { background: transparent; color: var(--d-ink-3); border-color: var(--d-rule); text-transform: none; letter-spacing: 0; font-weight: 600; }
515
+
516
+ .blockers { margin: 6px 0 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 3px 14px; }
517
+ .blockers li { font-size: 12px; color: var(--d-crit); }
518
+ .blockers li::before { content: '✕ '; font-weight: 700; }
519
+
520
+ /* ============================ tables ============================ */
521
+
522
+ .tw { overflow-x: auto; }
523
+ table.tbl { width: 100%; min-width: 560px; border-collapse: collapse; font-size: 13.2px; }
524
+ .tbl th, .tbl td { text-align: left; padding: 11px 17px; border-bottom: 1px solid var(--d-rule-2); vertical-align: top; }
525
+ .tbl th {
526
+ font-size: 10.6px; font-weight: 700; letter-spacing: 0.09em; text-transform: uppercase;
527
+ color: var(--d-ink-3); background: var(--d-sunk); white-space: nowrap; vertical-align: middle;
528
+ position: sticky; top: 0; z-index: 1;
529
+ }
530
+ .tbl tbody tr:last-child td { border-bottom: 0; }
531
+ .tbl tbody tr:hover { background: var(--d-surface-2); }
532
+ .tbl tbody tr.is-selected { background: var(--d-accent-soft); }
533
+ .tbl td.num, .tbl th.num { font-variant-numeric: tabular-nums; text-align: right; white-space: nowrap; }
534
+ .tbl a { text-decoration: none; font-weight: 620; color: var(--d-ink); }
535
+ .tbl a:hover { color: var(--d-accent); }
536
+ .col-check { width: 34px; padding-right: 0; }
537
+ .col-narrow { width: 1%; white-space: nowrap; }
538
+ .col-title { min-width: 280px; }
539
+ .row-title { font-size: 13.8px; font-weight: 640; color: var(--d-ink); text-decoration: none; display: inline-flex; gap: 7px; align-items: center; letter-spacing: -0.005em; }
540
+ a.row-title:hover,
541
+ button.row-title:hover { color: var(--d-accent); }
542
+ button.row-title {
543
+ border: 0; background: none; padding: 0; cursor: pointer; font: inherit; text-align: left;
544
+ }
545
+ .cell-sub { display: block; font-size: 12px; color: var(--d-ink-3); margin-top: 2px; }
546
+ .cell-lbl { display: block; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--d-ink-3); font-weight: 650; }
547
+ .mini-track { height: 6px; background: var(--d-sunk); border-radius: 3px; overflow: hidden; min-width: 80px; flex: 1; }
548
+ .mini-fill { height: 100%; border-radius: 3px; background: var(--viz-1); display: block; }
549
+ .bar-cell { display: flex; align-items: center; gap: 10px; }
550
+ .bar-cell-n { font-variant-numeric: tabular-nums; min-width: 46px; font-weight: 600; }
551
+
552
+ /* WordPress-style hover actions: present when needed, quiet when not */
553
+ .row-actions { display: flex; flex-wrap: wrap; gap: 2px 10px; margin-top: 5px; opacity: 0; transition: opacity 0.12s ease; }
554
+ tr:hover .row-actions, tr:focus-within .row-actions, .row-actions:focus-within { opacity: 1; }
555
+ @media (hover: none) { .row-actions { opacity: 1; } }
556
+ .row-actions button, .row-actions a {
557
+ font: inherit; font-size: 12.2px; font-weight: 550; border: 0; background: none; padding: 0;
558
+ color: var(--d-accent); cursor: pointer; text-decoration: none;
559
+ }
560
+ .row-actions button:hover, .row-actions a:hover { text-decoration: underline; }
561
+ .row-actions button:disabled { color: var(--d-ink-3); cursor: not-allowed; text-decoration: none; }
562
+ .row-actions .danger { color: var(--d-crit); }
563
+
564
+ .list { display: flex; flex-direction: column; }
565
+ .list-bar {
566
+ display: flex; align-items: center; justify-content: space-between; gap: 12px;
567
+ padding: 11px 17px; border-bottom: 1px solid var(--d-rule); background: var(--d-surface-2); flex-wrap: wrap;
568
+ }
569
+ .bulk { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
570
+
571
+ .quick-row td { background: var(--d-sunk); }
572
+ .quick { display: flex; flex-direction: column; gap: 12px; padding: 4px 0 8px; }
573
+ .quick-head { margin: 0; font-size: 11.5px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--d-ink-3); }
574
+ .quick-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); }
575
+ .quick-grid label, .fld-row { display: flex; flex-direction: column; gap: 5px; }
576
+ .quick-grid label > span, .fld-lbl { font-size: 11.6px; font-weight: 650; color: var(--d-ink-2); }
577
+ .quick-grid .span-2 { grid-column: span 2; }
578
+ .inline-form { display: flex; gap: 7px; align-items: center; margin-top: 8px; flex-wrap: wrap; }
579
+
580
+ /* ============================ tabs + filters ============================ */
581
+
582
+ .tabs { display: flex; gap: 2px; flex-wrap: wrap; border-bottom: 1px solid var(--d-rule); }
583
+ .tabs a,
584
+ .tabs button {
585
+ display: inline-flex; align-items: center; gap: 7px; padding: 9px 13px;
586
+ font-size: 13px; font-weight: 600; color: var(--d-ink-3); text-decoration: none;
587
+ border-bottom: 2px solid transparent; margin-bottom: -1px;
588
+ border-top: 0; border-left: 0; border-right: 0; background: none; cursor: pointer; font: inherit;
589
+ }
590
+ .tabs a:hover,
591
+ .tabs button:hover { color: var(--d-ink); }
592
+ .tabs a[aria-current='true'],
593
+ .tabs button[aria-current='true'] { color: var(--d-accent-ink); border-bottom-color: var(--d-accent); }
594
+ .tab-count {
595
+ font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums;
596
+ background: var(--d-sunk); color: var(--d-ink-3); border-radius: 100px; padding: 1px 7px;
597
+ }
598
+ .tabs a[aria-current='true'] .tab-count,
599
+ .tabs button[aria-current='true'] .tab-count { background: var(--d-accent-soft); color: var(--d-accent-ink); }
600
+
601
+ .filterbar { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
602
+ .filterbar .fld { min-width: 180px; }
603
+ .pager { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
604
+
605
+ /* ============================ forms ============================ */
606
+
607
+ .fld {
608
+ font: inherit; font-size: 13.2px; padding: 8px 11px; border-radius: var(--d-radius-sm);
609
+ border: 1px solid var(--d-rule); background: var(--d-surface); color: var(--d-ink);
610
+ width: 100%; max-width: 100%;
611
+ }
612
+ .fld:focus { outline: none; border-color: var(--d-accent); box-shadow: var(--d-ring); }
613
+ .fld:disabled { background: var(--d-sunk); color: var(--d-ink-3); cursor: not-allowed; }
614
+ .fld-sm { font-size: 12.4px; padding: 5px 9px; width: auto; }
615
+ .fld-inline { width: auto; min-width: 160px; }
616
+ select.fld {
617
+ width: auto;
618
+ min-width: 140px;
619
+ padding-right: 2rem;
620
+ appearance: none;
621
+ -webkit-appearance: none;
622
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1.5 1.75L6 6.25L10.5 1.75' stroke='%23666' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
623
+ background-repeat: no-repeat;
624
+ background-position: right 0.7rem center;
625
+ background-size: 12px 8px;
626
+ }
627
+ textarea.fld { resize: vertical; line-height: 1.55; }
628
+ .fld-lbl em { font-style: normal; font-weight: 450; color: var(--d-ink-3); }
629
+ .fld.is-invalid { border-color: var(--d-crit); box-shadow: 0 0 0 3px color-mix(in srgb, var(--d-crit) 18%, transparent); }
630
+ .fld-error { display: block; margin-top: 6px; font-size: 12.4px; color: var(--d-crit); }
631
+ .fld-hint { display: block; margin-top: 6px; font-size: 12.2px; color: var(--d-ink-3); }
632
+ .fld-checks { display: flex; flex-direction: column; gap: 7px; font-size: 13px; color: var(--d-ink-2); }
633
+ .fld-checks label { display: flex; gap: 8px; align-items: center; }
634
+ .stack { display: flex; flex-direction: column; gap: 12px; }
635
+
636
+ .form-error {
637
+ margin: 0; font-size: 12.8px; color: var(--d-crit); background: var(--d-crit-soft);
638
+ border: 1px solid var(--d-crit); border-radius: var(--d-radius-sm); padding: 9px 12px;
639
+ }
640
+ .form-ok {
641
+ margin: 0; font-size: 12.8px; color: var(--d-good); background: var(--d-good-soft);
642
+ border: 1px solid var(--d-good); border-radius: var(--d-radius-sm); padding: 9px 12px;
643
+ }
644
+ .form-ok.inline { padding: 4px 9px; font-size: 12px; }
645
+
646
+ .dashboard-toast-container {
647
+ top: 18px !important;
648
+ right: 22px !important;
649
+ width: min(360px, calc(100vw - 32px));
650
+ }
651
+
652
+ .dashboard-toast.Toastify__toast--success {
653
+ font-family: inherit;
654
+ font-size: 13px;
655
+ font-weight: 650;
656
+ border-radius: var(--d-radius);
657
+ box-shadow: var(--d-shadow-lg);
658
+ }
659
+
660
+ .banner {
661
+ display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap;
662
+ padding: 12px 16px; border-radius: var(--d-radius); font-size: 13px;
663
+ }
664
+ .banner-warn { background: var(--d-warn-soft); border: 1px solid var(--d-warn); color: var(--d-ink-2); }
665
+
666
+ .d-empty { padding: 22px 18px; color: var(--d-ink-3); font-size: 13px; margin: 0; }
667
+ .note { font-size: 12px; color: var(--d-ink-3); margin: 0; }
668
+ .explain {
669
+ font-size: 12.6px; color: var(--d-ink-3); background: var(--d-sunk);
670
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius); padding: 11px 14px; margin: 0;
671
+ }
672
+ .explain b { color: var(--d-ink-2); font-weight: 650; }
673
+
674
+ .settings { border: 0; padding: 0; margin: 0; min-width: 0; display: flex; flex-direction: column; gap: 16px; }
675
+ .save-bar {
676
+ position: sticky; bottom: 0; display: flex; align-items: center; justify-content: space-between;
677
+ gap: 12px; background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius);
678
+ padding: 11px 16px; box-shadow: var(--d-shadow-lg); flex-wrap: wrap;
679
+ }
680
+ .colour-row { display: flex; gap: 8px; align-items: center; }
681
+ .colour { width: 42px; height: 34px; padding: 2px; border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); background: var(--d-surface); cursor: pointer; }
682
+ .role-grid { display: flex; flex-direction: column; gap: 8px; }
683
+ .role-row { display: grid; grid-template-columns: minmax(90px, 1fr) auto; gap: 8px 12px; align-items: center; font-size: 13px; }
684
+ .role-row .note { grid-column: 1 / -1; }
685
+
686
+ /* ============================ post editor ============================ */
687
+
688
+ .skip-link {
689
+ position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden;
690
+ }
691
+ .skip-link:focus {
692
+ position: fixed; left: 12px; top: 12px; z-index: 100; width: auto; height: auto; overflow: visible;
693
+ padding: 8px 14px; background: var(--d-accent); color: #fff; border-radius: var(--d-radius-sm);
694
+ font-size: 13px; font-weight: 650; text-decoration: none; box-shadow: var(--d-shadow);
695
+ }
696
+ .screen-reader {
697
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
698
+ clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
699
+ }
700
+ .ed-title-wrap { display: contents; }
701
+
702
+ .ed-wp-header {
703
+ display: flex; align-items: center; justify-content: space-between; gap: 12px;
704
+ margin-bottom: 4px; font-size: 13px; color: var(--d-ink-3);
705
+ }
706
+ .ed-wp-header-meta .is-dirty { color: var(--d-warn); font-weight: 650; }
707
+
708
+ .ed-bar {
709
+ position: sticky; top: 8px; z-index: 20; display: flex; align-items: center;
710
+ justify-content: space-between; gap: 12px; flex-wrap: wrap;
711
+ background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius);
712
+ padding: 9px 13px; box-shadow: var(--d-shadow);
713
+ }
714
+ .ed-bar-left, .ed-bar-right { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
715
+ .ed-bar-meta { font-size: 12.2px; color: var(--d-ink-3); }
716
+ .ed-bar-meta .is-dirty { color: var(--d-warn); font-weight: 650; }
717
+ .ed-error { margin-top: -6px; }
718
+
719
+ .ed-layout { display: grid; gap: 16px; align-items: start; }
720
+ @media (min-width: 1100px) { .ed-layout { grid-template-columns: minmax(0, 1fr) 320px; } }
721
+ .ed-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
722
+ .ed-side { display: flex; flex-direction: column; gap: 14px; }
723
+ /* A sticky column, but never a squashed one: without `flex: 0 0 auto` the boxes
724
+ shrink to fit the column and `overflow: hidden` silently eats their content. */
725
+ .ed-side > * { flex: 0 0 auto; }
726
+ @media (min-width: 1100px) { .ed-side { position: sticky; top: 12px; align-self: start; } }
727
+
728
+ .ed-title {
729
+ font: inherit; font-size: 1.7em; font-weight: 600; letter-spacing: -0.02em; line-height: 1.25;
730
+ padding: 8px 0 12px; border: 0; border-radius: 0;
731
+ background: transparent; color: var(--d-ink); width: 100%; box-shadow: none;
732
+ }
733
+ .ed-title:focus { outline: none; box-shadow: none; border-bottom: 1px solid var(--d-accent); }
734
+ .ed-title::placeholder { color: var(--d-ink-3); font-weight: 600; }
735
+
736
+ .ed-permalink { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12.6px; color: var(--d-ink-3); padding: 0 3px; }
737
+ .ed-permalink .lbl { font-weight: 650; color: var(--d-ink-2); }
738
+ .ed-permalink-value { color: var(--d-accent-ink); }
739
+
740
+ /* `overflow: clip` (not `hidden`) keeps rounded corners flush with the card
741
+ border without creating a scroll container that would trap the sticky toolbar. */
742
+ .ed {
743
+ border: 1px solid var(--d-rule);
744
+ border-radius: var(--d-radius);
745
+ background: var(--d-surface);
746
+ box-shadow: var(--d-shadow);
747
+ overflow: clip;
748
+ }
749
+ .ed-chrome {
750
+ border-radius: var(--d-radius) var(--d-radius) 0 0;
751
+ background: var(--d-surface-2);
752
+ overflow: clip;
753
+ }
754
+ /* Stick the Visual/Code + formatting bar under the dashboard top bar while editing */
755
+ .ed.is-active .ed-chrome {
756
+ position: sticky;
757
+ top: 64px;
758
+ z-index: 25;
759
+ box-shadow: 0 8px 20px -14px rgba(16, 18, 32, 0.45);
760
+ border-bottom: 1px solid var(--d-rule);
761
+ border-radius: 0; /* flush under the sticky top bar when active */
762
+ }
763
+ .ed-toolbar {
764
+ display: flex; align-items: center; gap: 3px; flex-wrap: wrap;
765
+ padding: 7px 9px; border-bottom: 1px solid var(--d-rule); background: var(--d-surface-2);
766
+ border-radius: 0;
767
+ }
768
+ .tb-btn {
769
+ font: inherit; font-size: 13px; min-width: 30px; height: 30px; padding: 0 7px;
770
+ border: 1px solid transparent; border-radius: var(--d-radius-sm); background: transparent;
771
+ color: var(--d-ink-2); cursor: pointer; display: inline-flex; align-items: center; justify-content: center;
772
+ }
773
+ .tb-btn:hover { background: var(--d-sunk); color: var(--d-ink); }
774
+ .tb-btn.is-on { background: var(--d-accent-soft); color: var(--d-accent-ink); border-color: var(--d-accent); }
775
+ .tb-select { font: inherit; font-size: 12.6px; padding: 5px 8px; border-radius: var(--d-radius-sm); border: 1px solid var(--d-rule); background: var(--d-surface); color: var(--d-ink); }
776
+ .tb-sep { width: 1px; height: 18px; background: var(--d-rule); margin: 0 5px; }
777
+ .tb-count { margin-left: auto; font-size: 11.6px; color: var(--d-ink-3); font-variant-numeric: tabular-nums; }
778
+
779
+ .ed-link { border-bottom: 1px solid var(--d-rule); background: var(--d-sunk); padding: 11px 13px; display: flex; flex-direction: column; gap: 9px; }
780
+ .ed-link-popover {
781
+ position: fixed; z-index: 10000; width: min(360px, calc(100vw - 16px));
782
+ background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius);
783
+ box-shadow: 0 12px 40px rgba(16, 18, 32, 0.22); padding: 12px 13px;
784
+ display: flex; flex-direction: column; gap: 10px;
785
+ max-height: min(420px, calc(100vh - 24px)); overflow-y: auto;
786
+ scrollbar-width: none;
787
+ -ms-overflow-style: none;
788
+ }
789
+ .ed-link-popover::-webkit-scrollbar { display: none; }
790
+ .ed-link-popover::before {
791
+ content: ''; position: absolute; top: -6px; left: 18px; width: 10px; height: 10px;
792
+ background: var(--d-surface); border-left: 1px solid var(--d-rule); border-top: 1px solid var(--d-rule);
793
+ transform: rotate(45deg);
794
+ }
795
+ .ed-link-selection {
796
+ margin: 0; font-size: 12.5px; color: var(--d-ink-2); font-style: italic;
797
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
798
+ }
799
+ .ed-link-actions { display: flex; gap: 12px; justify-content: flex-end; }
800
+ .ed-link-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
801
+ .ed-link-row .fld { flex: 1; min-width: 190px; }
802
+ .ed-link-tab { display: flex; gap: 6px; align-items: center; font-size: 12.5px; color: var(--d-ink-2); white-space: nowrap; }
803
+ .ed-link-hits {
804
+ list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px;
805
+ max-height: 200px; overflow-y: auto;
806
+ scrollbar-width: none;
807
+ -ms-overflow-style: none;
808
+ }
809
+ .ed-link-hits::-webkit-scrollbar { display: none; }
810
+ .ed-link-hits button {
811
+ font: inherit; width: 100%; text-align: left; border: 0; background: var(--d-surface);
812
+ border-radius: var(--d-radius-sm); padding: 7px 10px; cursor: pointer; display: flex;
813
+ justify-content: space-between; gap: 12px; align-items: baseline; color: var(--d-ink);
814
+ }
815
+ .ed-link-hits button:hover { background: var(--d-accent-soft); }
816
+ .hit-label { font-size: 13px; font-weight: 600; }
817
+ .hit-path { font-size: 11.6px; color: var(--d-ink-3); }
818
+ .ed-link-note { margin: 0; font-size: 11.8px; color: var(--d-ink-3); }
819
+
820
+ .ed-surface { position: relative; border-radius: 0 0 var(--d-radius) var(--d-radius); overflow: clip; }
821
+ .ed-placeholder { position: absolute; top: 22px; left: 24px; color: var(--d-ink-3); pointer-events: none; font-size: 16.5px; }
822
+ .ed-input { padding: 20px 24px 48px; min-height: 420px; outline: none; }
823
+ .ed-skeleton {
824
+ min-height: 420px;
825
+ background: linear-gradient(90deg, var(--d-sunk) 0%, var(--d-surface-2) 50%, var(--d-sunk) 100%);
826
+ background-size: 200% 100%;
827
+ animation: ed-shimmer 1.2s ease-in-out infinite;
828
+ }
829
+ .ed-mode-skeleton {
830
+ display: inline-block; width: 64px; height: 28px; border-radius: var(--d-radius-sm);
831
+ background: var(--d-sunk);
832
+ }
833
+ @keyframes ed-shimmer {
834
+ 0% { background-position: 100% 0; }
835
+ 100% { background-position: -100% 0; }
836
+ }
837
+ @media (prefers-reduced-motion: reduce) {
838
+ .ed-skeleton { animation: none; background: var(--d-sunk); }
839
+ }
840
+
841
+ /* the writing surface reads like the article, not like a form field */
842
+ .ed-input.prose { font-family: var(--d-read); font-size: 16.5px; line-height: 1.68; color: var(--d-ink); }
843
+ .ed-input.prose > * { margin: 0 0 1.05em; }
844
+ .ed-input.prose h1 { font-size: 28px; font-weight: 700; letter-spacing: -0.025em; margin: 1.5em 0 0.5em; line-height: 1.2; }
845
+ .ed-input.prose h2 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; margin: 1.5em 0 0.5em; line-height: 1.25; }
846
+ .ed-input.prose h3 { font-size: 19.5px; font-weight: 700; letter-spacing: -0.015em; margin: 1.4em 0 0.45em; }
847
+ .ed-input.prose h4 { font-size: 17px; font-weight: 700; margin: 1.3em 0 0.4em; }
848
+ .ed-input.prose blockquote {
849
+ margin: 1.3em 0; padding: 4px 0 4px 18px; border-left: 3px solid var(--d-accent);
850
+ color: var(--d-ink-2); font-style: italic;
851
+ }
852
+ .ed-input.prose ul, .ed-input.prose ol { padding-left: 1.4em; }
853
+ .ed-input.prose li { margin-bottom: 0.35em; }
854
+ .ed-input.prose a { color: var(--d-accent); text-decoration: underline; text-underline-offset: 2px; }
855
+ .ed-input.prose a[data-link-type='internal'] { text-decoration-style: dotted; }
856
+ .ed-input.prose code { font-family: var(--d-mono); font-size: 0.88em; background: var(--d-sunk); padding: 1px 5px; border-radius: 4px; }
857
+ .ed-input.prose hr { border: 0; border-top: 2px solid var(--d-rule); margin: 1.8em 0; }
858
+ .ed-input.prose figure.ed-figure { margin: 1.5em 0; border-radius: var(--d-radius); overflow: hidden; border: 1px solid var(--d-rule); background: var(--d-sunk); }
859
+ .ed-input.prose figure.ed-figure img { display: block; width: 100%; height: auto; }
860
+ .ed-input.prose figure.ed-figure figcaption { font-family: var(--d-ui); font-size: 12.2px; color: var(--d-ink-3); padding: 8px 12px; }
861
+
862
+ /* sidebar boxes */
863
+ .box { background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius); box-shadow: var(--d-shadow); overflow: hidden; }
864
+ .box-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var(--d-rule); background: var(--d-surface-2); }
865
+ .box-head h3 { margin: 0; font-size: 12.4px; font-weight: 700; letter-spacing: 0.045em; text-transform: uppercase; color: var(--d-ink-2); }
866
+ .box-hint { font-size: 11.4px; color: var(--d-ink-3); }
867
+ .box-hint.warn { color: var(--d-warn); font-weight: 650; }
868
+ .box-body { padding: 13px 14px; }
869
+ .box-publish { border-color: var(--d-accent); }
870
+ .box-publish .box-head { background: var(--d-accent-soft); border-bottom-color: var(--d-accent); }
871
+
872
+ .facts { margin: 0; display: flex; flex-direction: column; gap: 6px; }
873
+ .facts > div { display: flex; justify-content: space-between; gap: 12px; font-size: 12.6px; }
874
+ .facts dt { color: var(--d-ink-3); margin: 0; }
875
+ .facts dd { margin: 0; font-weight: 620; text-align: right; }
876
+
877
+ .checklist { background: var(--d-crit-soft); border: 1px solid var(--d-crit); border-radius: var(--d-radius-sm); padding: 9px 12px; }
878
+ .checklist-head { margin: 0 0 5px; font-size: 11.6px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--d-crit); }
879
+ .checklist ul { margin: 0; padding-left: 16px; font-size: 12.4px; color: var(--d-ink-2); }
880
+ .checklist-ok { margin: 0; font-size: 12.4px; color: var(--d-good); font-weight: 600; }
881
+ .checklist-ok::before { content: '✓ '; font-weight: 700; }
882
+
883
+ .pick-list { display: flex; flex-direction: column; gap: 4px; max-height: 190px; overflow-y: auto; }
884
+ .pick-list-auto { max-height: none; overflow: visible; }
885
+ .pick-list-compact { max-height: 140px; }
886
+ .pick-row { display: flex; gap: 9px; align-items: center; font-size: 13px; padding: 3px 2px; cursor: pointer; }
887
+ .pick-row:hover { color: var(--d-accent-ink); }
888
+
889
+ .tokens { display: flex; flex-wrap: wrap; gap: 6px; }
890
+ .token {
891
+ display: inline-flex; align-items: center; gap: 6px; font-size: 12.2px; font-weight: 560;
892
+ background: var(--d-sunk); border: 1px solid var(--d-rule); border-radius: 100px; padding: 3px 5px 3px 10px;
893
+ }
894
+ .token-new { background: var(--d-accent-soft); border-color: var(--d-accent); color: var(--d-accent-ink); }
895
+ .token button { font: inherit; border: 0; background: none; cursor: pointer; color: var(--d-ink-3); line-height: 1; padding: 0 3px; }
896
+ .token button:hover { color: var(--d-crit); }
897
+
898
+ .thumb-row { display: flex; gap: 10px; align-items: center; }
899
+ .thumb { width: 62px; height: 46px; object-fit: cover; border-radius: var(--d-radius-sm); border: 1px solid var(--d-rule); }
900
+ .feat { width: 100%; border-radius: var(--d-radius-sm); border: 1px solid var(--d-rule); display: block; aspect-ratio: 4 / 3; object-fit: cover; }
901
+ .feat-alt { margin-top: 2px; }
902
+ .feat-alt .fld { resize: vertical; min-height: 56px; }
903
+ .feat-alt-foot { margin: 0; }
904
+ .fld-em { font-style: normal; font-weight: 500; color: var(--d-ink-3); font-size: 11.5px; }
905
+
906
+ /* drop targets */
907
+ .drop-target.is-dragging { outline: 2px dashed var(--d-accent); outline-offset: -6px; background: var(--d-accent-soft); }
908
+ .dropzone-cta {
909
+ font: inherit; width: 100%; display: flex; flex-direction: column; align-items: center; gap: 4px;
910
+ padding: 20px 14px; border: 1.5px dashed var(--d-rule); border-radius: var(--d-radius-sm);
911
+ background: var(--d-surface-2); color: var(--d-ink-2); cursor: pointer; text-align: center;
912
+ font-size: 12.6px; font-weight: 550;
913
+ }
914
+ .dropzone-cta:hover:not(:disabled) { border-color: var(--d-accent); color: var(--d-accent-ink); background: var(--d-accent-soft); }
915
+ .dropzone-cta:disabled { opacity: 0.6; cursor: progress; }
916
+ .dropzone-icon { font-size: 17px; }
917
+
918
+ /* search-result preview */
919
+ .serp { background: var(--d-sunk); border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); padding: 11px 13px; }
920
+ .serp-url { font-size: 11.8px; color: var(--d-ink-3); }
921
+ .serp-title { font-size: 16px; color: var(--d-accent); margin-top: 3px; line-height: 1.3; }
922
+ .serp-desc { font-size: 12.6px; color: var(--d-ink-2); margin-top: 3px; }
923
+
924
+ /* WordPress-parity editor extras */
925
+ .ed-mode-tabs {
926
+ display: flex; gap: 0; border-bottom: 1px solid var(--d-rule);
927
+ background: var(--d-surface-2); border-radius: inherit; padding: 0 8px;
928
+ }
929
+ .ed-mode-tabs button {
930
+ font: inherit; font-size: 12.5px; font-weight: 600; border: 0; background: transparent;
931
+ color: var(--d-ink-3); padding: 9px 14px; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px;
932
+ }
933
+ .ed-mode-tabs button:hover { color: var(--d-ink); }
934
+ .ed-mode-tabs button.is-on { color: var(--d-ink); border-bottom-color: var(--d-accent); }
935
+ .ed .ed-toolbar { border-radius: 0; }
936
+ .tb-media {
937
+ font-weight: 650 !important; min-width: auto !important; padding: 0 10px !important;
938
+ background: var(--d-accent-soft) !important; color: var(--d-accent-ink) !important; border-color: var(--d-accent) !important;
939
+ }
940
+ .tb-color { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; color: var(--d-ink-2); cursor: pointer; padding: 0 6px; height: 30px; }
941
+ .tb-color input { width: 22px; height: 22px; padding: 0; border: 0; background: transparent; cursor: pointer; }
942
+ .ed-code {
943
+ display: block; width: 100%; min-height: 420px; padding: 16px 18px; border: 0; resize: vertical;
944
+ background: #1e1f2b; color: #e8e8f0; font-size: 13px; line-height: 1.5; outline: none;
945
+ border-radius: 0 0 var(--d-radius) var(--d-radius);
946
+ }
947
+ .ed-chars {
948
+ display: flex; flex-wrap: wrap; gap: 4px; padding: 8px 10px; border-bottom: 1px solid var(--d-rule); background: var(--d-sunk);
949
+ }
950
+ .ed-chars button {
951
+ font: inherit; min-width: 28px; height: 28px; border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
952
+ background: var(--d-surface); cursor: pointer; color: var(--d-ink);
953
+ }
954
+ .ed-chars button:hover { border-color: var(--d-accent); }
955
+
956
+ .wp-facts { margin: 0; display: flex; flex-direction: column; gap: 6px; }
957
+ .wp-facts .fact-row { display: flex; gap: 6px; align-items: baseline; font-size: 12.6px; flex-wrap: wrap; }
958
+ .wp-facts .fact-lbl { color: var(--d-ink-3); min-width: 72px; }
959
+ .wp-facts .fact-val { font-weight: 550; display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
960
+ .fact-edit { padding: 4px 0 8px 78px; }
961
+ .fld-sm { max-width: 180px; padding: 5px 8px; font-size: 12.5px; }
962
+ .linkish {
963
+ font: inherit; border: 0; background: transparent; color: var(--d-accent); cursor: pointer;
964
+ padding: 0; text-decoration: underline; text-underline-offset: 2px; font-size: 12.4px;
965
+ }
966
+ .linkish:hover { color: var(--d-accent-ink); }
967
+ .linkish:disabled { opacity: 0.5; cursor: not-allowed; }
968
+ .publish-foot {
969
+ display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap;
970
+ padding-top: 8px; border-top: 1px solid var(--d-rule); margin-top: 4px;
971
+ }
972
+ .publish-foot-left { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
973
+
974
+ .profile-panel { display: flex; flex-direction: column; gap: 18px; }
975
+ .profile-hero { display: flex; align-items: center; gap: 14px; }
976
+ .profile-avatar-img {
977
+ width: 52px; height: 52px; border-radius: 50%; object-fit: cover;
978
+ border: 1px solid var(--d-accent);
979
+ }
980
+ .profile-avatar {
981
+ width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center;
982
+ background: var(--d-accent-soft); color: var(--d-accent-ink); font-size: 20px; font-weight: 800;
983
+ border: 1px solid var(--d-accent);
984
+ }
985
+ .profile-name { margin: 0; font-size: 18px; font-weight: 700; color: var(--d-ink); }
986
+ .profile-email { margin: 4px 0 0; font-size: 13px; color: var(--d-ink-3); }
987
+ .profile-facts { max-width: 360px; }
988
+ .profile-roles h3 { margin: 0 0 8px; font-size: 12.4px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--d-ink-3); }
989
+ .profile-role-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
990
+ .profile-role-list li {
991
+ display: flex; align-items: center; justify-content: space-between; gap: 12px;
992
+ padding: 8px 10px; border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); background: var(--d-sunk);
993
+ font-size: 13px;
994
+ }
995
+ .profile-role-brand { font-weight: 600; color: var(--d-ink); }
996
+ .profile-role-level { font-size: 12px; color: var(--d-ink-3); }
997
+
998
+ .profile-logout-top {
999
+ display: inline-flex;
1000
+ align-items: center;
1001
+ gap: 7px;
1002
+ font-weight: 600;
1003
+ color: var(--d-crit);
1004
+ background: color-mix(in srgb, var(--d-crit) 7%, var(--d-surface));
1005
+ border: 1px solid color-mix(in srgb, var(--d-crit) 28%, var(--d-rule));
1006
+ box-shadow: 0 1px 0 color-mix(in srgb, #fff 40%, transparent) inset;
1007
+ transition: background 0.18s ease, border-color 0.18s ease, transform 0.18s ease, box-shadow 0.18s ease;
1008
+ }
1009
+
1010
+ .profile-logout-top:hover:not(:disabled) {
1011
+ background: color-mix(in srgb, var(--d-crit) 12%, var(--d-surface));
1012
+ border-color: color-mix(in srgb, var(--d-crit) 45%, var(--d-rule));
1013
+ transform: translateY(-1px);
1014
+ box-shadow: 0 4px 14px -8px color-mix(in srgb, var(--d-crit) 55%, transparent);
1015
+ }
1016
+
1017
+ .profile-logout-top:active:not(:disabled) {
1018
+ transform: translateY(0);
1019
+ }
1020
+
1021
+ .profile-logout-top:disabled {
1022
+ opacity: 0.65;
1023
+ cursor: not-allowed;
1024
+ }
1025
+
1026
+ .logout-btn-icon {
1027
+ width: 16px;
1028
+ height: 16px;
1029
+ flex-shrink: 0;
1030
+ }
1031
+ .publish-seo-summary { flex-direction: column; align-items: stretch; }
1032
+ .btn-tiny { font-size: 12px; padding: 4px 9px; }
1033
+
1034
+ .seo-summary { display: flex; flex-wrap: wrap; gap: 8px; }
1035
+ .seo-pill {
1036
+ display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600;
1037
+ padding: 5px 10px; border-radius: 999px; border: 1px solid var(--d-rule); background: var(--d-sunk);
1038
+ }
1039
+ .seo-pill-good { border-color: var(--d-good); background: var(--d-good-soft); color: var(--d-good); }
1040
+ .seo-pill-ok { border-color: var(--d-warn); background: var(--d-warn-soft); color: var(--d-warn); }
1041
+ .seo-pill-bad { border-color: var(--d-crit); background: var(--d-crit-soft); color: var(--d-crit); }
1042
+ .seo-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; flex-shrink: 0; }
1043
+ .seo-dot-good { background: var(--d-good); }
1044
+ .seo-dot-ok { background: var(--d-warn); }
1045
+ .seo-dot-bad { background: var(--d-crit); }
1046
+ .seo-analysis { display: flex; flex-direction: column; gap: 12px; }
1047
+ .seo-details { border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); background: var(--d-sunk); padding: 0 12px 10px; }
1048
+ .seo-details summary { cursor: pointer; font-weight: 650; font-size: 13px; padding: 10px 0; list-style: none; }
1049
+ .seo-details summary::-webkit-details-marker { display: none; }
1050
+ .seo-advanced { border-top: 1px solid var(--d-rule); padding-top: 8px; }
1051
+ .seo-advanced summary { cursor: pointer; font-weight: 650; font-size: 13px; color: var(--d-ink-2); }
1052
+ .seo-group { margin-top: 8px; }
1053
+ .seo-group-title { margin: 0 0 6px; font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--d-ink-3); }
1054
+ .seo-checks { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
1055
+ .seo-checks li { display: flex; gap: 8px; align-items: flex-start; font-size: 12.6px; }
1056
+ .seo-checks strong { display: block; font-size: 12.8px; }
1057
+ .seo-checks span { display: block; color: var(--d-ink-2); margin-top: 1px; }
1058
+
1059
+ /* Yoast SEO metabox — uses dashboard tokens */
1060
+ .yoast-box { overflow: hidden; }
1061
+ .yoast-box .box-body { padding: 0; }
1062
+ .yoast-tabs {
1063
+ display: flex; flex-wrap: wrap; gap: 0; border-bottom: 1px solid var(--d-rule);
1064
+ background: var(--d-surface-2); padding: 0 8px;
1065
+ }
1066
+ .yoast-tab {
1067
+ font: inherit; font-size: 12.5px; font-weight: 600; color: var(--d-ink-3);
1068
+ display: inline-flex; align-items: center; gap: 6px;
1069
+ padding: 9px 14px; border: 0; border-bottom: 2px solid transparent;
1070
+ background: transparent; cursor: pointer; margin-bottom: -1px;
1071
+ }
1072
+ .yoast-tab:hover { color: var(--d-ink); }
1073
+ .yoast-tab.is-active { color: var(--d-ink); border-bottom-color: var(--d-accent); }
1074
+ .yoast-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; flex-shrink: 0; }
1075
+ .yoast-dot-good { background: var(--d-good); }
1076
+ .yoast-dot-ok { background: var(--d-warn); }
1077
+ .yoast-dot-bad { background: var(--d-crit); }
1078
+ .yoast-inside { padding: 14px 16px 16px !important; }
1079
+ .yoast-panel { display: flex; flex-direction: column; gap: 14px; }
1080
+ .yoast-intro { margin: 0; font-size: 13px; color: var(--d-ink-2); line-height: 1.45; }
1081
+ .yoast-section { display: flex; flex-direction: column; gap: 12px; padding-top: 4px; }
1082
+ .yoast-section-title { margin: 0; font-size: 13px; font-weight: 700; color: var(--d-ink); }
1083
+ .yoast-section-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
1084
+ .yoast-analysis { display: flex; flex-direction: column; gap: 10px; }
1085
+ .yoast-schema-preview {
1086
+ background: var(--d-sunk); border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
1087
+ padding: 11px 13px;
1088
+ }
1089
+ .yoast-schema-list { margin: 6px 0 0; padding-left: 18px; font-size: 12.6px; color: var(--d-ink-2); }
1090
+ .yoast-schema-list li + li { margin-top: 6px; }
1091
+ .yoast-social-preview {
1092
+ display: grid; grid-template-columns: 120px 1fr; gap: 12px; align-items: start;
1093
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); overflow: hidden;
1094
+ background: var(--d-sunk);
1095
+ }
1096
+ .yoast-social-img { width: 100%; height: 100%; min-height: 80px; object-fit: cover; display: block; }
1097
+ .yoast-social-img-empty {
1098
+ display: flex; align-items: center; justify-content: center; min-height: 80px;
1099
+ font-size: 11px; color: var(--d-ink-3); background: var(--d-rule);
1100
+ }
1101
+ .yoast-social-text { padding: 10px 12px 12px 0; min-width: 0; }
1102
+ .yoast-social-site { font-size: 10px; font-weight: 700; letter-spacing: 0.04em; color: var(--d-ink-3); }
1103
+ .yoast-social-title {
1104
+ font-size: 14px; font-weight: 650; color: var(--d-ink); margin-top: 4px;
1105
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
1106
+ }
1107
+ .yoast-social-desc {
1108
+ font-size: 12px; color: var(--d-ink-2); margin-top: 3px; line-height: 1.35;
1109
+ display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
1110
+ }
1111
+
1112
+ /* SEO tab — WordPress Yoast parity */
1113
+ .yoast-panel-seo { gap: 16px; }
1114
+ .yoast-field { display: flex; flex-direction: column; gap: 6px; }
1115
+ .yoast-label { font-size: 13px; font-weight: 650; color: var(--d-ink); }
1116
+ .yoast-input { font-size: 13px; }
1117
+ .yoast-help { margin: 0; font-size: 12.4px; line-height: 1.45; color: var(--d-ink-3); }
1118
+ .yoast-learn-more { color: var(--d-accent); text-decoration: none; }
1119
+ .yoast-learn-more:hover { text-decoration: underline; }
1120
+ .yoast-keyphrase-hint {
1121
+ margin: 0; padding: 10px 12px; font-size: 12.8px; color: var(--d-ink-2);
1122
+ background: var(--d-sunk); border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
1123
+ }
1124
+ .yoast-snippet {
1125
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); overflow: hidden;
1126
+ background: var(--d-surface);
1127
+ }
1128
+ .yoast-snippet-head {
1129
+ display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap;
1130
+ padding: 10px 12px; border-bottom: 1px solid var(--d-rule); background: var(--d-surface-2);
1131
+ }
1132
+ .yoast-snippet-toggle {
1133
+ font: inherit; font-size: 13px; font-weight: 700; color: var(--d-ink);
1134
+ border: 0; background: transparent; cursor: pointer; padding: 0;
1135
+ }
1136
+ .yoast-snippet-toggle:hover { color: var(--d-accent-ink); }
1137
+ .yoast-preview-modes { display: inline-flex; border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); overflow: hidden; }
1138
+ .yoast-preview-mode {
1139
+ font: inherit; font-size: 11.8px; font-weight: 600; padding: 4px 10px; border: 0;
1140
+ background: var(--d-surface); color: var(--d-ink-2); cursor: pointer;
1141
+ }
1142
+ .yoast-preview-mode + .yoast-preview-mode { border-left: 1px solid var(--d-rule); }
1143
+ .yoast-preview-mode.is-active { background: var(--d-accent-soft); color: var(--d-accent-ink); }
1144
+ .yoast-serp { margin: 0; border: 0; border-radius: 0; border-bottom: 1px solid var(--d-rule); }
1145
+ .yoast-serp-mobile { max-width: 360px; }
1146
+ .yoast-serp-desktop { max-width: none; }
1147
+ .yoast-serp .serp-title strong, .yoast-serp .serp-desc strong { font-weight: 700; }
1148
+ .yoast-snippet-fields { padding: 12px; gap: 14px !important; }
1149
+ .yoast-field-foot { display: flex; align-items: center; gap: 10px; margin-top: 2px; }
1150
+ .yoast-char-count { font-size: 11.6px; color: var(--d-ink-3); white-space: nowrap; font-variant-numeric: tabular-nums; }
1151
+ .yoast-meter { flex: 1; min-width: 0; }
1152
+ .yoast-meter-track { height: 4px; border-radius: 999px; background: var(--d-rule); overflow: hidden; }
1153
+ .yoast-meter-fill { height: 100%; border-radius: 999px; transition: width 0.15s ease; }
1154
+ .yoast-meter-good { background: var(--d-good); }
1155
+ .yoast-meter-ok { background: var(--d-warn); }
1156
+ .yoast-meter-bad { background: var(--d-crit); }
1157
+ .yoast-slug-row { display: flex; align-items: center; gap: 0; }
1158
+ .yoast-slug-prefix {
1159
+ font-size: 12.6px; color: var(--d-ink-3); padding: 8px 0 8px 10px;
1160
+ border: 1px solid var(--d-rule); border-right: 0; border-radius: var(--d-radius-sm) 0 0 var(--d-radius-sm);
1161
+ background: var(--d-sunk);
1162
+ }
1163
+ .yoast-slug-row .yoast-input { border-radius: 0 var(--d-radius-sm) var(--d-radius-sm) 0; }
1164
+ .yoast-accordion {
1165
+ display: flex; flex-direction: column;
1166
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius);
1167
+ background: var(--d-surface); box-shadow: var(--d-shadow); overflow: hidden;
1168
+ }
1169
+ .yoast-accordion .yoast-collapse {
1170
+ border: 0; border-radius: 0; box-shadow: none; margin: 0;
1171
+ }
1172
+ .yoast-accordion .yoast-collapse + .yoast-collapse { margin-top: 0; border-top: 1px solid var(--d-rule); }
1173
+ .yoast-accordion-note {
1174
+ margin: 0; padding: 10px 14px; font-size: 12.5px; line-height: 1.45; color: var(--d-warn);
1175
+ background: var(--d-warn-soft); border-top: 1px solid var(--d-rule); border-bottom: 1px solid var(--d-rule);
1176
+ }
1177
+
1178
+ /* Shared accordion chevron */
1179
+ .acc-chevron {
1180
+ display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0;
1181
+ width: 20px; height: 20px; color: var(--d-ink-3);
1182
+ transition: transform 0.2s ease, color 0.15s ease;
1183
+ }
1184
+ details[open] > summary .acc-chevron { transform: rotate(180deg); color: var(--d-accent); }
1185
+ .yoast-collapse-summary:hover .acc-chevron,
1186
+ .yoast-result-summary:hover .acc-chevron { color: var(--d-ink-2); }
1187
+ details[open] > summary:hover .acc-chevron { color: var(--d-accent-ink); }
1188
+
1189
+ /* Yoast collapsible sections */
1190
+ .yoast-collapse {
1191
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius);
1192
+ background: var(--d-surface); box-shadow: var(--d-shadow); overflow: hidden;
1193
+ }
1194
+ .yoast-collapse + .yoast-collapse { margin-top: 10px; }
1195
+ .yoast-collapse-summary {
1196
+ display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none;
1197
+ padding: 11px 14px; font-size: 13px; font-weight: 650; letter-spacing: -0.01em;
1198
+ color: var(--d-ink); background: transparent;
1199
+ transition: background 0.12s ease, color 0.12s ease;
1200
+ }
1201
+ .yoast-collapse-summary:hover { background: var(--d-sunk); }
1202
+ .yoast-collapse[open] > .yoast-collapse-summary {
1203
+ background: var(--d-surface-2); border-bottom: 1px solid var(--d-rule); color: var(--d-ink);
1204
+ }
1205
+ .yoast-collapse-summary::-webkit-details-marker { display: none; }
1206
+ .yoast-collapse-title { flex: 1; min-width: 0; }
1207
+ .yoast-collapse-status { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; }
1208
+ .yoast-collapse-body {
1209
+ padding: 14px; display: flex; flex-direction: column; gap: 12px;
1210
+ background: var(--d-surface);
1211
+ }
1212
+ .yoast-count { font-weight: 600; color: var(--d-ink-3); }
1213
+ .yoast-empty { margin: 0; font-size: 12.6px; color: var(--d-ink-3); }
1214
+
1215
+ .yoast-snippet-field { display: flex; flex-direction: column; gap: 6px; }
1216
+ .yoast-var-chips { display: flex; flex-wrap: wrap; gap: 6px; }
1217
+ .yoast-var-chip {
1218
+ font: inherit; font-size: 12.2px; font-weight: 560; padding: 3px 10px;
1219
+ border: 1px solid var(--d-rule); border-radius: 100px; background: var(--d-sunk);
1220
+ color: var(--d-ink-2); cursor: pointer;
1221
+ }
1222
+ .yoast-var-chip:hover { border-color: var(--d-accent); color: var(--d-accent-ink); background: var(--d-accent-soft); }
1223
+ .yoast-var-chip.token { cursor: pointer; }
1224
+ .yoast-snippet-actions {
1225
+ display: flex; align-items: flex-start; gap: 8px; flex-wrap: wrap; margin-top: 2px;
1226
+ }
1227
+ .yoast-var-picker { position: relative; }
1228
+ .yoast-var-menu {
1229
+ position: absolute; left: 0; top: calc(100% + 4px); z-index: 30; min-width: 220px;
1230
+ margin: 0; padding: 4px; list-style: none; background: var(--d-surface);
1231
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); box-shadow: var(--d-shadow-lg);
1232
+ }
1233
+ .yoast-var-option {
1234
+ display: flex; flex-direction: column; align-items: flex-start; gap: 1px; width: 100%;
1235
+ font: inherit; font-size: 12.4px; padding: 7px 9px; border: 0; border-radius: var(--d-radius-sm);
1236
+ background: transparent; color: var(--d-ink); cursor: pointer; text-align: left;
1237
+ }
1238
+ .yoast-var-option:hover { background: var(--d-sunk); }
1239
+ .yoast-var-option-label { font-weight: 650; }
1240
+ .yoast-var-option-token { font-size: 11px; color: var(--d-ink-3); }
1241
+
1242
+ .yoast-status-bad {
1243
+ display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
1244
+ border-radius: 50%; background: var(--d-crit-soft); color: var(--d-crit); font-size: 12px; font-weight: 800;
1245
+ border: 1px solid var(--d-crit);
1246
+ }
1247
+ .yoast-link-btn {
1248
+ font: inherit; font-size: 12.6px; font-weight: 600; color: var(--d-accent);
1249
+ background: none; border: 0; padding: 0; cursor: pointer; text-decoration: none; text-align: left;
1250
+ }
1251
+ .yoast-link-btn:hover:not(:disabled) { text-decoration: underline; }
1252
+ .yoast-link-btn:disabled { color: var(--d-ink-3); cursor: not-allowed; }
1253
+ .yoast-preview-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
1254
+ .yoast-preview-label { font-size: 12.6px; font-weight: 600; color: var(--d-ink-2); }
1255
+ .yoast-google-card {
1256
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); background: var(--d-surface);
1257
+ padding: 12px 14px; display: flex; flex-direction: column; gap: 4px;
1258
+ }
1259
+ .yoast-google-mobile { max-width: 360px; }
1260
+ .yoast-google-site { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
1261
+ .yoast-google-favicon {
1262
+ width: 26px; height: 26px; border-radius: 50%; background: var(--d-sunk);
1263
+ display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; color: var(--d-ink-2);
1264
+ }
1265
+ .yoast-google-site-name { font-size: 12px; color: var(--d-ink); line-height: 1.2; }
1266
+ .yoast-google-site-meta .serp-url { font-size: 11.5px; margin-top: 1px; }
1267
+ .yoast-google-title { font-size: 16px; color: var(--d-accent); line-height: 1.3; }
1268
+ .yoast-google-desc { font-size: 12.6px; color: var(--d-ink-2); line-height: 1.45; }
1269
+ .yoast-composite-field {
1270
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); background: var(--d-surface);
1271
+ overflow: hidden;
1272
+ }
1273
+ .yoast-var-chips-inset { padding: 8px 8px 0; border-bottom: 1px solid var(--d-rule); background: var(--d-sunk); }
1274
+ .yoast-composite-input {
1275
+ font: inherit; font-size: 13px; width: 100%; border: 0; background: transparent;
1276
+ padding: 9px 10px; color: var(--d-ink); resize: vertical;
1277
+ }
1278
+ .yoast-composite-input:focus { outline: none; box-shadow: var(--d-ring); }
1279
+ .yoast-premium-links { display: flex; flex-direction: column; gap: 6px; padding-top: 4px; border-top: 1px solid var(--d-rule); }
1280
+ .yoast-toggle-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--d-ink-2); }
1281
+ .yoast-radio-fieldset { border: 0; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
1282
+ .yoast-radio-fieldset legend { font-size: 12.8px; font-weight: 650; color: var(--d-ink); margin-bottom: 4px; padding: 0; }
1283
+ .yoast-radio-fieldset label { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--d-ink-2); }
1284
+ .yoast-analysis-list {
1285
+ display: flex; flex-direction: column; gap: 0;
1286
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
1287
+ overflow: hidden; background: var(--d-surface);
1288
+ }
1289
+
1290
+ /* SEO analysis panel */
1291
+ .yoast-seo-analysis-panel { display: flex; flex-direction: column; gap: 14px; }
1292
+ .yoast-premium-cta {
1293
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
1294
+ background: var(--d-warn-soft); padding: 14px;
1295
+ }
1296
+ .yoast-premium-cta-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
1297
+ .yoast-premium-badge {
1298
+ font-size: 10px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase;
1299
+ color: var(--d-warn); background: var(--d-surface); border: 1px solid var(--d-warn); border-radius: 999px; padding: 2px 8px;
1300
+ }
1301
+ .yoast-premium-cta-title { margin: 0; font-size: 13px; font-weight: 700; color: var(--d-ink); }
1302
+ .yoast-premium-cta-lead { margin: 0 0 10px; font-size: 12.6px; line-height: 1.45; color: var(--d-ink-2); }
1303
+ .yoast-premium-cta-list {
1304
+ margin: 0 0 12px; padding-left: 18px; font-size: 12.4px; line-height: 1.5; color: var(--d-ink-2);
1305
+ }
1306
+ .yoast-premium-cta-list li + li { margin-top: 8px; }
1307
+ .yoast-premium-cta-list strong { color: var(--d-ink); font-weight: 650; }
1308
+ .yoast-premium-cta-btn {
1309
+ display: inline-flex; align-items: center; font-size: 12px; font-weight: 600;
1310
+ color: var(--d-ink-2); text-decoration: none; padding: 4px 9px; border-radius: var(--d-radius-sm);
1311
+ border: 1px solid var(--d-rule); background: var(--d-surface); cursor: pointer;
1312
+ }
1313
+ .yoast-premium-cta-btn:hover:not(:disabled) { border-color: var(--d-accent); color: var(--d-accent-ink); background: var(--d-accent-soft); text-decoration: none; }
1314
+ .yoast-premium-cta-btn:disabled { opacity: 0.45; cursor: not-allowed; }
1315
+ .yoast-keyphrase-inline-hint {
1316
+ margin: 0; padding: 9px 11px; font-size: 12.6px; color: var(--d-ink-2);
1317
+ background: var(--d-sunk); border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
1318
+ }
1319
+ .yoast-analysis-results-head {
1320
+ display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap;
1321
+ }
1322
+ .yoast-result-empty { margin: 0; font-size: 12.4px; color: var(--d-ink-3); }
1323
+ .yoast-footer-collapse { border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); background: var(--d-surface); }
1324
+ .yoast-footer-collapse + .yoast-footer-collapse { margin-top: 8px; }
1325
+ .yoast-footer-collapse-summary {
1326
+ display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none;
1327
+ padding: 10px 12px; font-size: 12.8px; font-weight: 650; color: var(--d-ink-2);
1328
+ }
1329
+ .yoast-footer-collapse-summary::-webkit-details-marker { display: none; }
1330
+ .yoast-footer-collapse-body { margin: 0; padding: 0 12px 12px; font-size: 12.4px; color: var(--d-ink-3); }
1331
+ .yoast-analysis-footer {
1332
+ display: flex; flex-direction: column; gap: 8px; padding-top: 12px; border-top: 1px solid var(--d-rule);
1333
+ }
1334
+ .yoast-footer-link {
1335
+ display: inline-flex; align-items: center; gap: 6px; font: inherit; font-size: 12.6px; font-weight: 600;
1336
+ color: var(--d-accent); background: none; border: 0; padding: 0; cursor: pointer; text-decoration: none; text-align: left;
1337
+ }
1338
+ .yoast-footer-link:hover:not(:disabled) { text-decoration: underline; }
1339
+ .yoast-footer-link:disabled { color: var(--d-ink-3); cursor: not-allowed; }
1340
+ .yoast-footer-lock { font-size: 11px; line-height: 1; }
1341
+ .yoast-footer-badge {
1342
+ font-size: 10px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase;
1343
+ color: var(--d-good); background: var(--d-good-soft); border: 1px solid var(--d-good); border-radius: 4px; padding: 1px 5px;
1344
+ }
1345
+ .wp-publish-scores .fact-val { display: inline-flex; align-items: center; gap: 6px; }
1346
+ .wp-cat-tabs { margin-bottom: 4px; }
1347
+
1348
+ .yoast-snippet-label-row {
1349
+ display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; flex-wrap: wrap;
1350
+ }
1351
+ .yoast-snippet-actions-top { margin-top: 0; }
1352
+ .yoast-accordion-panel,
1353
+ .yoast-internal-links { display: flex; flex-direction: column; gap: 14px; }
1354
+ .yoast-link-section { display: flex; flex-direction: column; gap: 6px; }
1355
+ .yoast-link-section-title { margin: 0; font-size: 12.8px; font-weight: 700; color: var(--d-ink); }
1356
+ .yoast-link-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
1357
+ .yoast-link-list li { font-size: 12.4px; padding: 8px 10px; background: var(--d-sunk); border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); }
1358
+ .yoast-link-label { display: flex; align-items: flex-start; gap: 6px; font-weight: 600; color: var(--d-ink); }
1359
+ .yoast-link-href { display: block; font-size: 11px; color: var(--d-ink-3); margin-top: 2px; word-break: break-all; }
1360
+ .yoast-insight-value { font-size: 22px; font-weight: 700; color: var(--d-ink); font-variant-numeric: tabular-nums; margin: 0; }
1361
+ .yoast-premium-inline-btn {
1362
+ display: inline-flex; align-items: center; gap: 8px; font: inherit; font-size: 12.6px; font-weight: 600;
1363
+ padding: 8px 12px; border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
1364
+ background: var(--d-sunk); color: var(--d-ink-3); cursor: not-allowed;
1365
+ }
1366
+
1367
+ .tag-most-used { margin-top: 4px; }
1368
+ .tag-cloud { display: flex; flex-wrap: wrap; gap: 6px; }
1369
+ .tag-cloud-item {
1370
+ font: inherit; font-size: 12px; padding: 3px 8px; border-radius: var(--d-radius-sm);
1371
+ border: 1px solid var(--d-rule); background: var(--d-surface); color: var(--d-accent); cursor: pointer;
1372
+ }
1373
+ .tag-cloud-item:hover { border-color: var(--d-accent); background: var(--d-accent-soft); }
1374
+
1375
+ /* ============================ modals ============================ */
1376
+
1377
+ .modal-backdrop {
1378
+ position: fixed; inset: 0; background: rgba(10, 11, 16, 0.55); backdrop-filter: blur(2px);
1379
+ z-index: 100; display: grid; place-items: center; padding: 20px;
1380
+ }
1381
+ .modal {
1382
+ background: var(--d-surface); border: 1px solid var(--d-rule); border-radius: var(--d-radius);
1383
+ box-shadow: var(--d-shadow-lg); width: min(560px, 100%); max-height: min(86vh, 780px);
1384
+ display: flex; flex-direction: column; overflow: hidden;
1385
+ }
1386
+ .modal-wide { width: min(960px, 100%); }
1387
+ .modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--d-rule); }
1388
+ .modal-head h2 { margin: 0; font-size: 14.5px; font-weight: 700; }
1389
+ .modal-head-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
1390
+ .modal-head-actions .fld { min-width: 190px; }
1391
+ .modal-body { padding: 16px; overflow-y: auto; flex: 1; }
1392
+ .modal-body.detail { display: grid; gap: 16px; }
1393
+ @media (min-width: 720px) { .modal-body.detail { grid-template-columns: 260px 1fr; } }
1394
+ .detail-img { width: 100%; border-radius: var(--d-radius-sm); border: 1px solid var(--d-rule); display: block; }
1395
+ .modal-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 16px; border-top: 1px solid var(--d-rule); background: var(--d-surface-2); flex-wrap: wrap; }
1396
+ .modal-foot-actions { display: flex; gap: 8px; align-items: center; }
1397
+ .modal-more { display: flex; justify-content: center; padding: 14px 0 2px; }
1398
+
1399
+ /* In-page post preview (stays in admin layout — no new tab) */
1400
+ .ed-preview {
1401
+ position: fixed;
1402
+ inset: 0;
1403
+ z-index: 120;
1404
+ display: flex;
1405
+ flex-direction: column;
1406
+ width: 100%;
1407
+ height: 100dvh;
1408
+ max-height: 100dvh;
1409
+ overflow: hidden;
1410
+ background: var(--d-paper, #fff);
1411
+ overscroll-behavior: none;
1412
+ }
1413
+ .ed-preview-bar {
1414
+ flex: 0 0 auto;
1415
+ display: flex;
1416
+ align-items: center;
1417
+ justify-content: space-between;
1418
+ gap: 12px;
1419
+ flex-wrap: wrap;
1420
+ padding: 10px 16px;
1421
+ border-bottom: 1px solid var(--d-rule);
1422
+ background: var(--d-surface);
1423
+ box-shadow: var(--d-shadow);
1424
+ }
1425
+ .ed-preview-bar-left,
1426
+ .ed-preview-bar-right {
1427
+ display: flex;
1428
+ align-items: center;
1429
+ gap: 10px;
1430
+ flex-wrap: wrap;
1431
+ min-width: 0;
1432
+ }
1433
+ .ed-preview-badge {
1434
+ font-size: 11px;
1435
+ font-weight: 750;
1436
+ letter-spacing: 0.06em;
1437
+ text-transform: uppercase;
1438
+ color: var(--d-accent-ink);
1439
+ background: var(--d-accent-soft);
1440
+ border: 1px solid var(--d-accent);
1441
+ border-radius: 999px;
1442
+ padding: 3px 9px;
1443
+ }
1444
+ .ed-preview-title {
1445
+ font-size: 13.5px;
1446
+ font-weight: 650;
1447
+ color: var(--d-ink);
1448
+ overflow: hidden;
1449
+ text-overflow: ellipsis;
1450
+ white-space: nowrap;
1451
+ max-width: min(52vw, 420px);
1452
+ }
1453
+ .ed-preview-frame {
1454
+ flex: 1 1 auto;
1455
+ min-height: 0;
1456
+ width: 100%;
1457
+ height: 100%;
1458
+ border: 0;
1459
+ background: #fff;
1460
+ display: block;
1461
+ }
1462
+
1463
+ /* Parent page must not scroll under the preview overlay */
1464
+ html.ed-preview-open,
1465
+ body.ed-preview-open {
1466
+ overflow: hidden !important;
1467
+ overscroll-behavior: none;
1468
+ }
1469
+
1470
+ .dropzone { position: relative; }
1471
+ .dropzone.is-dragging { outline: 2px dashed var(--d-accent); outline-offset: -6px; background: var(--d-accent-soft); }
1472
+
1473
+ .pick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(146px, 1fr)); gap: 12px; }
1474
+ .pick {
1475
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); overflow: hidden;
1476
+ background: var(--d-sunk); cursor: pointer; padding: 0; text-align: left; display: flex; flex-direction: column;
1477
+ }
1478
+ .pick:hover { border-color: var(--d-accent); }
1479
+ .pick.is-picked { border-color: var(--d-accent); box-shadow: var(--d-ring); }
1480
+ .pick img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
1481
+ .pick-blank { display: block; width: 100%; aspect-ratio: 4 / 3; background: var(--d-rule); }
1482
+ .pick-meta { padding: 7px 9px; font-size: 11.6px; background: var(--d-surface); }
1483
+ .pick-alt { display: block; color: var(--d-ink); font-weight: 550; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1484
+ .pick-alt.is-missing, .media-alt.is-missing { color: var(--d-warn); }
1485
+ .pick-sub { display: block; color: var(--d-ink-3); margin-top: 2px; font-variant-numeric: tabular-nums; }
1486
+
1487
+ /* ============================ media library ============================ */
1488
+
1489
+ .media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); gap: 14px; padding: 16px 17px; }
1490
+ .media-card {
1491
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm); overflow: hidden;
1492
+ background: var(--d-sunk); text-align: left; padding: 0; cursor: pointer; display: flex; flex-direction: column;
1493
+ }
1494
+ .media-card:hover { border-color: var(--d-accent); }
1495
+ .media-card img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
1496
+ .media-meta { padding: 8px 10px; font-size: 11.8px; background: var(--d-surface); }
1497
+ .media-alt { display: block; color: var(--d-ink); font-weight: 550; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1498
+ .media-sub { display: block; color: var(--d-ink-3); margin-top: 2px; font-variant-numeric: tabular-nums; }
1499
+
1500
+ /* post format panels — WordPress-style format-specific editor */
1501
+ .format-chip { color: var(--d-accent-ink); font-weight: 600; }
1502
+ .format-panel {
1503
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius); background: var(--d-surface);
1504
+ box-shadow: var(--d-shadow); overflow: hidden;
1505
+ }
1506
+ .format-panel-head {
1507
+ display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px;
1508
+ border-bottom: 1px solid var(--d-rule); background: var(--d-surface-2);
1509
+ }
1510
+ .format-panel-icon {
1511
+ width: 36px; height: 36px; border-radius: var(--d-radius-sm); display: grid; place-items: center;
1512
+ background: var(--d-accent-soft); color: var(--d-accent-ink); font-size: 18px; font-weight: 700; flex-shrink: 0;
1513
+ }
1514
+ .format-panel-head h3 { margin: 0; font-size: 15px; letter-spacing: -0.02em; }
1515
+ .format-panel-body { padding: 14px 16px 16px; }
1516
+ .format-panel-video .format-embed,
1517
+ .format-panel-body .format-embed {
1518
+ border-radius: var(--d-radius);
1519
+ overflow: hidden;
1520
+ background: #111;
1521
+ }
1522
+ .format-video-preview {
1523
+ display: block;
1524
+ width: 100%;
1525
+ max-height: 360px;
1526
+ border-radius: var(--d-radius-sm);
1527
+ background: #111;
1528
+ }
1529
+ .format-media-hero {
1530
+ margin: 0;
1531
+ display: flex;
1532
+ flex-direction: column;
1533
+ gap: 10px;
1534
+ }
1535
+ .format-media-placeholder {
1536
+ width: 100%;
1537
+ aspect-ratio: 16 / 9;
1538
+ border-radius: var(--d-radius-sm);
1539
+ background: var(--d-sunk);
1540
+ }
1541
+ .format-media-empty { width: 100%; min-height: 140px; flex-direction: column; }
1542
+ .format-upload-error { margin: 0 16px 12px; padding: 10px 12px; border-radius: var(--d-radius-sm); }
1543
+ .format-panel-body .format-embed {
1544
+ position: relative; aspect-ratio: 16 / 9; border-radius: var(--d-radius-sm); overflow: hidden;
1545
+ background: #111; border: 1px solid var(--d-rule);
1546
+ }
1547
+ .format-embed iframe, .format-embed video { width: 100%; height: 100%; border: 0; display: block; }
1548
+ .format-audio { width: 100%; }
1549
+ .format-quote-input { font-family: var(--d-read); font-size: 16px; line-height: 1.5; }
1550
+ .format-quote-preview {
1551
+ margin: 0; padding: 16px 18px; border-left: 4px solid var(--d-accent);
1552
+ background: var(--d-sunk); border-radius: 0 var(--d-radius-sm) var(--d-radius-sm) 0;
1553
+ font-family: var(--d-read); font-size: 17px; line-height: 1.55;
1554
+ }
1555
+ .format-quote-preview cite { display: block; margin-top: 8px; font-size: 13px; color: var(--d-ink-3); font-style: normal; }
1556
+ .format-link-preview {
1557
+ display: flex; flex-direction: column; gap: 4px; padding: 12px 14px; border: 1px solid var(--d-rule);
1558
+ border-radius: var(--d-radius-sm); background: var(--d-sunk); text-decoration: none; color: inherit;
1559
+ }
1560
+ .format-link-preview:hover { border-color: var(--d-accent); }
1561
+ .format-link-title { font-weight: 650; color: var(--d-accent-ink); }
1562
+ .format-link-url { font-size: 12px; color: var(--d-ink-3); word-break: break-all; }
1563
+ .format-image-hero { margin: 0; }
1564
+ .format-image-hero img { width: 100%; max-height: 420px; object-fit: cover; border-radius: var(--d-radius-sm); display: block; }
1565
+ .format-image-empty { width: 100%; min-height: 200px; }
1566
+ .format-gallery-grid {
1567
+ display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 10px;
1568
+ }
1569
+ .format-gallery-item { position: relative; margin: 0; border-radius: var(--d-radius-sm); overflow: hidden; border: 1px solid var(--d-rule); }
1570
+ .format-gallery-item img { display: block; width: 100%; aspect-ratio: 1; object-fit: cover; }
1571
+ .format-gallery-remove {
1572
+ position: absolute; top: 6px; right: 6px; width: 24px; height: 24px; border: 0; border-radius: 999px;
1573
+ background: rgba(0,0,0,.65); color: #fff; cursor: pointer; font-size: 12px;
1574
+ }
1575
+ .format-gallery-add {
1576
+ min-height: 110px; border: 1px dashed var(--d-rule); border-radius: var(--d-radius-sm); background: var(--d-sunk);
1577
+ display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
1578
+ font: inherit; font-size: 12.5px; color: var(--d-ink-2); cursor: pointer;
1579
+ }
1580
+ .format-gallery-add:hover { border-color: var(--d-accent); color: var(--d-accent-ink); }
1581
+ .ed-compact .ed-input { min-height: 220px; }
1582
+
1583
+ /* ============================ SEO modules ============================ */
1584
+
1585
+ .seo-module { display: flex; flex-direction: column; gap: 16px; border: 0; margin: 0; padding: 0; min-inline-size: 0; }
1586
+ .seo-grid { align-items: start; }
1587
+ .seo-banner {
1588
+ padding: 12px 14px; border-radius: var(--d-radius-sm); font-size: 13px; line-height: 1.45;
1589
+ border: 1px solid var(--d-rule); background: var(--d-sunk); color: var(--d-ink-2);
1590
+ }
1591
+ .seo-banner-warn {
1592
+ border-color: color-mix(in srgb, #c9851a 35%, var(--d-rule));
1593
+ background: color-mix(in srgb, #c9851a 10%, var(--d-card));
1594
+ }
1595
+ .seo-banner code, .seo-checklist code, .seo-steps code, .seo-preview {
1596
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1597
+ }
1598
+ .seo-status {
1599
+ display: flex; gap: 12px; align-items: flex-start; padding: 12px 13px;
1600
+ border-radius: var(--d-radius-sm); border: 1px solid var(--d-rule); background: var(--d-sunk);
1601
+ }
1602
+ .seo-status strong { display: block; font-size: 13.2px; font-weight: 650; color: var(--d-ink); }
1603
+ .seo-status p { margin: 3px 0 0; font-size: 12.6px; color: var(--d-ink-3); line-height: 1.45; }
1604
+ .seo-status-dot {
1605
+ width: 10px; height: 10px; border-radius: 50%; margin-top: 4px; flex-shrink: 0;
1606
+ background: var(--d-ink-3);
1607
+ }
1608
+ .seo-status.is-ok .seo-status-dot { background: #2f8f5b; box-shadow: 0 0 0 4px color-mix(in srgb, #2f8f5b 18%, transparent); }
1609
+ .seo-status.is-warn .seo-status-dot { background: #c9851a; box-shadow: 0 0 0 4px color-mix(in srgb, #c9851a 18%, transparent); }
1610
+ .seo-preview {
1611
+ margin: 0; padding: 14px 15px; border-radius: var(--d-radius-sm);
1612
+ background: #12161f; color: #d7deea; font-size: 12.4px; line-height: 1.55;
1613
+ overflow: auto; white-space: pre-wrap; word-break: break-word;
1614
+ }
1615
+ .seo-preview-sm { font-size: 11.8px; padding: 10px 12px; }
1616
+ .seo-checklist, .seo-steps {
1617
+ margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 8px;
1618
+ font-size: 13.2px; color: var(--d-ink-2); line-height: 1.45;
1619
+ }
1620
+ .seo-stat-row {
1621
+ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 16px;
1622
+ }
1623
+ .seo-stat {
1624
+ padding: 16px 17px; border-radius: var(--d-radius); border: 1px solid var(--d-rule);
1625
+ background: var(--d-card); display: flex; flex-direction: column; gap: 4px;
1626
+ }
1627
+ .seo-stat-value {
1628
+ font-size: 26px; font-weight: 700; letter-spacing: -0.03em; color: var(--d-ink);
1629
+ font-variant-numeric: tabular-nums;
1630
+ }
1631
+ .seo-stat-label { font-size: 12px; color: var(--d-ink-3); font-weight: 550; }
1632
+ .seo-link-list { list-style: none; margin: 0; padding: 0; }
1633
+ .seo-link-list li { border-top: 1px solid var(--d-rule); }
1634
+ .seo-link-list li:first-child { border-top: 0; }
1635
+ .seo-link-list a {
1636
+ display: flex; justify-content: space-between; gap: 12px; align-items: baseline;
1637
+ padding: 12px 17px; text-decoration: none; color: var(--d-ink); font-size: 13.2px;
1638
+ }
1639
+ .seo-link-list a:hover { background: var(--d-sunk); }
1640
+ .seo-link-list .mono { color: var(--d-ink-3); font-size: 12px; }
1641
+ .redirect-form {
1642
+ display: grid; grid-template-columns: 1.2fr 1.2fr 140px; gap: 12px; align-items: end;
1643
+ }
1644
+ .redirect-form-note { grid-column: 1 / -1; }
1645
+ .redirect-form-actions { grid-column: 1 / -1; display: flex; justify-content: flex-end; }
1646
+ .btn-sm { padding: 4px 9px; font-size: 12.2px; }
1647
+
1648
+ /* —— Add / Edit Redirection layout —— */
1649
+ .import-file {
1650
+ display: flex;
1651
+ align-items: center;
1652
+ gap: 12px;
1653
+ flex-wrap: wrap;
1654
+ }
1655
+ .import-file-name { font-size: 12.6px; color: var(--d-ink-3); }
1656
+ .import-errors {
1657
+ margin: 8px 0 0;
1658
+ padding-left: 18px;
1659
+ font-size: 12.6px;
1660
+ color: var(--d-crit);
1661
+ }
1662
+
1663
+ .export-fieldset {
1664
+ border: 0;
1665
+ margin: 0;
1666
+ padding: 0;
1667
+ display: flex;
1668
+ flex-direction: column;
1669
+ gap: 8px;
1670
+ }
1671
+ .export-fieldset-label {
1672
+ padding: 0;
1673
+ margin: 0 0 4px;
1674
+ font-size: 12.4px;
1675
+ font-weight: 700;
1676
+ letter-spacing: 0.02em;
1677
+ color: var(--d-ink-2);
1678
+ }
1679
+ .export-option {
1680
+ display: grid;
1681
+ grid-template-columns: auto 1fr;
1682
+ gap: 12px;
1683
+ align-items: start;
1684
+ padding: 12px 14px;
1685
+ border: 1px solid var(--d-rule);
1686
+ border-radius: var(--d-radius);
1687
+ background: var(--d-card);
1688
+ cursor: pointer;
1689
+ transition: border-color 0.12s ease, background 0.12s ease;
1690
+ }
1691
+ .export-option:hover { border-color: var(--d-accent); }
1692
+ .export-option.is-on {
1693
+ border-color: var(--d-accent);
1694
+ background: color-mix(in srgb, var(--d-accent) 8%, var(--d-card));
1695
+ }
1696
+ .export-option input {
1697
+ margin-top: 3px;
1698
+ accent-color: var(--d-accent);
1699
+ }
1700
+ .export-option-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
1701
+ .export-option-label { font-size: 14px; font-weight: 700; color: var(--d-ink); }
1702
+ .export-option-desc { font-size: 12.8px; line-height: 1.45; color: var(--d-ink-3); }
1703
+ .sr-only {
1704
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
1705
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
1706
+ }
1707
+
1708
+ .redir-analytics { display: flex; flex-direction: column; gap: 16px; margin-bottom: 18px; }
1709
+ .redir-analytics-grid {
1710
+ display: grid;
1711
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1712
+ gap: 14px;
1713
+ }
1714
+ .redir-rules-block { margin-top: 4px; }
1715
+ .redir-log-tbl .redir-log-path { color: var(--d-ink); }
1716
+ .redir-log-tbl .redir-log-to { color: var(--d-ink-3); }
1717
+ .redir-log-status {
1718
+ font-size: 12px; font-weight: 700; letter-spacing: 0.04em;
1719
+ }
1720
+ .redir-log-status.is-ok { color: var(--d-delta-up); }
1721
+ .redir-log-status.is-bad { color: var(--d-crit); }
1722
+
1723
+ @media (max-width: 900px) {
1724
+ .redir-analytics-grid { grid-template-columns: 1fr; }
1725
+ }
1726
+ .redir-body { display: flex; flex-direction: column; gap: 22px; }
1727
+ .redir-row {
1728
+ display: grid;
1729
+ grid-template-columns: 160px minmax(0, 1fr);
1730
+ gap: 16px 20px;
1731
+ align-items: start;
1732
+ padding-bottom: 18px;
1733
+ border-bottom: 1px solid var(--d-rule);
1734
+ }
1735
+ .redir-row.is-muted { opacity: 0.72; }
1736
+ .redir-label {
1737
+ font-size: 12.4px; font-weight: 700; letter-spacing: 0.02em;
1738
+ color: var(--d-ink-2); padding-top: 10px;
1739
+ }
1740
+ .redir-field { min-width: 0; }
1741
+ .redir-field.stack { display: flex; flex-direction: column; gap: 10px; }
1742
+ .redir-source-line {
1743
+ display: flex;
1744
+ align-items: stretch;
1745
+ gap: 10px;
1746
+ min-width: 0;
1747
+ }
1748
+ .redir-source-line > .fld.mono {
1749
+ flex: 1 1 auto;
1750
+ min-width: 0;
1751
+ width: auto;
1752
+ }
1753
+ select.fld.redir-match {
1754
+ flex: 0 0 132px;
1755
+ width: 132px;
1756
+ min-width: 132px;
1757
+ max-width: 132px;
1758
+ padding-right: 2rem;
1759
+ }
1760
+ .redir-remove {
1761
+ appearance: none; cursor: pointer;
1762
+ display: inline-flex; align-items: center; justify-content: center;
1763
+ flex: 0 0 36px;
1764
+ width: 36px; height: auto; min-height: 36px; padding: 0;
1765
+ border: 1px solid var(--d-rule); border-radius: var(--d-radius-sm);
1766
+ background: var(--d-card); color: var(--d-crit);
1767
+ transition: border-color 0.12s ease, background 0.12s ease, color 0.12s ease;
1768
+ }
1769
+ .redir-remove svg { width: 14px; height: 14px; display: block; }
1770
+ .redir-remove:hover:not(:disabled) {
1771
+ border-color: color-mix(in srgb, var(--d-crit) 55%, var(--d-rule));
1772
+ background: color-mix(in srgb, var(--d-crit) 8%, transparent);
1773
+ }
1774
+ .redir-remove:disabled { opacity: 0.35; cursor: not-allowed; }
1775
+ .redir-add { align-self: flex-start; margin-top: 2px; }
1776
+ .redir-type-grid {
1777
+ display: grid;
1778
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1779
+ gap: 8px;
1780
+ }
1781
+ .redir-type-btn {
1782
+ appearance: none; cursor: pointer; text-align: left;
1783
+ padding: 10px 12px; border-radius: var(--d-radius-sm);
1784
+ border: 1px solid var(--d-rule); background: var(--d-card);
1785
+ color: var(--d-ink); font-size: 12.8px; font-weight: 600; line-height: 1.3;
1786
+ transition: border-color 0.12s ease, background 0.12s ease, color 0.12s ease;
1787
+ }
1788
+ .redir-type-btn:hover { border-color: var(--d-accent); color: var(--d-accent-ink); }
1789
+ .redir-type-btn.is-on {
1790
+ background: var(--d-accent); border-color: var(--d-accent); color: #fff;
1791
+ }
1792
+ .redir-status {
1793
+ display: inline-flex; border: 1px solid var(--d-rule); border-radius: 999px; overflow: hidden;
1794
+ }
1795
+ .redir-status-btn {
1796
+ appearance: none; cursor: pointer; border: 0; background: transparent;
1797
+ padding: 8px 16px; font-size: 12.8px; font-weight: 650; color: var(--d-ink-2);
1798
+ }
1799
+ .redir-status-btn.is-on { background: var(--d-accent); color: #fff; }
1800
+ .redir-note { margin-top: 4px; }
1801
+ .redir-actions {
1802
+ display: flex; justify-content: space-between; align-items: center; gap: 12px;
1803
+ padding-top: 8px; flex-wrap: wrap;
1804
+ }
1805
+ .btn.danger-outline {
1806
+ border-color: color-mix(in srgb, var(--d-crit) 55%, var(--d-rule));
1807
+ color: var(--d-crit);
1808
+ }
1809
+ .btn.danger-outline:hover { background: color-mix(in srgb, var(--d-crit) 8%, transparent); }
1810
+ .btn-text {
1811
+ appearance: none; background: none; border: 0; cursor: pointer;
1812
+ font-size: 12.6px; font-weight: 650; color: var(--d-ink-3); padding: 4px 2px;
1813
+ }
1814
+ .btn-text.danger { color: var(--d-crit); }
1815
+ .btn-text:disabled { opacity: 0.4; cursor: not-allowed; }
1816
+
1817
+ .seo-detail-bar { margin-bottom: 4px; }
1818
+ .seo-dl {
1819
+ display: grid; gap: 14px; margin: 0;
1820
+ }
1821
+ .seo-dl > div { display: grid; gap: 4px; }
1822
+ .seo-dl dt {
1823
+ font-size: 11.2px; font-weight: 650; letter-spacing: 0.04em; text-transform: uppercase;
1824
+ color: var(--d-ink-3); margin: 0;
1825
+ }
1826
+ .seo-dl dd { margin: 0; font-size: 13.6px; color: var(--d-ink); }
1827
+ .seo-dl-panel {
1828
+ padding: 15px 17px; border: 1px solid var(--d-rule); border-radius: var(--d-radius);
1829
+ background: var(--d-card);
1830
+ }
1831
+ .chip-draft { background: var(--d-sunk); color: var(--d-ink-3); border-color: var(--d-rule); }
1832
+
1833
+ @media (max-width: 900px) {
1834
+ .seo-stat-row { grid-template-columns: 1fr; }
1835
+ .redirect-form { grid-template-columns: 1fr; }
1836
+ .redir-row { grid-template-columns: 1fr; gap: 8px; }
1837
+ .redir-label { padding-top: 0; }
1838
+ .redir-source-line {
1839
+ flex-wrap: wrap;
1840
+ }
1841
+ .redir-source-line > .fld.mono {
1842
+ flex: 1 1 100%;
1843
+ }
1844
+ select.fld.redir-match {
1845
+ flex: 1 1 auto;
1846
+ width: auto;
1847
+ min-width: 132px;
1848
+ max-width: none;
1849
+ }
1850
+ .redir-remove {
1851
+ flex: 0 0 36px;
1852
+ }
1853
+ }
1854
+
1855
+ /* ============================ responsive ============================ */
1856
+
1857
+ @media (max-width: 999px) {
1858
+ .bp-admin-wrapper,
1859
+ .shell {
1860
+ height: auto;
1861
+ min-height: 100vh;
1862
+ min-height: 100dvh;
1863
+ overflow: visible;
1864
+ }
1865
+ .side {
1866
+ flex-direction: column;
1867
+ gap: 12px;
1868
+ height: auto;
1869
+ max-height: none;
1870
+ overflow: visible;
1871
+ position: static;
1872
+ }
1873
+ .side-scroll {
1874
+ flex-direction: row;
1875
+ overflow-x: auto;
1876
+ overflow-y: hidden;
1877
+ gap: 20px;
1878
+ max-height: none;
1879
+ }
1880
+ .side-group { min-width: 190px; }
1881
+ .main {
1882
+ height: auto;
1883
+ overflow: visible;
1884
+ }
1885
+ .body {
1886
+ overflow: visible;
1887
+ }
1888
+ .top { position: static; }
1889
+ .ed-bar { position: static; }
1890
+ .ed.is-active .ed-chrome { top: 0; }
1891
+ .panel-form { position: static; }
1892
+ }
1893
+ @media (max-width: 720px) {
1894
+ .body { padding: 16px 14px 60px; }
1895
+ .top { padding: 12px 14px; }
1896
+ .row { grid-template-columns: 1fr; }
1897
+ .row-right { justify-content: flex-start; }
1898
+ .ed-title { font-size: 22px; }
1899
+ }
1900
+
1901
+ /* Scope to admin shell so public site hero animations keep working when
1902
+ prefers-reduced-motion is unset; site-*.css handle their own reduce rules. */
1903
+ @media (prefers-reduced-motion: reduce) {
1904
+ .bp-admin-wrapper *,
1905
+ .shell * {
1906
+ transition: none !important;
1907
+ animation: none !important;
1908
+ }
1909
+ }
1910
+
1911
+ .route-loading {
1912
+ display: flex;
1913
+ flex-direction: column;
1914
+ align-items: center;
1915
+ justify-content: center;
1916
+ gap: 14px;
1917
+ min-height: 42vh;
1918
+ padding: 40px 20px;
1919
+ }
1920
+ .route-loading-bar {
1921
+ width: min(220px, 50vw);
1922
+ height: 3px;
1923
+ border-radius: 999px;
1924
+ background: linear-gradient(90deg, transparent, var(--d-accent, #2e3a8c), transparent);
1925
+ background-size: 200% 100%;
1926
+ animation: route-loading-slide 1s linear infinite;
1927
+ }
1928
+ .route-loading-label {
1929
+ margin: 0;
1930
+ font-size: 13px;
1931
+ color: var(--d-ink-3);
1932
+ }
1933
+ @keyframes route-loading-slide {
1934
+ from { background-position: 100% 0; }
1935
+ to { background-position: -100% 0; }
1936
+ }
1937
+
1938
+
1939
+
1940
+ /* Public post details (BlogUploader article page) — scoped under .bp-site-article */
1941
+
1942
+ .bp-site-article {
1943
+ --bp-paper: #ffffff;
1944
+ --bp-paper-2: #f8f9fc;
1945
+ --bp-ink: #16172b;
1946
+ --bp-ink-2: #3a3d55;
1947
+ --bp-ink-3: #6b6f8a;
1948
+ --bp-rule: #e4e6f0;
1949
+ --bp-accent: var(--bp-color-primary, #2e3a8c);
1950
+ --bp-sunk: #eef0f7;
1951
+ --bp-radius-sm: 10px;
1952
+ --bp-site-pad: clamp(16px, 4vw, 28px);
1953
+ --bp-site-max: 1120px;
1954
+ --bp-measure: 68ch;
1955
+ --bp-font-ui: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
1956
+ --bp-font-display: ui-serif, "New York", "Iowan Old Style", Georgia, "Times New Roman", serif;
1957
+ --bp-ease-out: cubic-bezier(0.22, 1, 0.36, 1);
1958
+ --ease-out: var(--bp-ease-out);
1959
+ color: var(--bp-ink);
1960
+ background: var(--bp-paper);
1961
+ font-family: var(--bp-font-ui);
1962
+ }
1963
+
1964
+ /* Full-bleed inside admin Shell body */
1965
+ .body:has(.admin-post-detail) {
1966
+ padding: 0 !important;
1967
+ gap: 0 !important;
1968
+ }
1969
+ .admin-post-detail {
1970
+ min-height: 100%;
1971
+ }
1972
+
1973
+ .bp-site-article .progress {
1974
+ position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 60; background: transparent;
1975
+ }
1976
+ .bp-site-article .progress span {
1977
+ display: block; height: 100%; background: var(--bp-accent); transition: width 0.08s linear;
1978
+ }
1979
+
1980
+ /* Match BlogUploader looping hero text animation (list media hero + article).
1981
+ Scoped to .bp-root so both .bp-site-index and .bp-site-article inherit it. */
1982
+ @keyframes hero-fade-slide-from-left {
1983
+ 0% { opacity: 0; transform: translateX(-56px); }
1984
+ 12% { opacity: 1; transform: translateX(0); }
1985
+ 72% { opacity: 1; transform: translateX(0); }
1986
+ 88% { opacity: 0; transform: translateX(-56px); }
1987
+ 100% { opacity: 0; transform: translateX(-56px); }
1988
+ }
1989
+ @keyframes hero-fade-slide-from-right {
1990
+ 0% { opacity: 0; transform: translateX(56px); }
1991
+ 12% { opacity: 1; transform: translateX(0); }
1992
+ 72% { opacity: 1; transform: translateX(0); }
1993
+ 88% { opacity: 0; transform: translateX(56px); }
1994
+ 100% { opacity: 0; transform: translateX(56px); }
1995
+ }
1996
+
1997
+ .bp-root {
1998
+ --bp-ease-out: cubic-bezier(0.22, 1, 0.36, 1);
1999
+ --ease-out: var(--bp-ease-out);
2000
+ }
2001
+
2002
+ .bp-root .hero-fade-slide {
2003
+ --hero-loop: 5s;
2004
+ animation-duration: var(--hero-loop);
2005
+ animation-timing-function: var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1));
2006
+ animation-iteration-count: infinite;
2007
+ animation-fill-mode: both;
2008
+ /* Negative delay keeps stagger offset on every loop */
2009
+ animation-delay: calc(var(--slide-delay, 0ms) * -1);
2010
+ }
2011
+ .bp-root .hero-fade-slide-left {
2012
+ animation-name: hero-fade-slide-from-left;
2013
+ }
2014
+ .bp-root .hero-fade-slide-right {
2015
+ animation-name: hero-fade-slide-from-right;
2016
+ }
2017
+ @media (prefers-reduced-motion: reduce) {
2018
+ .bp-root .hero-fade-slide {
2019
+ opacity: 1;
2020
+ transform: none;
2021
+ animation: none !important;
2022
+ }
2023
+ }
2024
+
2025
+ .bp-site-article .article-detail-hero { width: 100%; font-family: var(--bp-font-ui); }
2026
+ .bp-site-article .article-hero-media {
2027
+ margin: 0 auto; width: 100%; max-width: 1200px; background: #0a0b10; overflow: hidden;
2028
+ }
2029
+ .bp-site-article .article-hero-visual {
2030
+ display: block; width: 100%; max-width: 1200px; height: auto; margin: 0 auto;
2031
+ aspect-ratio: 1200 / 630; object-fit: cover; border: 0;
2032
+ }
2033
+ .bp-site-article .article-hero-caption {
2034
+ margin: 0 auto; padding: 12px var(--bp-site-pad) 0; max-width: var(--bp-site-max);
2035
+ font-size: 12.8px; color: var(--bp-ink-3);
2036
+ }
2037
+ .bp-site-article .article-hero-copy {
2038
+ width: 100%;
2039
+ padding: clamp(32px, 5vw, 56px) var(--bp-site-pad) clamp(20px, 3vw, 32px);
2040
+ border-bottom: 1px solid var(--bp-rule);
2041
+ background: linear-gradient(180deg, var(--bp-paper-2) 0%, var(--bp-paper) 100%);
2042
+ }
2043
+ .bp-site-article .blog-details-hero .article-hero-copy {
2044
+ border-bottom: 0;
2045
+ background: transparent;
2046
+ padding-top: 0;
2047
+ }
2048
+ .bp-site-article .article-hero-copy-inner { max-width: min(860px, 100%); margin: 0 auto; }
2049
+ .bp-site-article .blog-details-hero .article-hero-copy-inner { max-width: 1200px; }
2050
+ .bp-site-article .article-hero-title {
2051
+ font-family: var(--bp-font-display);
2052
+ font-size: clamp(32px, 5.2vw, 52px);
2053
+ line-height: 1.08; letter-spacing: -0.028em; font-weight: 700; margin: 16px 0 0;
2054
+ text-wrap: balance;
2055
+ }
2056
+ .bp-site-article .blog-details-hero .article-hero-title {
2057
+ font-size: clamp(36px, 5.8vw, 58px);
2058
+ }
2059
+ .bp-site-article .standfirst,
2060
+ .bp-site-article .article-hero-standfirst {
2061
+ font-size: clamp(18px, 2.2vw, 21px); line-height: 1.55; color: var(--bp-ink-2);
2062
+ margin: 18px 0 0; max-width: 62ch;
2063
+ }
2064
+ .bp-site-article .blog-details-hero .standfirst,
2065
+ .bp-site-article .blog-details-hero .article-hero-standfirst {
2066
+ margin-left: auto; margin-right: auto; color: rgba(255, 255, 255, 0.9);
2067
+ text-align: center; max-width: 48ch;
2068
+ }
2069
+ .bp-site-article .blog-details-hero .byline-row { justify-content: center; }
2070
+ .bp-site-article .blog-details-hero .breadcrumb { justify-content: center; }
2071
+ .bp-site-article .eyebrow {
2072
+ display: inline-block; font-size: 11.5px; font-weight: 750; letter-spacing: 0.1em;
2073
+ text-transform: uppercase; color: var(--bp-accent); text-decoration: none;
2074
+ background: color-mix(in srgb, var(--bp-accent) 10%, transparent);
2075
+ padding: 4px 11px; border-radius: 100px;
2076
+ }
2077
+ .bp-site-article .byline-row { display: flex; align-items: center; gap: 12px; margin-top: 26px; }
2078
+ .bp-site-article .byline-faces { display: flex; }
2079
+ .bp-site-article .byline-faces img,
2080
+ .bp-site-article .face-fallback {
2081
+ width: 34px; height: 34px; border-radius: 50%; object-fit: cover;
2082
+ border: 2px solid var(--bp-paper); margin-left: -8px; background: var(--bp-sunk);
2083
+ display: grid; place-items: center; font-weight: 700; font-size: 13px; color: var(--bp-ink-2);
2084
+ }
2085
+ .bp-site-article .blog-details-hero .byline-faces img,
2086
+ .bp-site-article .blog-details-hero .face-fallback {
2087
+ border-color: #0B4A75; color: #0B4A75; background: #fff;
2088
+ }
2089
+ .bp-site-article .byline-faces img:first-child,
2090
+ .bp-site-article .face-fallback:first-child { margin-left: 0; }
2091
+ .bp-site-article .byline-text { display: flex; flex-direction: column; gap: 1px; font-size: 14px; }
2092
+ .bp-site-article .byline-text .by { font-weight: 650; color: var(--bp-ink); }
2093
+ .bp-site-article .blog-details-hero .byline-text .by,
2094
+ .bp-site-article .blog-details-hero .byline-text .meta { color: rgba(255,255,255,0.92); }
2095
+ .bp-site-article .byline-text .meta {
2096
+ color: var(--bp-ink-3); display: flex; gap: 12px; flex-wrap: wrap; font-size: 13.4px;
2097
+ }
2098
+
2099
+ .bp-site-article .article-shell {
2100
+ display: grid; gap: 32px; padding: 40px var(--bp-site-pad) 64px;
2101
+ align-items: start; max-width: var(--bp-site-max); margin: 0 auto; width: 100%; box-sizing: border-box;
2102
+ }
2103
+ @media (min-width: 1040px) {
2104
+ .bp-site-article .article-shell {
2105
+ grid-template-columns: minmax(0, 1fr) 280px; column-gap: 40px;
2106
+ }
2107
+ }
2108
+ .bp-site-article .article { min-width: 0; max-width: none; }
2109
+ .bp-site-article .rail { display: none; width: 100%; }
2110
+ @media (min-width: 1040px) {
2111
+ .bp-site-article .rail { display: block; position: sticky; top: 96px; }
2112
+ }
2113
+ .bp-site-article .rail-title {
2114
+ font-size: 11px; font-weight: 750; letter-spacing: 0.11em; text-transform: uppercase;
2115
+ color: var(--bp-ink-3); margin: 0 0 12px;
2116
+ }
2117
+ .bp-site-article .toc ol {
2118
+ list-style: none; margin: 0; padding: 0 0 0 12px; border-left: 2px solid var(--bp-rule);
2119
+ display: flex; flex-direction: column; gap: 9px;
2120
+ }
2121
+ .bp-site-article .toc li.sub { padding-left: 12px; }
2122
+ .bp-site-article .toc a {
2123
+ font-size: 13.4px; line-height: 1.4; color: var(--bp-ink-2); text-decoration: none; display: block;
2124
+ }
2125
+ .bp-site-article .toc a:hover { color: var(--bp-accent); }
2126
+
2127
+ .bp-site-article .article-rail-details { margin-bottom: 26px; display: flex; flex-direction: column; gap: 22px; }
2128
+ .bp-site-article .rail-details-mobile { margin: 0 0 28px; }
2129
+ .bp-site-article .rail-details-desktop { display: none; }
2130
+ @media (min-width: 1040px) {
2131
+ .bp-site-article .rail-details-mobile { display: none; }
2132
+ .bp-site-article .rail-details-desktop { display: flex; }
2133
+ }
2134
+ .bp-site-article .rail-owner-panel,
2135
+ .bp-site-article .rail-related-panel {
2136
+ background: var(--bp-paper); border: 1px solid var(--bp-rule); border-radius: 12px;
2137
+ box-shadow: 0 1px 2px rgba(22, 23, 43, 0.04), 0 10px 24px -18px rgba(22, 23, 43, 0.22);
2138
+ overflow: hidden; display: flex; flex-direction: column;
2139
+ }
2140
+ .bp-site-article .rail-owner-list {
2141
+ list-style: none; margin: 0; padding: 14px 17px; display: flex; flex-direction: column; gap: 14px;
2142
+ }
2143
+ .bp-site-article .rail-owner { display: flex; gap: 12px; align-items: flex-start; }
2144
+ .bp-site-article .rail-owner img,
2145
+ .bp-site-article .rail-owner-fallback {
2146
+ width: 40px; height: 40px; border-radius: 50%; flex-shrink: 0;
2147
+ }
2148
+ .bp-site-article .rail-owner img { object-fit: cover; }
2149
+ .bp-site-article .rail-owner-fallback {
2150
+ display: grid; place-items: center;
2151
+ background: color-mix(in srgb, var(--bp-accent) 16%, var(--bp-sunk));
2152
+ color: var(--bp-accent); font-size: 12px; font-weight: 750;
2153
+ }
2154
+ .bp-site-article .rail-owner-name { margin: 0; font-size: 13.5px; font-weight: 700; color: var(--bp-ink); }
2155
+ .bp-site-article .rail-owner-role { margin: 2px 0 0; font-size: 12px; color: var(--bp-ink-3); }
2156
+ .bp-site-article .rail-owner-bio {
2157
+ margin: 6px 0 0; font-size: 12.4px; line-height: 1.45; color: var(--bp-ink-2);
2158
+ display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
2159
+ }
2160
+ .bp-site-article .rail-related-head {
2161
+ padding: 13px 17px; border-bottom: 1px solid var(--bp-rule);
2162
+ display: flex; align-items: center; justify-content: space-between; gap: 12px;
2163
+ }
2164
+ .bp-site-article .rail-related-head h3 {
2165
+ margin: 0; font-size: 13.5px; font-weight: 680; letter-spacing: -0.005em; color: var(--bp-ink);
2166
+ }
2167
+ .bp-site-article .rail-related-rows { display: flex; flex-direction: column; }
2168
+ .bp-site-article .rail-related-row {
2169
+ padding: 12px 17px; border-bottom: 1px solid color-mix(in srgb, var(--bp-rule) 70%, transparent);
2170
+ }
2171
+ .bp-site-article .rail-related-row:last-child { border-bottom: 0; }
2172
+ .bp-site-article .rail-related-row:hover { background: var(--bp-paper-2); }
2173
+ .bp-site-article .rail-related-t {
2174
+ font-size: 14px; font-weight: 620; color: var(--bp-ink); text-decoration: none;
2175
+ letter-spacing: -0.005em; display: block; line-height: 1.35;
2176
+ border: 0; background: none; padding: 0; cursor: pointer; text-align: left; font: inherit;
2177
+ }
2178
+ .bp-site-article .rail-related-t:hover { color: var(--bp-accent); }
2179
+ .bp-site-article .rail-related-sub {
2180
+ font-size: 12.2px; color: var(--bp-ink-3); margin-top: 3px;
2181
+ display: flex; flex-wrap: wrap; gap: 3px 12px; align-items: center;
2182
+ }
2183
+ .bp-site-article .rail-related-sub a,
2184
+ .bp-site-article .rail-related-sub .bp-linkish {
2185
+ color: var(--bp-accent); text-decoration: none; font-weight: 600;
2186
+ border: 0; background: none; padding: 0; cursor: pointer; font: inherit;
2187
+ }
2188
+ .bp-site-article .rail-related-sub a:hover,
2189
+ .bp-site-article .rail-related-sub .bp-linkish:hover { text-decoration: underline; }
2190
+
2191
+ .bp-site-article .prose {
2192
+ font-family: var(--bp-font-display);
2193
+ font-size: 18.5px; line-height: 1.72; max-width: var(--bp-measure);
2194
+ }
2195
+ .bp-site-article .prose > * { margin: 0 0 1.15em; }
2196
+ .bp-site-article .prose h2,
2197
+ .bp-site-article .prose h3 {
2198
+ font-family: var(--bp-font-display); letter-spacing: -0.02em; line-height: 1.25;
2199
+ position: relative; scroll-margin-top: 96px;
2200
+ }
2201
+ .bp-site-article .prose h2 { font-size: clamp(24px, 3vw, 30px); margin: 1.9em 0 0.55em; font-weight: 700; }
2202
+ .bp-site-article .prose h3 { font-size: clamp(20px, 2.4vw, 23px); margin: 1.6em 0 0.45em; font-weight: 700; }
2203
+ .bp-site-article .prose a { color: var(--bp-accent); }
2204
+ .bp-site-article .prose blockquote {
2205
+ margin: 1.7em 0; padding: 2px 0 2px 22px; border-left: 3px solid var(--bp-accent);
2206
+ font-size: 1.06em; color: var(--bp-ink-2); font-style: italic;
2207
+ }
2208
+ .bp-site-article .prose img { border-radius: 12px; display: block; max-width: 100%; height: auto; }
2209
+
2210
+ .bp-site-article .tag-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 40px; }
2211
+ .bp-site-article .tag-pill {
2212
+ font-size: 12.6px; color: var(--bp-ink-2); background: var(--bp-sunk);
2213
+ border: 1px solid var(--bp-rule); border-radius: 100px; padding: 4px 12px;
2214
+ text-decoration: none; cursor: pointer; font: inherit;
2215
+ }
2216
+ .bp-site-article .share {
2217
+ display: flex; align-items: center; gap: 14px; flex-wrap: wrap; font-size: 13.4px;
2218
+ }
2219
+ .bp-site-article .share-label {
2220
+ font-weight: 750; font-size: 11px; letter-spacing: 0.11em; text-transform: uppercase; color: var(--bp-ink-3);
2221
+ }
2222
+ .bp-site-article .share a { color: var(--bp-ink-2); text-decoration: none; }
2223
+ .bp-site-article .share a:hover { color: var(--bp-accent); }
2224
+ .bp-site-article .share-copy summary { cursor: pointer; color: var(--bp-ink-2); list-style: none; }
2225
+ .bp-site-article .share-copy summary::-webkit-details-marker { display: none; }
2226
+ .bp-site-article .share-copy input {
2227
+ font: inherit; font-size: 12.5px; margin-top: 8px; width: min(320px, 100%);
2228
+ padding: 7px 10px; border: 1px solid var(--bp-rule); border-radius: 8px;
2229
+ background: var(--bp-paper-2); color: var(--bp-ink-2);
2230
+ }
2231
+ .bp-site-article .share-foot { margin-top: 28px; padding-top: 22px; border-top: 1px solid var(--bp-rule); }
2232
+
2233
+ .bp-site-article .author-card {
2234
+ display: flex; gap: 16px; align-items: flex-start; margin-top: 30px; padding: 20px;
2235
+ background: var(--bp-paper-2); border: 1px solid var(--bp-rule); border-radius: 12px;
2236
+ }
2237
+ .bp-site-article .author-name { margin: 0; font-weight: 700; font-size: 15px; }
2238
+ .bp-site-article .author-name span { font-weight: 400; color: var(--bp-ink-3); }
2239
+ .bp-site-article .author-bio { margin: 6px 0 0; font-size: 14px; line-height: 1.6; color: var(--bp-ink-2); }
2240
+
2241
+ .bp-site-article .comments {
2242
+ margin-top: 48px; padding-top: 36px; border-top: 1px solid var(--bp-rule);
2243
+ }
2244
+ .bp-site-article .comments h2 {
2245
+ font-family: var(--bp-font-display); font-size: 26px; letter-spacing: -0.02em; margin: 0 0 18px;
2246
+ }
2247
+ .bp-site-article .comments-count { font-weight: 500; color: var(--bp-ink-3); font-size: 0.85em; }
2248
+ .bp-site-article .comments-closed,
2249
+ .bp-site-article .comments-empty { margin: 0 0 22px; color: var(--bp-ink-3); font-size: 14.5px; }
2250
+ .bp-site-article .comments-list {
2251
+ list-style: none; margin: 0 0 28px; padding: 0; display: flex; flex-direction: column; gap: 16px;
2252
+ }
2253
+ .bp-site-article .comment-item {
2254
+ padding: 16px 18px; border: 1px solid var(--bp-rule); border-radius: 12px; background: var(--bp-paper-2);
2255
+ }
2256
+ .bp-site-article .comment-profile { display: flex; gap: 14px; align-items: flex-start; }
2257
+ .bp-site-article .comment-avatar {
2258
+ width: 42px; height: 42px; border-radius: 50%; flex-shrink: 0; display: grid; place-items: center;
2259
+ background: color-mix(in srgb, var(--bp-accent) 16%, var(--bp-sunk));
2260
+ color: var(--bp-accent); font-size: 13px; font-weight: 750;
2261
+ }
2262
+ .bp-site-article .comment-meta {
2263
+ display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: baseline; margin-bottom: 8px;
2264
+ font-size: 13px; color: var(--bp-ink-3);
2265
+ }
2266
+ .bp-site-article .comment-author { color: var(--bp-ink); font-size: 14.5px; }
2267
+ .bp-site-article .comment-body {
2268
+ margin: 0; font-size: 15px; line-height: 1.65; color: var(--bp-ink-2);
2269
+ white-space: pre-wrap; word-break: break-word;
2270
+ }
2271
+ .bp-site-article .comment-form {
2272
+ display: flex; flex-direction: column; gap: 14px; padding: 20px;
2273
+ border: 1px solid var(--bp-rule); border-radius: 12px; background: var(--bp-paper);
2274
+ }
2275
+ .bp-site-article .comment-form-title { margin: 0; font-size: 16px; font-weight: 700; }
2276
+ .bp-site-article .comment-form-grid { display: grid; gap: 12px; }
2277
+ @media (min-width: 640px) {
2278
+ .bp-site-article .comment-form-grid { grid-template-columns: 1fr 1fr; }
2279
+ }
2280
+ .bp-site-article .comment-form label {
2281
+ display: flex; flex-direction: column; gap: 6px; font-size: 12.5px; font-weight: 650; color: var(--bp-ink-2);
2282
+ }
2283
+ .bp-site-article .comment-form label em {
2284
+ font-style: normal; font-weight: 450; color: var(--bp-ink-3);
2285
+ }
2286
+ .bp-site-article .comment-form input,
2287
+ .bp-site-article .comment-form textarea {
2288
+ font: inherit; font-weight: 450; font-size: 14.5px; padding: 10px 12px;
2289
+ border: 1px solid var(--bp-rule); border-radius: 8px; background: var(--bp-paper-2); color: var(--bp-ink);
2290
+ }
2291
+ .bp-site-article .comment-form input:focus,
2292
+ .bp-site-article .comment-form textarea:focus {
2293
+ outline: none; border-color: var(--bp-accent);
2294
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--bp-accent) 18%, transparent);
2295
+ }
2296
+ .bp-site-article .comment-body-field textarea { resize: vertical; min-height: 120px; }
2297
+ .bp-site-article .comment-submit {
2298
+ align-self: flex-start; font: inherit; font-weight: 650; font-size: 14px;
2299
+ padding: 10px 16px; border: 0; border-radius: 8px; background: var(--bp-accent); color: #fff; cursor: pointer;
2300
+ }
2301
+ .bp-site-article .comment-submit:disabled { opacity: 0.65; cursor: wait; }
2302
+ .bp-site-article .comment-error {
2303
+ margin: 0; padding: 10px 12px; border-radius: 8px;
2304
+ background: color-mix(in srgb, #c44 12%, transparent); color: #9a2f2f; font-size: 13.5px;
2305
+ }
2306
+ .bp-site-article .comment-ok {
2307
+ margin: 0; padding: 10px 12px; border-radius: 8px;
2308
+ background: color-mix(in srgb, #2f8f5b 12%, transparent); color: #1f6b42; font-size: 13.5px;
2309
+ }
2310
+ .bp-site-article .comment-moderation-note { margin: 0; font-size: 12.5px; color: var(--bp-ink-3); }
2311
+ .bp-site-article .comment-hp {
2312
+ position: absolute !important; left: -10000px !important; width: 1px !important; height: 1px !important; overflow: hidden !important;
2313
+ }
2314
+
2315
+
2316
+
2317
+ /* Public post list (BlogUploader index) — scoped under .bp-site-index */
2318
+
2319
+ .bp-site-index {
2320
+ --bp-accent: var(--bp-color-primary, #2e3a8c);
2321
+ --accent: var(--bp-accent);
2322
+ --bp-ink: #14151c;
2323
+ --bp-ink-2: #4a4e60;
2324
+ --bp-ink-3: #757a8c;
2325
+ --bp-paper: #ffffff;
2326
+ --bp-paper-2: #f8f9fc;
2327
+ --bp-sunk: #f0f2f7;
2328
+ --bp-rule: #e6e8f0;
2329
+ --bp-measure: 68ch;
2330
+ --bp-font-body: ui-serif, "New York", "Iowan Old Style", Georgia, "Times New Roman", serif;
2331
+ --bp-font-ui: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
2332
+ --font-body: var(--bp-font-body);
2333
+ --font-ui: var(--bp-font-ui);
2334
+ --bp-radius: 16px;
2335
+ --bp-radius-sm: 10px;
2336
+ --bp-shadow: 0 2px 8px rgba(20, 21, 28, 0.04), 0 24px 48px -28px rgba(20, 21, 28, 0.28);
2337
+ --bp-shadow-hover: 0 8px 24px rgba(20, 21, 28, 0.08), 0 32px 64px -24px rgba(20, 21, 28, 0.22);
2338
+ --bp-ease-out: cubic-bezier(0.22, 1, 0.36, 1);
2339
+ --ease-out: var(--bp-ease-out);
2340
+ --bp-site-pad: clamp(20px, 4.5vw, 56px);
2341
+ --site-pad: var(--bp-site-pad);
2342
+ --bp-site-max: 1680px;
2343
+ --site-max: var(--bp-site-max);
2344
+ color: var(--bp-ink);
2345
+ background: var(--bp-paper);
2346
+ font-family: var(--bp-font-body);
2347
+ font-size: 18px;
2348
+ line-height: 1.68;
2349
+ -webkit-font-smoothing: antialiased;
2350
+ width: 100%;
2351
+ min-height: 100%;
2352
+ }
2353
+
2354
+ .bp-site-index *,
2355
+ .bp-site-index *::before,
2356
+ .bp-site-index *::after {
2357
+ box-sizing: border-box;
2358
+ }
2359
+
2360
+ .bp-site-index a {
2361
+ color: var(--bp-accent);
2362
+ text-underline-offset: 2px;
2363
+ }
2364
+
2365
+ .bp-site-index :focus-visible {
2366
+ outline: 2px solid var(--bp-accent);
2367
+ outline-offset: 3px;
2368
+ border-radius: 3px;
2369
+ }
2370
+
2371
+ .bp-site-index img {
2372
+ max-width: 100%;
2373
+ height: auto;
2374
+ }
2375
+
2376
+ .bp-site-index .wrap {
2377
+ width: 100%;
2378
+ max-width: var(--bp-site-max);
2379
+ margin: 0 auto;
2380
+ padding: 0 var(--bp-site-pad);
2381
+ }
2382
+
2383
+ @keyframes bp-site-rise {
2384
+ from { opacity: 0; transform: translateY(28px); }
2385
+ to { opacity: 1; transform: translateY(0); }
2386
+ }
2387
+
2388
+ @keyframes bp-site-fade {
2389
+ from { opacity: 0; }
2390
+ to { opacity: 1; }
2391
+ }
2392
+
2393
+ @keyframes bp-site-scale-in {
2394
+ from { opacity: 0; transform: scale(0.96) translateY(12px); }
2395
+ to { opacity: 1; transform: scale(1) translateY(0); }
2396
+ }
2397
+
2398
+ @keyframes bp-site-index-bridge-breathe {
2399
+ 0%, 100% { opacity: 0.55; transform: translateX(-50%) scaleX(0.92); }
2400
+ 50% { opacity: 0.95; transform: translateX(-50%) scaleX(1); }
2401
+ }
2402
+
2403
+ .bp-site-index .site-animate-in > .site-animate-item {
2404
+ animation: bp-site-rise 0.75s var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1)) both;
2405
+ }
2406
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(1) { animation-delay: 0.04s; }
2407
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(2) { animation-delay: 0.1s; }
2408
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(3) { animation-delay: 0.16s; }
2409
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(4) { animation-delay: 0.22s; }
2410
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(5) { animation-delay: 0.28s; }
2411
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(6) { animation-delay: 0.34s; }
2412
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(7) { animation-delay: 0.4s; }
2413
+ .bp-site-index .site-animate-in > .site-animate-item:nth-child(8) { animation-delay: 0.46s; }
2414
+
2415
+ /* --- hero --------------------------------------------------------------- */
2416
+
2417
+ .bp-site-index .site-hero {
2418
+ position: relative;
2419
+ width: 100%;
2420
+ padding: clamp(56px, 10vw, 112px) var(--bp-site-pad) clamp(40px, 6vw, 72px);
2421
+ overflow: hidden;
2422
+ border-bottom: 1px solid var(--bp-rule);
2423
+ background:
2424
+ radial-gradient(ellipse 90% 70% at 50% -30%, color-mix(in srgb, var(--bp-accent) 14%, transparent), transparent 55%),
2425
+ linear-gradient(180deg, var(--bp-paper-2) 0%, var(--bp-paper) 100%);
2426
+ }
2427
+
2428
+ .bp-site-index .site-hero-glow {
2429
+ position: absolute;
2430
+ inset: auto -20% -40% -20%;
2431
+ height: 60%;
2432
+ background: radial-gradient(ellipse at center, color-mix(in srgb, var(--bp-accent) 8%, transparent), transparent 70%);
2433
+ pointer-events: none;
2434
+ animation: bp-site-fade 1.2s var(--bp-ease-out) both;
2435
+ }
2436
+
2437
+ .bp-site-index .site-hero-inner {
2438
+ position: relative;
2439
+ z-index: 1;
2440
+ width: 100%;
2441
+ max-width: var(--bp-site-max);
2442
+ margin: 0 auto;
2443
+ }
2444
+
2445
+ .bp-site-index .site-hero-eyebrow {
2446
+ margin: 0;
2447
+ font-family: var(--bp-font-ui);
2448
+ font-size: 12px;
2449
+ font-weight: 750;
2450
+ letter-spacing: 0.14em;
2451
+ text-transform: uppercase;
2452
+ color: var(--bp-accent);
2453
+ }
2454
+
2455
+ .bp-site-index .site-hero-title {
2456
+ margin: 14px 0 0;
2457
+ font-family: var(--bp-font-body);
2458
+ font-size: clamp(36px, 6.5vw, 64px);
2459
+ line-height: 1.05;
2460
+ letter-spacing: -0.035em;
2461
+ font-weight: 700;
2462
+ text-wrap: balance;
2463
+ max-width: 18ch;
2464
+ }
2465
+
2466
+ .bp-site-index .site-hero-desc {
2467
+ margin: 18px 0 0;
2468
+ font-family: var(--bp-font-ui);
2469
+ font-size: clamp(17px, 2.2vw, 20px);
2470
+ line-height: 1.55;
2471
+ color: var(--bp-ink-2);
2472
+ max-width: 52ch;
2473
+ }
2474
+
2475
+ /* --- feed bridge -------------------------------------------------------- */
2476
+
2477
+ .bp-site-index .site-index-feed {
2478
+ position: relative;
2479
+ z-index: 2;
2480
+ width: 100%;
2481
+ margin-top: clamp(-28px, -3vw, -16px);
2482
+ background:
2483
+ linear-gradient(
2484
+ 180deg,
2485
+ color-mix(in srgb, var(--bp-paper-2) 88%, transparent) 0%,
2486
+ var(--bp-paper) 42%,
2487
+ var(--bp-paper) 100%
2488
+ );
2489
+ border-top: 1px solid color-mix(in srgb, var(--bp-rule) 70%, transparent);
2490
+ box-shadow: 0 -24px 48px -28px color-mix(in srgb, #000 28%, transparent);
2491
+ }
2492
+
2493
+ .bp-site-index .site-index-bridge {
2494
+ position: relative;
2495
+ height: clamp(28px, 4vw, 44px);
2496
+ overflow: hidden;
2497
+ pointer-events: none;
2498
+ }
2499
+
2500
+ .bp-site-index .site-index-bridge-glow {
2501
+ position: absolute;
2502
+ left: 50%;
2503
+ top: 0;
2504
+ width: min(520px, 70vw);
2505
+ height: 100%;
2506
+ transform: translateX(-50%);
2507
+ background: radial-gradient(
2508
+ ellipse at center top,
2509
+ color-mix(in srgb, var(--bp-accent) 22%, transparent) 0%,
2510
+ transparent 70%
2511
+ );
2512
+ opacity: 0.85;
2513
+ animation: bp-site-index-bridge-breathe 5.5s ease-in-out infinite;
2514
+ }
2515
+
2516
+ .bp-site-index .site-index-bridge-line {
2517
+ position: absolute;
2518
+ left: 50%;
2519
+ top: 50%;
2520
+ width: min(180px, 40vw);
2521
+ height: 1px;
2522
+ transform: translate(-50%, -50%);
2523
+ background: linear-gradient(
2524
+ 90deg,
2525
+ transparent,
2526
+ color-mix(in srgb, var(--bp-accent) 55%, var(--bp-rule)),
2527
+ transparent
2528
+ );
2529
+ }
2530
+
2531
+ .bp-site-index .site-index-feed-inner { width: 100%; }
2532
+
2533
+ .bp-site-index .site-index-feed-head {
2534
+ width: 100%;
2535
+ max-width: var(--bp-site-max);
2536
+ margin: 0 auto;
2537
+ padding: clamp(8px, 1.5vw, 16px) var(--bp-site-pad) clamp(20px, 3vw, 32px);
2538
+ display: flex;
2539
+ align-items: center;
2540
+ gap: 16px;
2541
+ }
2542
+
2543
+ .bp-site-index .site-index-feed-eyebrow {
2544
+ margin: 0;
2545
+ flex: 0 0 auto;
2546
+ font-family: var(--bp-font-ui);
2547
+ font-size: 12px;
2548
+ font-weight: 750;
2549
+ letter-spacing: 0.14em;
2550
+ text-transform: uppercase;
2551
+ color: var(--bp-ink-3);
2552
+ }
2553
+
2554
+ .bp-site-index .site-index-feed-rule {
2555
+ display: block;
2556
+ flex: 1 1 auto;
2557
+ height: 1px;
2558
+ background: linear-gradient(
2559
+ 90deg,
2560
+ var(--bp-rule),
2561
+ color-mix(in srgb, var(--bp-rule) 20%, transparent)
2562
+ );
2563
+ }
2564
+
2565
+ .bp-site-index .site-page,
2566
+ .bp-site-index .site-index-feed-body {
2567
+ width: 100%;
2568
+ max-width: var(--bp-site-max);
2569
+ margin: 0 auto;
2570
+ padding: 0 var(--bp-site-pad) clamp(48px, 8vw, 80px);
2571
+ }
2572
+
2573
+ .bp-site-index .site-index-feed-body .cat-bar { margin-top: 0; }
2574
+
2575
+ /* --- category bar ------------------------------------------------------- */
2576
+
2577
+ .bp-site-index .cat-bar {
2578
+ display: flex;
2579
+ gap: 8px;
2580
+ flex-wrap: wrap;
2581
+ font-family: var(--bp-font-ui);
2582
+ font-size: 13.6px;
2583
+ margin: clamp(28px, 4vw, 40px) 0 clamp(24px, 3vw, 36px);
2584
+ padding-bottom: 4px;
2585
+ }
2586
+
2587
+ .bp-site-index .cat-bar button,
2588
+ .bp-site-index .cat-bar a {
2589
+ font: inherit;
2590
+ color: var(--bp-ink-2);
2591
+ text-decoration: none;
2592
+ padding: 8px 16px;
2593
+ border: 1px solid var(--bp-rule);
2594
+ border-radius: 100px;
2595
+ background: var(--bp-paper);
2596
+ cursor: pointer;
2597
+ transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease, transform 0.2s var(--bp-ease-out), box-shadow 0.2s ease;
2598
+ }
2599
+
2600
+ .bp-site-index .cat-bar button:hover,
2601
+ .bp-site-index .cat-bar a:hover {
2602
+ border-color: color-mix(in srgb, var(--bp-accent) 40%, var(--bp-rule));
2603
+ color: var(--bp-accent);
2604
+ transform: translateY(-2px);
2605
+ box-shadow: 0 6px 16px -10px color-mix(in srgb, var(--bp-accent) 35%, transparent);
2606
+ }
2607
+
2608
+ .bp-site-index .cat-bar button[aria-current="page"],
2609
+ .bp-site-index .cat-bar a[aria-current="page"] {
2610
+ background: var(--bp-accent);
2611
+ border-color: var(--bp-accent);
2612
+ color: #fff;
2613
+ box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--bp-accent) 65%, transparent);
2614
+ }
2615
+
2616
+ /* --- cards -------------------------------------------------------------- */
2617
+
2618
+ .bp-site-index .post-grid,
2619
+ .bp-site-index .card-grid {
2620
+ list-style: none;
2621
+ margin: 0 0 clamp(32px, 5vw, 48px);
2622
+ padding: 0;
2623
+ display: grid;
2624
+ gap: clamp(20px, 3vw, 28px);
2625
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr));
2626
+ }
2627
+
2628
+ .bp-site-index .post-grid-lead {
2629
+ grid-template-columns: 1fr !important;
2630
+ margin-bottom: clamp(24px, 4vw, 36px);
2631
+ }
2632
+
2633
+ .bp-site-index .card {
2634
+ border: 1px solid var(--bp-rule);
2635
+ border-radius: var(--bp-radius);
2636
+ background: var(--bp-paper);
2637
+ box-shadow: var(--bp-shadow);
2638
+ overflow: hidden;
2639
+ transition: box-shadow 0.4s var(--bp-ease-out), border-color 0.3s ease, transform 0.4s var(--bp-ease-out);
2640
+ animation: bp-site-scale-in 0.65s var(--bp-ease-out) both;
2641
+ animation-delay: calc(var(--motion-i, 0) * 50ms);
2642
+ }
2643
+
2644
+ .bp-site-index .card:hover {
2645
+ box-shadow: var(--bp-shadow-hover);
2646
+ border-color: color-mix(in srgb, var(--bp-accent) 28%, var(--bp-rule));
2647
+ transform: translateY(-6px);
2648
+ }
2649
+
2650
+ .bp-site-index .card > a,
2651
+ .bp-site-index .card > button.card-link {
2652
+ font: inherit;
2653
+ text-align: left;
2654
+ text-decoration: none;
2655
+ color: inherit;
2656
+ display: flex;
2657
+ flex-direction: column;
2658
+ gap: 0;
2659
+ height: 100%;
2660
+ width: 100%;
2661
+ padding: 0;
2662
+ border: 0;
2663
+ background: transparent;
2664
+ cursor: pointer;
2665
+ }
2666
+
2667
+ .bp-site-index .card-img {
2668
+ display: block;
2669
+ overflow: hidden;
2670
+ background: var(--bp-sunk);
2671
+ }
2672
+
2673
+ .bp-site-index .card-img img {
2674
+ display: block;
2675
+ width: 100%;
2676
+ aspect-ratio: 3 / 2;
2677
+ object-fit: cover;
2678
+ transition: transform 0.55s var(--bp-ease-out);
2679
+ }
2680
+
2681
+ .bp-site-index .card:hover .card-img img { transform: scale(1.06); }
2682
+
2683
+ .bp-site-index .card-img-blank {
2684
+ aspect-ratio: 3 / 2;
2685
+ background: linear-gradient(135deg, var(--bp-sunk), var(--bp-paper-2));
2686
+ }
2687
+
2688
+ .bp-site-index .card-body {
2689
+ display: flex;
2690
+ flex-direction: column;
2691
+ gap: 8px;
2692
+ font-family: var(--bp-font-ui);
2693
+ padding: 18px 18px 20px;
2694
+ flex: 1;
2695
+ }
2696
+
2697
+ .bp-site-index .card-eyebrow {
2698
+ font-size: 11px;
2699
+ font-weight: 750;
2700
+ letter-spacing: 0.1em;
2701
+ text-transform: uppercase;
2702
+ color: var(--bp-accent);
2703
+ }
2704
+
2705
+ .bp-site-index .card-title {
2706
+ font-family: var(--bp-font-body);
2707
+ font-size: clamp(18px, 2.2vw, 21px);
2708
+ line-height: 1.28;
2709
+ letter-spacing: -0.018em;
2710
+ font-weight: 700;
2711
+ transition: color 0.2s ease;
2712
+ }
2713
+
2714
+ .bp-site-index .card:hover .card-title { color: var(--bp-accent); }
2715
+
2716
+ .bp-site-index .card-excerpt {
2717
+ font-size: 14.5px;
2718
+ line-height: 1.6;
2719
+ color: var(--bp-ink-2);
2720
+ }
2721
+
2722
+ .bp-site-index .card-meta {
2723
+ font-size: 12.8px;
2724
+ color: var(--bp-ink-3);
2725
+ display: flex;
2726
+ gap: 12px;
2727
+ flex-wrap: wrap;
2728
+ margin-top: auto;
2729
+ padding-top: 4px;
2730
+ }
2731
+
2732
+ .bp-site-index .card-lead { border-width: 1px; }
2733
+ .bp-site-index .card-lead > a,
2734
+ .bp-site-index .card-lead > button.card-link {
2735
+ gap: 0;
2736
+ flex-direction: column;
2737
+ }
2738
+
2739
+ @media (min-width: 900px) {
2740
+ .bp-site-index .card-lead > a,
2741
+ .bp-site-index .card-lead > button.card-link {
2742
+ flex-direction: row;
2743
+ align-items: stretch;
2744
+ }
2745
+ .bp-site-index .card-lead .card-img { flex: 1 1 58%; min-height: 100%; }
2746
+ .bp-site-index .card-lead .card-img img,
2747
+ .bp-site-index .card-lead .card-img-blank {
2748
+ aspect-ratio: auto;
2749
+ height: 100%;
2750
+ min-height: 320px;
2751
+ }
2752
+ .bp-site-index .card-lead .card-body {
2753
+ flex: 1 1 42%;
2754
+ justify-content: center;
2755
+ padding: clamp(24px, 4vw, 40px);
2756
+ gap: 12px;
2757
+ }
2758
+ .bp-site-index .card-lead .card-title {
2759
+ font-size: clamp(28px, 3.8vw, 40px);
2760
+ line-height: 1.12;
2761
+ }
2762
+ .bp-site-index .card-lead .card-excerpt { font-size: 17px; }
2763
+ }
2764
+
2765
+ /* --- pagination / empty / loading --------------------------------------- */
2766
+
2767
+ .bp-site-index .pagination {
2768
+ display: flex;
2769
+ align-items: center;
2770
+ justify-content: space-between;
2771
+ gap: 16px;
2772
+ font-family: var(--bp-font-ui);
2773
+ font-size: 14px;
2774
+ padding: 16px 0 8px;
2775
+ border-top: 1px solid var(--bp-rule);
2776
+ margin-top: 8px;
2777
+ }
2778
+
2779
+ .bp-site-index .pagination button {
2780
+ font: inherit;
2781
+ text-decoration: none;
2782
+ padding: 10px 18px;
2783
+ border: 1px solid var(--bp-rule);
2784
+ border-radius: 100px;
2785
+ color: var(--bp-ink-2);
2786
+ background: var(--bp-paper);
2787
+ cursor: pointer;
2788
+ transition: border-color 0.2s ease, color 0.2s ease, transform 0.2s var(--bp-ease-out);
2789
+ }
2790
+
2791
+ .bp-site-index .pagination button:hover:not(:disabled) {
2792
+ border-color: var(--bp-accent);
2793
+ color: var(--bp-accent);
2794
+ transform: translateY(-2px);
2795
+ }
2796
+
2797
+ .bp-site-index .pagination button:disabled,
2798
+ .bp-site-index .pagination [aria-disabled="true"] {
2799
+ color: var(--bp-ink-3);
2800
+ opacity: 0.5;
2801
+ cursor: not-allowed;
2802
+ }
2803
+
2804
+ .bp-site-index .empty {
2805
+ padding: clamp(48px, 8vw, 80px) 0;
2806
+ color: var(--bp-ink-3);
2807
+ font-family: var(--bp-font-ui);
2808
+ font-size: 17px;
2809
+ }
2810
+
2811
+ .bp-site-index .bp-state {
2812
+ padding: clamp(48px, 8vw, 80px) var(--bp-site-pad);
2813
+ font-family: var(--bp-font-ui);
2814
+ color: var(--bp-ink-3);
2815
+ text-align: center;
2816
+ }
2817
+
2818
+ .bp-site-index .bp-state--error { color: #b91c1c; }
2819
+
2820
+ @media (prefers-reduced-motion: reduce) {
2821
+ .bp-site-index .site-animate-in > .site-animate-item,
2822
+ .bp-site-index .card,
2823
+ .bp-site-index .site-hero-glow,
2824
+ .bp-site-index .site-index-bridge-glow {
2825
+ animation: none !important;
2826
+ opacity: 1;
2827
+ transform: none;
2828
+ }
2829
+ .bp-site-index .card:hover { transform: none; }
2830
+ .bp-site-index .card:hover .card-img img { transform: none; }
2831
+ }
2832
+
2833
+ /* --- media hero (BlogUploader SiteMediaHero) ----------------------------- */
2834
+
2835
+ @keyframes hero-ken-burns {
2836
+ from { transform: scale(1.04); }
2837
+ to { transform: scale(1.12); }
2838
+ }
2839
+ @keyframes hero-scrim-pulse {
2840
+ 0%, 100% { opacity: 0.92; }
2841
+ 50% { opacity: 0.98; }
2842
+ }
2843
+ @keyframes hero-loop-arrow {
2844
+ 0%, 100% { transform: translateX(0); }
2845
+ 50% { transform: translateX(6px); }
2846
+ }
2847
+
2848
+ .bp-site-index .site-hero-media {
2849
+ position: relative;
2850
+ width: 100%;
2851
+ min-height: clamp(520px, 92vh, 920px);
2852
+ display: flex;
2853
+ align-items: flex-end;
2854
+ overflow: hidden;
2855
+ color: #fff;
2856
+ isolation: isolate;
2857
+ --hero-shadow-ink: #141418;
2858
+ --hero-shadow-gray: #2e2e34;
2859
+ --hero-shadow-soft: rgba(0, 0, 0, 0.42);
2860
+ --hero-shadow-mid: rgba(0, 0, 0, 0.55);
2861
+ --hero-shadow-deep: rgba(0, 0, 0, 0.72);
2862
+ --hero-text-depth:
2863
+ 0 1px 0 var(--hero-shadow-gray),
2864
+ 0 2px 4px var(--hero-shadow-soft),
2865
+ 0 6px 14px var(--hero-shadow-mid);
2866
+ --hero-text-depth-lg:
2867
+ 0 1px 0 var(--hero-shadow-gray),
2868
+ 0 3px 6px var(--hero-shadow-soft),
2869
+ 0 8px 20px var(--hero-shadow-mid),
2870
+ 0 16px 40px var(--hero-shadow-deep);
2871
+ }
2872
+
2873
+ .bp-site-index .site-hero-media-bg {
2874
+ position: absolute;
2875
+ inset: 0;
2876
+ z-index: 0;
2877
+ background: #0a0b10;
2878
+ overflow: hidden;
2879
+ }
2880
+
2881
+ .bp-site-index .site-hero-media-slide {
2882
+ position: absolute;
2883
+ inset: 0;
2884
+ opacity: 0;
2885
+ transition: opacity 0.85s var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1));
2886
+ pointer-events: none;
2887
+ }
2888
+ .bp-site-index .site-hero-media-slide.is-active {
2889
+ opacity: 1;
2890
+ z-index: 1;
2891
+ }
2892
+
2893
+ .bp-site-index .site-hero-media-visual {
2894
+ position: absolute;
2895
+ inset: 0;
2896
+ width: 100%;
2897
+ height: 100%;
2898
+ max-width: none;
2899
+ object-fit: cover;
2900
+ object-position: center;
2901
+ border: 0;
2902
+ pointer-events: none;
2903
+ transform-origin: center center;
2904
+ animation: hero-ken-burns 22s var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1)) infinite alternate;
2905
+ }
2906
+
2907
+ .bp-site-index .site-hero-media-scrim {
2908
+ position: absolute;
2909
+ inset: 0;
2910
+ background:
2911
+ linear-gradient(180deg, rgba(8, 9, 14, 0.35) 0%, rgba(8, 9, 14, 0.15) 38%, rgba(8, 9, 14, 0.82) 100%),
2912
+ linear-gradient(90deg, rgba(8, 9, 14, 0.72) 0%, rgba(8, 9, 14, 0.2) 55%, transparent 100%);
2913
+ animation: hero-scrim-pulse 8s ease-in-out infinite;
2914
+ }
2915
+
2916
+ .bp-site-index .site-hero-media-grain {
2917
+ position: absolute;
2918
+ inset: 0;
2919
+ opacity: 0.06;
2920
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
2921
+ mix-blend-mode: overlay;
2922
+ pointer-events: none;
2923
+ }
2924
+
2925
+ .bp-site-index .site-hero-media-content {
2926
+ position: relative;
2927
+ z-index: 2;
2928
+ width: 100%;
2929
+ max-width: var(--site-max, var(--bp-site-max));
2930
+ margin: 0 auto;
2931
+ padding: clamp(96px, 14vh, 140px) var(--site-pad, var(--bp-site-pad)) clamp(48px, 8vh, 88px);
2932
+ }
2933
+
2934
+ .bp-site-index .site-hero-media-copy {
2935
+ max-width: min(720px, 92%);
2936
+ overflow: visible;
2937
+ }
2938
+ .bp-site-index .site-hero-media-copy .hero-fade-slide {
2939
+ overflow: visible;
2940
+ }
2941
+ .bp-site-index .site-hero-media-meta-wrap .site-hero-media-meta {
2942
+ margin-top: 18px;
2943
+ }
2944
+
2945
+ .bp-site-index .site-hero-media-eyebrow {
2946
+ margin: 0;
2947
+ font-family: var(--font-ui, var(--bp-font-ui));
2948
+ font-size: 12px;
2949
+ font-weight: 750;
2950
+ letter-spacing: 0.14em;
2951
+ text-transform: uppercase;
2952
+ color: #f2f2f5;
2953
+ text-shadow: 0 1px 2px var(--hero-shadow-soft), 0 3px 10px var(--hero-shadow-mid);
2954
+ }
2955
+
2956
+ .bp-site-index .site-hero-media-title {
2957
+ margin: 16px 0 0;
2958
+ font-family: var(--font-body, var(--bp-font-body));
2959
+ font-size: clamp(36px, 6.8vw, 72px);
2960
+ line-height: 1.02;
2961
+ letter-spacing: -0.04em;
2962
+ font-weight: 700;
2963
+ text-wrap: balance;
2964
+ max-width: 16ch;
2965
+ color: #fff;
2966
+ text-shadow: var(--hero-text-depth-lg);
2967
+ }
2968
+
2969
+ .bp-site-index .site-hero-media-desc {
2970
+ margin: 20px 0 0;
2971
+ font-family: var(--font-ui, var(--bp-font-ui));
2972
+ font-size: clamp(16px, 2.1vw, 20px);
2973
+ line-height: 1.55;
2974
+ color: #e8e8ec;
2975
+ max-width: 48ch;
2976
+ text-shadow: var(--hero-text-depth);
2977
+ }
2978
+
2979
+ .bp-site-index .site-hero-media-meta {
2980
+ display: flex;
2981
+ gap: 14px;
2982
+ margin-top: 18px;
2983
+ font-family: var(--font-ui, var(--bp-font-ui));
2984
+ font-size: 13px;
2985
+ font-weight: 600;
2986
+ letter-spacing: 0.04em;
2987
+ text-transform: uppercase;
2988
+ color: #d4d4da;
2989
+ transform-origin: left center;
2990
+ text-shadow: 0 1px 2px var(--hero-shadow-soft), 0 3px 8px var(--hero-shadow-mid);
2991
+ }
2992
+ .bp-site-index .site-hero-media-meta time::after {
2993
+ content: "·";
2994
+ margin: 0 10px;
2995
+ opacity: 0.5;
2996
+ }
2997
+ .bp-site-index .site-hero-media-reading:only-child,
2998
+ .bp-site-index .site-hero-media-meta time:only-child::after {
2999
+ display: none;
3000
+ }
3001
+
3002
+ .bp-site-index .site-hero-media-cta {
3003
+ --hero-cta-text: #ffffff;
3004
+ --hero-cta-depth: var(--hero-shadow-gray);
3005
+ display: inline-flex;
3006
+ align-items: center;
3007
+ gap: 10px;
3008
+ margin-top: 28px;
3009
+ padding: 15px 30px;
3010
+ border-radius: 100px;
3011
+ font-family: var(--font-ui, var(--bp-font-ui));
3012
+ font-size: 15px;
3013
+ font-weight: 700;
3014
+ letter-spacing: 0.02em;
3015
+ line-height: 1;
3016
+ text-decoration: none;
3017
+ color: var(--hero-cta-text);
3018
+ background: linear-gradient(
3019
+ 165deg,
3020
+ color-mix(in srgb, var(--accent, var(--bp-accent)) 82%, #fff) 0%,
3021
+ var(--accent, var(--bp-accent)) 48%,
3022
+ color-mix(in srgb, var(--accent, var(--bp-accent)) 88%, #000) 100%
3023
+ );
3024
+ border: 1px solid color-mix(in srgb, #fff 28%, var(--accent, var(--bp-accent)));
3025
+ box-shadow:
3026
+ 0 1px 0 rgba(255, 255, 255, 0.22) inset,
3027
+ 0 -2px 0 rgba(0, 0, 0, 0.35) inset,
3028
+ 0 4px 0 var(--hero-cta-depth),
3029
+ 0 8px 0 var(--hero-shadow-ink),
3030
+ 0 12px 24px -4px var(--hero-shadow-mid),
3031
+ 0 20px 40px -10px var(--hero-shadow-soft);
3032
+ cursor: pointer;
3033
+ appearance: none;
3034
+ transition:
3035
+ transform 0.22s var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1)),
3036
+ box-shadow 0.22s var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1)),
3037
+ filter 0.22s ease,
3038
+ border-color 0.22s ease;
3039
+ }
3040
+ .bp-site-index .site-hero-media-cta:hover {
3041
+ color: var(--hero-cta-text);
3042
+ filter: brightness(1.07);
3043
+ transform: translateY(-2px);
3044
+ }
3045
+ .bp-site-index .site-hero-media-cta-arrow {
3046
+ display: inline-flex;
3047
+ animation: hero-loop-arrow 2.4s var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1)) infinite;
3048
+ }
3049
+
3050
+ .bp-site-index .site-hero-media-edge {
3051
+ position: absolute;
3052
+ left: 0;
3053
+ right: 0;
3054
+ bottom: 0;
3055
+ height: 1px;
3056
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 25%, transparent), transparent);
3057
+ z-index: 3;
3058
+ }
3059
+
3060
+ .bp-site-index .site-hero-media-dots {
3061
+ display: flex;
3062
+ flex-wrap: wrap;
3063
+ gap: 8px;
3064
+ margin-top: 28px;
3065
+ max-width: min(720px, 92%);
3066
+ }
3067
+ .bp-site-index .site-hero-media-dot {
3068
+ width: 8px;
3069
+ height: 8px;
3070
+ padding: 0;
3071
+ border: 0;
3072
+ border-radius: 999px;
3073
+ cursor: pointer;
3074
+ background: color-mix(in srgb, #fff 35%, transparent);
3075
+ transition: width 0.28s var(--ease-out, cubic-bezier(0.22, 1, 0.36, 1)), background 0.28s ease;
3076
+ }
3077
+ .bp-site-index .site-hero-media-dot.is-active {
3078
+ width: 28px;
3079
+ background: #fff;
3080
+ }
3081
+
3082
+ @media (max-width: 640px) {
3083
+ .bp-site-index .site-hero-media {
3084
+ min-height: clamp(480px, 88vh, 720px);
3085
+ }
3086
+ .bp-site-index .site-hero-media-copy { max-width: 100%; }
3087
+ .bp-site-index .site-hero-media-title { max-width: none; }
3088
+ }
3089
+
3090
+ @media (prefers-reduced-motion: reduce) {
3091
+ .bp-site-index .site-hero-media-visual,
3092
+ .bp-site-index .site-hero-media-scrim,
3093
+ .bp-site-index .site-hero-media-cta-arrow {
3094
+ animation: none !important;
3095
+ }
3096
+ .bp-site-index .site-hero-media-slide { transition: none; }
3097
+ .bp-site-index .site-hero-media .hero-fade-slide {
3098
+ opacity: 1;
3099
+ transform: none;
3100
+ animation: none !important;
3101
+ }
3102
+ }
3103
+
3104
+
3105
+