Add modern CSS styling

#1
by masbudjj - opened
Files changed (1) hide show
  1. assets/style.css +455 -0
assets/style.css ADDED
@@ -0,0 +1,455 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Modern TTS UI - Lightweight & Beautiful */
2
+ :root {
3
+ --primary: #6366f1;
4
+ --primary-dark: #4f46e5;
5
+ --secondary: #8b5cf6;
6
+ --success: #10b981;
7
+ --warning: #f59e0b;
8
+ --danger: #ef4444;
9
+ --bg: #0f172a;
10
+ --bg-light: #1e293b;
11
+ --surface: #334155;
12
+ --text: #f1f5f9;
13
+ --text-muted: #94a3b8;
14
+ --border: #475569;
15
+ --glass: rgba(255, 255, 255, 0.05);
16
+ --shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
17
+ --radius: 16px;
18
+ }
19
+
20
+ * {
21
+ margin: 0;
22
+ padding: 0;
23
+ box-sizing: border-box;
24
+ }
25
+
26
+ body {
27
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', sans-serif;
28
+ background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
29
+ color: var(--text);
30
+ line-height: 1.6;
31
+ min-height: 100vh;
32
+ padding: 20px;
33
+ overflow-x: hidden;
34
+ }
35
+
36
+ /* Header */
37
+ h1 {
38
+ font-size: clamp(1.5rem, 5vw, 2.5rem);
39
+ font-weight: 700;
40
+ background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
41
+ -webkit-background-clip: text;
42
+ -webkit-text-fill-color: transparent;
43
+ background-clip: text;
44
+ margin-bottom: 8px;
45
+ text-align: center;
46
+ }
47
+
48
+ .subtitle {
49
+ text-align: center;
50
+ color: var(--text-muted);
51
+ margin-bottom: 32px;
52
+ font-size: 0.95rem;
53
+ }
54
+
55
+ /* Layout */
56
+ .row {
57
+ display: grid;
58
+ grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
59
+ gap: 20px;
60
+ margin-bottom: 20px;
61
+ }
62
+
63
+ .col {
64
+ background: var(--glass);
65
+ backdrop-filter: blur(10px);
66
+ border: 1px solid var(--border);
67
+ border-radius: var(--radius);
68
+ padding: 24px;
69
+ box-shadow: var(--shadow);
70
+ transition: transform 0.2s, box-shadow 0.2s;
71
+ }
72
+
73
+ .col:hover {
74
+ transform: translateY(-2px);
75
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4);
76
+ }
77
+
78
+ /* Fieldset */
79
+ fieldset {
80
+ border: none;
81
+ margin-bottom: 20px;
82
+ padding: 0;
83
+ }
84
+
85
+ legend {
86
+ font-size: 1.1rem;
87
+ font-weight: 600;
88
+ color: var(--primary);
89
+ margin-bottom: 12px;
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 8px;
93
+ }
94
+
95
+ legend::before {
96
+ content: "▶";
97
+ font-size: 0.8rem;
98
+ color: var(--secondary);
99
+ }
100
+
101
+ /* Inputs */
102
+ label {
103
+ display: block;
104
+ margin: 12px 0 6px;
105
+ color: var(--text);
106
+ font-size: 0.9rem;
107
+ font-weight: 500;
108
+ }
109
+
110
+ input[type="range"] {
111
+ width: 100%;
112
+ height: 6px;
113
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
114
+ border-radius: 10px;
115
+ outline: none;
116
+ opacity: 0.8;
117
+ transition: opacity 0.2s;
118
+ cursor: pointer;
119
+ }
120
+
121
+ input[type="range"]:hover {
122
+ opacity: 1;
123
+ }
124
+
125
+ input[type="range"]::-webkit-slider-thumb {
126
+ appearance: none;
127
+ width: 18px;
128
+ height: 18px;
129
+ background: white;
130
+ border-radius: 50%;
131
+ cursor: pointer;
132
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
133
+ transition: transform 0.2s;
134
+ }
135
+
136
+ input[type="range"]::-webkit-slider-thumb:hover {
137
+ transform: scale(1.2);
138
+ }
139
+
140
+ input[type="range"]::-moz-range-thumb {
141
+ width: 18px;
142
+ height: 18px;
143
+ background: white;
144
+ border-radius: 50%;
145
+ cursor: pointer;
146
+ border: none;
147
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
148
+ }
149
+
150
+ input[type="text"],
151
+ input[type="file"],
152
+ select {
153
+ width: 100%;
154
+ padding: 10px 14px;
155
+ background: var(--bg-light);
156
+ border: 1px solid var(--border);
157
+ border-radius: 10px;
158
+ color: var(--text);
159
+ font-size: 0.95rem;
160
+ transition: all 0.2s;
161
+ }
162
+
163
+ input[type="text"]:focus,
164
+ select:focus {
165
+ outline: none;
166
+ border-color: var(--primary);
167
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
168
+ }
169
+
170
+ input[type="file"]::file-selector-button {
171
+ padding: 8px 16px;
172
+ background: var(--primary);
173
+ color: white;
174
+ border: none;
175
+ border-radius: 8px;
176
+ cursor: pointer;
177
+ margin-right: 12px;
178
+ transition: background 0.2s;
179
+ }
180
+
181
+ input[type="file"]::file-selector-button:hover {
182
+ background: var(--primary-dark);
183
+ }
184
+
185
+ textarea {
186
+ width: 100%;
187
+ min-height: 120px;
188
+ padding: 12px;
189
+ background: var(--bg-light);
190
+ border: 1px solid var(--border);
191
+ border-radius: 10px;
192
+ color: var(--text);
193
+ font-family: inherit;
194
+ font-size: 0.95rem;
195
+ resize: vertical;
196
+ transition: all 0.2s;
197
+ }
198
+
199
+ textarea:focus {
200
+ outline: none;
201
+ border-color: var(--primary);
202
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
203
+ }
204
+
205
+ /* Checkboxes & Radio */
206
+ input[type="checkbox"],
207
+ input[type="radio"] {
208
+ width: 18px;
209
+ height: 18px;
210
+ margin-right: 8px;
211
+ cursor: pointer;
212
+ accent-color: var(--primary);
213
+ }
214
+
215
+ /* Buttons */
216
+ button {
217
+ padding: 12px 24px;
218
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
219
+ color: white;
220
+ border: none;
221
+ border-radius: 10px;
222
+ font-weight: 600;
223
+ font-size: 0.95rem;
224
+ cursor: pointer;
225
+ transition: all 0.2s;
226
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
227
+ position: relative;
228
+ overflow: hidden;
229
+ }
230
+
231
+ button::before {
232
+ content: "";
233
+ position: absolute;
234
+ top: 0;
235
+ left: -100%;
236
+ width: 100%;
237
+ height: 100%;
238
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
239
+ transition: left 0.5s;
240
+ }
241
+
242
+ button:hover::before {
243
+ left: 100%;
244
+ }
245
+
246
+ button:hover {
247
+ transform: translateY(-2px);
248
+ box-shadow: 0 6px 20px rgba(99, 102, 241, 0.4);
249
+ }
250
+
251
+ button:active {
252
+ transform: translateY(0);
253
+ }
254
+
255
+ button:disabled {
256
+ opacity: 0.5;
257
+ cursor: not-allowed;
258
+ transform: none;
259
+ }
260
+
261
+ button.secondary {
262
+ background: var(--surface);
263
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
264
+ }
265
+
266
+ button.secondary:hover {
267
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
268
+ }
269
+
270
+ /* Chips */
271
+ .chip {
272
+ display: inline-flex;
273
+ align-items: center;
274
+ gap: 6px;
275
+ padding: 6px 14px;
276
+ background: var(--surface);
277
+ border: 1px solid var(--border);
278
+ border-radius: 999px;
279
+ font-size: 0.85rem;
280
+ font-weight: 500;
281
+ margin: 4px;
282
+ transition: all 0.2s;
283
+ }
284
+
285
+ .chip.active {
286
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
287
+ border-color: transparent;
288
+ color: white;
289
+ }
290
+
291
+ .chip::before {
292
+ content: "●";
293
+ font-size: 0.6rem;
294
+ }
295
+
296
+ .chip.success::before { color: var(--success); }
297
+ .chip.warning::before { color: var(--warning); }
298
+ .chip.danger::before { color: var(--danger); }
299
+
300
+ /* Audio Player */
301
+ audio {
302
+ width: 100%;
303
+ margin: 16px 0;
304
+ border-radius: 10px;
305
+ filter: hue-rotate(200deg);
306
+ }
307
+
308
+ /* Download Link */
309
+ a {
310
+ display: inline-block;
311
+ padding: 12px 24px;
312
+ background: var(--success);
313
+ color: white;
314
+ text-decoration: none;
315
+ border-radius: 10px;
316
+ font-weight: 600;
317
+ transition: all 0.2s;
318
+ box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);
319
+ }
320
+
321
+ a:hover {
322
+ background: #059669;
323
+ transform: translateY(-2px);
324
+ box-shadow: 0 6px 20px rgba(16, 185, 129, 0.4);
325
+ }
326
+
327
+ /* Log Box */
328
+ .mono {
329
+ font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
330
+ font-size: 0.8rem;
331
+ line-height: 1.6;
332
+ color: var(--text-muted);
333
+ }
334
+
335
+ #log {
336
+ background: var(--bg);
337
+ border: 1px solid var(--border);
338
+ border-radius: 10px;
339
+ padding: 12px;
340
+ max-height: 200px;
341
+ overflow-y: auto;
342
+ white-space: pre-wrap;
343
+ word-wrap: break-word;
344
+ }
345
+
346
+ #log::-webkit-scrollbar {
347
+ width: 8px;
348
+ }
349
+
350
+ #log::-webkit-scrollbar-track {
351
+ background: var(--bg-light);
352
+ border-radius: 10px;
353
+ }
354
+
355
+ #log::-webkit-scrollbar-thumb {
356
+ background: var(--primary);
357
+ border-radius: 10px;
358
+ }
359
+
360
+ /* Grid Layouts */
361
+ .grid {
362
+ display: grid;
363
+ grid-template-columns: 1fr 1fr;
364
+ gap: 12px;
365
+ }
366
+
367
+ /* Utilities */
368
+ .hidden { display: none !important; }
369
+ .muted { color: var(--text-muted); }
370
+ .text-center { text-align: center; }
371
+ .mt-1 { margin-top: 8px; }
372
+ .mt-2 { margin-top: 16px; }
373
+ .mb-1 { margin-bottom: 8px; }
374
+ .mb-2 { margin-bottom: 16px; }
375
+
376
+ /* Responsive */
377
+ @media (max-width: 768px) {
378
+ .row {
379
+ grid-template-columns: 1fr;
380
+ }
381
+
382
+ .grid {
383
+ grid-template-columns: 1fr;
384
+ }
385
+
386
+ .col {
387
+ padding: 16px;
388
+ }
389
+
390
+ h1 {
391
+ font-size: 1.75rem;
392
+ }
393
+ }
394
+
395
+ /* Animations */
396
+ @keyframes fadeIn {
397
+ from {
398
+ opacity: 0;
399
+ transform: translateY(10px);
400
+ }
401
+ to {
402
+ opacity: 1;
403
+ transform: translateY(0);
404
+ }
405
+ }
406
+
407
+ .col {
408
+ animation: fadeIn 0.5s ease-out;
409
+ }
410
+
411
+ .col:nth-child(1) { animation-delay: 0.1s; }
412
+ .col:nth-child(2) { animation-delay: 0.2s; }
413
+ .col:nth-child(3) { animation-delay: 0.3s; }
414
+
415
+ /* Loading Spinner */
416
+ @keyframes spin {
417
+ to { transform: rotate(360deg); }
418
+ }
419
+
420
+ .spinner {
421
+ display: inline-block;
422
+ width: 16px;
423
+ height: 16px;
424
+ border: 2px solid rgba(255, 255, 255, 0.3);
425
+ border-top-color: white;
426
+ border-radius: 50%;
427
+ animation: spin 0.6s linear infinite;
428
+ }
429
+
430
+ /* Toast/Status Messages */
431
+ .status-message {
432
+ padding: 12px 20px;
433
+ border-radius: 10px;
434
+ margin: 12px 0;
435
+ font-weight: 500;
436
+ animation: fadeIn 0.3s ease-out;
437
+ }
438
+
439
+ .status-message.success {
440
+ background: rgba(16, 185, 129, 0.2);
441
+ border: 1px solid var(--success);
442
+ color: var(--success);
443
+ }
444
+
445
+ .status-message.error {
446
+ background: rgba(239, 68, 68, 0.2);
447
+ border: 1px solid var(--danger);
448
+ color: var(--danger);
449
+ }
450
+
451
+ .status-message.info {
452
+ background: rgba(99, 102, 241, 0.2);
453
+ border: 1px solid var(--primary);
454
+ color: var(--primary);
455
+ }