@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,308 +0,0 @@
1
- .cl-root {
2
- --cl-bg: #fff;
3
- --cl-bg-elevated: #f8fafc;
4
- --cl-border: #e2e8f0;
5
- --cl-text: #0f172a;
6
- --cl-text-muted: #64748b;
7
- --cl-accent: #6366f1;
8
- --cl-accent-alpha: rgba(99, 102, 241, 0.08);
9
- --cl-accent-alpha-hover: rgba(99, 102, 241, 0.04);
10
- --cl-emerald: #10b981;
11
- --cl-emerald-alpha: rgba(16, 185, 129, 0.06);
12
- --cl-shadow: rgba(0, 0, 0, 0.15);
13
-
14
- padding: 2.5rem 1.5rem;
15
- max-width: 1000px;
16
- margin: 0 auto;
17
- }
18
-
19
- .theme-dark .cl-root {
20
- --cl-bg: #18181b;
21
- --cl-bg-elevated: #27272a;
22
- --cl-border: #3f3f46;
23
- --cl-text: #f4f4f5;
24
- --cl-text-muted: #71717a;
25
- --cl-accent: #818cf8;
26
- --cl-accent-alpha: rgba(129, 140, 248, 0.12);
27
- --cl-accent-alpha-hover: rgba(129, 140, 248, 0.06);
28
- --cl-emerald: #34d399;
29
- --cl-emerald-alpha: rgba(52, 211, 153, 0.08);
30
- --cl-shadow: rgba(0, 0, 0, 0.5);
31
- }
32
-
33
- .cl-card {
34
- background: var(--cl-bg);
35
- border: 1px solid var(--cl-border);
36
- border-radius: 3rem;
37
- padding: 1.5rem;
38
- box-shadow: 0 45px 120px -30px var(--cl-shadow);
39
- position: relative;
40
- overflow: hidden;
41
- }
42
-
43
- .cl-drop {
44
- padding: 5rem 2rem;
45
- display: flex;
46
- flex-direction: column;
47
- align-items: center;
48
- border: 3px dashed var(--cl-border);
49
- border-radius: 2.5rem;
50
- cursor: pointer;
51
- transition: all 0.2s ease;
52
- text-align: center;
53
- gap: 0.5rem;
54
- }
55
-
56
- .cl-drop:hover,
57
- .cl-drop-active {
58
- background: var(--cl-accent-alpha-hover);
59
- border-color: var(--cl-accent);
60
- }
61
-
62
- .cl-drop-icon {
63
- width: 5rem;
64
- height: 5rem;
65
- background: var(--cl-accent-alpha);
66
- border-radius: 50%;
67
- display: flex;
68
- align-items: center;
69
- justify-content: center;
70
- margin-bottom: 1rem;
71
- color: var(--cl-accent);
72
- }
73
-
74
- .cl-drop-icon svg {
75
- width: 2.5rem;
76
- height: 2.5rem;
77
- }
78
-
79
- .cl-drop-title {
80
- font-size: 2rem;
81
- font-weight: 950;
82
- color: var(--cl-text);
83
- margin: 0;
84
- }
85
-
86
- .cl-drop-sub {
87
- font-size: 1.1rem;
88
- color: var(--cl-text-muted);
89
- margin: 0;
90
- font-weight: 600;
91
- }
92
-
93
- .cl-workspace {
94
- padding: 1.5rem;
95
- }
96
-
97
- .cl-mini-drop {
98
- display: inline-flex;
99
- align-items: center;
100
- gap: 0.75rem;
101
- padding: 0.75rem 1.25rem;
102
- background: var(--cl-bg-elevated);
103
- border: 1px solid var(--cl-border);
104
- border-radius: 1rem;
105
- font-size: 0.75rem;
106
- font-weight: 800;
107
- color: var(--cl-text-muted);
108
- cursor: pointer;
109
- margin-bottom: 2rem;
110
- transition: border-color 0.2s, color 0.2s;
111
- }
112
-
113
- .cl-mini-drop:hover {
114
- border-color: var(--cl-accent);
115
- color: var(--cl-accent);
116
- }
117
-
118
- .cl-mini-drop svg {
119
- width: 1.1rem;
120
- height: 1.1rem;
121
- }
122
-
123
- .cl-config-bar {
124
- padding: 1rem 0;
125
- margin-bottom: 2rem;
126
- border-bottom: 1px solid var(--cl-border);
127
- display: flex;
128
- justify-content: flex-end;
129
- }
130
-
131
- .cl-config-item {
132
- display: flex;
133
- align-items: center;
134
- gap: 1rem;
135
- }
136
-
137
- .cl-config-label {
138
- font-size: 0.75rem;
139
- font-weight: 900;
140
- text-transform: uppercase;
141
- color: var(--cl-text-muted);
142
- letter-spacing: 0.1em;
143
- }
144
-
145
- .cl-count-select {
146
- padding: 0.5rem 1rem;
147
- border-radius: 0.75rem;
148
- background: var(--cl-bg-elevated);
149
- border: 1px solid var(--cl-border);
150
- color: var(--cl-text);
151
- font-weight: 800;
152
- cursor: pointer;
153
- }
154
-
155
- .cl-result-layout {
156
- display: grid;
157
- grid-template-columns: 1fr 1.25fr;
158
- gap: 3rem;
159
- }
160
-
161
- @media (max-width: 800px) {
162
- .cl-result-layout {
163
- grid-template-columns: 1fr;
164
- }
165
- }
166
-
167
- .cl-preview-col {
168
- display: flex;
169
- flex-direction: column;
170
- gap: 1rem;
171
- }
172
-
173
- .cl-preview-img {
174
- width: 100%;
175
- border-radius: 1.5rem;
176
- box-shadow: 0 20px 40px var(--cl-shadow);
177
- display: block;
178
- }
179
-
180
- .cl-palette-col {
181
- display: flex;
182
- flex-direction: column;
183
- gap: 1.5rem;
184
- }
185
-
186
- .cl-palette-header {
187
- display: flex;
188
- align-items: center;
189
- gap: 1rem;
190
- color: var(--cl-accent);
191
- }
192
-
193
- .cl-palette-header svg {
194
- width: 1.25rem;
195
- height: 1.25rem;
196
- flex-shrink: 0;
197
- }
198
-
199
- .cl-palette-header h4 {
200
- font-size: 1.25rem;
201
- font-weight: 950;
202
- color: var(--cl-text);
203
- margin: 0;
204
- }
205
-
206
- .cl-loader {
207
- display: flex;
208
- flex-direction: column;
209
- align-items: center;
210
- gap: 1rem;
211
- padding: 2rem 0;
212
- }
213
-
214
- .cl-spinner {
215
- width: 3rem;
216
- height: 3rem;
217
- border: 3px solid var(--cl-accent-alpha);
218
- border-top-color: var(--cl-accent);
219
- border-radius: 50%;
220
- animation: cl-spin 0.8s linear infinite;
221
- }
222
-
223
- .cl-loader-text {
224
- font-size: 0.75rem;
225
- font-weight: 900;
226
- text-transform: uppercase;
227
- color: var(--cl-text-muted);
228
- letter-spacing: 0.1em;
229
- margin: 0;
230
- }
231
-
232
- .cl-swatches {
233
- display: flex;
234
- flex-direction: column;
235
- gap: 0.75rem;
236
- animation: cl-fade-up 0.5s ease;
237
- }
238
-
239
- .cl-swatch {
240
- display: flex;
241
- align-items: center;
242
- gap: 1.25rem;
243
- background: var(--cl-bg-elevated);
244
- border-radius: 1.25rem;
245
- padding: 1rem;
246
- border: 1px solid var(--cl-border);
247
- cursor: pointer;
248
- transition: transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275), border-color 0.2s;
249
- }
250
-
251
- .cl-swatch:hover {
252
- transform: scale(1.02);
253
- border-color: var(--cl-accent);
254
- }
255
-
256
- .cl-swatch-copied {
257
- background: var(--cl-emerald-alpha);
258
- border-color: var(--cl-emerald);
259
- }
260
-
261
- .cl-swatch-color {
262
- width: 3.5rem;
263
- height: 3.5rem;
264
- border-radius: 0.75rem;
265
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);
266
- flex-shrink: 0;
267
- }
268
-
269
- .cl-swatch-info {
270
- display: flex;
271
- flex-direction: column;
272
- gap: 0.2rem;
273
- }
274
-
275
- .cl-swatch-hex {
276
- font-weight: 950;
277
- color: var(--cl-text);
278
- font-size: 1.25rem;
279
- }
280
-
281
- .cl-swatch-action {
282
- font-size: 0.7rem;
283
- font-weight: 900;
284
- color: var(--cl-text-muted);
285
- text-transform: uppercase;
286
- letter-spacing: 0.05em;
287
- }
288
-
289
- .cl-hidden {
290
- display: none;
291
- }
292
-
293
- @keyframes cl-spin {
294
- to {
295
- transform: rotate(360deg);
296
- }
297
- }
298
-
299
- @keyframes cl-fade-up {
300
- from {
301
- opacity: 0;
302
- transform: translateY(10px);
303
- }
304
- to {
305
- opacity: 1;
306
- transform: translateY(0);
307
- }
308
- }
@@ -1,386 +0,0 @@
1
- .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
- .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
- .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
- .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
- .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
- .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
- .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
- .cm-drop-zone:hover,
89
- .cm-drop-zone-over {
90
- border-color: var(--cm-primary);
91
- background: var(--cm-primary-light);
92
- }
93
-
94
- .cm-drop-title {
95
- font-size: 0.9rem;
96
- font-weight: 700;
97
- color: var(--cm-text);
98
- margin: 0;
99
- }
100
-
101
- .cm-drop-sub {
102
- font-size: 0.75rem;
103
- color: var(--cm-text-muted);
104
- margin: 0;
105
- }
106
-
107
- .cm-drop-link {
108
- color: var(--cm-primary);
109
- font-weight: 600;
110
- cursor: pointer;
111
- }
112
-
113
- .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
- .cm-section-header {
123
- display: flex;
124
- justify-content: space-between;
125
- align-items: center;
126
- }
127
-
128
- .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
- .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
- .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
- .cm-thumb:hover {
154
- border-color: var(--cm-primary);
155
- }
156
-
157
- .cm-thumb img {
158
- width: 100%;
159
- height: 100%;
160
- object-fit: cover;
161
- display: block;
162
- }
163
-
164
- .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
- .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
- .cm-thumb:hover .cm-thumb-del {
194
- display: flex;
195
- }
196
-
197
- .cm-thumb-del:hover {
198
- background: #dc2626;
199
- }
200
-
201
- .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
- .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
- .cm-preview-placeholder p {
223
- font-size: 0.8rem;
224
- margin: 0;
225
- }
226
-
227
- .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
- .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
- .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
- .cm-layouts {
254
- display: grid;
255
- grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
256
- gap: 0.4rem;
257
- }
258
-
259
- .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
- .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
- .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
- .cm-layout-btn-active {
288
- border-color: var(--cm-primary);
289
- background: var(--cm-primary-light);
290
- color: var(--cm-primary);
291
- }
292
-
293
- .cm-layout-btn-disabled {
294
- opacity: 0.45;
295
- cursor: not-allowed;
296
- }
297
-
298
- .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
- .cm-settings-inline {
313
- display: flex;
314
- flex-wrap: wrap;
315
- align-items: flex-end;
316
- gap: 1rem;
317
- }
318
-
319
- .cm-setting {
320
- display: flex;
321
- flex-direction: column;
322
- gap: 0.3rem;
323
- }
324
-
325
- .cm-setting-label {
326
- font-size: 0.7rem;
327
- font-weight: 600;
328
- color: var(--cm-text-muted);
329
- }
330
-
331
- .cm-slider {
332
- accent-color: var(--cm-primary);
333
- width: 120px;
334
- }
335
-
336
- .cm-color-row {
337
- display: flex;
338
- align-items: center;
339
- gap: 0.5rem;
340
- }
341
-
342
- .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
- .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
- .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
- .cm-download-btn:disabled {
378
- opacity: 0.4;
379
- cursor: not-allowed;
380
- box-shadow: none;
381
- }
382
-
383
- .cm-download-btn:not(:disabled):hover {
384
- transform: translateY(-1px);
385
- box-shadow: 0 6px 18px rgba(99,102,241,0.4);
386
- }