@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,262 @@
1
+ /* ox-content GitHub Plugin - Repository card styles */
2
+
3
+ .ox-github-card {
4
+ display: block;
5
+ margin: 1.5rem 0;
6
+ padding: 1rem 0;
7
+ border: 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
+ border-radius: 0;
11
+ background: transparent;
12
+ text-decoration: none;
13
+ color: var(--octc-color-text);
14
+ transition: color 0.2s ease;
15
+ }
16
+
17
+ .ox-github-card:hover {
18
+ text-decoration: none;
19
+ }
20
+
21
+ .ox-github-header {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: 0.5rem;
25
+ margin-bottom: 0.5rem;
26
+ }
27
+
28
+ .ox-github-icon {
29
+ width: 20px;
30
+ height: 20px;
31
+ color: var(--octc-color-text-muted);
32
+ flex-shrink: 0;
33
+ }
34
+
35
+ .ox-github-repo {
36
+ font-weight: 600;
37
+ font-size: 1rem;
38
+ color: var(--octc-color-primary);
39
+ }
40
+
41
+ .ox-github-card:hover .ox-github-repo {
42
+ text-decoration: underline;
43
+ }
44
+
45
+ .ox-github-resource-kind {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 70%, transparent);
49
+ border-radius: 999px;
50
+ padding: 0.05rem 0.45rem;
51
+ color: var(--octc-color-text-muted);
52
+ font-size: 0.75rem;
53
+ line-height: 1.4;
54
+ }
55
+
56
+ .ox-github-resource-title {
57
+ margin: 0 0 0.5rem;
58
+ color: var(--octc-color-text);
59
+ font-weight: 600;
60
+ line-height: 1.45;
61
+ }
62
+
63
+ .ox-github-resource-card:hover .ox-github-resource-title {
64
+ color: var(--octc-color-primary);
65
+ text-decoration: underline;
66
+ }
67
+
68
+ .ox-github-description {
69
+ font-size: 0.875rem;
70
+ color: var(--octc-color-text-muted);
71
+ margin-bottom: 0.75rem;
72
+ line-height: 1.5;
73
+ }
74
+
75
+ .ox-github-stats {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: 1rem;
79
+ font-size: 0.8125rem;
80
+ color: var(--octc-color-text-muted);
81
+ }
82
+
83
+ .ox-github-stat {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: 0.25rem;
87
+ }
88
+
89
+ .ox-github-stat svg {
90
+ width: 16px;
91
+ height: 16px;
92
+ }
93
+
94
+ .ox-github-language {
95
+ display: flex;
96
+ align-items: center;
97
+ gap: 0.375rem;
98
+ }
99
+
100
+ .ox-github-language-color {
101
+ width: 12px;
102
+ height: 12px;
103
+ border-radius: 50%;
104
+ }
105
+
106
+ /* Language colors */
107
+ .ox-github-language-color[data-lang="javascript"] {
108
+ background: #f1e05a;
109
+ }
110
+ .ox-github-language-color[data-lang="typescript"] {
111
+ background: #3178c6;
112
+ }
113
+ .ox-github-language-color[data-lang="rust"] {
114
+ background: #dea584;
115
+ }
116
+ .ox-github-language-color[data-lang="python"] {
117
+ background: #3572a5;
118
+ }
119
+ .ox-github-language-color[data-lang="go"] {
120
+ background: #00add8;
121
+ }
122
+ .ox-github-language-color[data-lang="java"] {
123
+ background: #b07219;
124
+ }
125
+ .ox-github-language-color[data-lang="c++"] {
126
+ background: #f34b7d;
127
+ }
128
+ .ox-github-language-color[data-lang="c"] {
129
+ background: #555555;
130
+ }
131
+ .ox-github-language-color[data-lang="ruby"] {
132
+ background: #701516;
133
+ }
134
+ .ox-github-language-color[data-lang="php"] {
135
+ background: #4f5d95;
136
+ }
137
+ .ox-github-language-color[data-lang="swift"] {
138
+ background: #f05138;
139
+ }
140
+ .ox-github-language-color[data-lang="kotlin"] {
141
+ background: #a97bff;
142
+ }
143
+ .ox-github-language-color[data-lang="vue"] {
144
+ background: #41b883;
145
+ }
146
+ .ox-github-language-color[data-lang="svelte"] {
147
+ background: #ff3e00;
148
+ }
149
+ .ox-github-language-color[data-lang="html"] {
150
+ background: #e34c26;
151
+ }
152
+ .ox-github-language-color[data-lang="css"] {
153
+ background: #563d7c;
154
+ }
155
+ .ox-github-language-color[data-lang="shell"] {
156
+ background: #89e051;
157
+ }
158
+
159
+ /* Error state */
160
+ .ox-github-card.error {
161
+ border-color: var(--octc-color-danger);
162
+ background: transparent;
163
+ }
164
+
165
+ .ox-github-error {
166
+ color: var(--octc-color-danger);
167
+ font-size: 0.875rem;
168
+ }
169
+
170
+ .ox-github-code {
171
+ margin: 1.5rem 0;
172
+ border: 1px solid var(--octc-color-code-frame-border);
173
+ border-radius: 8px;
174
+ overflow: hidden;
175
+ background: var(--octc-color-code-bg);
176
+ }
177
+
178
+ .ox-github-code-header {
179
+ display: flex;
180
+ flex-wrap: wrap;
181
+ justify-content: space-between;
182
+ align-items: flex-start;
183
+ gap: 1rem;
184
+ padding: 0.75rem 1.25rem;
185
+ border-bottom: 1px solid var(--octc-color-code-title-border);
186
+ background: var(--octc-color-code-title-bg);
187
+ font-size: 0.75rem;
188
+ }
189
+
190
+ .ox-github-code-heading {
191
+ display: flex;
192
+ flex-direction: column;
193
+ gap: 0.3rem;
194
+ min-width: 0;
195
+ flex: 1;
196
+ }
197
+
198
+ .ox-github-code-title {
199
+ min-width: 0;
200
+ color: var(--octc-color-code-title-text);
201
+ font-family: var(--octc-font-mono);
202
+ font-weight: 600;
203
+ letter-spacing: 0.02em;
204
+ text-decoration: none;
205
+ overflow: hidden;
206
+ text-overflow: ellipsis;
207
+ white-space: nowrap;
208
+ }
209
+
210
+ .ox-github-code-title:hover {
211
+ color: var(--octc-color-primary);
212
+ text-decoration: underline;
213
+ }
214
+
215
+ .ox-github-code-commit {
216
+ display: flex;
217
+ align-items: baseline;
218
+ gap: 0.5rem;
219
+ min-width: 0;
220
+ color: var(--octc-color-text-muted);
221
+ text-decoration: none;
222
+ }
223
+
224
+ .ox-github-code-commit:hover {
225
+ color: var(--octc-color-primary);
226
+ }
227
+
228
+ .ox-github-code-sha {
229
+ flex-shrink: 0;
230
+ font-family: var(--octc-font-mono);
231
+ font-variant-numeric: tabular-nums;
232
+ }
233
+
234
+ .ox-github-code-commit-message {
235
+ overflow: hidden;
236
+ text-overflow: ellipsis;
237
+ white-space: nowrap;
238
+ }
239
+
240
+ .ox-github-code-loc {
241
+ flex-shrink: 0;
242
+ color: var(--octc-color-text-muted);
243
+ font-variant-numeric: tabular-nums;
244
+ line-height: 1.4;
245
+ }
246
+
247
+ .ox-github-code > .ox-code {
248
+ margin: 0;
249
+ }
250
+
251
+ .content .ox-github-code pre.ox-github-code-block {
252
+ margin: 0 !important;
253
+ border: 0 !important;
254
+ border-radius: 0 !important;
255
+ background: transparent !important;
256
+ }
257
+
258
+ @media (prefers-reduced-motion: reduce) {
259
+ .ox-github-card {
260
+ transition: none;
261
+ }
262
+ }
@@ -0,0 +1,34 @@
1
+ .ox-graphviz {
2
+ margin: 1.5rem 0;
3
+ overflow-x: auto;
4
+ color: var(--octc-color-text);
5
+ }
6
+
7
+ .ox-graphviz svg {
8
+ display: block;
9
+ width: max-content;
10
+ max-width: 100%;
11
+ height: auto;
12
+ margin-inline: auto;
13
+ }
14
+
15
+ .ox-graphviz text {
16
+ fill: currentColor;
17
+ font-family: var(--octc-font-family-base);
18
+ }
19
+
20
+ .ox-graphviz .node polygon,
21
+ .ox-graphviz .node rect,
22
+ .ox-graphviz .node ellipse {
23
+ fill: var(--octc-color-bg-soft);
24
+ stroke: currentColor;
25
+ }
26
+
27
+ .ox-graphviz .edge path,
28
+ .ox-graphviz .edge polygon {
29
+ stroke: currentColor;
30
+ }
31
+
32
+ .ox-graphviz .edge polygon {
33
+ fill: currentColor;
34
+ }
@@ -0,0 +1,33 @@
1
+ .content .ox-magic-link {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ gap: 0.26em;
5
+ max-width: 100%;
6
+ padding: 0.08em 0.38em 0.08em 0.24em;
7
+ border: 1px solid color-mix(in srgb, var(--octc-color-border) 88%, transparent);
8
+ border-radius: 0.42em;
9
+ background: color-mix(in srgb, var(--octc-color-bg-alt) 82%, var(--octc-color-bg) 18%);
10
+ color: inherit;
11
+ line-height: 1;
12
+ text-decoration: none;
13
+ vertical-align: -0.08em;
14
+ }
15
+ .content .ox-magic-link:hover {
16
+ border-color: color-mix(in srgb, var(--octc-color-primary) 45%, var(--octc-color-border));
17
+ }
18
+ .content .ox-magic-link:focus-visible {
19
+ outline: var(--octc-focus-ring);
20
+ outline-offset: var(--octc-focus-offset);
21
+ }
22
+ .content .ox-magic-link__image {
23
+ width: 1em;
24
+ height: 1em;
25
+ margin: 0;
26
+ border-radius: 999px;
27
+ object-fit: cover;
28
+ flex: 0 0 auto;
29
+ }
30
+ .content .ox-magic-link__label {
31
+ font-weight: 600;
32
+ font-size: 0.9em;
33
+ }
@@ -0,0 +1,16 @@
1
+ /* Responsive Markdown tables for custom hosts */
2
+ .content table {
3
+ display: block;
4
+ width: max-content;
5
+ max-width: 100%;
6
+ box-sizing: border-box;
7
+ overflow-x: auto;
8
+ -webkit-overflow-scrolling: touch;
9
+ }
10
+
11
+ /* `enhanceMarkdownTables()` marks overflow with `toggleAttribute()`, so the
12
+ attribute is present with an empty value. Match on presence, never a value. */
13
+ .content table[data-ox-table-scrollable]:focus-visible {
14
+ outline: var(--octc-focus-ring, 2px solid Highlight);
15
+ outline-offset: var(--octc-focus-offset, 2px);
16
+ }
@@ -0,0 +1,151 @@
1
+ /* ox-content Mermaid Plugin Styles */
2
+
3
+ .ox-mermaid {
4
+ margin: 1.5rem 0;
5
+ padding: 1.5rem;
6
+ background: var(--octc-color-bg);
7
+ border: 1px solid var(--octc-color-border);
8
+ border-radius: 4px;
9
+ overflow-x: auto;
10
+ text-align: center;
11
+ }
12
+
13
+ /* SVG diagram */
14
+ .ox-mermaid svg {
15
+ max-width: 100%;
16
+ height: auto;
17
+ display: inline-block;
18
+ }
19
+
20
+ /* --- Neutral theme integration --- */
21
+
22
+ /* Node shapes */
23
+ .ox-mermaid svg .node rect,
24
+ .ox-mermaid svg .node circle,
25
+ .ox-mermaid svg .node ellipse,
26
+ .ox-mermaid svg .node polygon,
27
+ .ox-mermaid svg .node .label-container {
28
+ fill: var(--octc-color-bg-alt) !important;
29
+ stroke: var(--octc-color-border) !important;
30
+ }
31
+
32
+ /* SVG root text color */
33
+ .ox-mermaid svg .label,
34
+ .ox-mermaid svg text,
35
+ .ox-mermaid svg span,
36
+ .ox-mermaid svg .label text,
37
+ .ox-mermaid svg .label span {
38
+ fill: var(--octc-color-text) !important;
39
+ color: var(--octc-color-text) !important;
40
+ }
41
+
42
+ /* Subgraph */
43
+ .ox-mermaid svg .cluster rect {
44
+ fill: var(--octc-color-bg-alt) !important;
45
+ stroke: var(--octc-color-border) !important;
46
+ rx: 6;
47
+ ry: 6;
48
+ }
49
+
50
+ .ox-mermaid svg .cluster span,
51
+ .ox-mermaid svg .cluster text {
52
+ fill: var(--octc-color-text-muted) !important;
53
+ color: var(--octc-color-text-muted) !important;
54
+ font-weight: 600;
55
+ }
56
+
57
+ /* Edge lines */
58
+ .ox-mermaid svg .edgePath .path,
59
+ .ox-mermaid svg .flowchart-link {
60
+ stroke: var(--octc-color-text-muted) !important;
61
+ stroke-width: 1.5px;
62
+ }
63
+
64
+ /* Arrowheads */
65
+ .ox-mermaid svg marker path {
66
+ fill: var(--octc-color-text-muted) !important;
67
+ }
68
+
69
+ /* Edge labels */
70
+ .ox-mermaid svg .edgeLabel {
71
+ background-color: var(--octc-color-bg) !important;
72
+ color: var(--octc-color-text) !important;
73
+ }
74
+
75
+ .ox-mermaid svg .edgeLabel rect {
76
+ fill: var(--octc-color-bg) !important;
77
+ opacity: 0.9;
78
+ }
79
+
80
+ /* Node text */
81
+ .ox-mermaid svg .node .label,
82
+ .ox-mermaid svg .node text,
83
+ .ox-mermaid svg .node span {
84
+ color: var(--octc-color-text) !important;
85
+ fill: var(--octc-color-text) !important;
86
+ }
87
+
88
+ /* --- Sequence diagram --- */
89
+
90
+ .ox-mermaid svg .actor {
91
+ fill: var(--octc-color-bg-alt) !important;
92
+ stroke: var(--octc-color-border) !important;
93
+ }
94
+
95
+ .ox-mermaid svg .actor-line {
96
+ stroke: var(--octc-color-border) !important;
97
+ }
98
+
99
+ .ox-mermaid svg line.messageLine0,
100
+ .ox-mermaid svg line.messageLine1 {
101
+ stroke: var(--octc-color-text-muted) !important;
102
+ }
103
+
104
+ .ox-mermaid svg .messageText {
105
+ fill: var(--octc-color-text) !important;
106
+ }
107
+
108
+ .ox-mermaid svg .note {
109
+ fill: var(--octc-color-bg-alt) !important;
110
+ stroke: var(--octc-color-border) !important;
111
+ }
112
+
113
+ .ox-mermaid svg .noteText {
114
+ fill: var(--octc-color-text) !important;
115
+ }
116
+
117
+ /* --- Gantt chart --- */
118
+
119
+ .ox-mermaid svg .section {
120
+ fill: var(--octc-color-bg-alt) !important;
121
+ }
122
+
123
+ .ox-mermaid svg .task {
124
+ stroke: var(--octc-color-border) !important;
125
+ }
126
+
127
+ /* --- Class / State / ER diagrams --- */
128
+
129
+ .ox-mermaid svg .classGroup rect,
130
+ .ox-mermaid svg .stateGroup rect,
131
+ .ox-mermaid svg .er.entityBox {
132
+ fill: var(--octc-color-bg) !important;
133
+ stroke: var(--octc-color-border) !important;
134
+ }
135
+
136
+ .ox-mermaid svg .classGroup line,
137
+ .ox-mermaid svg .divider {
138
+ stroke: var(--octc-color-border) !important;
139
+ }
140
+
141
+ /* Responsive */
142
+ @media (max-width: 640px) {
143
+ .ox-mermaid {
144
+ padding: 1rem;
145
+ margin-left: -0.75rem;
146
+ margin-right: -0.75rem;
147
+ border-radius: 0;
148
+ border-left: none;
149
+ border-right: none;
150
+ }
151
+ }
@@ -0,0 +1,43 @@
1
+ .ox-not-by-ai {
2
+ display: inline-block;
3
+ line-height: 0;
4
+ text-decoration: none;
5
+ color: inherit;
6
+ vertical-align: middle;
7
+ }
8
+ .ox-not-by-ai:focus-visible {
9
+ outline: var(--octc-focus-ring, 2px solid currentColor);
10
+ outline-offset: var(--octc-focus-offset, 2px);
11
+ }
12
+ .ox-not-by-ai__badge {
13
+ display: block;
14
+ height: 2.625rem;
15
+ width: auto;
16
+ }
17
+ .ox-not-by-ai__badge--dark {
18
+ display: none;
19
+ }
20
+ @media (prefers-color-scheme: dark) {
21
+ :root:not([data-theme="light"]):not(.light) .ox-not-by-ai__badge--light {
22
+ display: none;
23
+ }
24
+ :root:not([data-theme="light"]):not(.light) .ox-not-by-ai__badge--dark {
25
+ display: block;
26
+ }
27
+ }
28
+ [data-theme="dark"] .ox-not-by-ai__badge--light,
29
+ .dark .ox-not-by-ai__badge--light {
30
+ display: none;
31
+ }
32
+ [data-theme="dark"] .ox-not-by-ai__badge--dark,
33
+ .dark .ox-not-by-ai__badge--dark {
34
+ display: block;
35
+ }
36
+ [data-theme="light"] .ox-not-by-ai__badge--light,
37
+ .light .ox-not-by-ai__badge--light {
38
+ display: block;
39
+ }
40
+ [data-theme="light"] .ox-not-by-ai__badge--dark,
41
+ .light .ox-not-by-ai__badge--dark {
42
+ display: none;
43
+ }
@@ -0,0 +1,170 @@
1
+ /* ox-content OGP Card Plugin - Link card styles */
2
+
3
+ .ox-ogp-card.ox-ogp-card {
4
+ display: flex;
5
+ margin: 1.5rem 0;
6
+ border: 0;
7
+ border-top: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
8
+ border-bottom: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
9
+ border-radius: 0;
10
+ overflow: visible;
11
+ background: transparent;
12
+ text-decoration: none;
13
+ color: var(--octc-color-text);
14
+ font-weight: 400;
15
+ transition: color 0.2s ease;
16
+ }
17
+
18
+ .ox-ogp-card.ox-ogp-card:hover {
19
+ text-decoration: none;
20
+ }
21
+
22
+ .ox-ogp-content {
23
+ flex: 1;
24
+ padding: 1rem 1.25rem;
25
+ min-width: 0;
26
+ display: flex;
27
+ flex-direction: column;
28
+ justify-content: center;
29
+ }
30
+
31
+ .ox-ogp-title {
32
+ font-weight: 600;
33
+ font-size: 1rem;
34
+ color: var(--octc-color-text);
35
+ margin-bottom: 0.375rem;
36
+ display: -webkit-box;
37
+ -webkit-line-clamp: 2;
38
+ -webkit-box-orient: vertical;
39
+ overflow: hidden;
40
+ }
41
+
42
+ .ox-ogp-card:hover .ox-ogp-title {
43
+ color: var(--octc-color-primary);
44
+ }
45
+
46
+ .ox-ogp-description {
47
+ font-size: 0.8125rem;
48
+ color: var(--octc-color-text-muted);
49
+ line-height: 1.5;
50
+ display: -webkit-box;
51
+ -webkit-line-clamp: 2;
52
+ -webkit-box-orient: vertical;
53
+ overflow: hidden;
54
+ margin-bottom: 0.5rem;
55
+ }
56
+
57
+ .ox-ogp-meta {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 0.5rem;
61
+ font-size: 0.75rem;
62
+ color: var(--octc-color-text-muted);
63
+ }
64
+
65
+ .ox-ogp-card .ox-ogp-favicon {
66
+ display: block;
67
+ flex: 0 0 auto;
68
+ width: 16px;
69
+ height: 16px;
70
+ margin: 0;
71
+ border-radius: 2px;
72
+ object-fit: contain;
73
+ }
74
+
75
+ .ox-ogp-domain {
76
+ overflow: hidden;
77
+ text-overflow: ellipsis;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ .ox-ogp-card .ox-ogp-image {
82
+ display: block;
83
+ width: 200px;
84
+ min-width: 200px;
85
+ height: auto;
86
+ margin: 0;
87
+ object-fit: contain;
88
+ background: var(--octc-color-bg-alt);
89
+ }
90
+
91
+ /* Compact variant (no image) */
92
+ .ox-ogp-card.compact {
93
+ flex-direction: column;
94
+ }
95
+
96
+ .ox-ogp-card.compact .ox-ogp-image {
97
+ width: 100%;
98
+ min-width: 100%;
99
+ height: 140px;
100
+ }
101
+
102
+ /* Vertical variant */
103
+ .ox-ogp-card.vertical {
104
+ flex-direction: column;
105
+ }
106
+
107
+ .ox-ogp-card.vertical .ox-ogp-image {
108
+ width: 100%;
109
+ min-width: 100%;
110
+ height: 180px;
111
+ }
112
+
113
+ /* Responsive */
114
+ @media (max-width: 640px) {
115
+ .ox-ogp-card {
116
+ flex-direction: column;
117
+ }
118
+
119
+ .ox-ogp-card .ox-ogp-image {
120
+ width: 100%;
121
+ min-width: 100%;
122
+ height: 160px;
123
+ order: -1;
124
+ }
125
+
126
+ .ox-ogp-content {
127
+ padding: 0.875rem 1rem;
128
+ }
129
+ }
130
+
131
+ /* Error/fallback state */
132
+ .ox-ogp-card.error {
133
+ border-color: var(--octc-color-border);
134
+ }
135
+
136
+ .ox-ogp-card.error .ox-ogp-content {
137
+ width: 100%;
138
+ }
139
+
140
+ /* Simple link fallback */
141
+ .ox-ogp-simple {
142
+ display: inline-flex;
143
+ align-items: center;
144
+ gap: 0.5rem;
145
+ padding: 0.35rem 0;
146
+ border: 0;
147
+ border-bottom: 1px solid color-mix(in srgb, var(--octc-color-border) 74%, transparent);
148
+ border-radius: 0;
149
+ font-size: 0.875rem;
150
+ color: var(--octc-color-primary);
151
+ text-decoration: none;
152
+ transition: color 0.2s ease;
153
+ }
154
+
155
+ .ox-ogp-simple:hover {
156
+ text-decoration: underline;
157
+ }
158
+
159
+ .ox-ogp-simple svg {
160
+ width: 14px;
161
+ height: 14px;
162
+ color: var(--octc-color-text-muted);
163
+ }
164
+
165
+ @media (prefers-reduced-motion: reduce) {
166
+ .ox-ogp-card,
167
+ .ox-ogp-simple {
168
+ transition: none;
169
+ }
170
+ }