nemabruh404 commited on
Commit
306fcab
·
verified ·
1 Parent(s): 88b8607

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +147 -292
app.py CHANGED
@@ -158,450 +158,305 @@ CSS = """
158
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
159
 
160
  :root {
161
- --bg: #f4f6fb;
162
- --surface: #ffffff;
163
- --surface2: #eef1f8;
164
- --border: #dde2ef;
165
- --border2: #c8d0e4;
166
- --accent: #3b7ef4;
167
- --accent2: #1a5fe0;
168
- --success: #16a34a;
169
- --danger: #dc2626;
170
- --warn: #d97706;
171
- --text: #1a2236;
172
- --text2: #4a5778;
173
- --text3: #8a96b0;
174
- --mono: 'DM Mono', monospace;
 
 
 
 
 
 
 
 
175
  }
176
 
177
  body, .gradio-container {
178
  background: var(--bg) !important;
179
  font-family: 'DM Sans', sans-serif !important;
180
- min-height: 100vh;
181
  color: var(--text) !important;
 
182
  }
183
-
184
  .gradio-container {
185
- max-width: 900px !important;
186
  margin: 0 auto !important;
187
- padding: 40px 40px 80px !important;
188
  }
189
 
190
  /* ── HEADER ── */
191
  .lumi-header {
192
- margin-bottom: 36px;
193
- padding-bottom: 28px;
194
- border-bottom: 1px solid var(--border);
195
- display: flex;
196
- align-items: center;
197
- gap: 16px;
198
  background: linear-gradient(135deg, #eef3ff 0%, #f4f6fb 100%);
199
- border-radius: 16px;
200
- padding: 20px;
201
- margin-bottom: 24px;
202
  border: 1px solid var(--border);
 
 
 
203
  }
204
-
205
  .lumi-icon-wrap {
206
- width: 72px; height: 72px;
207
- background: var(--surface2);
208
- border: 1px solid var(--border2);
209
- border-radius: 18px;
210
  display: flex; align-items: center; justify-content: center;
211
- font-size: 44px;
212
- flex-shrink: 0;
213
- position: relative;
214
- overflow: hidden;
215
  }
216
  .lumi-icon-wrap::before {
217
- content: '';
218
- position: absolute; inset: 0;
219
  background: radial-gradient(circle at 30% 30%, rgba(59,126,244,0.12), transparent 70%);
220
  }
221
-
222
  .lumi-header-text h1 {
223
- font-size: 34px;
224
- font-weight: 600;
225
- color: var(--text);
226
- letter-spacing: -0.2px;
227
- line-height: 1.3;
228
  }
229
  .lumi-header-text p {
230
- font-size: 25px;
231
- color: var(--text3);
232
- margin-top: 3px;
233
- font-weight: 400;
234
  }
235
 
236
- /* ── PROGRESS STEPS ── */
237
  .lumi-progress {
238
- display: flex;
239
- align-items: center;
240
- gap: 0;
241
- margin-bottom: 28px;
242
- }
243
- .lumi-prog-step {
244
- display: flex;
245
- align-items: center;
246
- gap: 8px;
247
- flex: 1;
248
  }
 
249
  .lumi-prog-dot {
250
- width: 44px; height: 44px;
251
- border-radius: 50%;
252
- background: var(--surface2);
253
- border: 1px solid var(--border);
254
  display: flex; align-items: center; justify-content: center;
255
- font-size: 22px;
256
- font-weight: 600;
257
- color: var(--text3);
258
- font-family: var(--mono);
259
- flex-shrink: 0;
260
  }
261
  .lumi-prog-info { flex: 1; }
262
- .lumi-prog-title { font-size: 22px; font-weight: 600; color: var(--text3); letter-spacing: 0.3px; }
263
- .lumi-prog-line { height: 1px; background: var(--border); width: 24px; flex-shrink: 0; margin: 0 4px; }
 
 
 
264
 
265
- /* ── INSTRUCTION BOX ── */
266
  .lumi-guide {
267
- background: var(--surface);
268
- border: 1px solid var(--border);
269
- border-radius: 12px;
270
- padding: 24px 28px;
271
- margin-bottom: 24px;
272
- display: flex;
273
- gap: 14px;
274
- align-items: flex-start;
275
- }
276
- .lumi-guide-icon {
277
- font-size: 32px;
278
- margin-top: 1px;
279
- flex-shrink: 0;
280
- opacity: 0.8;
281
  }
 
282
  .lumi-guide-body { flex: 1; }
283
  .lumi-guide-title {
284
- font-size: 21px;
285
- font-weight: 600;
286
- color: var(--text3);
287
- text-transform: uppercase;
288
- letter-spacing: 0.8px;
289
- margin-bottom: 8px;
290
- }
291
- .lumi-guide-steps {
292
- display: flex;
293
- flex-direction: column;
294
- gap: 10px;
295
  }
 
296
  .lumi-guide-step {
297
- display: flex;
298
- align-items: baseline;
299
- gap: 8px;
300
- font-size: 26px;
301
- color: var(--text2);
302
- line-height: 1.5;
303
  }
304
  .lumi-guide-num {
305
- font-family: var(--mono);
306
- font-size: 20px;
307
- color: var(--accent);
308
- background: rgba(59,126,244,0.08);
309
  border: 1px solid rgba(59,126,244,0.2);
310
- border-radius: 4px;
311
- padding: 1px 5px;
312
- flex-shrink: 0;
313
  }
314
  .lumi-keyword {
315
- color: var(--accent2);
316
- font-weight: 600;
317
- background: rgba(59,126,244,0.08);
318
- border-radius: 4px;
319
- padding: 0 4px;
320
  }
321
- /* ── TIPS NOTE ── */
 
322
  .lumi-tips {
323
- margin-top: 12px;
324
- padding-top: 12px;
325
  border-top: 1px solid var(--border);
326
- display: flex;
327
- flex-direction: column;
328
- gap: 6px;
329
  }
330
  .lumi-tip {
331
- display: flex;
332
- align-items: center;
333
- gap: 8px;
334
- font-size: 25px;
335
- color: var(--text2);
336
  background: rgba(59,126,244,0.05);
337
  border: 1px solid rgba(59,126,244,0.12);
338
- border-radius: 7px;
339
- padding: 11px 14px;
340
- line-height: 1.4;
341
- }
342
- .lumi-tip b {
343
- color: var(--text);
344
- font-weight: 600;
345
- }
346
- .tip-icon {
347
- font-size: 28px;
348
- flex-shrink: 0;
349
  }
 
 
350
 
351
  /* ── RECORDER CARD ── */
352
  .lumi-recorder-card {
353
- background: linear-gradient(145deg, #1e2d5a 0%, #162447 50%, #1a3060 100%);
354
  border: 1px solid rgba(99,140,255,0.25);
355
- border-radius: 20px;
356
- padding: 40px 36px;
357
- margin-bottom: 20px;
358
- box-shadow: 0 8px 32px rgba(30,45,90,0.18), inset 0 1px 0 rgba(255,255,255,0.06);
359
- position: relative;
360
- overflow: hidden;
361
  }
362
  .lumi-recorder-card::before {
363
- content: '';
364
- position: absolute;
365
- top: -60px; right: -60px;
366
- width: 200px; height: 200px;
367
  border-radius: 50%;
368
- background: radial-gradient(circle, rgba(99,140,255,0.12) 0%, transparent 70%);
369
  pointer-events: none;
370
  }
371
  .lumi-recorder-card::after {
372
- content: '';
373
- position: absolute;
374
- bottom: -40px; left: -40px;
375
- width: 160px; height: 160px;
376
  border-radius: 50%;
377
- background: radial-gradient(circle, rgba(139,92,246,0.08) 0%, transparent 70%);
378
  pointer-events: none;
379
  }
380
-
381
  #lumi-recorder-ui {
382
- display: flex;
383
- flex-direction: column;
384
- align-items: center;
385
- gap: 18px;
386
- position: relative;
387
- z-index: 1;
388
  }
389
 
390
  /* Mic button */
391
  #lumi-mic-btn {
392
- width: 120px; height: 120px;
393
  border-radius: 50%;
394
  background: rgba(255,255,255,0.09);
395
  border: 1.5px solid rgba(255,255,255,0.18);
396
- cursor: pointer;
397
- display: flex; align-items: center; justify-content: center;
398
- font-size: 60px;
399
- outline: none;
400
- transition: all 0.2s cubic-bezier(.4,0,.2,1);
401
  position: relative;
402
  }
403
  #lumi-mic-btn::after {
404
- content: '';
405
- position: absolute;
406
- inset: -1px;
407
- border-radius: 50%;
408
- border: 1px solid transparent;
409
- transition: all 0.3s ease;
410
  }
411
  #lumi-mic-btn:hover {
412
- background: rgba(99,140,255,0.22);
413
- border-color: rgba(99,140,255,0.6);
414
- transform: scale(1.06);
415
- box-shadow: 0 0 24px rgba(99,140,255,0.3);
416
- }
417
- #lumi-mic-btn:hover::after {
418
- border-color: rgba(99,140,255,0.2);
419
- inset: -7px;
420
  }
 
421
  #lumi-mic-btn.recording {
422
- background: rgba(248,113,113,0.2);
423
- border-color: rgba(248,113,113,0.6);
424
  animation: rec-pulse 1.8s ease infinite;
425
  }
426
  @keyframes rec-pulse {
427
- 0%,100% { box-shadow: 0 0 0 0 rgba(248,113,113,0.4); }
428
- 50% { box-shadow: 0 0 0 16px rgba(248,113,113,0); }
429
  }
430
 
431
  /* Rec label */
432
  #lumi-rec-label {
433
- font-size: 25px;
434
- color: rgba(255,255,255,0.45);
435
- font-weight: 500;
436
- letter-spacing: 0.3px;
437
- text-align: center;
438
- }
439
- #lumi-rec-label.recording {
440
- color: #fca5a5;
441
  }
 
442
 
443
  /* Canvas */
444
  #lumi-canvas {
445
- width: 100%;
446
- height: 90px;
447
- border-radius: 12px;
448
- background: rgba(0,0,0,0.22);
449
- border: 1px solid rgba(255,255,255,0.07);
450
- display: block;
451
  }
452
 
453
  /* Processing bar */
454
- #lumi-proc-bar {
455
- display: none;
456
- width: 100%;
457
- }
458
  #lumi-proc-bar .p-label {
459
- font-size: 22px;
460
- font-family: var(--mono);
461
- color: rgba(255,255,255,0.4);
462
- margin-bottom: 6px;
463
  display: flex; align-items: center; gap: 6px;
464
  }
465
  #lumi-proc-bar .p-dot {
466
- width: 6px; height: 6px;
467
- border-radius: 50%;
468
- background: #7eb8ff;
469
- animation: blink 1s ease infinite;
470
  }
471
  @keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.2} }
472
  #lumi-proc-bar .p-track {
473
- height: 2px;
474
- background: rgba(255,255,255,0.1);
475
- border-radius: 99px;
476
- overflow: hidden;
477
  }
478
  #lumi-proc-bar .p-fill {
479
- height: 100%;
480
- background: linear-gradient(90deg, #638cff, #a78bfa);
481
- border-radius: 99px;
482
- animation: slide 1.4s ease-in-out infinite;
483
  }
484
  @keyframes slide {
485
- 0% { width:0%; margin-left:0%; }
486
- 50% { width:50%; margin-left:25%; }
487
- 100% { width:0%; margin-left:100%; }
488
  }
489
 
490
  /* Playback */
491
- #lumi-audio-playback {
492
- width: 100%;
493
- display: none;
494
- flex-direction: column;
495
- gap: 6px;
496
- }
497
  #lumi-audio-playback .play-label {
498
- font-size: 22px;
499
- font-family: var(--mono);
500
- color: rgba(255,255,255,0.35);
501
- letter-spacing: 0.3px;
502
  }
503
  #lumi-audio-playback audio {
504
- width: 100%;
505
- height: 32px;
506
- border-radius: 6px;
507
- outline: none;
508
- accent-color: #638cff;
509
  }
510
 
511
  /* ── STATUS ── */
512
  .lumi-status {
513
- background: var(--surface) !important;
514
- border: 1px solid var(--border) !important;
515
  border-radius: 10px !important;
516
- padding: 12px 16px !important;
517
- color: var(--text2) !important;
518
- font-size: 26px !important;
519
- font-weight: 500 !important;
520
- min-height: 64px !important;
521
  font-family: var(--mono) !important;
522
  }
523
  .lumi-status .output-class {
524
- font-size: 26px !important;
525
- color: var(--text2) !important;
526
  font-family: var(--mono) !important;
527
  }
528
 
529
  /* ── BUTTONS ── */
530
  .lumi-btn-row {
531
- display: grid;
532
- grid-template-columns: 1fr 1fr;
533
- gap: 8px;
534
- margin-bottom: 8px;
535
  }
536
-
537
  button.lb-check, button.lb-reset, button.lb-send {
538
- border-radius: 8px !important;
539
  font-family: 'DM Sans', sans-serif !important;
540
- font-weight: 500 !important;
541
- font-size: 26px !important;
542
- padding: 18px 24px !important;
543
- border: none !important;
544
- cursor: pointer !important;
545
- transition: all 0.18s ease !important;
546
- width: 100% !important;
547
- letter-spacing: 0.1px !important;
548
  }
549
-
550
  button.lb-check {
551
- background: var(--surface2) !important;
552
- color: var(--text2) !important;
553
  border: 1px solid var(--border2) !important;
554
  }
555
  button.lb-check:hover:not(:disabled) {
556
- background: #dce8ff !important;
557
- border-color: var(--accent) !important;
558
  color: var(--accent2) !important;
559
  }
560
-
561
  button.lb-reset {
562
- background: transparent !important;
563
- color: var(--text3) !important;
564
  border: 1px solid var(--border) !important;
565
  }
566
  button.lb-reset:hover:not(:disabled) {
567
- color: var(--text2) !important;
568
- border-color: var(--border2) !important;
569
  background: var(--surface2) !important;
570
  }
571
-
572
  button.lb-send {
573
- background: var(--accent) !important;
574
- color: #fff !important;
575
  font-weight: 600 !important;
576
- letter-spacing: -0.1px !important;
577
  }
578
  button.lb-send:hover:not(:disabled) {
579
- background: var(--accent2) !important;
580
- transform: translateY(-1px) !important;
581
- box-shadow: 0 4px 16px rgba(59,126,244,0.3) !important;
582
  }
583
  button.lb-send:disabled {
584
- background: var(--surface2) !important;
585
- color: var(--text3) !important;
586
- box-shadow: none !important;
587
  cursor: not-allowed !important;
588
  }
589
 
590
- /* ── HIDDEN AUDIO WRAP ── */
591
  .hidden-audio-wrap {
592
- position: absolute;
593
- width: 1px; height: 1px;
594
- overflow: hidden; opacity: 0;
595
- pointer-events: none;
596
- }
597
-
598
- /* ── DIVIDER ── */
599
- .lumi-divider {
600
- height: 1px;
601
- background: var(--border);
602
- margin: 20px 0;
603
  }
604
-
605
  footer { display: none !important; }
606
  .contain { background: transparent !important; }
607
  """
 
158
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
159
 
160
  :root {
161
+ --bg: #f4f6fb;
162
+ --surface: #ffffff;
163
+ --surface2:#eef1f8;
164
+ --border: #dde2ef;
165
+ --border2: #c8d0e4;
166
+ --accent: #3b7ef4;
167
+ --accent2: #1a5fe0;
168
+ --text: #1a2236;
169
+ --text2: #4a5778;
170
+ --text3: #8a96b0;
171
+ --mono: 'DM Mono', monospace;
172
+
173
+ --fs-xs: clamp(0.72rem, 1.8vw, 0.85rem);
174
+ --fs-sm: clamp(0.85rem, 2vw, 1rem);
175
+ --fs-base: clamp(0.95rem, 2.2vw, 1.15rem);
176
+ --fs-lg: clamp(1.1rem, 2.6vw, 1.4rem);
177
+ --fs-xl: clamp(1.3rem, 3vw, 1.7rem);
178
+
179
+ --sp-xs: clamp(4px, 1vw, 8px);
180
+ --sp-sm: clamp(8px, 2vw, 14px);
181
+ --sp-md: clamp(12px, 2.5vw,20px);
182
+ --sp-lg: clamp(16px, 3vw, 28px);
183
  }
184
 
185
  body, .gradio-container {
186
  background: var(--bg) !important;
187
  font-family: 'DM Sans', sans-serif !important;
 
188
  color: var(--text) !important;
189
+ font-size: var(--fs-base);
190
  }
 
191
  .gradio-container {
192
+ max-width: min(96vw, 860px) !important;
193
  margin: 0 auto !important;
194
+ padding: clamp(16px,4vw,40px) clamp(12px,4vw,36px) 60px !important;
195
  }
196
 
197
  /* ── HEADER ── */
198
  .lumi-header {
199
+ display: flex; align-items: center; gap: var(--sp-md);
 
 
 
 
 
200
  background: linear-gradient(135deg, #eef3ff 0%, #f4f6fb 100%);
 
 
 
201
  border: 1px solid var(--border);
202
+ border-radius: clamp(10px,2vw,16px);
203
+ padding: var(--sp-md) var(--sp-lg);
204
+ margin-bottom: var(--sp-md);
205
  }
 
206
  .lumi-icon-wrap {
207
+ width: clamp(38px,8vw,52px); height: clamp(38px,8vw,52px);
208
+ background: var(--surface2); border: 1px solid var(--border2);
209
+ border-radius: clamp(8px,2vw,13px);
 
210
  display: flex; align-items: center; justify-content: center;
211
+ font-size: clamp(16px,4vw,24px); flex-shrink: 0;
212
+ position: relative; overflow: hidden;
 
 
213
  }
214
  .lumi-icon-wrap::before {
215
+ content: ''; position: absolute; inset: 0;
 
216
  background: radial-gradient(circle at 30% 30%, rgba(59,126,244,0.12), transparent 70%);
217
  }
 
218
  .lumi-header-text h1 {
219
+ font-size: var(--fs-xl); font-weight: 600; color: var(--text);
220
+ letter-spacing: -0.3px; line-height: 1.25;
 
 
 
221
  }
222
  .lumi-header-text p {
223
+ font-size: var(--fs-sm); color: var(--text3); margin-top: 2px;
 
 
 
224
  }
225
 
226
+ /* ── PROGRESS ── */
227
  .lumi-progress {
228
+ display: flex; align-items: center;
229
+ margin-bottom: var(--sp-md);
 
 
 
 
 
 
 
 
230
  }
231
+ .lumi-prog-step { display: flex; align-items: center; gap: var(--sp-xs); flex: 1; }
232
  .lumi-prog-dot {
233
+ width: clamp(24px,5vw,32px); height: clamp(24px,5vw,32px);
234
+ border-radius: 50%; background: var(--surface2); border: 1px solid var(--border);
 
 
235
  display: flex; align-items: center; justify-content: center;
236
+ font-size: var(--fs-xs); font-weight: 600; color: var(--text3);
237
+ font-family: var(--mono); flex-shrink: 0;
 
 
 
238
  }
239
  .lumi-prog-info { flex: 1; }
240
+ .lumi-prog-title { font-size: var(--fs-xs); font-weight: 600; color: var(--text3); letter-spacing: 0.4px; }
241
+ .lumi-prog-line {
242
+ height: 1px; background: var(--border);
243
+ width: clamp(14px,3vw,28px); flex-shrink: 0; margin: 0 var(--sp-xs);
244
+ }
245
 
246
+ /* ── GUIDE ── */
247
  .lumi-guide {
248
+ background: var(--surface); border: 1px solid var(--border);
249
+ border-radius: clamp(10px,2vw,14px);
250
+ padding: var(--sp-md) var(--sp-lg);
251
+ margin-bottom: var(--sp-md);
252
+ display: flex; gap: var(--sp-sm); align-items: flex-start;
 
 
 
 
 
 
 
 
 
253
  }
254
+ .lumi-guide-icon { font-size: var(--fs-lg); margin-top: 2px; flex-shrink: 0; opacity: 0.8; }
255
  .lumi-guide-body { flex: 1; }
256
  .lumi-guide-title {
257
+ font-size: var(--fs-xs); font-weight: 700; color: var(--text3);
258
+ text-transform: uppercase; letter-spacing: 0.9px; margin-bottom: var(--sp-xs);
 
 
 
 
 
 
 
 
 
259
  }
260
+ .lumi-guide-steps { display: flex; flex-direction: column; gap: var(--sp-xs); }
261
  .lumi-guide-step {
262
+ display: flex; align-items: baseline; gap: var(--sp-xs);
263
+ font-size: var(--fs-base); color: var(--text2); line-height: 1.5;
 
 
 
 
264
  }
265
  .lumi-guide-num {
266
+ font-family: var(--mono); font-size: var(--fs-xs);
267
+ color: var(--accent); background: rgba(59,126,244,0.08);
 
 
268
  border: 1px solid rgba(59,126,244,0.2);
269
+ border-radius: 4px; padding: 1px 5px; flex-shrink: 0;
 
 
270
  }
271
  .lumi-keyword {
272
+ color: var(--accent2); font-weight: 600;
273
+ background: rgba(59,126,244,0.08); border-radius: 4px; padding: 0 4px;
 
 
 
274
  }
275
+
276
+ /* ── TIPS ── */
277
  .lumi-tips {
278
+ margin-top: var(--sp-sm); padding-top: var(--sp-sm);
 
279
  border-top: 1px solid var(--border);
280
+ display: flex; flex-direction: column; gap: var(--sp-xs);
 
 
281
  }
282
  .lumi-tip {
283
+ display: flex; align-items: center; gap: var(--sp-xs);
284
+ font-size: var(--fs-sm); color: var(--text2);
 
 
 
285
  background: rgba(59,126,244,0.05);
286
  border: 1px solid rgba(59,126,244,0.12);
287
+ border-radius: 7px; padding: var(--sp-xs) var(--sp-sm); line-height: 1.45;
 
 
 
 
 
 
 
 
 
 
288
  }
289
+ .lumi-tip b { color: var(--text); font-weight: 600; }
290
+ .tip-icon { font-size: var(--fs-base); flex-shrink: 0; }
291
 
292
  /* ── RECORDER CARD ── */
293
  .lumi-recorder-card {
294
+ background: linear-gradient(145deg, #1e2d5a 0%, #162447 55%, #1a3060 100%);
295
  border: 1px solid rgba(99,140,255,0.25);
296
+ border-radius: clamp(12px,3vw,20px);
297
+ padding: var(--sp-lg);
298
+ margin-bottom: var(--sp-md);
299
+ box-shadow: 0 6px 28px rgba(30,45,90,0.16), inset 0 1px 0 rgba(255,255,255,0.06);
300
+ position: relative; overflow: hidden;
 
301
  }
302
  .lumi-recorder-card::before {
303
+ content: ''; position: absolute; top: -50px; right: -50px;
304
+ width: clamp(100px,20vw,180px); height: clamp(100px,20vw,180px);
 
 
305
  border-radius: 50%;
306
+ background: radial-gradient(circle, rgba(99,140,255,0.1) 0%, transparent 70%);
307
  pointer-events: none;
308
  }
309
  .lumi-recorder-card::after {
310
+ content: ''; position: absolute; bottom: -30px; left: -30px;
311
+ width: clamp(80px,16vw,140px); height: clamp(80px,16vw,140px);
 
 
312
  border-radius: 50%;
313
+ background: radial-gradient(circle, rgba(139,92,246,0.07) 0%, transparent 70%);
314
  pointer-events: none;
315
  }
 
316
  #lumi-recorder-ui {
317
+ display: flex; flex-direction: column;
318
+ align-items: center; gap: var(--sp-md);
319
+ position: relative; z-index: 1;
 
 
 
320
  }
321
 
322
  /* Mic button */
323
  #lumi-mic-btn {
324
+ width: clamp(60px,13vw,88px); height: clamp(60px,13vw,88px);
325
  border-radius: 50%;
326
  background: rgba(255,255,255,0.09);
327
  border: 1.5px solid rgba(255,255,255,0.18);
328
+ cursor: pointer; display: flex; align-items: center; justify-content: center;
329
+ font-size: clamp(24px,5.5vw,36px);
330
+ outline: none; transition: all 0.2s cubic-bezier(.4,0,.2,1);
 
 
331
  position: relative;
332
  }
333
  #lumi-mic-btn::after {
334
+ content: ''; position: absolute; inset: -1px;
335
+ border-radius: 50%; border: 1px solid transparent; transition: all 0.3s ease;
 
 
 
 
336
  }
337
  #lumi-mic-btn:hover {
338
+ background: rgba(99,140,255,0.22); border-color: rgba(99,140,255,0.6);
339
+ transform: scale(1.06); box-shadow: 0 0 20px rgba(99,140,255,0.28);
 
 
 
 
 
 
340
  }
341
+ #lumi-mic-btn:hover::after { border-color: rgba(99,140,255,0.18); inset: -6px; }
342
  #lumi-mic-btn.recording {
343
+ background: rgba(248,113,113,0.2); border-color: rgba(248,113,113,0.6);
 
344
  animation: rec-pulse 1.8s ease infinite;
345
  }
346
  @keyframes rec-pulse {
347
+ 0%,100% { box-shadow: 0 0 0 0 rgba(248,113,113,0.4); }
348
+ 50% { box-shadow: 0 0 0 14px rgba(248,113,113,0); }
349
  }
350
 
351
  /* Rec label */
352
  #lumi-rec-label {
353
+ font-size: var(--fs-sm); color: rgba(255,255,255,0.45);
354
+ font-weight: 500; letter-spacing: 0.3px; text-align: center;
 
 
 
 
 
 
355
  }
356
+ #lumi-rec-label.recording { color: #fca5a5; }
357
 
358
  /* Canvas */
359
  #lumi-canvas {
360
+ width: 100%; height: clamp(44px,7vw,68px);
361
+ border-radius: 8px; background: rgba(0,0,0,0.22);
362
+ border: 1px solid rgba(255,255,255,0.07); display: block;
 
 
 
363
  }
364
 
365
  /* Processing bar */
366
+ #lumi-proc-bar { display: none; width: 100%; }
 
 
 
367
  #lumi-proc-bar .p-label {
368
+ font-size: var(--fs-xs); font-family: var(--mono);
369
+ color: rgba(255,255,255,0.4); margin-bottom: 5px;
 
 
370
  display: flex; align-items: center; gap: 6px;
371
  }
372
  #lumi-proc-bar .p-dot {
373
+ width: 6px; height: 6px; border-radius: 50%;
374
+ background: #7eb8ff; animation: blink 1s ease infinite;
 
 
375
  }
376
  @keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.2} }
377
  #lumi-proc-bar .p-track {
378
+ height: 2px; background: rgba(255,255,255,0.1);
379
+ border-radius: 99px; overflow: hidden;
 
 
380
  }
381
  #lumi-proc-bar .p-fill {
382
+ height: 100%; background: linear-gradient(90deg, #638cff, #a78bfa);
383
+ border-radius: 99px; animation: slide 1.4s ease-in-out infinite;
 
 
384
  }
385
  @keyframes slide {
386
+ 0% {width:0%; margin-left:0%;}
387
+ 50% {width:50%; margin-left:25%;}
388
+ 100%{width:0%; margin-left:100%;}
389
  }
390
 
391
  /* Playback */
392
+ #lumi-audio-playback { width: 100%; display: none; flex-direction: column; gap: 5px; }
 
 
 
 
 
393
  #lumi-audio-playback .play-label {
394
+ font-size: var(--fs-xs); font-family: var(--mono); color: rgba(255,255,255,0.35);
 
 
 
395
  }
396
  #lumi-audio-playback audio {
397
+ width: 100%; height: 30px; border-radius: 6px; outline: none; accent-color: #638cff;
 
 
 
 
398
  }
399
 
400
  /* ── STATUS ── */
401
  .lumi-status {
402
+ background: var(--surface) !important; border: 1px solid var(--border) !important;
 
403
  border-radius: 10px !important;
404
+ padding: var(--sp-sm) var(--sp-md) !important;
405
+ color: var(--text2) !important; font-size: var(--fs-base) !important;
406
+ font-weight: 500 !important; min-height: 48px !important;
 
 
407
  font-family: var(--mono) !important;
408
  }
409
  .lumi-status .output-class {
410
+ font-size: var(--fs-base) !important; color: var(--text2) !important;
 
411
  font-family: var(--mono) !important;
412
  }
413
 
414
  /* ── BUTTONS ── */
415
  .lumi-btn-row {
416
+ display: grid; grid-template-columns: 1fr 1fr;
417
+ gap: var(--sp-xs); margin-bottom: var(--sp-xs);
 
 
418
  }
 
419
  button.lb-check, button.lb-reset, button.lb-send {
420
+ border-radius: 9px !important;
421
  font-family: 'DM Sans', sans-serif !important;
422
+ font-weight: 500 !important; font-size: var(--fs-base) !important;
423
+ padding: clamp(10px,2vw,14px) clamp(12px,3vw,20px) !important;
424
+ border: none !important; cursor: pointer !important;
425
+ transition: all 0.18s ease !important; width: 100% !important;
 
 
 
 
426
  }
 
427
  button.lb-check {
428
+ background: var(--surface2) !important; color: var(--text2) !important;
 
429
  border: 1px solid var(--border2) !important;
430
  }
431
  button.lb-check:hover:not(:disabled) {
432
+ background: #dce8ff !important; border-color: var(--accent) !important;
 
433
  color: var(--accent2) !important;
434
  }
 
435
  button.lb-reset {
436
+ background: transparent !important; color: var(--text3) !important;
 
437
  border: 1px solid var(--border) !important;
438
  }
439
  button.lb-reset:hover:not(:disabled) {
440
+ color: var(--text2) !important; border-color: var(--border2) !important;
 
441
  background: var(--surface2) !important;
442
  }
 
443
  button.lb-send {
444
+ background: var(--accent) !important; color: #fff !important;
 
445
  font-weight: 600 !important;
 
446
  }
447
  button.lb-send:hover:not(:disabled) {
448
+ background: var(--accent2) !important; transform: translateY(-1px) !important;
449
+ box-shadow: 0 4px 14px rgba(59,126,244,0.3) !important;
 
450
  }
451
  button.lb-send:disabled {
452
+ background: var(--surface2) !important; color: var(--text3) !important;
 
 
453
  cursor: not-allowed !important;
454
  }
455
 
 
456
  .hidden-audio-wrap {
457
+ position: absolute; width: 1px; height: 1px;
458
+ overflow: hidden; opacity: 0; pointer-events: none;
 
 
 
 
 
 
 
 
 
459
  }
 
460
  footer { display: none !important; }
461
  .contain { background: transparent !important; }
462
  """