@repobit/dex-system-design 0.23.95 → 0.23.96

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 (84) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/package.json +4 -4
  3. package/src/blog/assets/articles/fbi-crypto-scam-1.jpeg +0 -0
  4. package/src/blog/assets/articles/fbi-crypto-scam-cover.png +0 -0
  5. package/src/blog/assets/fonts/IBMPlexSans-Bold.woff2 +0 -0
  6. package/src/blog/assets/fonts/IBMPlexSans-BoldItalic.woff2 +0 -0
  7. package/src/blog/assets/fonts/IBMPlexSans-Italic.woff2 +0 -0
  8. package/src/blog/assets/fonts/IBMPlexSans-Light.woff2 +0 -0
  9. package/src/blog/assets/fonts/IBMPlexSans-LightItalic.woff2 +0 -0
  10. package/src/blog/assets/fonts/IBMPlexSans-Medium.woff2 +0 -0
  11. package/src/blog/assets/fonts/IBMPlexSans-MediumItalic.woff2 +0 -0
  12. package/src/blog/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
  13. package/src/blog/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
  14. package/src/blog/assets/fonts/IBMPlexSans-SemiBoldItalic.woff2 +0 -0
  15. package/src/blog/assets/fonts/IBMPlexSansCondensed-Bold.woff2 +0 -0
  16. package/src/blog/assets/fonts/IBMPlexSansCondensed-BoldItalic.woff2 +0 -0
  17. package/src/blog/assets/fonts/IBMPlexSansCondensed-Italic.woff2 +0 -0
  18. package/src/blog/assets/fonts/IBMPlexSansCondensed-Light.woff2 +0 -0
  19. package/src/blog/assets/fonts/IBMPlexSansCondensed-LightItalic.woff2 +0 -0
  20. package/src/blog/assets/fonts/IBMPlexSansCondensed-Medium.woff2 +0 -0
  21. package/src/blog/assets/fonts/IBMPlexSansCondensed-MediumItalic.woff2 +0 -0
  22. package/src/blog/assets/fonts/IBMPlexSansCondensed-Regular.woff2 +0 -0
  23. package/src/blog/assets/fonts/IBMPlexSansCondensed-SemiBold.woff2 +0 -0
  24. package/src/blog/assets/fonts/IBMPlexSansCondensed-SemiBoldItalic.woff2 +0 -0
  25. package/src/blog/assets/global-scam-intelligence-report-2026.png +0 -0
  26. package/src/blog/assets/psd-4.jpg +0 -0
  27. package/src/blog/src/articles/FBI warns of crypto investment scam that sends couriers to collect victims' cash-editedAB.docx +0 -0
  28. package/src/blog/src/articles/FBI-crypto-scam-courier-cash.png +0 -0
  29. package/src/blog/src/articles/fbi-crypto-scam.js +324 -0
  30. package/src/blog/src/articles/~$I warns of crypto investment scam that sends couriers to collect victims' cash-editedAB.docx +0 -0
  31. package/src/blog/src/atoms/blog-abstract.js +51 -0
  32. package/src/blog/src/atoms/blog-atoms.stories.js +519 -0
  33. package/src/blog/src/atoms/blog-authors.js +70 -0
  34. package/src/blog/src/atoms/blog-avatar.js +44 -0
  35. package/src/blog/src/atoms/blog-blockquote.js +92 -0
  36. package/src/blog/src/atoms/blog-caption.js +31 -0
  37. package/src/blog/src/atoms/blog-code-block.js +89 -0
  38. package/src/blog/src/atoms/blog-dek.js +30 -0
  39. package/src/blog/src/atoms/blog-featured-image.js +65 -0
  40. package/src/blog/src/atoms/blog-heading.js +63 -0
  41. package/src/blog/src/atoms/blog-image.js +50 -0
  42. package/src/blog/src/atoms/blog-key-takeaways.js +101 -0
  43. package/src/blog/src/atoms/blog-link.js +68 -0
  44. package/src/blog/src/atoms/blog-meta.js +87 -0
  45. package/src/blog/src/atoms/blog-most-popular.js +146 -0
  46. package/src/blog/src/atoms/blog-newsletter-signup.js +342 -0
  47. package/src/blog/src/atoms/blog-paragraph.js +61 -0
  48. package/src/blog/src/atoms/blog-product-upsell.js +168 -0
  49. package/src/blog/src/atoms/blog-related-articles.js +326 -0
  50. package/src/blog/src/atoms/blog-related-label.js +30 -0
  51. package/src/blog/src/atoms/blog-report-promo.js +250 -0
  52. package/src/blog/src/atoms/blog-standout.js +78 -0
  53. package/src/blog/src/atoms/blog-subhead.js +32 -0
  54. package/src/blog/src/atoms/blog-table-of-contents.js +447 -0
  55. package/src/blog/src/atoms/blog-tag.js +86 -0
  56. package/src/blog/src/atoms/blog-title.js +31 -0
  57. package/src/blog/src/base/blog-element.js +10 -0
  58. package/src/blog/src/breakpoints.js +23 -0
  59. package/src/blog/src/content/blog-article.js +736 -0
  60. package/src/blog/src/content/blog-atoms-showcase.js +401 -0
  61. package/src/blog/src/content/blog-page-layout.js +73 -0
  62. package/src/blog/src/content/blog-pages.stories.js +101 -0
  63. package/src/blog/src/content/render-inline-content.js +18 -0
  64. package/src/blog/src/data/popular-articles.js +43 -0
  65. package/src/blog/src/data/related-articles.js +58 -0
  66. package/src/blog/src/index.js +104 -0
  67. package/src/blog/src/lib/article-toc.js +206 -0
  68. package/src/blog/src/lib/load-prism.js +23 -0
  69. package/src/blog/src/shell/blog-shell.js +31 -0
  70. package/src/blog/src/styles/prism-theme.js +65 -0
  71. package/src/blog/src/tokens/blog.js +406 -0
  72. package/src/blog/src/tokens/core.js +811 -0
  73. package/src/blog/src/tokens/fonts.css +241 -0
  74. package/src/blog/src/tokens/index.js +27 -0
  75. package/src/blog/src/tokens/legacy.js +58 -0
  76. package/src/blog/tokens/blog.js +406 -0
  77. package/src/blog/tokens/core.js +811 -0
  78. package/src/blog/tokens/fonts.css +241 -0
  79. package/src/blog/tokens/index.js +27 -0
  80. package/src/blog/tokens/legacy.js +58 -0
  81. package/src/blog/tokens.css +1512 -0
  82. package/src/blog/tokens.js +1 -0
  83. package/src/blog/vendor/prism/prism.css +120 -0
  84. package/src/blog/vendor/prism/prism.js +300 -0
@@ -0,0 +1,406 @@
1
+ /** Blog-specific tokens — source of truth. Run npm run build:tokens to sync tokens.css */
2
+ export const blogVars = `
3
+ /* ================================
4
+ BLOG — LAYOUT
5
+ ================================ */
6
+
7
+ --layout-content-max-width: var(--content-width-max);
8
+ --layout-article-max-width: 45rem;
9
+ --layout-article-inline-padding: var(--spacing-24);
10
+ --layout-page-max-width: var(--layout-content-max-width);
11
+ --layout-page-gap: var(--spacing-32);
12
+ --layout-page-main-ratio: 3fr;
13
+ --layout-page-sidebar-ratio: 1fr;
14
+ --layout-article-toc-width: 13rem;
15
+ --layout-article-toc-gap: var(--spacing-32);
16
+ --layout-section-gap: var(--spacing-64);
17
+
18
+ --layout-awards-section-background: var(--color-surface-brand);
19
+ --layout-awards-banner-max-width: 37.5rem;
20
+ --layout-awards-cluster-max-width: 49.5625rem;
21
+ --layout-awards-intro-max-width: 39.4375rem;
22
+ --layout-awards-content-max-width: 53.0625rem;
23
+ --layout-ensemble-inline-padding: var(--spacing-24);
24
+
25
+ /* ================================
26
+ BLOG — PROSE / ARTICLE
27
+ ================================ */
28
+
29
+ --blog-prose-max-width: var(--content-width-readable);
30
+ --blog-prose-fontSize: var(--typography-body-regular-fontSize);
31
+ --blog-prose-lineHeight: var(--typography-body-regular-lineHeight);
32
+ --blog-prose-color: var(--color-text-primary);
33
+ --blog-prose-paragraph-spacing: var(--spacing-24);
34
+ --blog-prose-heading-spacing-top: var(--spacing-48);
35
+ --blog-prose-heading-spacing-bottom: var(--spacing-16);
36
+ --blog-prose-list-spacing: var(--spacing-8);
37
+ --blog-prose-list-indent: var(--spacing-24);
38
+
39
+ --blog-prose-subhead-fontFamily: var(--typography-fontFamily-sans-condensed);
40
+ --blog-prose-subhead-fontSize: var(--typography-fontSize-2xl);
41
+ --blog-prose-subhead-fontWeight: var(--typography-fontWeight-semibold);
42
+ --blog-prose-subhead-lineHeight: var(--typography-lineHeight-snug);
43
+ --blog-prose-subhead-color: var(--blog-prose-color);
44
+ --blog-prose-subhead-spacing-top: var(--spacing-32);
45
+ --blog-prose-subhead-spacing-bottom: var(--spacing-8);
46
+
47
+ --blog-related-label-fontFamily: var(--typography-fontFamily-sans);
48
+ --blog-related-label-fontSize: var(--blog-prose-fontSize);
49
+ --blog-related-label-fontWeight: var(--typography-body-regular-fontWeight);
50
+ --blog-related-label-fontStyle: italic;
51
+ --blog-related-label-lineHeight: var(--blog-prose-lineHeight);
52
+ --blog-related-label-color: var(--blog-prose-color);
53
+ --blog-related-label-spacing-top: var(--spacing-32);
54
+
55
+ /* Hero abstract accent — left bar only (not used by body quotes) */
56
+ --blog-accent-border-width: var(--border-width-2);
57
+ --blog-accent-border-color: var(--color-blue-500);
58
+ --blog-accent-padding: var(--spacing-24);
59
+
60
+ /* Body quote — tinted panel + oversized opening mark */
61
+ --blog-quote-background: var(--color-blue-50);
62
+ --blog-quote-borderRadius: var(--radius-2xl);
63
+ --blog-quote-padding-block: var(--spacing-24);
64
+ --blog-quote-padding-inline: var(--spacing-24);
65
+ --blog-quote-padding-inline-start: var(--spacing-16);
66
+ --blog-quote-mark-gap: var(--spacing-4);
67
+ --blog-quote-mark-fontSize: 4rem;
68
+ --blog-quote-mark-fontFamily: var(--typography-fontFamily-sans-condensed);
69
+ --blog-quote-mark-fontWeight: var(--typography-fontWeight-semibold);
70
+ --blog-quote-mark-color: var(--color-blue-200);
71
+ --blog-quote-mark-offset-top: -0.05em;
72
+ --blog-quote-mark-lineHeight: 0.85;
73
+ --blog-quote-fontSize: var(--typography-fontSize-xl);
74
+ --blog-quote-lineHeight: var(--typography-lineHeight-relaxed);
75
+ --blog-quote-color: var(--color-text-primary);
76
+ --blog-quote-fontStyle: italic;
77
+ --blog-quote-attribution-fontSize: var(--typography-fontSize-sm);
78
+ --blog-quote-attribution-color: var(--color-text-muted);
79
+
80
+ --blog-pullquote-fontSize: var(--typography-fontSize-2xl);
81
+ --blog-pullquote-fontWeight: var(--typography-fontWeight-medium);
82
+ --blog-pullquote-lineHeight: var(--typography-lineHeight-snug);
83
+ --blog-pullquote-color: var(--color-text-primary);
84
+
85
+ --blog-code-block-background: var(--color-neutral-50);
86
+ --blog-code-block-color: var(--color-text-primary);
87
+ --blog-code-block-fontFamily: var(--typography-code-block-fontFamily);
88
+ --blog-code-block-fontSize: var(--typography-code-block-fontSize);
89
+ --blog-code-block-fontWeight: var(--typography-code-block-fontWeight);
90
+ --blog-code-block-lineHeight: var(--typography-code-block-lineHeight);
91
+ --blog-code-block-padding: var(--spacing-24);
92
+ --blog-code-block-borderRadius: var(--radius-2xl);
93
+ --blog-code-block-selection-background: var(--color-neutral-100);
94
+
95
+ /* ================================
96
+ BLOG — META & BYLINE
97
+ ================================ */
98
+
99
+ --blog-meta-fontSize: var(--typography-fontSize-sm);
100
+ --blog-meta-fontWeight: var(--typography-fontWeight-normal);
101
+ --blog-meta-color: var(--color-text-muted);
102
+ --blog-meta-gap: var(--spacing-8);
103
+ --blog-meta-separator-fontSize: var(--typography-fontSize-base);
104
+ --blog-meta-separator-color: var(--color-text-muted);
105
+ --blog-meta-separator-fontWeight: var(--typography-fontWeight-semibold);
106
+
107
+ --blog-byline-fontSize: var(--typography-fontSize-sm);
108
+ --blog-byline-color: var(--color-text-secondary);
109
+ --blog-byline-gap: var(--spacing-12);
110
+ --blog-byline-avatar-size: var(--dimension-40px);
111
+
112
+ --blog-date-color: var(--color-text-muted);
113
+ --blog-reading-time-color: var(--color-text-muted);
114
+
115
+ /* ================================
116
+ BLOG — AUTHORS (HERO)
117
+ ================================ */
118
+
119
+ --blog-authors-label-fontSize: var(--typography-fontSize-sm);
120
+ --blog-authors-label-fontWeight: var(--typography-fontWeight-medium);
121
+ --blog-authors-label-color: var(--color-text-primary);
122
+ --blog-authors-gap: var(--spacing-8);
123
+ --blog-authors-pill-gap: var(--spacing-8);
124
+
125
+ --blog-hero-divider-width: var(--border-width-1);
126
+ --blog-hero-divider-color: var(--color-border-subtle);
127
+
128
+ /* ================================
129
+ BLOG — TAGS & CHIPS
130
+ ================================ */
131
+
132
+ --blog-tag-padding: var(--spacing-4) var(--spacing-8);
133
+ --blog-tag-fontSize: var(--typography-label-default-fontSize);
134
+ --blog-tag-fontWeight: var(--typography-label-default-fontWeight);
135
+ --blog-tag-lineHeight: var(--dimension-20px);
136
+ --blog-tag-borderRadius: var(--radius-full);
137
+ --blog-tag-border-width: var(--border-width-1);
138
+ --blog-tag-gap: var(--spacing-8);
139
+
140
+ --blog-tag-default-background: var(--color-surface-subtle);
141
+ --blog-tag-default-color: var(--color-text-secondary);
142
+ --blog-tag-default-border-color: var(--color-border-subtle);
143
+
144
+ --blog-tag-brand-background: var(--color-blue-100);
145
+ --blog-tag-brand-color: var(--color-blue-800);
146
+ --blog-tag-brand-border-color: var(--color-blue-100);
147
+
148
+ --blog-tag-brand-hover-background: var(--color-blue-200);
149
+ --blog-tag-brand-hover-color: var(--color-blue-800);
150
+
151
+ --blog-tag-hover-background: var(--color-neutral-100);
152
+ --blog-tag-hover-color: var(--color-text-primary);
153
+
154
+ /* ================================
155
+ BLOG — CARDS
156
+ ================================ */
157
+
158
+ --blog-card-padding: var(--spacing-24);
159
+ --blog-card-gap: var(--spacing-16);
160
+ --blog-card-borderRadius: var(--radius-lg);
161
+ --blog-card-border-color: var(--color-border-subtle);
162
+ --blog-card-background: var(--color-surface);
163
+ --blog-card-shadow: var(--shadow-sm);
164
+ --blog-card-shadow-hover: var(--shadow-md);
165
+ --blog-card-title-fontSize: var(--typography-fontSize-xl);
166
+ --blog-card-title-fontWeight: var(--typography-fontWeight-semibold);
167
+ --blog-card-title-fontFamily: var(--typography-heading-h5-fontFamily);
168
+ --blog-card-excerpt-color: var(--color-text-secondary);
169
+ --blog-card-image-aspect-ratio: 16 / 9;
170
+
171
+ /* ================================
172
+ BLOG — KEY TAKEAWAYS
173
+ ================================ */
174
+
175
+ --blog-takeaways-borderRadius: var(--radius-2xl);
176
+ --blog-takeaways-border-width: var(--border-width-1);
177
+ --blog-takeaways-border-color: var(--blog-card-border-color);
178
+ --blog-takeaways-background: var(--blog-card-background);
179
+ --blog-takeaways-padding-inline: var(--spacing-24);
180
+ --blog-takeaways-header-padding-block: var(--spacing-20);
181
+ --blog-takeaways-header-padding-bottom: var(--spacing-20);
182
+ --blog-takeaways-body-padding-top: var(--spacing-16);
183
+ --blog-takeaways-body-padding-bottom: var(--spacing-24);
184
+ --blog-takeaways-divider-width: var(--border-width-1);
185
+ --blog-takeaways-divider-color: var(--color-border-subtle);
186
+ --blog-takeaways-title-fontFamily: var(--typography-fontFamily-sans-condensed);
187
+ --blog-takeaways-title-fontSize: var(--typography-fontSize-base);
188
+ --blog-takeaways-title-fontWeight: var(--typography-fontWeight-bold);
189
+ --blog-takeaways-title-lineHeight: var(--typography-lineHeight-normal);
190
+ --blog-takeaways-title-color: var(--color-text-primary);
191
+ --blog-takeaways-item-fontSize: var(--blog-prose-fontSize);
192
+ --blog-takeaways-item-fontWeight: var(--typography-fontWeight-normal);
193
+ --blog-takeaways-item-lineHeight: var(--typography-lineHeight-relaxed);
194
+ --blog-takeaways-item-color: var(--blog-prose-color);
195
+ --blog-takeaways-item-gap: var(--spacing-12);
196
+ --blog-takeaways-list-indent: var(--spacing-16);
197
+ --blog-takeaways-bullet-gap: var(--spacing-4);
198
+
199
+ /* ================================
200
+ BLOG — TABLE OF CONTENTS
201
+ ================================ */
202
+
203
+ --blog-toc-borderRadius: var(--blog-takeaways-borderRadius);
204
+ --blog-toc-border-width: var(--blog-takeaways-border-width);
205
+ --blog-toc-border-color: var(--blog-takeaways-border-color);
206
+ --blog-toc-background: var(--blog-takeaways-background);
207
+ --blog-toc-link-fontSize: var(--blog-nav-link-fontSize);
208
+ --blog-toc-link-fontWeight: var(--blog-nav-link-fontWeight);
209
+ --blog-toc-link-lineHeight: var(--typography-lineHeight-normal);
210
+ --blog-toc-link-color: var(--blog-nav-link-color);
211
+ --blog-toc-link-hover-color: var(--blog-nav-link-hover-color);
212
+ --blog-toc-item-gap: var(--spacing-8);
213
+ --blog-toc-sticky-offset: var(--spacing-24);
214
+ --blog-toc-marker-size: var(--spacing-8);
215
+ --blog-toc-marker-gap: var(--spacing-8);
216
+ --blog-toc-marker-offset-top: 0.65em;
217
+ --blog-toc-marker-color: var(--color-blue-500);
218
+ --blog-toc-link-active-color: var(--color-blue-600);
219
+ --blog-toc-scroll-offset: var(--spacing-48);
220
+ --blog-toc-reading-line-offset: var(--spacing-128);
221
+ --blog-toc-toggle-size: var(--spacing-32);
222
+ --blog-toc-toggle-fontSize: var(--typography-fontSize-2xl);
223
+ --blog-toc-toggle-color: var(--color-blue-500);
224
+ --blog-toc-toggle-hover-color: var(--color-blue-600);
225
+
226
+ /* ================================
227
+ BLOG — REPORT PROMO
228
+ Sidebar lead magnet — aliases only; styles use shared core/blog tokens.
229
+ ================================ */
230
+
231
+ --blog-report-promo-background: var(--color-blue-100);
232
+ --blog-report-promo-borderRadius: var(--blog-takeaways-borderRadius);
233
+ --blog-report-promo-border-width: var(--blog-newsletter-border-width);
234
+ --blog-report-promo-border-color: var(--blog-newsletter-border-color);
235
+ --blog-report-promo-max-width: 40rem;
236
+ --blog-report-promo-padding: var(--spacing-24);
237
+ --blog-report-promo-gap: var(--spacing-24);
238
+ --blog-report-promo-media-max-height: 16rem;
239
+ --blog-report-promo-media-width-desktop: 13.25rem;
240
+ --blog-report-promo-image-width-desktop: 26.5625rem;
241
+ --blog-report-promo-media-aspect-ratio: 490 / 157;
242
+ --blog-report-promo-image-crop-offset: -70%;
243
+ --blog-report-promo-image-height-ratio: 492 / 157;
244
+ --blog-report-promo-title-fontSize: var(--typography-fontSize-xl);
245
+ --blog-report-promo-title-fontWeight: var(--typography-fontWeight-semibold);
246
+ --blog-report-promo-title-lineHeight: var(--typography-lineHeight-snug);
247
+ --blog-report-promo-title-color: var(--color-text-primary);
248
+ --blog-report-promo-description-fontSize: var(--typography-fontSize-base);
249
+ --blog-report-promo-description-lineHeight: var(--typography-lineHeight-normal);
250
+ --blog-report-promo-description-color: var(--color-text-muted);
251
+ --blog-report-promo-body-gap: var(--spacing-8);
252
+ --blog-report-promo-cta-spacing-top: var(--spacing-4);
253
+
254
+ /* ================================
255
+ BLOG — RELATED ARTICLES
256
+ ================================ */
257
+
258
+ --blog-related-title-fontFamily: var(--typography-fontFamily-sans-condensed);
259
+ --blog-related-title-fontSize: var(--typography-fontSize-2xl);
260
+ --blog-related-title-fontWeight: var(--typography-fontWeight-bold);
261
+ --blog-related-title-lineHeight: var(--typography-lineHeight-snug);
262
+ --blog-related-title-color: var(--color-text-primary);
263
+ --blog-related-title-spacing-bottom: var(--spacing-24);
264
+ --blog-related-grid-gap: var(--spacing-24);
265
+ --blog-related-grid-gap-mobile: var(--spacing-32);
266
+ --blog-related-card-body-gap: var(--spacing-12);
267
+ --blog-related-card-image-gap: var(--spacing-12);
268
+ --blog-related-card-divider-color: var(--color-border-subtle);
269
+ --blog-related-card-divider-width: var(--border-width-1);
270
+ --blog-related-card-image-aspect-ratio-mobile: 2 / 1;
271
+ --blog-related-mobile-preview-count: 2;
272
+ --blog-related-see-all-fontFamily: var(--typography-fontFamily-sans);
273
+ --blog-related-see-all-fontSize: var(--typography-fontSize-base);
274
+ --blog-related-see-all-fontWeight: var(--typography-fontWeight-medium);
275
+ --blog-related-see-all-color: var(--color-blue-500);
276
+ --blog-related-see-all-hover-color: var(--color-blue-700);
277
+ --blog-related-see-all-spacing-top: var(--spacing-8);
278
+ --blog-related-see-all-underline-offset: 0.15em;
279
+ --blog-related-card-title-fontFamily: var(--blog-card-title-fontFamily);
280
+ --blog-related-card-title-fontSize: var(--blog-card-title-fontSize);
281
+ --blog-related-card-title-fontWeight: var(--blog-card-title-fontWeight);
282
+ --blog-related-card-title-lineHeight: var(--typography-lineHeight-snug);
283
+ --blog-related-card-title-color: var(--color-text-primary);
284
+ --blog-related-card-excerpt-fontSize: var(--typography-fontSize-sm);
285
+ --blog-related-card-excerpt-color: var(--blog-card-excerpt-color);
286
+ --blog-related-card-meta-fontSize: var(--blog-meta-fontSize);
287
+ --blog-related-card-image-aspect-ratio: var(--blog-card-image-aspect-ratio);
288
+ --blog-related-card-image-borderRadius: var(--radius-xl);
289
+ --blog-related-card-tag-inset: var(--spacing-12);
290
+ --blog-related-card-tag-background: var(--blog-tag-brand-background);
291
+ --blog-related-card-tag-color: var(--blog-tag-brand-color);
292
+ --blog-related-card-tag-border-color: var(--blog-tag-brand-border-color);
293
+
294
+ /* ================================
295
+ BLOG — MOST POPULAR
296
+ ================================ */
297
+
298
+ --blog-popular-title-fontFamily: var(--typography-fontFamily-sans-condensed);
299
+ --blog-popular-title-fontSize: var(--typography-fontSize-2xl);
300
+ --blog-popular-title-fontWeight: var(--typography-fontWeight-semibold);
301
+ --blog-popular-title-lineHeight: var(--typography-lineHeight-snug);
302
+ --blog-popular-title-color: var(--color-text-primary);
303
+ --blog-popular-title-spacing-bottom: var(--spacing-24);
304
+ --blog-popular-item-gap: var(--spacing-24);
305
+ --blog-popular-item-inner-gap: var(--spacing-12);
306
+ --blog-popular-thumb-width: 5rem;
307
+ --blog-popular-thumb-aspect-ratio: var(--blog-card-image-aspect-ratio);
308
+ --blog-popular-thumb-borderRadius: var(--radius-lg);
309
+ --blog-popular-thumb-background: var(--blog-content-image-background);
310
+ --blog-popular-item-title-fontFamily: var(--typography-fontFamily-sans);
311
+ --blog-popular-item-title-fontSize: var(--typography-fontSize-sm);
312
+ --blog-popular-item-title-fontWeight: var(--typography-fontWeight-medium);
313
+ --blog-popular-item-title-lineHeight: var(--typography-lineHeight-snug);
314
+ --blog-popular-item-title-color: var(--color-blue-500);
315
+ --blog-popular-item-date-fontSize: var(--typography-fontSize-xs);
316
+ --blog-popular-item-date-color: var(--color-text-muted);
317
+ --blog-popular-link-hover-color: var(--color-text-link-hover);
318
+
319
+ /* ================================
320
+ BLOG — HERO
321
+ ================================ */
322
+
323
+ --blog-hero-min-height: 24rem;
324
+ --blog-hero-padding: var(--spacing-64) var(--spacing-24);
325
+ --blog-hero-background: var(--color-surface-brand);
326
+ --blog-hero-title-fontSize: var(--typography-display-md-fontSize);
327
+ --blog-hero-title-fontWeight: var(--typography-fontWeight-semibold);
328
+ --blog-hero-title-lineHeight: var(--typography-display-md-lineHeight);
329
+ --blog-hero-title-fontFamily: var(--typography-display-md-fontFamily);
330
+ --blog-hero-title-color: var(--color-blue-500);
331
+ --blog-hero-subtitle-color: var(--blog-prose-color);
332
+ --blog-hero-subtitle-fontSize: var(--typography-body-lead-fontSize);
333
+ --blog-hero-subtitle-fontFamily: var(--typography-body-lead-fontFamily);
334
+ --blog-hero-subtitle-fontStyle: normal;
335
+ --blog-hero-abstract-border-width: var(--blog-accent-border-width);
336
+ --blog-hero-abstract-border-color: var(--blog-accent-border-color);
337
+ --blog-hero-abstract-padding: var(--spacing-16);
338
+ --blog-abstract-spacing-after-last: var(--spacing-24);
339
+ --blog-hero-abstract-to-featured-gap: var(--spacing-24);
340
+ --blog-hero-featured-borderRadius: var(--radius-2xl);
341
+ --blog-hero-featured-aspect-ratio: 16 / 9;
342
+ --blog-hero-featured-background: var(--color-neutral-50);
343
+
344
+ /* ================================
345
+ BLOG — CONTENT IMAGES
346
+ ================================ */
347
+
348
+ --blog-content-image-borderRadius: var(--blog-hero-featured-borderRadius);
349
+ --blog-content-image-background: var(--color-neutral-100);
350
+
351
+ --blog-standout-fontFamily: var(--typography-fontFamily-sans-condensed);
352
+ --blog-standout-fontSize: var(--typography-fontSize-xl);
353
+ --blog-standout-fontWeight: var(--typography-fontWeight-bold);
354
+ --blog-standout-fontStyle: italic;
355
+ --blog-standout-lineHeight: var(--typography-lineHeight-snug);
356
+ --blog-standout-color: var(--color-text-primary);
357
+
358
+ /* ================================
359
+ BLOG — NAVIGATION
360
+ ================================ */
361
+
362
+ --blog-nav-height: 4rem;
363
+ --blog-nav-padding: 0 var(--spacing-24);
364
+ --blog-nav-background: var(--color-surface);
365
+ --blog-nav-border-color: var(--color-border-subtle);
366
+ --blog-nav-link-color: var(--color-text-primary);
367
+ --blog-nav-link-hover-color: var(--color-text-link);
368
+ --blog-nav-link-fontSize: var(--typography-fontSize-sm);
369
+ --blog-nav-link-fontWeight: var(--typography-fontWeight-medium);
370
+
371
+ /* ================================
372
+ BLOG — NEWSLETTER SIGNUP
373
+ ================================ */
374
+
375
+ --blog-newsletter-padding: var(--spacing-32);
376
+ --blog-newsletter-gap: var(--spacing-24);
377
+ --blog-newsletter-borderRadius: var(--radius-2xl);
378
+ --blog-newsletter-border-width: var(--border-width-1);
379
+ --blog-newsletter-border-color: var(--blog-card-border-color);
380
+ --blog-newsletter-background: var(--blog-card-background);
381
+ --blog-newsletter-icon-size: var(--icon-2xl-size);
382
+ --blog-newsletter-icon-color: var(--color-blue-500);
383
+ --blog-newsletter-heading-fontFamily: var(--typography-fontFamily-sans);
384
+ --blog-newsletter-heading-fontSize: var(--typography-fontSize-xl);
385
+ --blog-newsletter-heading-fontWeight: var(--typography-fontWeight-normal);
386
+ --blog-newsletter-heading-lineHeight: var(--typography-lineHeight-snug);
387
+ --blog-newsletter-heading-color: var(--color-text-primary);
388
+ --blog-newsletter-heading-max-width: 28rem;
389
+ --blog-newsletter-heading-emphasis-fontStyle: italic;
390
+ --blog-newsletter-description-fontFamily: var(--typography-fontFamily-sans);
391
+ --blog-newsletter-description-fontSize: var(--typography-fontSize-sm);
392
+ --blog-newsletter-description-fontWeight: var(--typography-fontWeight-normal);
393
+ --blog-newsletter-description-lineHeight: var(--typography-lineHeight-normal);
394
+ --blog-newsletter-description-color: var(--color-text-muted);
395
+ --blog-newsletter-description-max-width: 28rem;
396
+ --blog-newsletter-form-max-width: 32rem;
397
+ --blog-newsletter-form-gap: var(--spacing-12);
398
+ --blog-newsletter-disclaimer-fontFamily: var(--typography-fontFamily-sans);
399
+ --blog-newsletter-disclaimer-fontSize: var(--typography-fontSize-xs);
400
+ --blog-newsletter-disclaimer-fontWeight: var(--typography-fontWeight-normal);
401
+ --blog-newsletter-disclaimer-lineHeight: var(--typography-lineHeight-normal);
402
+ --blog-newsletter-disclaimer-color: var(--color-text-muted);
403
+ --blog-newsletter-disclaimer-max-width: 28rem;
404
+ --blog-newsletter-spacing-top: var(--spacing-48);
405
+ --blog-newsletter-spacing-bottom: var(--spacing-32);
406
+ `;