@jjlmoya/utils-audiovisual 1.14.0 → 1.16.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 (44) hide show
  1. package/package.json +7 -4
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/entries.ts +32 -0
  4. package/src/tool/chromaticLens/chromatic-lens-color-palette-extraction-online.css +308 -0
  5. package/src/tool/chromaticLens/component.astro +0 -309
  6. package/src/tool/chromaticLens/entry.ts +39 -0
  7. package/src/tool/chromaticLens/index.ts +2 -41
  8. package/src/tool/collageMaker/component.astro +0 -387
  9. package/src/tool/collageMaker/entry.ts +48 -0
  10. package/src/tool/collageMaker/free-online-photo-collage-maker-professional-compositions.css +386 -0
  11. package/src/tool/collageMaker/index.ts +2 -50
  12. package/src/tool/exifCleaner/component.astro +0 -290
  13. package/src/tool/exifCleaner/entry.ts +53 -0
  14. package/src/tool/exifCleaner/exif-metadata-cleaner-remove-gps-photo-privacy.css +289 -0
  15. package/src/tool/exifCleaner/index.ts +2 -55
  16. package/src/tool/imageCompressor/component.astro +0 -498
  17. package/src/tool/imageCompressor/entry.ts +56 -0
  18. package/src/tool/imageCompressor/index.ts +2 -58
  19. package/src/tool/imageCompressor/online-image-compressor-reduce-file-size-no-quality-loss.css +496 -0
  20. package/src/tool/printQualityCalculator/component.astro +0 -485
  21. package/src/tool/printQualityCalculator/entry.ts +66 -0
  22. package/src/tool/printQualityCalculator/index.ts +2 -68
  23. package/src/tool/printQualityCalculator/print-quality-calculator-pixels-to-cm-dpi.css +483 -0
  24. package/src/tool/privacyBlur/component.astro +0 -334
  25. package/src/tool/privacyBlur/entry.ts +45 -0
  26. package/src/tool/privacyBlur/index.ts +2 -47
  27. package/src/tool/privacyBlur/online-privacy-editor-pixelate-blur-faces-photos.css +332 -0
  28. package/src/tool/subtitleSync/component.astro +0 -327
  29. package/src/tool/subtitleSync/entry.ts +45 -0
  30. package/src/tool/subtitleSync/index.ts +2 -47
  31. package/src/tool/subtitleSync/synchronize-srt-subtitles-online-adjust-timing-free.css +325 -0
  32. package/src/tool/timelapseCalculator/component.astro +0 -285
  33. package/src/tool/timelapseCalculator/entry.ts +48 -0
  34. package/src/tool/timelapseCalculator/index.ts +2 -50
  35. package/src/tool/timelapseCalculator/timelapse-hyperlapse-calculator-perfect-intervals.css +283 -0
  36. package/src/tool/tvDistance/component.astro +0 -437
  37. package/src/tool/tvDistance/entry.ts +45 -0
  38. package/src/tool/tvDistance/index.ts +2 -47
  39. package/src/tool/tvDistance/tv-viewing-distance-calculator-thx-4k-optimal-screen.css +435 -0
  40. package/src/tool/videoFrameExtractor/component.astro +0 -428
  41. package/src/tool/videoFrameExtractor/entry.ts +49 -0
  42. package/src/tool/videoFrameExtractor/index.ts +2 -51
  43. package/src/tool/videoFrameExtractor/online-video-frame-extractor-capture-hd-stills.css +426 -0
  44. package/src/tools.ts +1 -1
@@ -0,0 +1,386 @@
1
+ :global(.cm-root) {
2
+ --cm-bg: #fff;
3
+ --cm-bg-muted: #f8fafc;
4
+ --cm-border: #e2e8f0;
5
+ --cm-text: #0f172a;
6
+ --cm-text-muted: #64748b;
7
+ --cm-primary: #6366f1;
8
+ --cm-primary-light: #eef2ff;
9
+ --cm-shadow: rgba(0,0,0,0.07);
10
+ --cm-radius: 1rem;
11
+
12
+ max-width: 1100px;
13
+ margin: 0 auto;
14
+ padding: 1rem;
15
+ }
16
+
17
+ :global(.theme-dark .cm-root) {
18
+ --cm-bg: #1e293b;
19
+ --cm-bg-muted: #0f172a;
20
+ --cm-border: #334155;
21
+ --cm-text: #f1f5f9;
22
+ --cm-text-muted: #94a3b8;
23
+ --cm-primary: #818cf8;
24
+ --cm-primary-light: #1e1b4b;
25
+ --cm-shadow: rgba(0,0,0,0.4);
26
+ }
27
+
28
+ :global(.cm-card) {
29
+ background: var(--cm-bg);
30
+ border: 1px solid var(--cm-border);
31
+ border-radius: var(--cm-radius);
32
+ box-shadow: 0 4px 24px var(--cm-shadow);
33
+ overflow: hidden;
34
+ }
35
+
36
+ :global(.cm-top-row) {
37
+ display: grid;
38
+ grid-template-columns: 300px 1fr;
39
+ gap: 0;
40
+ }
41
+
42
+ @media (max-width: 700px) {
43
+ .cm-top-row {
44
+ grid-template-columns: 1fr;
45
+ }
46
+ }
47
+
48
+ :global(.cm-left-col) {
49
+ padding: 1.25rem;
50
+ border-right: 1px solid var(--cm-border);
51
+ display: flex;
52
+ flex-direction: column;
53
+ gap: 1rem;
54
+ }
55
+
56
+ @media (max-width: 700px) {
57
+ .cm-left-col {
58
+ border-right: none;
59
+ border-bottom: 1px solid var(--cm-border);
60
+ }
61
+ }
62
+
63
+ :global(.cm-drop-zone) {
64
+ position: relative;
65
+ background: var(--cm-bg-muted);
66
+ border: 2px dashed var(--cm-border);
67
+ border-radius: 0.75rem;
68
+ padding: 1.5rem 1rem;
69
+ text-align: center;
70
+ cursor: pointer;
71
+ transition: border-color 0.2s, background 0.2s;
72
+ display: flex;
73
+ flex-direction: column;
74
+ align-items: center;
75
+ gap: 0.35rem;
76
+ color: var(--cm-primary);
77
+ }
78
+
79
+ :global(.cm-drop-zone input[type="file"]) {
80
+ position: absolute;
81
+ inset: 0;
82
+ opacity: 0;
83
+ cursor: pointer;
84
+ width: 100%;
85
+ height: 100%;
86
+ }
87
+
88
+ :global(.cm-drop-zone:hover),
89
+ :global(.cm-drop-zone-over) {
90
+ border-color: var(--cm-primary);
91
+ background: var(--cm-primary-light);
92
+ }
93
+
94
+ :global(.cm-drop-title) {
95
+ font-size: 0.9rem;
96
+ font-weight: 700;
97
+ color: var(--cm-text);
98
+ margin: 0;
99
+ }
100
+
101
+ :global(.cm-drop-sub) {
102
+ font-size: 0.75rem;
103
+ color: var(--cm-text-muted);
104
+ margin: 0;
105
+ }
106
+
107
+ :global(.cm-drop-link) {
108
+ color: var(--cm-primary);
109
+ font-weight: 600;
110
+ cursor: pointer;
111
+ }
112
+
113
+ :global(.cm-section-label) {
114
+ display: block;
115
+ font-size: 0.65rem;
116
+ font-weight: 700;
117
+ text-transform: uppercase;
118
+ letter-spacing: 0.08em;
119
+ color: var(--cm-text-muted);
120
+ }
121
+
122
+ :global(.cm-section-header) {
123
+ display: flex;
124
+ justify-content: space-between;
125
+ align-items: center;
126
+ }
127
+
128
+ :global(.cm-badge) {
129
+ background: var(--cm-primary-light);
130
+ color: var(--cm-primary);
131
+ font-size: 0.65rem;
132
+ font-weight: 700;
133
+ padding: 0.15rem 0.45rem;
134
+ border-radius: 9999px;
135
+ }
136
+
137
+ :global(.cm-thumbs) {
138
+ display: grid;
139
+ grid-template-columns: repeat(auto-fill, minmax(48px, 1fr));
140
+ gap: 0.35rem;
141
+ margin-top: 0.5rem;
142
+ }
143
+
144
+ :global(.cm-thumb) {
145
+ position: relative;
146
+ aspect-ratio: 1;
147
+ border-radius: 0.4rem;
148
+ overflow: hidden;
149
+ border: 2px solid transparent;
150
+ transition: border-color 0.15s;
151
+ }
152
+
153
+ :global(.cm-thumb:hover) {
154
+ border-color: var(--cm-primary);
155
+ }
156
+
157
+ :global(.cm-thumb img) {
158
+ width: 100%;
159
+ height: 100%;
160
+ object-fit: cover;
161
+ display: block;
162
+ }
163
+
164
+ :global(.cm-thumb-num) {
165
+ position: absolute;
166
+ bottom: 2px;
167
+ left: 3px;
168
+ font-size: 0.55rem;
169
+ font-weight: 800;
170
+ color: var(--cm-bg);
171
+ text-shadow: 0 1px 2px rgba(0,0,0,0.8);
172
+ line-height: 1;
173
+ }
174
+
175
+ :global(.cm-thumb-del) {
176
+ position: absolute;
177
+ top: 2px;
178
+ right: 2px;
179
+ width: 16px;
180
+ height: 16px;
181
+ background: rgba(239,68,68,0.9);
182
+ color: var(--cm-bg);
183
+ border: none;
184
+ border-radius: 50%;
185
+ cursor: pointer;
186
+ display: none;
187
+ align-items: center;
188
+ justify-content: center;
189
+ padding: 0;
190
+ transition: background 0.15s;
191
+ }
192
+
193
+ :global(.cm-thumb:hover .cm-thumb-del) {
194
+ display: flex;
195
+ }
196
+
197
+ :global(.cm-thumb-del:hover) {
198
+ background: #dc2626;
199
+ }
200
+
201
+ :global(.cm-preview-col) {
202
+ padding: 1.25rem;
203
+ display: flex;
204
+ flex-direction: column;
205
+ gap: 0.5rem;
206
+ min-height: 260px;
207
+ }
208
+
209
+ :global(.cm-preview-placeholder) {
210
+ flex: 1;
211
+ background: var(--cm-bg-muted);
212
+ border: 2px dashed var(--cm-border);
213
+ border-radius: 0.75rem;
214
+ display: flex;
215
+ flex-direction: column;
216
+ align-items: center;
217
+ justify-content: center;
218
+ gap: 0.5rem;
219
+ color: var(--cm-text-muted);
220
+ }
221
+
222
+ :global(.cm-preview-placeholder p) {
223
+ font-size: 0.8rem;
224
+ margin: 0;
225
+ }
226
+
227
+ :global(.cm-canvas) {
228
+ width: 100%;
229
+ height: auto;
230
+ border-radius: 0.75rem;
231
+ border: 1px solid var(--cm-border);
232
+ display: block;
233
+ }
234
+
235
+ :global(.cm-dims-badge) {
236
+ font-size: 0.65rem;
237
+ font-weight: 600;
238
+ color: var(--cm-text-muted);
239
+ background: var(--cm-bg-muted);
240
+ border: 1px solid var(--cm-border);
241
+ border-radius: 9999px;
242
+ padding: 0.15rem 0.5rem;
243
+ }
244
+
245
+ :global(.cm-section-divider) {
246
+ border-top: 1px solid var(--cm-border);
247
+ padding: 1rem 1.25rem;
248
+ display: flex;
249
+ flex-direction: column;
250
+ gap: 0.75rem;
251
+ }
252
+
253
+ :global(.cm-layouts) {
254
+ display: grid;
255
+ grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
256
+ gap: 0.4rem;
257
+ }
258
+
259
+ :global(.cm-layout-btn) {
260
+ display: flex;
261
+ flex-direction: column;
262
+ align-items: center;
263
+ gap: 0.2rem;
264
+ padding: 0.5rem 0.25rem;
265
+ background: var(--cm-bg-muted);
266
+ border: 2px solid var(--cm-border);
267
+ border-radius: 0.625rem;
268
+ cursor: pointer;
269
+ transition: border-color 0.15s, background 0.15s, opacity 0.15s;
270
+ color: var(--cm-text-muted);
271
+ position: relative;
272
+ }
273
+
274
+ :global(.cm-layout-btn span) {
275
+ font-size: 0.55rem;
276
+ font-weight: 600;
277
+ text-align: center;
278
+ line-height: 1.2;
279
+ }
280
+
281
+ :global(.cm-layout-btn:hover:not(:disabled)) {
282
+ border-color: var(--cm-primary);
283
+ color: var(--cm-primary);
284
+ background: var(--cm-primary-light);
285
+ }
286
+
287
+ :global(.cm-layout-btn-active) {
288
+ border-color: var(--cm-primary);
289
+ background: var(--cm-primary-light);
290
+ color: var(--cm-primary);
291
+ }
292
+
293
+ :global(.cm-layout-btn-disabled) {
294
+ opacity: 0.45;
295
+ cursor: not-allowed;
296
+ }
297
+
298
+ :global(.cm-layout-need) {
299
+ position: absolute;
300
+ top: 2px;
301
+ right: 4px;
302
+ font-size: 0.55rem;
303
+ font-weight: 800;
304
+ color: var(--cm-text-muted);
305
+ background: var(--cm-bg);
306
+ border: 1px solid var(--cm-border);
307
+ border-radius: 9999px;
308
+ padding: 0 3px;
309
+ line-height: 1.4;
310
+ }
311
+
312
+ :global(.cm-settings-inline) {
313
+ display: flex;
314
+ flex-wrap: wrap;
315
+ align-items: flex-end;
316
+ gap: 1rem;
317
+ }
318
+
319
+ :global(.cm-setting) {
320
+ display: flex;
321
+ flex-direction: column;
322
+ gap: 0.3rem;
323
+ }
324
+
325
+ :global(.cm-setting-label) {
326
+ font-size: 0.7rem;
327
+ font-weight: 600;
328
+ color: var(--cm-text-muted);
329
+ }
330
+
331
+ :global(.cm-slider) {
332
+ accent-color: var(--cm-primary);
333
+ width: 120px;
334
+ }
335
+
336
+ :global(.cm-color-row) {
337
+ display: flex;
338
+ align-items: center;
339
+ gap: 0.5rem;
340
+ }
341
+
342
+ :global(.cm-color-swatch) {
343
+ width: 32px;
344
+ height: 32px;
345
+ border: 2px solid var(--cm-border);
346
+ border-radius: 0.4rem;
347
+ cursor: pointer;
348
+ padding: 2px;
349
+ background: transparent;
350
+ }
351
+
352
+ :global(.cm-color-code) {
353
+ font-size: 0.7rem;
354
+ font-weight: 600;
355
+ color: var(--cm-text-muted);
356
+ font-variant-numeric: tabular-nums;
357
+ }
358
+
359
+ :global(.cm-download-btn) {
360
+ display: flex;
361
+ align-items: center;
362
+ gap: 0.4rem;
363
+ padding: 0.6rem 1.25rem;
364
+ background: linear-gradient(135deg, var(--cm-primary), #8b5cf6);
365
+ color: var(--cm-bg);
366
+ border: none;
367
+ border-radius: 0.625rem;
368
+ font-size: 0.875rem;
369
+ font-weight: 700;
370
+ cursor: pointer;
371
+ transition: opacity 0.2s, transform 0.1s;
372
+ box-shadow: 0 4px 12px rgba(99,102,241,0.3);
373
+ white-space: nowrap;
374
+ margin-left: auto;
375
+ }
376
+
377
+ :global(.cm-download-btn:disabled) {
378
+ opacity: 0.4;
379
+ cursor: not-allowed;
380
+ box-shadow: none;
381
+ }
382
+
383
+ :global(.cm-download-btn:not(:disabled):hover) {
384
+ transform: translateY(-1px);
385
+ box-shadow: 0 6px 18px rgba(99,102,241,0.4);
386
+ }
@@ -1,53 +1,5 @@
1
- import type { AudiovisualToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
-
3
- export interface CollageMakerUI {
4
- dropTitle: string;
5
- dropSub: string;
6
- dropLink: string;
7
- imgsLoaded: string;
8
- layoutLabel: string;
9
- settingsLabel: string;
10
- borderLabel: string;
11
- borderColorLabel: string;
12
- bgColorLabel: string;
13
- downloadBtn: string;
14
- previewTitle: string;
15
- needsImgs: string;
16
- errorMin: string;
17
- errorMax: string;
18
- errorLoad: string;
19
- [key: string]: string;
20
- }
21
-
22
- export type CollageMakerLocaleContent = ToolLocaleContent<CollageMakerUI>;
23
-
24
-
25
- export const collageMaker: AudiovisualToolEntry<CollageMakerUI> = {
26
- id: 'creador-collage-fotos',
27
- icons: {
28
- bg: 'mdi:collage',
29
- fg: 'mdi:palette-outline',
30
- },
31
- i18n: {
32
- es: async () => (await import('./i18n/es')).content as unknown as CollageMakerLocaleContent,
33
- en: async () => (await import('./i18n/en')).content as unknown as CollageMakerLocaleContent,
34
- fr: async () => (await import('./i18n/fr')).content as unknown as CollageMakerLocaleContent,
35
- de: async () => (await import('./i18n/de')).content as unknown as CollageMakerLocaleContent,
36
- it: async () => (await import('./i18n/it')).content as unknown as CollageMakerLocaleContent,
37
- pt: async () => (await import('./i18n/pt')).content as unknown as CollageMakerLocaleContent,
38
- id: async () => (await import('./i18n/id')).content as unknown as CollageMakerLocaleContent,
39
- ja: async () => (await import('./i18n/ja')).content as unknown as CollageMakerLocaleContent,
40
- ko: async () => (await import('./i18n/ko')).content as unknown as CollageMakerLocaleContent,
41
- nl: async () => (await import('./i18n/nl')).content as unknown as CollageMakerLocaleContent,
42
- pl: async () => (await import('./i18n/pl')).content as unknown as CollageMakerLocaleContent,
43
- ru: async () => (await import('./i18n/ru')).content as unknown as CollageMakerLocaleContent,
44
- sv: async () => (await import('./i18n/sv')).content as unknown as CollageMakerLocaleContent,
45
- tr: async () => (await import('./i18n/tr')).content as unknown as CollageMakerLocaleContent,
46
- zh: async () => (await import('./i18n/zh')).content as unknown as CollageMakerLocaleContent,
47
- },
48
- };
49
-
50
-
1
+ import { collageMaker } from './entry';
2
+ export * from './entry';
51
3
  export const COLLAGE_MAKER_TOOL: ToolDefinition = {
52
4
  entry: collageMaker as unknown as AudiovisualToolEntry,
53
5
  Component: () => import('./component.astro'),
@@ -161,294 +161,4 @@ const { ui } = Astro.props;
161
161
  document.addEventListener('astro:page-load', init);
162
162
  </script>
163
163
 
164
- <style>
165
- :global(.ec-root) {
166
- --ec-bg: #fff;
167
- --ec-bg-elevated: #f8fafc;
168
- --ec-border: #e2e8f0;
169
- --ec-text: #0f172a;
170
- --ec-text-muted: #64748b;
171
- --ec-accent: #6366f1;
172
- --ec-accent-alpha: rgba(99, 102, 241, 0.08);
173
- --ec-accent-alpha-hover: rgba(99, 102, 241, 0.02);
174
- --ec-shadow: rgba(0, 0, 0, 0.15);
175
164
 
176
- padding: 2.5rem 1.5rem;
177
- max-width: 1000px;
178
- margin: 0 auto;
179
- }
180
-
181
- :global(.theme-dark .ec-root) {
182
- --ec-bg: #18181b;
183
- --ec-bg-elevated: #27272a;
184
- --ec-border: #3f3f46;
185
- --ec-text: #f4f4f5;
186
- --ec-text-muted: #71717a;
187
- --ec-accent: #818cf8;
188
- --ec-accent-alpha: rgba(129, 140, 248, 0.12);
189
- --ec-accent-alpha-hover: rgba(129, 140, 248, 0.02);
190
- --ec-shadow: rgba(0, 0, 0, 0.3);
191
- }
192
-
193
- :global(.ec-card) {
194
- background: var(--ec-bg);
195
- border: 1px solid var(--ec-border);
196
- border-radius: 3rem;
197
- padding: 1.5rem;
198
- box-shadow: 0 45px 120px -30px var(--ec-shadow);
199
- position: relative;
200
- overflow: hidden;
201
- }
202
-
203
- :global(.ec-drop) {
204
- padding: 4rem 2rem;
205
- border: 3px dashed var(--ec-border);
206
- border-radius: 2.5rem;
207
- display: flex;
208
- flex-direction: column;
209
- align-items: center;
210
- text-align: center;
211
- cursor: pointer;
212
- gap: 1.5rem;
213
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
214
- }
215
-
216
- :global(.ec-drop:hover),
217
- :global(.ec-drop-active) {
218
- border-color: var(--ec-accent);
219
- background: var(--ec-accent-alpha-hover);
220
- }
221
-
222
- :global(.ec-drop-icon) {
223
- width: 6rem;
224
- height: 6rem;
225
- background: var(--ec-accent-alpha);
226
- border-radius: 2rem;
227
- display: flex;
228
- align-items: center;
229
- justify-content: center;
230
- color: var(--ec-accent);
231
- }
232
-
233
- :global(.ec-drop-icon svg) {
234
- width: 3rem;
235
- height: 3rem;
236
- }
237
-
238
- :global(.ec-title) {
239
- font-size: 2.5rem;
240
- font-weight: 950;
241
- color: var(--ec-text);
242
- margin: 0;
243
- }
244
-
245
- :global(.ec-subtitle) {
246
- font-size: 1.15rem;
247
- color: var(--ec-text-muted);
248
- max-width: 500px;
249
- margin: 0;
250
- font-weight: 700;
251
- }
252
-
253
- :global(.ec-badges) {
254
- display: flex;
255
- gap: 1rem;
256
- flex-wrap: wrap;
257
- justify-content: center;
258
- }
259
-
260
- :global(.ec-badge) {
261
- padding: 0.6rem 1.25rem;
262
- background: var(--ec-bg-elevated);
263
- border-radius: 2rem;
264
- font-size: 0.8rem;
265
- font-weight: 800;
266
- color: var(--ec-text-muted);
267
- display: flex;
268
- align-items: center;
269
- gap: 0.5rem;
270
- }
271
-
272
- :global(.ec-badge svg) {
273
- width: 1rem;
274
- height: 1rem;
275
- flex-shrink: 0;
276
- }
277
-
278
- :global(.ec-processing) {
279
- padding: 5rem;
280
- display: flex;
281
- flex-direction: column;
282
- align-items: center;
283
- justify-content: center;
284
- gap: 1.5rem;
285
- }
286
-
287
- :global(.ec-spinner) {
288
- width: 4rem;
289
- height: 4rem;
290
- border: 4px solid var(--ec-accent-alpha);
291
- border-top-color: var(--ec-accent);
292
- border-radius: 50%;
293
- animation: ec-spin 0.8s linear infinite;
294
- }
295
-
296
- :global(.ec-processing-text) {
297
- font-weight: 800;
298
- color: var(--ec-text);
299
- margin: 0;
300
- }
301
-
302
- :global(.ec-result) {
303
- padding: 2.5rem;
304
- display: flex;
305
- flex-direction: column;
306
- animation: ec-slide-up 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
307
- }
308
-
309
- :global(.ec-result-layout) {
310
- display: grid;
311
- grid-template-columns: 1fr 1fr;
312
- gap: 3rem;
313
- }
314
-
315
- @media (max-width: 800px) {
316
- :global(.ec-result-layout) {
317
- grid-template-columns: 1fr;
318
- }
319
- }
320
-
321
- :global(.ec-preview-col) {
322
- display: flex;
323
- flex-direction: column;
324
- gap: 1.5rem;
325
- }
326
-
327
- :global(.ec-preview-img) {
328
- width: 100%;
329
- border-radius: 1.5rem;
330
- box-shadow: 0 20px 50px var(--ec-shadow);
331
- display: block;
332
- }
333
-
334
- :global(.ec-metadata) {
335
- background: var(--ec-bg-elevated);
336
- border: 1px solid var(--ec-border);
337
- border-radius: 1.25rem;
338
- padding: 1.5rem;
339
- min-height: 150px;
340
- display: flex;
341
- flex-direction: column;
342
- justify-content: center;
343
- }
344
-
345
- :global(.ec-no-metadata) {
346
- display: flex;
347
- align-items: center;
348
- justify-content: center;
349
- height: 100%;
350
- color: var(--ec-text-muted);
351
- text-align: center;
352
- }
353
-
354
- :global(.ec-metadata-title) {
355
- color: var(--ec-accent);
356
- font-weight: 700;
357
- margin-bottom: 1rem;
358
- font-size: 0.9rem;
359
- }
360
-
361
- :global(.ec-metadata-list) {
362
- list-style: none;
363
- padding: 0;
364
- margin: 0;
365
- display: flex;
366
- flex-direction: column;
367
- gap: 0.75rem;
368
- }
369
-
370
- :global(.ec-metadata-list li) {
371
- display: flex;
372
- justify-content: space-between;
373
- gap: 1rem;
374
- font-size: 0.85rem;
375
- font-weight: 600;
376
- color: var(--ec-text);
377
- }
378
-
379
- :global(.ec-metadata-list li span:first-child) {
380
- font-weight: 700;
381
- }
382
-
383
- :global(.ec-metadata-list li span:last-child) {
384
- color: var(--ec-text-muted);
385
- }
386
-
387
- :global(.ec-actions-col) {
388
- display: flex;
389
- flex-direction: column;
390
- gap: 1.5rem;
391
- }
392
-
393
- :global(.ec-btn) {
394
- padding: 1.25rem;
395
- border-radius: 1.5rem;
396
- font-weight: 950;
397
- font-size: 1.1rem;
398
- border: none;
399
- cursor: pointer;
400
- display: flex;
401
- align-items: center;
402
- justify-content: center;
403
- gap: 0.75rem;
404
- transition: all 0.2s;
405
- }
406
-
407
- :global(.ec-btn svg) {
408
- width: 1.25rem;
409
- height: 1.25rem;
410
- }
411
-
412
- :global(.ec-btn-primary) {
413
- background: var(--ec-accent);
414
- color: #fff;
415
- box-shadow: 0 15px 35px -10px var(--ec-accent);
416
- }
417
-
418
- :global(.ec-btn-primary:hover) {
419
- transform: translateY(-2px);
420
- box-shadow: 0 20px 45px -10px var(--ec-accent);
421
- }
422
-
423
- :global(.ec-btn-secondary) {
424
- background: var(--ec-bg-elevated);
425
- border: 1px solid var(--ec-border);
426
- color: var(--ec-text);
427
- }
428
-
429
- :global(.ec-btn-secondary:hover) {
430
- border-color: var(--ec-accent);
431
- color: var(--ec-accent);
432
- }
433
-
434
- .ec-hidden {
435
- display: none;
436
- }
437
-
438
- @keyframes ec-spin {
439
- to {
440
- transform: rotate(360deg);
441
- }
442
- }
443
-
444
- @keyframes ec-slide-up {
445
- from {
446
- opacity: 0;
447
- transform: translateY(30px);
448
- }
449
- to {
450
- opacity: 1;
451
- transform: translateY(0);
452
- }
453
- }
454
- </style>