@ox-content/vite-plugin 3.0.0-alpha.9 → 3.0.0-beta.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 (79) hide show
  1. package/dist/index.cjs +8893 -2584
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +2023 -205
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.mts +2023 -205
  6. package/dist/index.d.mts.map +1 -1
  7. package/dist/index.mjs +8834 -2530
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/markdown-tables.cjs +70 -0
  10. package/dist/markdown-tables.cjs.map +1 -0
  11. package/dist/markdown-tables.d.cts +22 -0
  12. package/dist/markdown-tables.d.cts.map +1 -0
  13. package/dist/markdown-tables.d.mts +22 -0
  14. package/dist/markdown-tables.d.mts.map +1 -0
  15. package/dist/markdown-tables.mjs +66 -0
  16. package/dist/markdown-tables.mjs.map +1 -0
  17. package/dist/napi.cjs +44 -0
  18. package/dist/napi.cjs.map +1 -0
  19. package/dist/napi.mjs +34 -0
  20. package/dist/napi.mjs.map +1 -0
  21. package/dist/reader-chrome-client.cjs +103 -0
  22. package/dist/reader-chrome-client.d.cts +2 -0
  23. package/dist/reader-chrome-client.d.mts +2 -0
  24. package/dist/reader-chrome-client.mjs +102 -0
  25. package/dist/reader-chrome.cjs +109 -0
  26. package/dist/reader-chrome.cjs.map +1 -0
  27. package/dist/reader-chrome.d.cts +103 -0
  28. package/dist/reader-chrome.d.mts +103 -0
  29. package/dist/reader-chrome.mjs +98 -0
  30. package/dist/reader-chrome.mjs.map +1 -0
  31. package/dist/styles/all.css +15 -0
  32. package/dist/styles/citations.css +62 -0
  33. package/dist/styles/core.css +2261 -0
  34. package/dist/styles/github.css +262 -0
  35. package/dist/styles/graphviz.css +34 -0
  36. package/dist/styles/magic-links.css +33 -0
  37. package/dist/styles/markdown-tables.css +16 -0
  38. package/dist/styles/mermaid.css +151 -0
  39. package/dist/styles/not-by-ai.css +43 -0
  40. package/dist/styles/ogp.css +170 -0
  41. package/dist/styles/reader-chrome.css +163 -0
  42. package/dist/styles/social.css +678 -0
  43. package/dist/styles/tabs.css +210 -0
  44. package/dist/styles/theme-transition.css +37 -0
  45. package/dist/styles/twitter-full.css +598 -0
  46. package/dist/styles/youtube.css +87 -0
  47. package/dist/theme-tokens.cjs +95 -0
  48. package/dist/theme-tokens.cjs.map +1 -0
  49. package/dist/theme-tokens.d.cts +72 -0
  50. package/dist/theme-tokens.d.cts.map +1 -0
  51. package/dist/theme-tokens.d.mts +72 -0
  52. package/dist/theme-tokens.d.mts.map +1 -0
  53. package/dist/theme-tokens.mjs +91 -0
  54. package/dist/theme-tokens.mjs.map +1 -0
  55. package/dist/theme-transition-client.cjs +161 -0
  56. package/dist/theme-transition-client.d.cts +21 -0
  57. package/dist/theme-transition-client.d.mts +21 -0
  58. package/dist/theme-transition-client.mjs +160 -0
  59. package/dist/twitter-client.cjs +84 -0
  60. package/dist/twitter-client.d.cts +11 -0
  61. package/dist/twitter-client.d.mts +11 -0
  62. package/dist/twitter-client.mjs +83 -0
  63. package/dist/vitepress.cjs +614 -77
  64. package/dist/vitepress.cjs.map +1 -1
  65. package/dist/vitepress.mjs +588 -65
  66. package/dist/vitepress.mjs.map +1 -1
  67. package/package.json +89 -4
  68. package/dist/api.cjs +0 -6563
  69. package/dist/api.cjs.map +0 -1
  70. package/dist/api.mjs +0 -6456
  71. package/dist/api.mjs.map +0 -1
  72. package/dist/interop.cjs +0 -31
  73. package/dist/interop.cjs.map +0 -1
  74. package/dist/interop.mjs +0 -26
  75. package/dist/interop.mjs.map +0 -1
  76. package/dist/tabs.cjs +0 -98
  77. package/dist/tabs.cjs.map +0 -1
  78. package/dist/tabs.mjs +0 -99
  79. package/dist/tabs.mjs.map +0 -1
@@ -0,0 +1,678 @@
1
+ /* ox-content Social Embeds - Twitter/X, Bluesky, WebContainer, media iframes */
2
+
3
+ /* Static link cards (<Tweet>/<XPost>/<Bluesky> without build-time fetch) */
4
+ .ox-tweet,
5
+ .ox-bluesky {
6
+ display: block;
7
+ margin: 1.5rem 0;
8
+ border-top: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
9
+ border-bottom: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
10
+ }
11
+
12
+ .ox-tweet > a,
13
+ .ox-bluesky > a {
14
+ display: block;
15
+ padding: 1rem 0;
16
+ text-decoration: none;
17
+ color: var(--octc-color-text);
18
+ }
19
+
20
+ /* A fetched tweet renders `<figure><header>…` rather than wrapping its body in
21
+ one anchor, so the rule above never matches it. Pad the card itself to keep
22
+ it level with the Bluesky card. */
23
+ .ox-tweet--fetched {
24
+ padding: 1rem 0;
25
+ }
26
+
27
+ .ox-tweet > a:hover,
28
+ .ox-bluesky > a:hover {
29
+ text-decoration: none;
30
+ }
31
+
32
+ .ox-tweet > a > span,
33
+ .ox-bluesky > a > span {
34
+ display: block;
35
+ font-size: 0.6875rem;
36
+ font-weight: 600;
37
+ letter-spacing: 0.08em;
38
+ text-transform: uppercase;
39
+ color: var(--octc-color-text-muted);
40
+ margin-bottom: 0.375rem;
41
+ }
42
+
43
+ .ox-tweet > a > strong,
44
+ .ox-bluesky > a > strong {
45
+ display: block;
46
+ font-weight: 600;
47
+ font-size: 0.9375rem;
48
+ color: var(--octc-color-primary);
49
+ overflow: hidden;
50
+ text-overflow: ellipsis;
51
+ white-space: nowrap;
52
+ }
53
+
54
+ .ox-tweet > a:hover > strong,
55
+ .ox-bluesky > a:hover > strong {
56
+ text-decoration: underline;
57
+ }
58
+
59
+ .ox-tweet > a > p,
60
+ .ox-bluesky > a > p {
61
+ margin: 0.5rem 0 0;
62
+ font-size: 0.875rem;
63
+ line-height: 1.5;
64
+ color: var(--octc-color-text-muted);
65
+ }
66
+
67
+ .ox-bluesky__header {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 0.75rem;
71
+ min-width: 0;
72
+ }
73
+
74
+ .ox-bluesky__avatar-wrap {
75
+ flex: 0 0 auto;
76
+ }
77
+
78
+ .ox-bluesky__avatar,
79
+ .ox-bluesky__avatar-fallback {
80
+ display: grid;
81
+ place-items: center;
82
+ width: 42px;
83
+ height: 42px;
84
+ border-radius: 50%;
85
+ background: color-mix(in srgb, var(--octc-color-primary) 16%, var(--octc-color-bg-alt));
86
+ color: var(--octc-color-primary);
87
+ font-weight: 700;
88
+ }
89
+
90
+ .ox-bluesky__avatar {
91
+ object-fit: cover;
92
+ }
93
+
94
+ .ox-bluesky__identity {
95
+ display: grid;
96
+ min-width: 0;
97
+ gap: 0.125rem;
98
+ }
99
+
100
+ .ox-bluesky__author-name,
101
+ .ox-bluesky__handle {
102
+ overflow: hidden;
103
+ text-overflow: ellipsis;
104
+ white-space: nowrap;
105
+ }
106
+
107
+ .ox-bluesky__author-name {
108
+ font-size: 0.95rem;
109
+ line-height: 1.2;
110
+ color: var(--octc-color-text);
111
+ }
112
+
113
+ .ox-bluesky__handle,
114
+ .ox-bluesky__network,
115
+ .ox-bluesky__meta {
116
+ color: var(--octc-color-text-muted);
117
+ }
118
+
119
+ .ox-bluesky__network {
120
+ margin-left: auto;
121
+ flex: 0 0 auto;
122
+ font-size: 0.75rem;
123
+ font-weight: 600;
124
+ }
125
+
126
+ .ox-bluesky__body {
127
+ margin: 0.875rem 0 0;
128
+ font-size: 0.95rem;
129
+ line-height: 1.55;
130
+ color: var(--octc-color-text);
131
+ }
132
+
133
+ .ox-bluesky__meta {
134
+ display: flex;
135
+ flex-wrap: wrap;
136
+ gap: 0.45rem 0.8rem;
137
+ margin-top: 0.875rem;
138
+ font-size: 0.75rem;
139
+ }
140
+
141
+ .ox-bluesky__source {
142
+ color: var(--octc-color-primary);
143
+ font-weight: 600;
144
+ }
145
+
146
+ /* Fetched tweet cards (<Tweet> with `twitter: { fetch: true }`) */
147
+ .ox-tweet--fetched > a {
148
+ padding: 1rem 0;
149
+ }
150
+
151
+ .ox-tweet__header {
152
+ display: flex;
153
+ align-items: center;
154
+ justify-content: space-between;
155
+ gap: 0.5rem;
156
+ margin-bottom: 0.625rem;
157
+ }
158
+
159
+ .ox-tweet__profile {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: 0.625rem;
163
+ min-width: 0;
164
+ }
165
+
166
+ .ox-tweet__avatar {
167
+ width: 40px;
168
+ height: 40px;
169
+ border-radius: 9999px;
170
+ background: var(--octc-color-bg-alt);
171
+ }
172
+
173
+ .ox-tweet__author-name {
174
+ display: block;
175
+ font-weight: 600;
176
+ font-size: 0.9375rem;
177
+ color: var(--octc-color-text);
178
+ }
179
+
180
+ .ox-tweet__author-handle {
181
+ display: block;
182
+ font-size: 0.8125rem;
183
+ color: var(--octc-color-text-muted);
184
+ }
185
+
186
+ .ox-tweet__body {
187
+ margin: 0 0 0.625rem;
188
+ font-size: 0.9375rem;
189
+ line-height: 1.55;
190
+ color: var(--octc-color-text);
191
+ white-space: pre-wrap;
192
+ }
193
+
194
+ .ox-tweet__media {
195
+ display: grid;
196
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
197
+ gap: 0.5rem;
198
+ margin-bottom: 0.625rem;
199
+ }
200
+
201
+ .ox-tweet__media-item {
202
+ width: 100%;
203
+ height: auto;
204
+ border-radius: 8px;
205
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
206
+ background: var(--octc-color-bg-alt);
207
+ }
208
+
209
+ .ox-tweet__media-fallback {
210
+ display: flex;
211
+ flex-direction: column;
212
+ min-width: 0;
213
+ }
214
+
215
+ .ox-tweet__media-fallback > img {
216
+ width: 100%;
217
+ height: auto;
218
+ border-radius: inherit;
219
+ }
220
+
221
+ .ox-tweet__watch {
222
+ margin-top: 0.375rem;
223
+ font-size: 0.8125rem;
224
+ }
225
+
226
+ .ox-tweet__footer {
227
+ display: flex;
228
+ align-items: center;
229
+ gap: 0.5rem;
230
+ font-size: 0.75rem;
231
+ color: var(--octc-color-text-muted);
232
+ }
233
+
234
+ .ox-tweet__permalink {
235
+ overflow: hidden;
236
+ text-overflow: ellipsis;
237
+ white-space: nowrap;
238
+ }
239
+
240
+ .ox-tweet__source {
241
+ color: var(--octc-color-primary);
242
+ font-weight: 600;
243
+ }
244
+
245
+ .ox-tweet__metrics {
246
+ display: flex;
247
+ flex-wrap: wrap;
248
+ gap: 0.4rem 0.75rem;
249
+ margin: 0.5rem 0 0;
250
+ font-size: 0.75rem;
251
+ color: var(--octc-color-text-muted);
252
+ }
253
+
254
+ .ox-tweet__metric strong {
255
+ color: var(--octc-color-text);
256
+ }
257
+
258
+ .ox-tweet__reply {
259
+ margin: 0 0 0.5rem;
260
+ font-size: 0.8125rem;
261
+ }
262
+
263
+ .ox-tweet__reply-link {
264
+ color: var(--octc-color-text-muted);
265
+ text-decoration: none;
266
+ }
267
+
268
+ .ox-tweet__reply-link:hover {
269
+ text-decoration: underline;
270
+ }
271
+
272
+ .ox-tweet__quote {
273
+ margin: 0 0 0.625rem;
274
+ padding: 0.75rem;
275
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
276
+ border-radius: 8px;
277
+ }
278
+
279
+ .ox-tweet__quote-header {
280
+ display: flex;
281
+ align-items: center;
282
+ gap: 0.5rem;
283
+ margin-bottom: 0.5rem;
284
+ }
285
+
286
+ .ox-tweet__quote .ox-tweet__avatar {
287
+ width: 28px;
288
+ height: 28px;
289
+ }
290
+
291
+ .ox-tweet__quote-body {
292
+ margin: 0 0 0.5rem;
293
+ font-size: 0.875rem;
294
+ line-height: 1.5;
295
+ color: var(--octc-color-text);
296
+ white-space: pre-wrap;
297
+ }
298
+
299
+ .ox-tweet__quote .ox-tweet__media {
300
+ margin-bottom: 0;
301
+ }
302
+ /* WebContainer lazy placeholder */
303
+ .ox-webcontainer {
304
+ margin: 1.5rem 0;
305
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
306
+ border-radius: 8px;
307
+ overflow: hidden;
308
+ background: var(--octc-color-bg);
309
+ }
310
+
311
+ .ox-webcontainer__header {
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: space-between;
315
+ gap: 0.75rem;
316
+ padding: 0.65rem 0.85rem;
317
+ border-bottom: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
318
+ background: var(--octc-color-bg-alt);
319
+ }
320
+
321
+ .ox-webcontainer__title {
322
+ display: inline-flex;
323
+ align-items: center;
324
+ min-width: 0;
325
+ gap: 0.55rem;
326
+ }
327
+
328
+ .ox-webcontainer__title strong {
329
+ font-size: 0.875rem;
330
+ color: var(--octc-color-text);
331
+ }
332
+
333
+ .ox-webcontainer__title code {
334
+ color: var(--octc-color-text-muted);
335
+ overflow: hidden;
336
+ text-overflow: ellipsis;
337
+ white-space: nowrap;
338
+ }
339
+
340
+ .ox-webcontainer__status,
341
+ .ox-webcontainer__meta {
342
+ font-size: 0.75rem;
343
+ color: var(--octc-color-text-muted);
344
+ }
345
+
346
+ .ox-webcontainer__status {
347
+ padding: 0.16rem 0.5rem;
348
+ border: 1px solid color-mix(in srgb, var(--octc-color-primary) 26%, transparent);
349
+ border-radius: 999px;
350
+ background: color-mix(in srgb, var(--octc-color-primary) 8%, transparent);
351
+ color: var(--octc-color-primary);
352
+ white-space: nowrap;
353
+ }
354
+
355
+ .ox-webcontainer__preview {
356
+ background: var(--octc-color-code-bg);
357
+ }
358
+
359
+ .ox-webcontainer pre {
360
+ margin: 0;
361
+ border: 0;
362
+ border-radius: 0;
363
+ }
364
+
365
+ .ox-webcontainer__meta {
366
+ display: flex;
367
+ flex-wrap: wrap;
368
+ gap: 0.45rem 0.85rem;
369
+ padding: 0.6rem 0.85rem;
370
+ border-top: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
371
+ background: color-mix(in srgb, var(--octc-color-bg-alt) 54%, transparent);
372
+ }
373
+
374
+ .ox-webcontainer__meta code {
375
+ color: var(--octc-color-text);
376
+ }
377
+ /* Provider cards for static article, place, community, and social embeds */
378
+ .ox-provider-card {
379
+ display: block;
380
+ margin: 1rem 0;
381
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
382
+ border-radius: 6px;
383
+ overflow: hidden;
384
+ background: var(--octc-color-bg);
385
+ }
386
+
387
+ .ox-provider-card__main {
388
+ display: grid;
389
+ color: var(--octc-color-text);
390
+ text-decoration: none;
391
+ }
392
+
393
+ .ox-provider-card__main:hover {
394
+ text-decoration: none;
395
+ }
396
+
397
+ .ox-provider-card__header,
398
+ .ox-provider-card__meta {
399
+ display: flex;
400
+ flex-wrap: wrap;
401
+ align-items: center;
402
+ gap: 0.35rem 0.75rem;
403
+ color: var(--octc-color-text-muted);
404
+ }
405
+
406
+ .ox-provider-card__header {
407
+ min-height: 2.1rem;
408
+ padding: 0.45rem 0.8rem;
409
+ border-bottom: 1px solid color-mix(in srgb, var(--octc-color-border) 68%, transparent);
410
+ background: color-mix(in srgb, var(--octc-color-bg-alt) 60%, transparent);
411
+ font-size: 0.75rem;
412
+ }
413
+
414
+ .ox-provider-card__network,
415
+ .ox-provider-card__source {
416
+ font-weight: 600;
417
+ }
418
+
419
+ .ox-provider-card__network {
420
+ color: var(--octc-color-primary);
421
+ letter-spacing: 0.08em;
422
+ text-transform: uppercase;
423
+ }
424
+
425
+ .ox-provider-card__body-wrap {
426
+ display: flex;
427
+ align-items: flex-start;
428
+ gap: 0.75rem;
429
+ min-width: 0;
430
+ padding: 0.8rem;
431
+ }
432
+
433
+ .ox-provider-card__avatar {
434
+ flex: 0 0 auto;
435
+ width: 42px;
436
+ height: 42px;
437
+ border-radius: 50%;
438
+ object-fit: cover;
439
+ background: var(--octc-color-bg-alt);
440
+ }
441
+
442
+ .ox-provider-card__copy {
443
+ min-width: 0;
444
+ }
445
+
446
+ .ox-provider-card .ox-provider-card__title {
447
+ margin: 0;
448
+ font-size: 1rem;
449
+ line-height: 1.35;
450
+ color: var(--octc-color-text);
451
+ }
452
+
453
+ .ox-provider-card__main:hover .ox-provider-card__title {
454
+ text-decoration: underline;
455
+ }
456
+
457
+ .ox-provider-card .ox-provider-card__excerpt {
458
+ margin: 0.35rem 0 0;
459
+ font-size: 0.875rem;
460
+ line-height: 1.55;
461
+ color: var(--octc-color-text-muted);
462
+ white-space: pre-wrap;
463
+ }
464
+
465
+ .ox-provider-card__image {
466
+ display: block;
467
+ width: 100%;
468
+ height: auto;
469
+ max-height: 420px;
470
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
471
+ border-width: 1px 0 0;
472
+ border-radius: 0;
473
+ object-fit: cover;
474
+ background: var(--octc-color-bg-alt);
475
+ }
476
+
477
+ .ox-provider-card__meta {
478
+ min-height: 2.15rem;
479
+ padding: 0.45rem 0.8rem;
480
+ border-top: 1px solid color-mix(in srgb, var(--octc-color-border) 68%, transparent);
481
+ background: color-mix(in srgb, var(--octc-color-bg-alt) 48%, transparent);
482
+ font-size: 0.75rem;
483
+ }
484
+
485
+ .ox-provider-card__metric > span {
486
+ font-weight: 600;
487
+ color: var(--octc-color-text);
488
+ }
489
+
490
+ .ox-provider-card__source {
491
+ color: var(--octc-color-primary);
492
+ }
493
+
494
+ .ox-provider-card__map {
495
+ display: block;
496
+ width: 100%;
497
+ border: 0;
498
+ border-top: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
499
+ background: var(--octc-color-bg-alt);
500
+ }
501
+ .ox-tweet--rich .ox-tweet__card {
502
+ display: block;
503
+ padding: 1rem 0;
504
+ color: var(--octc-color-text);
505
+ text-decoration: none;
506
+ }
507
+
508
+ .ox-tweet--rich .ox-tweet__profile {
509
+ display: flex;
510
+ align-items: center;
511
+ gap: 0.625rem;
512
+ min-width: 0;
513
+ }
514
+
515
+ .ox-tweet--rich .ox-tweet__avatar-wrap {
516
+ flex: 0 0 auto;
517
+ }
518
+
519
+ .ox-tweet--rich .ox-tweet__avatar,
520
+ .ox-tweet--rich .ox-tweet__avatar-fallback {
521
+ display: grid;
522
+ place-items: center;
523
+ width: 42px;
524
+ height: 42px;
525
+ border-radius: 50%;
526
+ background: color-mix(in srgb, var(--octc-color-text) 10%, var(--octc-color-bg-alt));
527
+ color: var(--octc-color-text);
528
+ font-weight: 800;
529
+ }
530
+
531
+ .ox-tweet--rich .ox-tweet__avatar {
532
+ object-fit: cover;
533
+ }
534
+
535
+ .ox-tweet--rich .ox-tweet__identity {
536
+ display: grid;
537
+ min-width: 0;
538
+ gap: 0.125rem;
539
+ }
540
+
541
+ .ox-tweet--rich .ox-tweet__author-name,
542
+ .ox-tweet--rich .ox-tweet__author-handle {
543
+ overflow: hidden;
544
+ text-overflow: ellipsis;
545
+ white-space: nowrap;
546
+ }
547
+
548
+ .ox-tweet--rich .ox-tweet__network {
549
+ margin-left: auto;
550
+ flex: 0 0 auto;
551
+ font-size: 0.75rem;
552
+ font-weight: 700;
553
+ color: var(--octc-color-text-muted);
554
+ }
555
+
556
+ .ox-tweet--rich .ox-tweet__meta {
557
+ display: flex;
558
+ flex-wrap: wrap;
559
+ gap: 0.45rem 0.8rem;
560
+ margin-top: 0.875rem;
561
+ font-size: 0.75rem;
562
+ color: var(--octc-color-text-muted);
563
+ }
564
+
565
+ .ox-tweet--rich .ox-tweet__source {
566
+ color: var(--octc-color-primary);
567
+ font-weight: 600;
568
+ }
569
+ /* Reddit post cards */
570
+ .ox-reddit-card {
571
+ display: block;
572
+ margin: 1.5rem 0;
573
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
574
+ border-radius: 8px;
575
+ overflow: hidden;
576
+ background: var(--octc-color-bg);
577
+ }
578
+
579
+ .ox-reddit-card__main,
580
+ .ox-reddit-card__original {
581
+ display: block;
582
+ color: var(--octc-color-text);
583
+ text-decoration: none;
584
+ }
585
+
586
+ .ox-reddit-card__main {
587
+ padding: 1rem;
588
+ }
589
+
590
+ .ox-reddit-card__main:hover,
591
+ .ox-reddit-card__original:hover {
592
+ text-decoration: none;
593
+ }
594
+
595
+ .ox-reddit-card__header,
596
+ .ox-reddit-card__meta {
597
+ display: flex;
598
+ flex-wrap: wrap;
599
+ align-items: center;
600
+ gap: 0.35rem 0.75rem;
601
+ color: var(--octc-color-text-muted);
602
+ }
603
+
604
+ .ox-reddit-card__header {
605
+ margin-bottom: 0.625rem;
606
+ font-size: 0.75rem;
607
+ }
608
+
609
+ .ox-reddit-card__network,
610
+ .ox-reddit-card__subreddit,
611
+ .ox-reddit-card__source,
612
+ .ox-reddit-card__original {
613
+ font-weight: 600;
614
+ }
615
+
616
+ .ox-reddit-card__network {
617
+ color: #ff4500;
618
+ letter-spacing: 0.08em;
619
+ text-transform: uppercase;
620
+ }
621
+
622
+ .ox-reddit-card__subreddit,
623
+ .ox-reddit-card__source,
624
+ .ox-reddit-card__original {
625
+ color: var(--octc-color-primary);
626
+ }
627
+
628
+ .ox-reddit-card__author,
629
+ .ox-reddit-card__time {
630
+ color: var(--octc-color-text-muted);
631
+ }
632
+
633
+ .ox-reddit-card__title {
634
+ margin: 0;
635
+ font-size: 1rem;
636
+ line-height: 1.35;
637
+ color: var(--octc-color-text);
638
+ }
639
+
640
+ .ox-reddit-card__body {
641
+ margin: 0.625rem 0 0;
642
+ font-size: 0.875rem;
643
+ line-height: 1.55;
644
+ color: var(--octc-color-text-muted);
645
+ }
646
+
647
+ .ox-reddit-card__image {
648
+ display: block;
649
+ width: 100%;
650
+ height: auto;
651
+ max-height: 420px;
652
+ margin-top: 0.875rem;
653
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
654
+ border-radius: 8px;
655
+ object-fit: cover;
656
+ background: var(--octc-color-bg-alt);
657
+ }
658
+
659
+ .ox-reddit-card__meta {
660
+ margin-top: 0.875rem;
661
+ font-size: 0.75rem;
662
+ }
663
+
664
+ .ox-reddit-card__metric strong {
665
+ color: var(--octc-color-text);
666
+ }
667
+
668
+ .ox-reddit-card__original {
669
+ padding: 0.625rem 1rem;
670
+ border-top: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
671
+ background: var(--octc-color-bg-alt);
672
+ font-size: 0.8125rem;
673
+ }
674
+
675
+ .ox-reddit-card--fallback,
676
+ .ox-reddit-card.error {
677
+ border-style: dashed;
678
+ }