@jjlmoya/utils-audiovisual 1.16.0 → 1.18.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 (234) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -0
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/pages/[locale]/[slug].astro +28 -12
  6. package/src/tests/locale_completeness.test.ts +2 -36
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/chromaticLens/bibliography.ts +12 -0
  11. package/src/tool/chromaticLens/chromatic-lens-color-palette-extraction-online.css +39 -39
  12. package/src/tool/chromaticLens/entry.ts +2 -0
  13. package/src/tool/chromaticLens/i18n/de.ts +1 -15
  14. package/src/tool/chromaticLens/i18n/en.ts +1 -15
  15. package/src/tool/chromaticLens/i18n/es.ts +1 -13
  16. package/src/tool/chromaticLens/i18n/fr.ts +1 -13
  17. package/src/tool/chromaticLens/i18n/id.ts +1 -15
  18. package/src/tool/chromaticLens/i18n/it.ts +1 -15
  19. package/src/tool/chromaticLens/i18n/ja.ts +1 -15
  20. package/src/tool/chromaticLens/i18n/ko.ts +1 -15
  21. package/src/tool/chromaticLens/i18n/nl.ts +1 -15
  22. package/src/tool/chromaticLens/i18n/pl.ts +1 -15
  23. package/src/tool/chromaticLens/i18n/pt.ts +1 -15
  24. package/src/tool/chromaticLens/i18n/ru.ts +1 -15
  25. package/src/tool/chromaticLens/i18n/sv.ts +1 -15
  26. package/src/tool/chromaticLens/i18n/tr.ts +1 -15
  27. package/src/tool/chromaticLens/i18n/zh.ts +1 -15
  28. package/src/tool/chromaticLens/seo.astro +1 -1
  29. package/src/tool/collageMaker/bibliography.ts +8 -0
  30. package/src/tool/collageMaker/entry.ts +2 -0
  31. package/src/tool/collageMaker/free-online-photo-collage-maker-professional-compositions.css +47 -47
  32. package/src/tool/collageMaker/i18n/de.ts +1 -11
  33. package/src/tool/collageMaker/i18n/en.ts +1 -11
  34. package/src/tool/collageMaker/i18n/es.ts +1 -9
  35. package/src/tool/collageMaker/i18n/fr.ts +1 -9
  36. package/src/tool/collageMaker/i18n/id.ts +1 -11
  37. package/src/tool/collageMaker/i18n/it.ts +1 -11
  38. package/src/tool/collageMaker/i18n/ja.ts +1 -11
  39. package/src/tool/collageMaker/i18n/ko.ts +1 -11
  40. package/src/tool/collageMaker/i18n/nl.ts +1 -11
  41. package/src/tool/collageMaker/i18n/pl.ts +1 -11
  42. package/src/tool/collageMaker/i18n/pt.ts +1 -11
  43. package/src/tool/collageMaker/i18n/ru.ts +1 -11
  44. package/src/tool/collageMaker/i18n/sv.ts +1 -11
  45. package/src/tool/collageMaker/i18n/tr.ts +1 -11
  46. package/src/tool/collageMaker/i18n/zh.ts +1 -11
  47. package/src/tool/collageMaker/seo.astro +1 -1
  48. package/src/tool/depthOfFieldCalculator/bibliography.astro +15 -0
  49. package/src/tool/depthOfFieldCalculator/bibliography.ts +20 -0
  50. package/src/tool/depthOfFieldCalculator/component.astro +341 -0
  51. package/src/tool/depthOfFieldCalculator/depth-of-field-calculator.css +417 -0
  52. package/src/tool/depthOfFieldCalculator/entry.ts +52 -0
  53. package/src/tool/depthOfFieldCalculator/i18n/de.ts +141 -0
  54. package/src/tool/depthOfFieldCalculator/i18n/en.ts +141 -0
  55. package/src/tool/depthOfFieldCalculator/i18n/es.ts +141 -0
  56. package/src/tool/depthOfFieldCalculator/i18n/fr.ts +141 -0
  57. package/src/tool/depthOfFieldCalculator/i18n/id.ts +141 -0
  58. package/src/tool/depthOfFieldCalculator/i18n/it.ts +141 -0
  59. package/src/tool/depthOfFieldCalculator/i18n/ja.ts +141 -0
  60. package/src/tool/depthOfFieldCalculator/i18n/ko.ts +141 -0
  61. package/src/tool/depthOfFieldCalculator/i18n/nl.ts +141 -0
  62. package/src/tool/depthOfFieldCalculator/i18n/pl.ts +141 -0
  63. package/src/tool/depthOfFieldCalculator/i18n/pt.ts +141 -0
  64. package/src/tool/depthOfFieldCalculator/i18n/ru.ts +141 -0
  65. package/src/tool/depthOfFieldCalculator/i18n/sv.ts +141 -0
  66. package/src/tool/depthOfFieldCalculator/i18n/tr.ts +141 -0
  67. package/src/tool/depthOfFieldCalculator/i18n/zh.ts +141 -0
  68. package/src/tool/depthOfFieldCalculator/index.ts +10 -0
  69. package/src/tool/depthOfFieldCalculator/logic.ts +91 -0
  70. package/src/tool/depthOfFieldCalculator/seo.astro +15 -0
  71. package/src/tool/exifCleaner/bibliography.ts +12 -0
  72. package/src/tool/exifCleaner/entry.ts +2 -0
  73. package/src/tool/exifCleaner/exif-metadata-cleaner-remove-gps-photo-privacy.css +36 -36
  74. package/src/tool/exifCleaner/i18n/de.ts +1 -15
  75. package/src/tool/exifCleaner/i18n/en.ts +1 -15
  76. package/src/tool/exifCleaner/i18n/es.ts +1 -15
  77. package/src/tool/exifCleaner/i18n/fr.ts +1 -15
  78. package/src/tool/exifCleaner/i18n/id.ts +1 -15
  79. package/src/tool/exifCleaner/i18n/it.ts +1 -15
  80. package/src/tool/exifCleaner/i18n/ja.ts +1 -15
  81. package/src/tool/exifCleaner/i18n/ko.ts +1 -15
  82. package/src/tool/exifCleaner/i18n/nl.ts +1 -15
  83. package/src/tool/exifCleaner/i18n/pl.ts +1 -15
  84. package/src/tool/exifCleaner/i18n/pt.ts +1 -15
  85. package/src/tool/exifCleaner/i18n/ru.ts +1 -15
  86. package/src/tool/exifCleaner/i18n/sv.ts +1 -15
  87. package/src/tool/exifCleaner/i18n/tr.ts +1 -15
  88. package/src/tool/exifCleaner/i18n/zh.ts +1 -15
  89. package/src/tool/exifCleaner/seo.astro +2 -5
  90. package/src/tool/imageCompressor/bibliography.ts +12 -0
  91. package/src/tool/imageCompressor/entry.ts +2 -0
  92. package/src/tool/imageCompressor/i18n/de.ts +1 -15
  93. package/src/tool/imageCompressor/i18n/en.ts +1 -15
  94. package/src/tool/imageCompressor/i18n/es.ts +1 -13
  95. package/src/tool/imageCompressor/i18n/fr.ts +1 -13
  96. package/src/tool/imageCompressor/i18n/id.ts +1 -15
  97. package/src/tool/imageCompressor/i18n/it.ts +1 -15
  98. package/src/tool/imageCompressor/i18n/ja.ts +1 -15
  99. package/src/tool/imageCompressor/i18n/ko.ts +1 -15
  100. package/src/tool/imageCompressor/i18n/nl.ts +1 -15
  101. package/src/tool/imageCompressor/i18n/pl.ts +1 -15
  102. package/src/tool/imageCompressor/i18n/pt.ts +1 -15
  103. package/src/tool/imageCompressor/i18n/ru.ts +1 -15
  104. package/src/tool/imageCompressor/i18n/sv.ts +1 -15
  105. package/src/tool/imageCompressor/i18n/tr.ts +1 -15
  106. package/src/tool/imageCompressor/i18n/zh.ts +1 -15
  107. package/src/tool/imageCompressor/online-image-compressor-reduce-file-size-no-quality-loss.css +71 -64
  108. package/src/tool/imageCompressor/seo.astro +1 -1
  109. package/src/tool/printQualityCalculator/bibliography.ts +12 -0
  110. package/src/tool/printQualityCalculator/entry.ts +2 -0
  111. package/src/tool/printQualityCalculator/i18n/de.ts +1 -15
  112. package/src/tool/printQualityCalculator/i18n/en.ts +1 -15
  113. package/src/tool/printQualityCalculator/i18n/es.ts +1 -13
  114. package/src/tool/printQualityCalculator/i18n/fr.ts +1 -13
  115. package/src/tool/printQualityCalculator/i18n/id.ts +1 -15
  116. package/src/tool/printQualityCalculator/i18n/it.ts +1 -15
  117. package/src/tool/printQualityCalculator/i18n/ja.ts +1 -15
  118. package/src/tool/printQualityCalculator/i18n/ko.ts +1 -15
  119. package/src/tool/printQualityCalculator/i18n/nl.ts +1 -15
  120. package/src/tool/printQualityCalculator/i18n/pl.ts +1 -15
  121. package/src/tool/printQualityCalculator/i18n/pt.ts +1 -15
  122. package/src/tool/printQualityCalculator/i18n/ru.ts +1 -15
  123. package/src/tool/printQualityCalculator/i18n/sv.ts +1 -15
  124. package/src/tool/printQualityCalculator/i18n/tr.ts +1 -15
  125. package/src/tool/printQualityCalculator/i18n/zh.ts +1 -15
  126. package/src/tool/printQualityCalculator/print-quality-calculator-pixels-to-cm-dpi.css +89 -81
  127. package/src/tool/printQualityCalculator/seo.astro +2 -5
  128. package/src/tool/privacyBlur/bibliography.ts +8 -0
  129. package/src/tool/privacyBlur/entry.ts +2 -0
  130. package/src/tool/privacyBlur/i18n/de.ts +1 -11
  131. package/src/tool/privacyBlur/i18n/en.ts +1 -11
  132. package/src/tool/privacyBlur/i18n/es.ts +1 -9
  133. package/src/tool/privacyBlur/i18n/fr.ts +1 -9
  134. package/src/tool/privacyBlur/i18n/id.ts +1 -11
  135. package/src/tool/privacyBlur/i18n/it.ts +1 -11
  136. package/src/tool/privacyBlur/i18n/ja.ts +1 -11
  137. package/src/tool/privacyBlur/i18n/ko.ts +1 -11
  138. package/src/tool/privacyBlur/i18n/nl.ts +1 -11
  139. package/src/tool/privacyBlur/i18n/pl.ts +1 -11
  140. package/src/tool/privacyBlur/i18n/pt.ts +1 -11
  141. package/src/tool/privacyBlur/i18n/ru.ts +1 -11
  142. package/src/tool/privacyBlur/i18n/sv.ts +1 -11
  143. package/src/tool/privacyBlur/i18n/tr.ts +1 -11
  144. package/src/tool/privacyBlur/i18n/zh.ts +1 -11
  145. package/src/tool/privacyBlur/online-privacy-editor-pixelate-blur-faces-photos.css +36 -36
  146. package/src/tool/privacyBlur/seo.astro +1 -1
  147. package/src/tool/subtitleSync/bibliography.ts +12 -0
  148. package/src/tool/subtitleSync/entry.ts +2 -0
  149. package/src/tool/subtitleSync/i18n/de.ts +1 -13
  150. package/src/tool/subtitleSync/i18n/en.ts +1 -13
  151. package/src/tool/subtitleSync/i18n/es.ts +1 -13
  152. package/src/tool/subtitleSync/i18n/fr.ts +1 -13
  153. package/src/tool/subtitleSync/i18n/id.ts +1 -13
  154. package/src/tool/subtitleSync/i18n/it.ts +1 -13
  155. package/src/tool/subtitleSync/i18n/ja.ts +1 -13
  156. package/src/tool/subtitleSync/i18n/ko.ts +1 -13
  157. package/src/tool/subtitleSync/i18n/nl.ts +1 -13
  158. package/src/tool/subtitleSync/i18n/pl.ts +1 -13
  159. package/src/tool/subtitleSync/i18n/pt.ts +1 -13
  160. package/src/tool/subtitleSync/i18n/ru.ts +1 -13
  161. package/src/tool/subtitleSync/i18n/sv.ts +1 -13
  162. package/src/tool/subtitleSync/i18n/tr.ts +1 -13
  163. package/src/tool/subtitleSync/i18n/zh.ts +1 -13
  164. package/src/tool/subtitleSync/seo.astro +1 -1
  165. package/src/tool/subtitleSync/synchronize-srt-subtitles-online-adjust-timing-free.css +43 -43
  166. package/src/tool/timelapseCalculator/bibliography.ts +20 -0
  167. package/src/tool/timelapseCalculator/entry.ts +2 -0
  168. package/src/tool/timelapseCalculator/i18n/de.ts +1 -21
  169. package/src/tool/timelapseCalculator/i18n/en.ts +1 -21
  170. package/src/tool/timelapseCalculator/i18n/es.ts +1 -21
  171. package/src/tool/timelapseCalculator/i18n/fr.ts +1 -21
  172. package/src/tool/timelapseCalculator/i18n/id.ts +1 -21
  173. package/src/tool/timelapseCalculator/i18n/it.ts +1 -21
  174. package/src/tool/timelapseCalculator/i18n/ja.ts +1 -21
  175. package/src/tool/timelapseCalculator/i18n/ko.ts +1 -21
  176. package/src/tool/timelapseCalculator/i18n/nl.ts +1 -21
  177. package/src/tool/timelapseCalculator/i18n/pl.ts +1 -21
  178. package/src/tool/timelapseCalculator/i18n/pt.ts +1 -21
  179. package/src/tool/timelapseCalculator/i18n/ru.ts +1 -21
  180. package/src/tool/timelapseCalculator/i18n/sv.ts +1 -21
  181. package/src/tool/timelapseCalculator/i18n/tr.ts +1 -21
  182. package/src/tool/timelapseCalculator/i18n/zh.ts +1 -21
  183. package/src/tool/timelapseCalculator/seo.astro +2 -5
  184. package/src/tool/timelapseCalculator/timelapse-hyperlapse-calculator-perfect-intervals.css +44 -42
  185. package/src/tool/tvDistance/bibliography.ts +12 -0
  186. package/src/tool/tvDistance/entry.ts +2 -0
  187. package/src/tool/tvDistance/i18n/de.ts +1 -13
  188. package/src/tool/tvDistance/i18n/en.ts +1 -13
  189. package/src/tool/tvDistance/i18n/es.ts +1 -13
  190. package/src/tool/tvDistance/i18n/fr.ts +1 -13
  191. package/src/tool/tvDistance/i18n/id.ts +1 -13
  192. package/src/tool/tvDistance/i18n/it.ts +1 -13
  193. package/src/tool/tvDistance/i18n/ja.ts +1 -13
  194. package/src/tool/tvDistance/i18n/ko.ts +1 -13
  195. package/src/tool/tvDistance/i18n/nl.ts +1 -13
  196. package/src/tool/tvDistance/i18n/pl.ts +1 -13
  197. package/src/tool/tvDistance/i18n/pt.ts +1 -13
  198. package/src/tool/tvDistance/i18n/ru.ts +1 -13
  199. package/src/tool/tvDistance/i18n/sv.ts +1 -13
  200. package/src/tool/tvDistance/i18n/tr.ts +1 -13
  201. package/src/tool/tvDistance/i18n/zh.ts +1 -13
  202. package/src/tool/tvDistance/seo.astro +1 -1
  203. package/src/tool/tvDistance/tv-viewing-distance-calculator-thx-4k-optimal-screen.css +56 -56
  204. package/src/tool/videoFrameExtractor/bibliography.ts +8 -0
  205. package/src/tool/videoFrameExtractor/entry.ts +2 -0
  206. package/src/tool/videoFrameExtractor/i18n/de.ts +1 -9
  207. package/src/tool/videoFrameExtractor/i18n/en.ts +1 -9
  208. package/src/tool/videoFrameExtractor/i18n/es.ts +1 -9
  209. package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -8
  210. package/src/tool/videoFrameExtractor/i18n/id.ts +1 -9
  211. package/src/tool/videoFrameExtractor/i18n/it.ts +1 -8
  212. package/src/tool/videoFrameExtractor/i18n/ja.ts +1 -9
  213. package/src/tool/videoFrameExtractor/i18n/ko.ts +1 -9
  214. package/src/tool/videoFrameExtractor/i18n/nl.ts +1 -9
  215. package/src/tool/videoFrameExtractor/i18n/pl.ts +1 -9
  216. package/src/tool/videoFrameExtractor/i18n/pt.ts +1 -9
  217. package/src/tool/videoFrameExtractor/i18n/ru.ts +1 -9
  218. package/src/tool/videoFrameExtractor/i18n/sv.ts +1 -9
  219. package/src/tool/videoFrameExtractor/i18n/tr.ts +1 -9
  220. package/src/tool/videoFrameExtractor/i18n/zh.ts +1 -9
  221. package/src/tool/videoFrameExtractor/online-video-frame-extractor-capture-hd-stills.css +55 -55
  222. package/src/tool/videoFrameExtractor/seo.astro +1 -1
  223. package/src/tools.ts +2 -0
  224. package/src/types.ts +0 -2
  225. package/src/tool/chromaticLens/style.css +0 -308
  226. package/src/tool/collageMaker/style.css +0 -386
  227. package/src/tool/exifCleaner/style.css +0 -289
  228. package/src/tool/imageCompressor/style.css +0 -503
  229. package/src/tool/printQualityCalculator/style.css +0 -491
  230. package/src/tool/privacyBlur/style.css +0 -332
  231. package/src/tool/subtitleSync/style.css +0 -325
  232. package/src/tool/timelapseCalculator/style.css +0 -285
  233. package/src/tool/tvDistance/style.css +0 -435
  234. package/src/tool/videoFrameExtractor/style.css +0 -426
@@ -1,426 +0,0 @@
1
- .vfe-root {
2
- --vfe-bg: #fff;
3
- --vfe-bg-muted: #f8fafc;
4
- --vfe-bg-glass: #fff;
5
- --vfe-glass-border: #e2e8f0;
6
- --vfe-glass-text: #6366f1;
7
- --vfe-glass-muted: #94a3b8;
8
- --vfe-glass-btn-bg: #f8fafc;
9
- --vfe-glass-btn-border: #e2e8f0;
10
- --vfe-glass-btn-text: #1e293b;
11
- --vfe-batch-bg: #f1f5f9;
12
- --vfe-border: #e2e8f0;
13
- --vfe-text: #1e293b;
14
- --vfe-text-muted: #94a3b8;
15
- --vfe-primary: #6366f1;
16
- --vfe-primary-light: rgba(99, 102, 241, 0.1);
17
- --vfe-shadow: 0 25px 60px rgba(0,0,0,0.08);
18
-
19
- max-width: 860px;
20
- margin: 0 auto;
21
- padding: 1rem;
22
- }
23
-
24
- .theme-dark .vfe-root {
25
- --vfe-bg: #18181b;
26
- --vfe-bg-muted: #09090b;
27
- --vfe-bg-glass: #27272a;
28
- --vfe-glass-border: #3f3f46;
29
- --vfe-glass-text: #818cf8;
30
- --vfe-glass-muted: #71717a;
31
- --vfe-glass-btn-bg: #3f3f46;
32
- --vfe-glass-btn-border: #52525b;
33
- --vfe-glass-btn-text: #f4f4f5;
34
- --vfe-batch-bg: #1c1c1f;
35
- --vfe-border: #27272a;
36
- --vfe-text: #f4f4f5;
37
- --vfe-text-muted: #71717a;
38
- --vfe-primary: #818cf8;
39
- --vfe-primary-light: rgba(129, 140, 248, 0.12);
40
- --vfe-shadow: 0 25px 60px rgba(0,0,0,0.4);
41
- }
42
-
43
- .vfe-premium-card {
44
- background: var(--vfe-bg);
45
- border: 1px solid var(--vfe-border);
46
- border-radius: 1.5rem;
47
- box-shadow: var(--vfe-shadow);
48
- overflow: hidden;
49
- }
50
-
51
- .vfe-uploader-box {
52
- padding: 4rem 2rem;
53
- display: flex;
54
- flex-direction: column;
55
- align-items: center;
56
- text-align: center;
57
- gap: 0.625rem;
58
- cursor: pointer;
59
- border: 3px dashed var(--vfe-border);
60
- border-radius: 1.5rem;
61
- margin: 1rem;
62
- transition: border-color 0.2s, background 0.2s;
63
- }
64
-
65
- .vfe-uploader-box:hover,
66
- .vfe-dragover {
67
- border-color: var(--vfe-primary);
68
- background: var(--vfe-primary-light);
69
- }
70
-
71
- .vfe-uploader-icon {
72
- width: 5rem;
73
- height: 5rem;
74
- background: var(--vfe-primary-light);
75
- border-radius: 1.25rem;
76
- display: flex;
77
- align-items: center;
78
- justify-content: center;
79
- color: var(--vfe-primary);
80
- margin-bottom: 0.5rem;
81
- }
82
-
83
- .vfe-uploader-icon svg {
84
- width: 2.5rem;
85
- height: 2.5rem;
86
- }
87
-
88
- .vfe-uploader-text h3 {
89
- font-size: 1.5rem;
90
- font-weight: 800;
91
- color: var(--vfe-text);
92
- margin: 0 0 0.25rem;
93
- }
94
-
95
- .vfe-uploader-text p {
96
- color: var(--vfe-text-muted);
97
- font-size: 0.95rem;
98
- margin: 0;
99
- }
100
-
101
- .vfe-privacy-note {
102
- font-size: 0.7rem;
103
- font-weight: 700;
104
- text-transform: uppercase;
105
- letter-spacing: 0.08em;
106
- color: var(--vfe-text-muted);
107
- margin-top: 0.5rem;
108
- }
109
-
110
- .vfe-player-container {
111
- display: flex;
112
- flex-direction: column;
113
- }
114
-
115
- .vfe-video-wrapper video {
116
- width: 100%;
117
- display: block;
118
- max-height: 65vh;
119
- background: #000;
120
- }
121
-
122
- .vfe-controls-glass {
123
- background: var(--vfe-bg-glass);
124
- border: 1px solid var(--vfe-glass-border);
125
- border-radius: 1rem;
126
- margin: 0.75rem;
127
- padding: 1.25rem;
128
- display: flex;
129
- flex-direction: column;
130
- gap: 1rem;
131
- }
132
-
133
- .vfe-time-row {
134
- display: flex;
135
- justify-content: space-between;
136
- font-size: 0.875rem;
137
- font-weight: 700;
138
- color: var(--vfe-glass-text);
139
- }
140
-
141
- .vfe-scrubber {
142
- width: 100%;
143
- height: 4px;
144
- accent-color: var(--vfe-primary);
145
- cursor: pointer;
146
- border-radius: 9999px;
147
- }
148
-
149
- .vfe-actions-row {
150
- display: flex;
151
- align-items: center;
152
- gap: 0.625rem;
153
- }
154
-
155
- .vfe-btn-main {
156
- display: inline-flex;
157
- align-items: center;
158
- gap: 0.4rem;
159
- font-weight: 700;
160
- font-size: 0.85rem;
161
- border: none;
162
- border-radius: 0.625rem;
163
- cursor: pointer;
164
- transition: all 0.15s;
165
- white-space: nowrap;
166
- text-decoration: none;
167
- }
168
-
169
- .vfe-btn-control {
170
- padding: 0.5rem 0.875rem;
171
- background: var(--vfe-glass-btn-bg);
172
- color: var(--vfe-glass-btn-text);
173
- border: 1px solid var(--vfe-glass-btn-border);
174
- flex: 1;
175
- justify-content: center;
176
- }
177
-
178
- .vfe-btn-control:hover {
179
- border-color: var(--vfe-primary);
180
- color: var(--vfe-primary);
181
- }
182
-
183
- .vfe-btn-icon-only {
184
- flex: none;
185
- width: 50px;
186
- justify-content: center;
187
- }
188
-
189
- .vfe-btn-capture {
190
- padding: 0.625rem 1.25rem;
191
- background: var(--vfe-primary);
192
- color: #fff;
193
- flex: 1;
194
- justify-content: center;
195
- box-shadow: 0 4px 14px rgba(99, 102, 241, 0.35);
196
- }
197
-
198
- .vfe-btn-capture:hover {
199
- filter: brightness(1.1);
200
- }
201
-
202
- .vfe-btn-capture:disabled {
203
- opacity: 0.5;
204
- cursor: not-allowed;
205
- }
206
-
207
- .vfe-btn-batch {
208
- padding: 0.45rem 1rem;
209
- font-size: 0.8rem;
210
- flex: none;
211
- }
212
-
213
- .vfe-btn-main svg {
214
- width: 1.1rem;
215
- height: 1.1rem;
216
- flex-shrink: 0;
217
- }
218
-
219
- .vfe-batch-panel {
220
- background: var(--vfe-batch-bg);
221
- border-radius: 0.875rem;
222
- padding: 0.875rem 1rem;
223
- border: 1px solid var(--vfe-glass-btn-border);
224
- display: flex;
225
- flex-direction: column;
226
- gap: 0.75rem;
227
- }
228
-
229
- .vfe-batch-header {
230
- display: flex;
231
- align-items: center;
232
- gap: 0.5rem;
233
- font-size: 0.8rem;
234
- font-weight: 700;
235
- color: var(--vfe-primary);
236
- }
237
-
238
- .vfe-batch-header svg {
239
- width: 1rem;
240
- height: 1rem;
241
- }
242
-
243
- .vfe-batch-controls {
244
- display: flex;
245
- align-items: center;
246
- gap: 0.625rem;
247
- flex-wrap: wrap;
248
- }
249
-
250
- .vfe-batch-input-group {
251
- display: flex;
252
- align-items: center;
253
- gap: 0.375rem;
254
- color: var(--vfe-glass-btn-text);
255
- font-size: 0.8rem;
256
- font-weight: 700;
257
- text-transform: uppercase;
258
- letter-spacing: 0.05em;
259
- background: var(--vfe-bg);
260
- border: 1px solid var(--vfe-glass-btn-border);
261
- border-radius: 0.5rem;
262
- padding: 0.4rem 0.75rem;
263
- }
264
-
265
- .vfe-batch-input-group input {
266
- width: 48px;
267
- background: transparent;
268
- border: none;
269
- color: var(--vfe-glass-btn-text);
270
- font-size: 0.95rem;
271
- font-weight: 800;
272
- text-align: center;
273
- outline: none;
274
- }
275
-
276
- .vfe-gallery-minimal {
277
- background: var(--vfe-bg);
278
- border-top: 1px solid var(--vfe-border);
279
- }
280
-
281
- .vfe-gallery-header {
282
- display: flex;
283
- justify-content: space-between;
284
- align-items: center;
285
- padding: 1rem 1.25rem 0.75rem;
286
- }
287
-
288
- .vfe-gallery-header h4 {
289
- font-size: 0.7rem;
290
- font-weight: 800;
291
- text-transform: uppercase;
292
- letter-spacing: 0.1em;
293
- color: var(--vfe-text-muted);
294
- margin: 0;
295
- }
296
-
297
- .vfe-gallery-minimal .vfe-btn-control {
298
- background: var(--vfe-bg-muted);
299
- color: var(--vfe-text);
300
- border-color: var(--vfe-border);
301
- flex: none;
302
- }
303
-
304
- .vfe-gallery-minimal .vfe-btn-control:hover {
305
- border-color: var(--vfe-primary);
306
- color: var(--vfe-primary);
307
- }
308
-
309
- .vfe-frame-footer .vfe-btn-control {
310
- background: var(--vfe-bg-muted);
311
- color: var(--vfe-text-muted);
312
- border-color: var(--vfe-border);
313
- flex: none;
314
- padding: 0.25rem 0.4rem;
315
- }
316
-
317
- .vfe-btn-sm {
318
- padding: 0.35rem 0.625rem;
319
- font-size: 0.75rem;
320
- }
321
-
322
- .vfe-frames-scroll {
323
- display: flex;
324
- gap: 0.75rem;
325
- overflow-x: auto;
326
- padding: 0 1.25rem 1.25rem;
327
- scrollbar-width: thin;
328
- }
329
-
330
- .vfe-gallery-empty-text {
331
- padding: 1.5rem;
332
- text-align: center;
333
- color: var(--vfe-text-muted);
334
- font-size: 0.85rem;
335
- width: 100%;
336
- margin: 0;
337
- }
338
-
339
- .vfe-frame-card {
340
- flex-shrink: 0;
341
- width: 160px;
342
- background: var(--vfe-bg-muted);
343
- border: 1px solid var(--vfe-border);
344
- border-radius: 0.75rem;
345
- overflow: hidden;
346
- transition: border-color 0.15s;
347
- }
348
-
349
- .vfe-frame-card:hover {
350
- border-color: var(--vfe-primary);
351
- }
352
-
353
- .vfe-frame-thumb {
354
- width: 100%;
355
- aspect-ratio: 16/9;
356
- object-fit: cover;
357
- display: block;
358
- cursor: zoom-in;
359
- }
360
-
361
- .vfe-frame-footer {
362
- display: flex;
363
- justify-content: space-between;
364
- align-items: center;
365
- padding: 0.4rem 0.625rem;
366
- }
367
-
368
- .vfe-frame-time {
369
- font-size: 0.7rem;
370
- font-weight: 800;
371
- color: var(--vfe-primary);
372
- }
373
-
374
- .vfe-lightbox {
375
- position: fixed;
376
- inset: 0;
377
- z-index: 9999;
378
- background: rgba(0, 0, 0, 0.95);
379
- backdrop-filter: blur(20px);
380
- display: none;
381
- align-items: center;
382
- justify-content: center;
383
- }
384
-
385
- .vfe-lightbox-open {
386
- display: flex;
387
- }
388
-
389
- .vfe-lightbox-content {
390
- position: relative;
391
- display: flex;
392
- flex-direction: column;
393
- align-items: center;
394
- gap: 1.5rem;
395
- max-width: 90vw;
396
- }
397
-
398
- .vfe-lightbox-close {
399
- position: absolute;
400
- top: -3rem;
401
- right: 0;
402
- font-size: 2.5rem;
403
- color: rgba(255, 255, 255, 0.6);
404
- cursor: pointer;
405
- line-height: 1;
406
- }
407
-
408
- .vfe-lightbox-close:hover {
409
- color: #fff;
410
- }
411
-
412
- .vfe-lightbox-img {
413
- max-width: 100%;
414
- max-height: 70vh;
415
- border-radius: 0.75rem;
416
- box-shadow: 0 32px 80px rgba(0, 0, 0, 1);
417
- }
418
-
419
- .vfe-lightbox .vfe-btn-capture {
420
- padding: 0.875rem 2rem;
421
- font-size: 0.95rem;
422
- }
423
-
424
- .vfe-hidden {
425
- display: none;
426
- }