prithivMLmods commited on
Commit
f9554b2
Β·
verified Β·
1 Parent(s): 7b276d4

update app

Browse files
Files changed (1) hide show
  1. app.py +58 -58
app.py CHANGED
@@ -251,9 +251,9 @@ footer{display:none!important}
251
  }
252
  .app-header-left{display:flex;align-items:center;gap:12px}
253
  .app-logo{
254
- width:36px;height:36px;background:linear-gradient(135deg,#1E90FF,#47A3FF,#7CB8FF);
255
  border-radius:10px;display:flex;align-items:center;justify-content:center;
256
- box-shadow:0 4px 12px rgba(30,144,255,.35);flex-shrink:0;
257
  }
258
  .app-logo svg{width:20px;height:20px;fill:#fff;flex-shrink:0}
259
  .app-title{
@@ -262,7 +262,7 @@ footer{display:none!important}
262
  }
263
  .app-badge{
264
  font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px;
265
- background:rgba(30,144,255,.15);color:#47A3FF;border:1px solid rgba(30,144,255,.25);letter-spacing:.3px;
266
  }
267
  .app-badge.fast{background:rgba(34,197,94,.12);color:#4ade80;border:1px solid rgba(34,197,94,.25)}
268
 
@@ -271,21 +271,21 @@ footer{display:none!important}
271
  display:inline-flex!important;align-items:center!important;gap:7px!important;
272
  padding:7px 16px!important;border-radius:8px!important;text-decoration:none!important;
273
  font-family:'Inter',sans-serif!important;font-size:13px!important;font-weight:700!important;
274
- letter-spacing:.1px!important;background:#1E90FF!important;
275
  color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;
276
  border:1px solid rgba(255,255,255,.18)!important;
277
- box-shadow:0 2px 10px rgba(30,144,255,.45),0 1px 0 rgba(255,255,255,.1) inset!important;
278
  transition:transform .15s ease,box-shadow .15s ease,background .15s ease!important;
279
  cursor:pointer!important;flex-shrink:0!important;
280
  }
281
  .gh-btn:hover{
282
- background:#47A3FF!important;color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;
283
  transform:translateY(-1px)!important;
284
- box-shadow:0 5px 18px rgba(30,144,255,.6),0 1px 0 rgba(255,255,255,.12) inset!important;
285
  }
286
  .gh-btn:active{
287
- background:#1873CC!important;transform:translateY(0)!important;
288
- box-shadow:0 1px 5px rgba(30,144,255,.35)!important;
289
  }
290
  .gh-btn svg{fill:#ffffff!important;flex-shrink:0;width:15px!important;height:15px!important}
291
  .gh-btn span{color:#ffffff!important;-webkit-text-fill-color:#ffffff!important}
@@ -303,8 +303,8 @@ footer{display:none!important}
303
  font-family:'Inter',sans-serif;color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;
304
  transition:all .15s ease;
305
  }
306
- .modern-tb-btn:hover{background:rgba(30,144,255,.15);border-color:rgba(30,144,255,.3)}
307
- .modern-tb-btn:active,.modern-tb-btn.active{background:rgba(30,144,255,.25);border-color:rgba(30,144,255,.45)}
308
  .modern-tb-btn .tb-label{font-size:13px;color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;font-weight:600}
309
  .modern-tb-btn .tb-svg{width:15px;height:15px;flex-shrink:0;color:#ffffff!important}
310
  .modern-tb-btn .tb-svg,
@@ -325,16 +325,16 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
325
 
326
  /* ── Drop zone ── */
327
  #gallery-drop-zone{position:relative;background:#09090b;min-height:440px;overflow:auto}
328
- #gallery-drop-zone.drag-over{outline:2px solid #1E90FF;outline-offset:-2px;background:rgba(30,144,255,.04)}
329
 
330
  .upload-prompt-modern{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:20}
331
  .upload-click-area{
332
  display:flex;flex-direction:column;align-items:center;justify-content:center;
333
  cursor:pointer;padding:36px 52px;border:2px dashed #3f3f46;border-radius:16px;
334
- background:rgba(30,144,255,.03);transition:all .2s ease;gap:8px;
335
  }
336
- .upload-click-area:hover{background:rgba(30,144,255,.08);border-color:#1E90FF;transform:scale(1.03)}
337
- .upload-click-area:active{background:rgba(30,144,255,.12);transform:scale(.98)}
338
  .upload-click-area svg{width:80px;height:80px}
339
  .upload-main-text{color:#71717a;font-size:14px;font-weight:500;margin-top:4px}
340
  .upload-sub-text{color:#52525b;font-size:12px;text-align:center;max-width:280px;line-height:1.5}
@@ -349,10 +349,10 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
349
  cursor:pointer;border:2px solid #27272a;transition:all .2s ease;background:#18181b;
350
  }
351
  .gallery-thumb:hover{border-color:#3f3f46;transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.4)}
352
- .gallery-thumb.selected{border-color:#1E90FF!important;box-shadow:0 0 0 3px rgba(30,144,255,.2)}
353
  .gallery-thumb img{width:100%;height:100%;object-fit:cover}
354
  .thumb-badge{
355
- position:absolute;top:6px;left:6px;background:#1E90FF;color:#fff;
356
  padding:2px 8px;border-radius:4px;font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:600;
357
  }
358
  .thumb-remove{
@@ -361,22 +361,22 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
361
  display:none;align-items:center;justify-content:center;font-size:12px;transition:all .15s;line-height:1;
362
  }
363
  .gallery-thumb:hover .thumb-remove{display:flex}
364
- .thumb-remove:hover{background:#1E90FF;border-color:#1E90FF}
365
  .gallery-add-card{
366
  aspect-ratio:1;border-radius:10px;border:2px dashed #3f3f46;
367
  display:flex;flex-direction:column;align-items:center;justify-content:center;
368
- cursor:pointer;transition:all .2s ease;background:rgba(30,144,255,.03);gap:4px;
369
  }
370
- .gallery-add-card:hover{border-color:#1E90FF;background:rgba(30,144,255,.08)}
371
  .gallery-add-card .add-icon{font-size:28px;color:#71717a;font-weight:300}
372
  .gallery-add-card .add-text{font-size:12px;color:#71717a;font-weight:500}
373
 
374
  /* ── Hint bar ── */
375
  .hint-bar{
376
- background:rgba(30,144,255,.06);border-top:1px solid #27272a;border-bottom:1px solid #27272a;
377
  padding:10px 20px;font-size:13px;color:#a1a1aa;line-height:1.7;
378
  }
379
- .hint-bar b{color:#7CB8FF;font-weight:600}
380
  .hint-bar kbd{
381
  display:inline-block;padding:1px 6px;background:#27272a;border:1px solid #3f3f46;
382
  border-radius:4px;font-family:'JetBrains Mono',monospace;font-size:11px;color:#a1a1aa;
@@ -391,11 +391,11 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
391
  .suggestions-wrap{display:flex;flex-wrap:wrap;gap:6px}
392
  .suggestion-chip{
393
  display:inline-flex;align-items:center;gap:4px;padding:5px 12px;
394
- background:rgba(30,144,255,.08);border:1px solid rgba(30,144,255,.2);border-radius:20px;
395
- color:#7CB8FF;font-size:12px;font-weight:500;font-family:'Inter',sans-serif;
396
  cursor:pointer;transition:all .15s;white-space:nowrap;
397
  }
398
- .suggestion-chip:hover{background:rgba(30,144,255,.15);border-color:rgba(30,144,255,.35);color:#47A3FF;transform:translateY(-1px)}
399
 
400
  /* ── Examples ── */
401
  .examples-section{border-top:1px solid #27272a;padding:12px 16px}
@@ -408,7 +408,7 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
408
  flex-shrink:0;width:210px;background:#09090b;border:1px solid #27272a;
409
  border-radius:10px;overflow:hidden;cursor:pointer;transition:all .2s ease;
410
  }
411
- .example-card:hover{border-color:#1E90FF;transform:translateY(-2px);box-shadow:0 4px 12px rgba(30,144,255,.15)}
412
  .example-card.loading{opacity:.5;pointer-events:none}
413
  .example-thumbs{display:flex;height:110px;overflow:hidden;background:#18181b}
414
  .example-thumbs img{flex:1;object-fit:cover;min-width:0;border-bottom:1px solid #27272a}
@@ -418,8 +418,8 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
418
  }
419
  .example-meta{padding:6px 10px;display:flex;align-items:center;gap:6px}
420
  .example-badge{
421
- display:inline-flex;padding:2px 7px;background:rgba(30,144,255,.1);border-radius:4px;
422
- font-size:10px;font-weight:600;color:#47A3FF;font-family:'JetBrains Mono',monospace;white-space:nowrap;
423
  }
424
  .example-prompt-text{
425
  padding:0 10px 8px;font-size:11px;color:#a1a1aa;line-height:1.4;
@@ -439,7 +439,7 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
439
  padding:10px 14px;font-family:'Inter',sans-serif;font-size:14px;color:#e4e4e7;
440
  resize:vertical;outline:none;min-height:42px;transition:border-color .2s;
441
  }
442
- .modern-textarea:focus{border-color:#1E90FF;box-shadow:0 0 0 3px rgba(30,144,255,.15)}
443
  .modern-textarea::placeholder{color:#3f3f46}
444
  .modern-textarea.error-flash{
445
  border-color:#ef4444!important;box-shadow:0 0 0 3px rgba(239,68,68,.2)!important;animation:shake .4s ease;
@@ -464,16 +464,16 @@ body:not(.dark) .modern-tb-btn .tb-svg,body:not(.dark) .modern-tb-btn .tb-svg *{
464
  /* ── Run button ── */
465
  .btn-run{
466
  display:flex;align-items:center;justify-content:center;gap:8px;width:100%;
467
- background:linear-gradient(135deg,#1E90FF,#1873CC);border:none;border-radius:10px;
468
  padding:12px 24px;cursor:pointer;font-size:15px;font-weight:600;font-family:'Inter',sans-serif;
469
  color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;transition:all .2s ease;letter-spacing:-.2px;
470
- box-shadow:0 4px 16px rgba(30,144,255,.3),inset 0 1px 0 rgba(255,255,255,.1);
471
  }
472
  .btn-run:hover{
473
- background:linear-gradient(135deg,#47A3FF,#1E90FF);transform:translateY(-1px);
474
- box-shadow:0 6px 24px rgba(30,144,255,.45),inset 0 1px 0 rgba(255,255,255,.15);
475
  }
476
- .btn-run:active{transform:translateY(0);box-shadow:0 2px 8px rgba(30,144,255,.3)}
477
  .btn-run svg{width:18px;height:18px;fill:#ffffff!important}
478
  .btn-run svg path{fill:#ffffff!important}
479
  #custom-run-btn,#custom-run-btn *,#custom-run-btn span,#custom-run-btn svg,
@@ -503,13 +503,13 @@ body:not(.dark) #custom-run-btn *{color:#ffffff!important;-webkit-text-fill-colo
503
  .output-frame .out-body img{max-width:100%;max-height:460px;image-rendering:auto}
504
  .output-frame .out-placeholder{color:#3f3f46;font-size:13px;text-align:center;padding:20px}
505
  .out-download-btn{
506
- display:none;align-items:center;justify-content:center;background:rgba(30,144,255,.1);
507
- border:1px solid rgba(30,144,255,.2);border-radius:6px;cursor:pointer;padding:3px 10px;
508
- font-size:11px;font-weight:500;color:#7CB8FF!important;gap:4px;height:24px;transition:all .15s;
509
  }
510
- .out-download-btn:hover{background:rgba(30,144,255,.2);border-color:rgba(30,144,255,.35);color:#ffffff!important}
511
  .out-download-btn.visible{display:inline-flex}
512
- .out-download-btn svg{width:12px;height:12px;fill:#7CB8FF}
513
 
514
  /* ── Loader ── */
515
  .modern-loader{
@@ -518,14 +518,14 @@ body:not(.dark) #custom-run-btn *{color:#ffffff!important;-webkit-text-fill-colo
518
  }
519
  .modern-loader.active{display:flex}
520
  .modern-loader .loader-spinner{
521
- width:36px;height:36px;border:3px solid #27272a;border-top-color:#1E90FF;
522
  border-radius:50%;animation:spin .8s linear infinite;
523
  }
524
  @keyframes spin{to{transform:rotate(360deg)}}
525
  .modern-loader .loader-text{font-size:13px;color:#a1a1aa;font-weight:500}
526
  .loader-bar-track{width:200px;height:4px;background:#27272a;border-radius:2px;overflow:hidden}
527
  .loader-bar-fill{
528
- height:100%;background:linear-gradient(90deg,#1E90FF,#47A3FF,#1E90FF);
529
  background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite;border-radius:2px;
530
  }
531
  @keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
@@ -544,13 +544,13 @@ body:not(.dark) #custom-run-btn *{color:#ffffff!important;-webkit-text-fill-colo
544
  border-radius:3px;outline:none;min-width:0;
545
  }
546
  .slider-row input[type="range"]::-webkit-slider-thumb{
547
- -webkit-appearance:none;width:16px;height:16px;background:linear-gradient(135deg,#1E90FF,#1873CC);
548
- border-radius:50%;cursor:pointer;box-shadow:0 2px 6px rgba(30,144,255,.4);transition:transform .15s;
549
  }
550
  .slider-row input[type="range"]::-webkit-slider-thumb:hover{transform:scale(1.2)}
551
  .slider-row input[type="range"]::-moz-range-thumb{
552
- width:16px;height:16px;background:linear-gradient(135deg,#1E90FF,#1873CC);
553
- border-radius:50%;cursor:pointer;border:none;box-shadow:0 2px 6px rgba(30,144,255,.4);
554
  }
555
  .slider-row .slider-val{
556
  min-width:52px;text-align:right;font-family:'JetBrains Mono',monospace;font-size:12px;
@@ -558,7 +558,7 @@ body:not(.dark) #custom-run-btn *{color:#ffffff!important;-webkit-text-fill-colo
558
  border-radius:6px;color:#a1a1aa;flex-shrink:0;
559
  }
560
  .checkbox-row{display:flex;align-items:center;gap:8px;font-size:13px;color:#a1a1aa}
561
- .checkbox-row input[type="checkbox"]{accent-color:#1E90FF;width:16px;height:16px;cursor:pointer}
562
  .checkbox-row label{color:#a1a1aa;font-size:13px;cursor:pointer}
563
 
564
  /* ── Status bar ── */
@@ -572,7 +572,7 @@ body:not(.dark) #custom-run-btn *{color:#ffffff!important;-webkit-text-fill-colo
572
  }
573
  .app-statusbar .sb-section.sb-fixed{
574
  flex:0 0 auto;min-width:90px;text-align:center;justify-content:center;
575
- padding:3px 12px;background:rgba(30,144,255,.08);border-radius:6px;color:#47A3FF;font-weight:500;
576
  }
577
 
578
  /* ── Footer note ── */
@@ -581,7 +581,7 @@ body:not(.dark) #custom-run-btn *{color:#ffffff!important;-webkit-text-fill-colo
581
  border-top:1px solid #27272a;text-align:center;font-weight:500;
582
  background:#18181b;font-family:'Inter',sans-serif;
583
  }
584
- .exp-note a{color:#47A3FF;text-decoration:none}
585
  .exp-note a:hover{text-decoration:underline}
586
 
587
  /* ── Dark overrides ── */
@@ -591,7 +591,7 @@ body:not(.dark) #custom-run-btn *{color:#ffffff!important;-webkit-text-fill-colo
591
  .dark .settings-group{background:#18181b}
592
  .dark .output-frame .out-title{color:#ffffff!important}
593
  .dark .output-frame .out-title span{color:#ffffff!important}
594
- .dark .out-download-btn{color:#7CB8FF!important}
595
  .dark .out-download-btn:hover{color:#ffffff!important}
596
 
597
  /* ── Scrollbars ── */
@@ -644,17 +644,17 @@ function init() {
644
  if (ghBtn && !ghBtn.__hoverBound) {
645
  ghBtn.__hoverBound = true;
646
  ghBtn.addEventListener('mouseenter', () => {
647
- ghBtn.style.setProperty('background','#47A3FF','important');
648
  ghBtn.style.setProperty('transform','translateY(-1px)','important');
649
- ghBtn.style.setProperty('box-shadow','0 5px 18px rgba(30,144,255,.6)','important');
650
  });
651
  ghBtn.addEventListener('mouseleave', () => {
652
- ghBtn.style.setProperty('background','#1E90FF','important');
653
  ghBtn.style.setProperty('transform','translateY(0)','important');
654
- ghBtn.style.setProperty('box-shadow','0 2px 10px rgba(30,144,255,.45)','important');
655
  });
656
- ghBtn.addEventListener('mousedown', () => ghBtn.style.setProperty('background','#1873CC','important'));
657
- ghBtn.addEventListener('mouseup', () => ghBtn.style.setProperty('background','#47A3FF','important'));
658
  }
659
  }
660
  enforceGhBtn();
@@ -1093,11 +1093,11 @@ with gr.Blocks() as demo:
1093
  <div id="upload-click-area" class="upload-click-area">
1094
  <svg viewBox="0 0 80 80" fill="none" xmlns="http://www.w3.org/2000/svg">
1095
  <rect x="8" y="14" width="64" height="52" rx="6" fill="none"
1096
- stroke="#1E90FF" stroke-width="2" stroke-dasharray="4 3"/>
1097
  <polygon points="12,62 30,40 42,50 54,34 68,62"
1098
- fill="rgba(30,144,255,0.15)" stroke="#1E90FF" stroke-width="1.5"/>
1099
  <circle cx="28" cy="30" r="6"
1100
- fill="rgba(30,144,255,0.2)" stroke="#1E90FF" stroke-width="1.5"/>
1101
  </svg>
1102
  <span class="upload-main-text">Click or drag images here</span>
1103
  <span class="upload-sub-text">Supports multiple images for reference-based editing and guided manipulation</span>
 
251
  }
252
  .app-header-left{display:flex;align-items:center;gap:12px}
253
  .app-logo{
254
+ width:36px;height:36px;background:linear-gradient(135deg,#FF0000,#FF3333,#FF8080);
255
  border-radius:10px;display:flex;align-items:center;justify-content:center;
256
+ box-shadow:0 4px 12px rgba(255,0,0,.35);flex-shrink:0;
257
  }
258
  .app-logo svg{width:20px;height:20px;fill:#fff;flex-shrink:0}
259
  .app-title{
 
262
  }
263
  .app-badge{
264
  font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px;
265
+ background:rgba(255,0,0,.15);color:#FF3333;border:1px solid rgba(255,0,0,.25);letter-spacing:.3px;
266
  }
267
  .app-badge.fast{background:rgba(34,197,94,.12);color:#4ade80;border:1px solid rgba(34,197,94,.25)}
268
 
 
271
  display:inline-flex!important;align-items:center!important;gap:7px!important;
272
  padding:7px 16px!important;border-radius:8px!important;text-decoration:none!important;
273
  font-family:'Inter',sans-serif!important;font-size:13px!important;font-weight:700!important;
274
+ letter-spacing:.1px!important;background:#FF0000!important;
275
  color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;
276
  border:1px solid rgba(255,255,255,.18)!important;
277
+ box-shadow:0 2px 10px rgba(255,0,0,.45),0 1px 0 rgba(255,255,255,.1) inset!important;
278
  transition:transform .15s ease,box-shadow .15s ease,background .15s ease!important;
279
  cursor:pointer!important;flex-shrink:0!important;
280
  }
281
  .gh-btn:hover{
282
+ background:#FF3333!important;color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;
283
  transform:translateY(-1px)!important;
284
+ box-shadow:0 5px 18px rgba(255,0,0,.6),0 1px 0 rgba(255,255,255,.12) inset!important;
285
  }
286
  .gh-btn:active{
287
+ background:#CC0000!important;transform:translateY(0)!important;
288
+ box-shadow:0 1px 5px rgba(255,0,0,.35)!important;
289
  }
290
  .gh-btn svg{fill:#ffffff!important;flex-shrink:0;width:15px!important;height:15px!important}
291
  .gh-btn span{color:#ffffff!important;-webkit-text-fill-color:#ffffff!important}
 
303
  font-family:'Inter',sans-serif;color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;
304
  transition:all .15s ease;
305
  }
306
+ .modern-tb-btn:hover{background:rgba(255,0,0,.15);border-color:rgba(255,0,0,.3)}
307
+ .modern-tb-btn:active,.modern-tb-btn.active{background:rgba(255,0,0,.25);border-color:rgba(255,0,0,.45)}
308
  .modern-tb-btn .tb-label{font-size:13px;color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;font-weight:600}
309
  .modern-tb-btn .tb-svg{width:15px;height:15px;flex-shrink:0;color:#ffffff!important}
310
  .modern-tb-btn .tb-svg,
 
325
 
326
  /* ── Drop zone ── */
327
  #gallery-drop-zone{position:relative;background:#09090b;min-height:440px;overflow:auto}
328
+ #gallery-drop-zone.drag-over{outline:2px solid #FF0000;outline-offset:-2px;background:rgba(255,0,0,.04)}
329
 
330
  .upload-prompt-modern{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:20}
331
  .upload-click-area{
332
  display:flex;flex-direction:column;align-items:center;justify-content:center;
333
  cursor:pointer;padding:36px 52px;border:2px dashed #3f3f46;border-radius:16px;
334
+ background:rgba(255,0,0,.03);transition:all .2s ease;gap:8px;
335
  }
336
+ .upload-click-area:hover{background:rgba(255,0,0,.08);border-color:#FF0000;transform:scale(1.03)}
337
+ .upload-click-area:active{background:rgba(255,0,0,.12);transform:scale(.98)}
338
  .upload-click-area svg{width:80px;height:80px}
339
  .upload-main-text{color:#71717a;font-size:14px;font-weight:500;margin-top:4px}
340
  .upload-sub-text{color:#52525b;font-size:12px;text-align:center;max-width:280px;line-height:1.5}
 
349
  cursor:pointer;border:2px solid #27272a;transition:all .2s ease;background:#18181b;
350
  }
351
  .gallery-thumb:hover{border-color:#3f3f46;transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.4)}
352
+ .gallery-thumb.selected{border-color:#FF0000!important;box-shadow:0 0 0 3px rgba(255,0,0,.2)}
353
  .gallery-thumb img{width:100%;height:100%;object-fit:cover}
354
  .thumb-badge{
355
+ position:absolute;top:6px;left:6px;background:#FF0000;color:#fff;
356
  padding:2px 8px;border-radius:4px;font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:600;
357
  }
358
  .thumb-remove{
 
361
  display:none;align-items:center;justify-content:center;font-size:12px;transition:all .15s;line-height:1;
362
  }
363
  .gallery-thumb:hover .thumb-remove{display:flex}
364
+ .thumb-remove:hover{background:#FF0000;border-color:#FF0000}
365
  .gallery-add-card{
366
  aspect-ratio:1;border-radius:10px;border:2px dashed #3f3f46;
367
  display:flex;flex-direction:column;align-items:center;justify-content:center;
368
+ cursor:pointer;transition:all .2s ease;background:rgba(255,0,0,.03);gap:4px;
369
  }
370
+ .gallery-add-card:hover{border-color:#FF0000;background:rgba(255,0,0,.08)}
371
  .gallery-add-card .add-icon{font-size:28px;color:#71717a;font-weight:300}
372
  .gallery-add-card .add-text{font-size:12px;color:#71717a;font-weight:500}
373
 
374
  /* ── Hint bar ── */
375
  .hint-bar{
376
+ background:rgba(255,0,0,.06);border-top:1px solid #27272a;border-bottom:1px solid #27272a;
377
  padding:10px 20px;font-size:13px;color:#a1a1aa;line-height:1.7;
378
  }
379
+ .hint-bar b{color:#FF8080;font-weight:600}
380
  .hint-bar kbd{
381
  display:inline-block;padding:1px 6px;background:#27272a;border:1px solid #3f3f46;
382
  border-radius:4px;font-family:'JetBrains Mono',monospace;font-size:11px;color:#a1a1aa;
 
391
  .suggestions-wrap{display:flex;flex-wrap:wrap;gap:6px}
392
  .suggestion-chip{
393
  display:inline-flex;align-items:center;gap:4px;padding:5px 12px;
394
+ background:rgba(255,0,0,.08);border:1px solid rgba(255,0,0,.2);border-radius:20px;
395
+ color:#FF8080;font-size:12px;font-weight:500;font-family:'Inter',sans-serif;
396
  cursor:pointer;transition:all .15s;white-space:nowrap;
397
  }
398
+ .suggestion-chip:hover{background:rgba(255,0,0,.15);border-color:rgba(255,0,0,.35);color:#FF3333;transform:translateY(-1px)}
399
 
400
  /* ── Examples ── */
401
  .examples-section{border-top:1px solid #27272a;padding:12px 16px}
 
408
  flex-shrink:0;width:210px;background:#09090b;border:1px solid #27272a;
409
  border-radius:10px;overflow:hidden;cursor:pointer;transition:all .2s ease;
410
  }
411
+ .example-card:hover{border-color:#FF0000;transform:translateY(-2px);box-shadow:0 4px 12px rgba(255,0,0,.15)}
412
  .example-card.loading{opacity:.5;pointer-events:none}
413
  .example-thumbs{display:flex;height:110px;overflow:hidden;background:#18181b}
414
  .example-thumbs img{flex:1;object-fit:cover;min-width:0;border-bottom:1px solid #27272a}
 
418
  }
419
  .example-meta{padding:6px 10px;display:flex;align-items:center;gap:6px}
420
  .example-badge{
421
+ display:inline-flex;padding:2px 7px;background:rgba(255,0,0,.1);border-radius:4px;
422
+ font-size:10px;font-weight:600;color:#FF3333;font-family:'JetBrains Mono',monospace;white-space:nowrap;
423
  }
424
  .example-prompt-text{
425
  padding:0 10px 8px;font-size:11px;color:#a1a1aa;line-height:1.4;
 
439
  padding:10px 14px;font-family:'Inter',sans-serif;font-size:14px;color:#e4e4e7;
440
  resize:vertical;outline:none;min-height:42px;transition:border-color .2s;
441
  }
442
+ .modern-textarea:focus{border-color:#FF0000;box-shadow:0 0 0 3px rgba(255,0,0,.15)}
443
  .modern-textarea::placeholder{color:#3f3f46}
444
  .modern-textarea.error-flash{
445
  border-color:#ef4444!important;box-shadow:0 0 0 3px rgba(239,68,68,.2)!important;animation:shake .4s ease;
 
464
  /* ── Run button ── */
465
  .btn-run{
466
  display:flex;align-items:center;justify-content:center;gap:8px;width:100%;
467
+ background:linear-gradient(135deg,#FF0000,#CC0000);border:none;border-radius:10px;
468
  padding:12px 24px;cursor:pointer;font-size:15px;font-weight:600;font-family:'Inter',sans-serif;
469
  color:#ffffff!important;-webkit-text-fill-color:#ffffff!important;transition:all .2s ease;letter-spacing:-.2px;
470
+ box-shadow:0 4px 16px rgba(255,0,0,.3),inset 0 1px 0 rgba(255,255,255,.1);
471
  }
472
  .btn-run:hover{
473
+ background:linear-gradient(135deg,#FF3333,#FF0000);transform:translateY(-1px);
474
+ box-shadow:0 6px 24px rgba(255,0,0,.45),inset 0 1px 0 rgba(255,255,255,.15);
475
  }
476
+ .btn-run:active{transform:translateY(0);box-shadow:0 2px 8px rgba(255,0,0,.3)}
477
  .btn-run svg{width:18px;height:18px;fill:#ffffff!important}
478
  .btn-run svg path{fill:#ffffff!important}
479
  #custom-run-btn,#custom-run-btn *,#custom-run-btn span,#custom-run-btn svg,
 
503
  .output-frame .out-body img{max-width:100%;max-height:460px;image-rendering:auto}
504
  .output-frame .out-placeholder{color:#3f3f46;font-size:13px;text-align:center;padding:20px}
505
  .out-download-btn{
506
+ display:none;align-items:center;justify-content:center;background:rgba(255,0,0,.1);
507
+ border:1px solid rgba(255,0,0,.2);border-radius:6px;cursor:pointer;padding:3px 10px;
508
+ font-size:11px;font-weight:500;color:#FF8080!important;gap:4px;height:24px;transition:all .15s;
509
  }
510
+ .out-download-btn:hover{background:rgba(255,0,0,.2);border-color:rgba(255,0,0,.35);color:#ffffff!important}
511
  .out-download-btn.visible{display:inline-flex}
512
+ .out-download-btn svg{width:12px;height:12px;fill:#FF8080}
513
 
514
  /* ── Loader ── */
515
  .modern-loader{
 
518
  }
519
  .modern-loader.active{display:flex}
520
  .modern-loader .loader-spinner{
521
+ width:36px;height:36px;border:3px solid #27272a;border-top-color:#FF0000;
522
  border-radius:50%;animation:spin .8s linear infinite;
523
  }
524
  @keyframes spin{to{transform:rotate(360deg)}}
525
  .modern-loader .loader-text{font-size:13px;color:#a1a1aa;font-weight:500}
526
  .loader-bar-track{width:200px;height:4px;background:#27272a;border-radius:2px;overflow:hidden}
527
  .loader-bar-fill{
528
+ height:100%;background:linear-gradient(90deg,#FF0000,#FF3333,#FF0000);
529
  background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite;border-radius:2px;
530
  }
531
  @keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
 
544
  border-radius:3px;outline:none;min-width:0;
545
  }
546
  .slider-row input[type="range"]::-webkit-slider-thumb{
547
+ -webkit-appearance:none;width:16px;height:16px;background:linear-gradient(135deg,#FF0000,#CC0000);
548
+ border-radius:50%;cursor:pointer;box-shadow:0 2px 6px rgba(255,0,0,.4);transition:transform .15s;
549
  }
550
  .slider-row input[type="range"]::-webkit-slider-thumb:hover{transform:scale(1.2)}
551
  .slider-row input[type="range"]::-moz-range-thumb{
552
+ width:16px;height:16px;background:linear-gradient(135deg,#FF0000,#CC0000);
553
+ border-radius:50%;cursor:pointer;border:none;box-shadow:0 2px 6px rgba(255,0,0,.4);
554
  }
555
  .slider-row .slider-val{
556
  min-width:52px;text-align:right;font-family:'JetBrains Mono',monospace;font-size:12px;
 
558
  border-radius:6px;color:#a1a1aa;flex-shrink:0;
559
  }
560
  .checkbox-row{display:flex;align-items:center;gap:8px;font-size:13px;color:#a1a1aa}
561
+ .checkbox-row input[type="checkbox"]{accent-color:#FF0000;width:16px;height:16px;cursor:pointer}
562
  .checkbox-row label{color:#a1a1aa;font-size:13px;cursor:pointer}
563
 
564
  /* ── Status bar ── */
 
572
  }
573
  .app-statusbar .sb-section.sb-fixed{
574
  flex:0 0 auto;min-width:90px;text-align:center;justify-content:center;
575
+ padding:3px 12px;background:rgba(255,0,0,.08);border-radius:6px;color:#FF3333;font-weight:500;
576
  }
577
 
578
  /* ── Footer note ── */
 
581
  border-top:1px solid #27272a;text-align:center;font-weight:500;
582
  background:#18181b;font-family:'Inter',sans-serif;
583
  }
584
+ .exp-note a{color:#FF3333;text-decoration:none}
585
  .exp-note a:hover{text-decoration:underline}
586
 
587
  /* ── Dark overrides ── */
 
591
  .dark .settings-group{background:#18181b}
592
  .dark .output-frame .out-title{color:#ffffff!important}
593
  .dark .output-frame .out-title span{color:#ffffff!important}
594
+ .dark .out-download-btn{color:#FF8080!important}
595
  .dark .out-download-btn:hover{color:#ffffff!important}
596
 
597
  /* ── Scrollbars ── */
 
644
  if (ghBtn && !ghBtn.__hoverBound) {
645
  ghBtn.__hoverBound = true;
646
  ghBtn.addEventListener('mouseenter', () => {
647
+ ghBtn.style.setProperty('background','#FF3333','important');
648
  ghBtn.style.setProperty('transform','translateY(-1px)','important');
649
+ ghBtn.style.setProperty('box-shadow','0 5px 18px rgba(255,0,0,.6)','important');
650
  });
651
  ghBtn.addEventListener('mouseleave', () => {
652
+ ghBtn.style.setProperty('background','#FF0000','important');
653
  ghBtn.style.setProperty('transform','translateY(0)','important');
654
+ ghBtn.style.setProperty('box-shadow','0 2px 10px rgba(255,0,0,.45)','important');
655
  });
656
+ ghBtn.addEventListener('mousedown', () => ghBtn.style.setProperty('background','#CC0000','important'));
657
+ ghBtn.addEventListener('mouseup', () => ghBtn.style.setProperty('background','#FF3333','important'));
658
  }
659
  }
660
  enforceGhBtn();
 
1093
  <div id="upload-click-area" class="upload-click-area">
1094
  <svg viewBox="0 0 80 80" fill="none" xmlns="http://www.w3.org/2000/svg">
1095
  <rect x="8" y="14" width="64" height="52" rx="6" fill="none"
1096
+ stroke="#FF0000" stroke-width="2" stroke-dasharray="4 3"/>
1097
  <polygon points="12,62 30,40 42,50 54,34 68,62"
1098
+ fill="rgba(255,0,0,0.15)" stroke="#FF0000" stroke-width="1.5"/>
1099
  <circle cx="28" cy="30" r="6"
1100
+ fill="rgba(255,0,0,0.2)" stroke="#FF0000" stroke-width="1.5"/>
1101
  </svg>
1102
  <span class="upload-main-text">Click or drag images here</span>
1103
  <span class="upload-sub-text">Supports multiple images for reference-based editing and guided manipulation</span>