protae5544 commited on
Commit
819096d
Β·
verified Β·
1 Parent(s): 06468f4

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +162 -302
index.html CHANGED
@@ -6,29 +6,26 @@
6
  <title>AI Chatbot with HuggingFace API - Enhanced</title>
7
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css">
8
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
9
- <script src="https://cdn.tailwindcss.com"></script>
10
  <style>
11
  :root {
12
- --bg-primary: #121212;
13
- --bg-secondary: #1c1c1a;
14
- --bg-tertiary: #252521;
15
- --text-primary: #e8e8e0;
16
- --text-secondary: #a5a59c;
17
- --accent-primary: #8FBC8F;
18
- --accent-secondary: #5D4037;
19
- --accent-tertiary: #3E2723;
20
- --error: #a73737;
21
- --success: #4a7c59;
22
- --warning: #b3892b;
23
- --glass-bg: rgba(24, 24, 20, 0.7);
24
- --glass-border: rgba(143, 188, 143, 0.2);
25
- --shadow-lg: 0 20px 40px rgba(0, 0, 0, 0.7);
26
- --shadow-xl: 0 25px 50px rgba(0, 0, 0, 0.85);
27
- --gradient-primary: linear-gradient(135deg, var(--accent-primary), #6a8a6a);
28
- --gradient-secondary: linear-gradient(135deg, var(--accent-secondary), var(--accent-tertiary));
29
- --gradient-bg: linear-gradient(135deg, #252521 0%, #121212 100%);
30
- --rust-accent: #8b5d3b;
31
- --metal-accent: #6c7b74;
32
  }
33
 
34
  * {
@@ -40,9 +37,8 @@
40
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Inter', sans-serif;
41
  background: var(--bg-primary);
42
  background-image:
43
- url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%238FBC8F' fill-opacity='0.03' fill-rule='evenodd'/%3E%3C/svg%3E"),
44
- repeating-linear-gradient(45deg, rgba(143, 188, 143, 0.02) 0px, rgba(143, 188, 143, 0.02) 2px, transparent 2px, transparent 4px),
45
- linear-gradient(135deg, rgba(30, 20, 15, 0.9), rgba(18, 18, 18, 1));
46
  color: var(--text-primary);
47
  display: flex;
48
  justify-content: center;
@@ -50,14 +46,16 @@
50
  min-height: 100vh;
51
  overflow: hidden;
52
  -webkit-tap-highlight-color: transparent;
 
53
  }
54
 
55
  .app-container {
56
  width: 95%;
57
  max-width: 1400px;
58
  background: var(--glass-bg);
 
59
  border: 1px solid var(--glass-border);
60
- border-radius: 8px;
61
  box-shadow: var(--shadow-xl);
62
  display: flex;
63
  overflow: hidden;
@@ -65,17 +63,6 @@
65
  position: relative;
66
  animation: slideIn 0.8s cubic-bezier(0.23, 1, 0.32, 1);
67
  }
68
-
69
- .app-container::before {
70
- content: '';
71
- position: absolute;
72
- top: 20;
73
- left: 0;
74
- right: 0;
75
- height: 4px;
76
- background: var(--accent-primary);
77
- z-index: 10;
78
- }
79
 
80
  @keyframes slideIn {
81
  from {
@@ -92,29 +79,12 @@
92
  width: 320px;
93
  padding: 24px;
94
  background: var(--bg-secondary);
95
- border-right: 2px solid var(--accent-tertiary);
 
96
  transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1);
97
  overflow-y: auto;
98
  scrollbar-width: thin;
99
- scrollbar-color: var(--accent-primary) var(--bg-tertiary);
100
- position: relative;
101
- }
102
-
103
- .settings-panel::after {
104
- content: '';
105
- position: absolute;
106
- top: 0;
107
- right: 0;
108
- width: 1px;
109
- height: 100%;
110
- background: repeating-linear-gradient(
111
- to bottom,
112
- var(--accent-primary) 0,
113
- var(--accent-primary) 10px,
114
- transparent 10px,
115
- transparent 20px
116
- );
117
- opacity: 0.3;
118
  }
119
 
120
  .settings-panel::-webkit-scrollbar {
@@ -122,7 +92,7 @@
122
  }
123
 
124
  .settings-panel::-webkit-scrollbar-track {
125
- background: var(--bg-tertiary);
126
  }
127
 
128
  .settings-panel::-webkit-scrollbar-thumb {
@@ -142,26 +112,11 @@
142
  flex-direction: column;
143
  position: relative;
144
  background: var(--bg-primary);
145
- background-image:
146
- linear-gradient(rgba(18, 18, 18, 0.97), rgba(18, 18, 18, 0.97)),
147
- url("data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%238FBC8F' fill-opacity='0.03'%3E%3Cpath d='M50 50c0-5.523 4.477-10 10-10s10 4.477 10 10-4.477 10-10 10c0 5.523-4.477 10-10 10s-10-4.477-10-10 4.477-10 10-10zM10 10c0-5.523 4.477-10 10-10s10 4.477 10 10-4.477 10-10 10c0 5.523-4.477 10-10 10S0 25.523 0 20s4.477-10 10-10zm10 8c4.418 0 8-3.582 8-8s-3.582-8-8-8-8 3.582-8 8 3.582 8 8 8zm40 40c4.418 0 8-3.582 8-8s-3.582-8-8-8-8 3.582-8 8 3.582 8 8 8z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
148
  }
149
 
150
  .form-field {
151
  margin-bottom: 20px;
152
  animation: fadeInUp 0.6s cubic-bezier(0.23, 1, 0.32, 1);
153
- position: relative;
154
- }
155
-
156
- .form-field::after {
157
- content: '';
158
- position: absolute;
159
- bottom: -10px;
160
- left: 0;
161
- right: 0;
162
- height: 1px;
163
- background: var(--accent-tertiary);
164
- opacity: 0.3;
165
  }
166
 
167
  .form-field label {
@@ -174,21 +129,23 @@
174
  letter-spacing: 0.5px;
175
  }
176
 
177
- .form-field select, .form-field textarea, .form-field input {
178
  width: 100%;
179
  padding: 12px 16px;
180
- border: 2px solid var(--accent-tertiary);
181
- border-radius: 6px;
182
  background: var(--bg-tertiary);
183
  color: var(--text-primary);
184
  font-size: 1rem;
185
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
 
186
  }
187
 
188
- .form-field select:focus, .form-field textarea:focus, .form-field input:focus {
189
  outline: none;
190
  border-color: var(--accent-primary);
191
- box-shadow: 0 0 0 2px rgba(143, 188, 143, 0.3);
 
192
  }
193
 
194
  .form-field textarea {
@@ -199,9 +156,9 @@
199
  button {
200
  padding: 12px 24px;
201
  border: none;
202
- border-radius: 6px;
203
- background: var(--accent-primary);
204
- color: var(--bg-primary);
205
  cursor: pointer;
206
  font-size: 1rem;
207
  font-weight: 600;
@@ -209,7 +166,6 @@
209
  touch-action: manipulation;
210
  position: relative;
211
  overflow: hidden;
212
- box-shadow: 0 4px 0 var(--accent-tertiary);
213
  }
214
 
215
  button::before {
@@ -219,7 +175,7 @@
219
  left: -100%;
220
  width: 100%;
221
  height: 100%;
222
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
223
  transition: left 0.5s;
224
  }
225
 
@@ -228,18 +184,17 @@
228
  }
229
 
230
  button:hover {
231
- background: #a0cfa0;
232
- transform: translateY(-2px);
233
  }
234
 
235
  button:active {
236
- transform: translateY(2px);
237
- box-shadow: 0 0 0 var(--accent-tertiary);
238
  }
239
 
240
  .material-icons {
241
  font-family: 'Material Icons';
242
- font-size: 24px;
243
  vertical-align: middle;
244
  }
245
 
@@ -251,10 +206,7 @@
251
  flex-direction: column;
252
  gap: 16px;
253
  scrollbar-width: thin;
254
- scrollbar-color: var(--accent-primary) var(--bg-tertiary);
255
- background-image:
256
- linear-gradient(rgba(18, 18, 18, 0.95), rgba(18, 18, 18, 0.95)),
257
- url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%235D4037' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
258
  }
259
 
260
  .chat-container::-webkit-scrollbar {
@@ -262,7 +214,7 @@
262
  }
263
 
264
  .chat-container::-webkit-scrollbar-track {
265
- background: var(--bg-tertiary);
266
  }
267
 
268
  .chat-container::-webkit-scrollbar-thumb {
@@ -273,22 +225,12 @@
273
  .message {
274
  max-width: 80%;
275
  padding: 16px 20px;
276
- border-radius: 6px;
277
  font-size: 1rem;
278
  line-height: 1.6;
279
  position: relative;
280
  animation: messageSlide 0.5s cubic-bezier(0.23, 1, 0.32, 1);
281
- border: 1px solid transparent;
282
- }
283
-
284
- .message::before {
285
- content: '';
286
- position: absolute;
287
- top: 0;
288
- left: 0;
289
- right: 0;
290
- height: 1px;
291
- background: var(--glass-border);
292
  }
293
 
294
  @keyframes messageSlide {
@@ -303,56 +245,48 @@
303
  }
304
 
305
  .message.user {
306
- background: var(--accent-secondary);
307
  align-self: flex-end;
308
- border-bottom: 3px solid var(--accent-tertiary);
309
  }
310
 
311
  .message.ai {
312
- background: var(--bg-tertiary);
 
313
  align-self: flex-start;
314
- border-left: 3px solid var(--accent-primary);
315
  }
316
 
317
  .input-container {
318
  display: flex;
319
  gap: 12px;
320
  padding: 20px;
321
- background: var(--bg-secondary);
322
- border-top: 2px solid var(--accent-tertiary);
 
323
  align-items: center;
324
- position: relative;
325
- }
326
-
327
- .input-container::before {
328
- content: '';
329
- position: absolute;
330
- top: -4px;
331
- left: 0;
332
- right: 0;
333
- height: 2px;
334
- background: var(--rust-accent);
335
- opacity: 0.6;
336
  }
337
 
338
  #userInput {
339
  flex: 1;
340
  padding: 16px 20px;
341
- border: 2px solid var(--accent-tertiary);
342
- border-radius: 6px;
343
- background: var(--bg-tertiary);
344
  color: var(--text-primary);
345
  resize: none;
346
  min-height: 60px;
347
  max-height: 150px;
348
- font-size: 16px;
349
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
 
350
  }
351
 
352
  #userInput:focus {
353
  outline: none;
354
  border-color: var(--accent-primary);
355
- box-shadow: 0 0 0 2px rgba(143, 188, 143, 0.3);
 
356
  }
357
 
358
  #sendButton, #attachButton {
@@ -361,20 +295,14 @@
361
  justify-content: center;
362
  width: 60px;
363
  height: 60px;
364
- border-radius: 6px;
365
- background: var(--accent-primary);
366
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
367
- box-shadow: 0 4px 0 var(--accent-tertiary);
368
  }
369
 
370
  #sendButton:hover, #attachButton:hover {
371
- background: #a0cfa0;
372
- transform: translateY(-2px);
373
- }
374
-
375
- #sendButton:active, #attachButton:active {
376
- transform: translateY(2px);
377
- box-shadow: 0 0 0 var(--accent-tertiary);
378
  }
379
 
380
  #sendButton:disabled {
@@ -387,7 +315,7 @@
387
  .spinner {
388
  width: 28px;
389
  height: 28px;
390
- border: 3px solid rgba(143, 188, 143, 0.2);
391
  border-top: 3px solid var(--accent-primary);
392
  border-radius: 50%;
393
  animation: spin 1s linear infinite;
@@ -402,14 +330,14 @@
402
  top: 24px;
403
  right: 24px;
404
  padding: 16px 24px;
405
- border-radius: 6px;
406
  color: #fff;
407
  font-size: 1rem;
408
  font-weight: 600;
409
  z-index: 1000;
410
  display: none;
 
411
  animation: notificationSlide 0.5s cubic-bezier(0.23, 1, 0.32, 1);
412
- border-left: 4px solid transparent;
413
  }
414
 
415
  @keyframes notificationSlide {
@@ -424,15 +352,13 @@
424
  }
425
 
426
  .error-message {
427
- background: var(--bg-tertiary);
428
- border-left-color: var(--error);
429
- box-shadow: 0 5px 15px rgba(167, 55, 55, 0.3);
430
  }
431
 
432
  .success-message {
433
- background: var(--bg-tertiary);
434
- border-left-color: var(--success);
435
- box-shadow: 0 5px 15px rgba(74, 124, 89, 0.3);
436
  }
437
 
438
  .carousel-container {
@@ -445,7 +371,6 @@
445
  position: relative;
446
  user-select: none;
447
  padding: 24px;
448
- touch-action: pan-y;
449
  }
450
 
451
  .carousel {
@@ -454,55 +379,28 @@
454
  max-width: 500px;
455
  height: 300px;
456
  transform-style: preserve-3d;
457
- transition: transform 0.8s cubic-bezier(0.165, 0.84, 0.44, 1);
458
  cursor: grab;
459
  }
460
 
461
  .carousel.dragging {
462
  cursor: grabbing;
463
- transition: none;
464
  }
465
 
466
  .carousel-card {
467
  position: absolute;
468
  width: 100%;
469
  height: 100%;
470
- background: var(--bg-secondary);
471
- border: 2px solid var(--accent-tertiary);
472
- border-radius: 6px;
 
473
  padding: 24px;
 
474
  display: flex;
475
  flex-direction: column;
476
  gap: 12px;
477
- transition: all 0.8s cubic-bezier(0.165, 0.84, 0.44, 1);
478
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
479
- }
480
-
481
- .carousel-card::before {
482
- content: '';
483
- position: absolute;
484
- top: 0;
485
- left: 0;
486
- right: 0;
487
- height: 4px;
488
- background: var(--accent-primary);
489
- }
490
-
491
- .carousel-card::after {
492
- content: '';
493
- position: absolute;
494
- top: 4px;
495
- bottom: 0;
496
- right: 0;
497
- width: 4px;
498
- background: repeating-linear-gradient(
499
- to bottom,
500
- var(--accent-primary) 0,
501
- var(--accent-primary) 10px,
502
- transparent 10px,
503
- transparent 20px
504
- );
505
- opacity: 0.5;
506
  }
507
 
508
  .carousel-controls, .carousel-indicator {
@@ -515,15 +413,15 @@
515
  width: 14px;
516
  height: 14px;
517
  background: var(--bg-tertiary);
518
- border-radius: 2px;
519
  cursor: pointer;
520
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
521
- border: 2px solid var(--accent-tertiary);
522
- box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);
523
  }
524
 
525
  .carousel-dot.active {
526
  background: var(--accent-primary);
 
527
  transform: scale(1.2);
528
  }
529
 
@@ -534,12 +432,13 @@
534
 
535
  .mode-toggle {
536
  display: flex;
537
- background: var(--bg-tertiary);
538
- border-radius: 6px;
 
539
  padding: 4px;
540
  position: relative;
541
  margin-bottom: 20px;
542
- border: 2px solid var(--accent-tertiary);
543
  }
544
 
545
  .mode-toggle button {
@@ -552,13 +451,12 @@
552
  z-index: 1;
553
  font-size: 1rem;
554
  font-weight: 600;
555
- border-radius: 4px;
556
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
557
- box-shadow: none;
558
  }
559
 
560
  .mode-toggle button.active {
561
- color: var(--bg-primary);
562
  }
563
 
564
  .mode-toggle-slider {
@@ -566,10 +464,10 @@
566
  top: 4px;
567
  left: 4px;
568
  height: calc(100% - 8px);
569
- background: var(--accent-primary);
570
- border-radius: 4px;
571
- transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
572
- box-shadow: 0 2px 0 var(--accent-tertiary);
573
  }
574
 
575
  .dropzone {
@@ -578,7 +476,8 @@
578
  left: 0;
579
  right: 0;
580
  bottom: 0;
581
- background: rgba(143, 188, 143, 0.1);
 
582
  border: 3px dashed var(--accent-primary);
583
  display: none;
584
  align-items: center;
@@ -587,7 +486,7 @@
587
  font-size: 1.4rem;
588
  font-weight: 600;
589
  z-index: 10;
590
- border-radius: 6px;
591
  }
592
 
593
  .dropzone.active {
@@ -622,38 +521,22 @@
622
 
623
  .chip {
624
  padding: 10px 18px;
625
- background: var(--bg-tertiary);
626
- border: 1px solid var(--accent-tertiary);
627
- border-radius: 4px;
 
628
  font-size: 0.9rem;
629
  font-weight: 600;
630
  cursor: pointer;
631
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
632
  color: var(--text-secondary);
633
- position: relative;
634
- }
635
-
636
- .chip::after {
637
- content: '';
638
- position: absolute;
639
- bottom: 0;
640
- right: 0;
641
- width: 5px;
642
- height: 5px;
643
- background: var(--accent-primary);
644
- border-radius: 1px;
645
  }
646
 
647
  .chip:hover {
648
  background: var(--accent-primary);
649
- color: var(--bg-primary);
650
  transform: translateY(-2px);
651
- box-shadow: 0 3px 0 var(--accent-tertiary);
652
- }
653
-
654
- .chip:active {
655
- transform: translateY(1px);
656
- box-shadow: 0 0 0 var(--accent-tertiary);
657
  }
658
 
659
  .floating-buttons {
@@ -668,26 +551,21 @@
668
  .floating-btn {
669
  width: 48px;
670
  height: 48px;
671
- border-radius: 6px;
672
- background: var(--bg-tertiary);
673
- border: 2px solid var(--accent-tertiary);
 
674
  display: flex;
675
  align-items: center;
676
  justify-content: center;
677
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
678
  padding: 0;
679
- box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);
680
  }
681
 
682
  .floating-btn:hover {
683
  background: var(--accent-primary);
684
- color: var(--bg-primary);
685
- transform: translateY(-2px);
686
- }
687
-
688
- .floating-btn:active {
689
- transform: translateY(2px);
690
- box-shadow: 0 0 0 rgba(0, 0, 0, 0.3);
691
  }
692
 
693
  .code-tools {
@@ -701,18 +579,19 @@
701
  .code-tools button {
702
  padding: 6px 12px;
703
  font-size: 0.85rem;
704
- background: var(--bg-tertiary);
705
- border: 1px solid var(--accent-tertiary);
706
- box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);
707
  }
708
 
709
  pre {
710
  position: relative;
711
- background: var(--bg-tertiary);
712
- border: 1px solid var(--accent-tertiary);
713
  padding: 20px;
714
- border-radius: 6px;
715
  overflow-x: auto;
 
716
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
717
  }
718
 
@@ -724,46 +603,9 @@
724
  .image-preview {
725
  max-width: 100%;
726
  max-height: 300px;
727
- border-radius: 6px;
728
  margin-top: 12px;
729
  box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
730
- border: 1px solid var(--accent-tertiary);
731
- }
732
-
733
- /* Factory theme specific elements */
734
- .rusty-border {
735
- position: relative;
736
- }
737
-
738
- .rusty-border::after {
739
- content: '';
740
- position: absolute;
741
- top: 0;
742
- left: 0;
743
- right: 0;
744
- bottom: 0;
745
- border: 1px solid var(--rust-accent);
746
- border-radius: inherit;
747
- pointer-events: none;
748
- opacity: 0.6;
749
- }
750
-
751
- .metal-panel {
752
- background-image:
753
- linear-gradient(45deg,
754
- rgba(108, 123, 116, 0.1) 25%,
755
- transparent 25%,
756
- transparent 75%,
757
- rgba(108, 123, 116, 0.1) 75%,
758
- rgba(108, 123, 116, 0.1)),
759
- linear-gradient(45deg,
760
- rgba(108, 123, 116, 0.1) 25%,
761
- transparent 25%,
762
- transparent 75%,
763
- rgba(108, 123, 116, 0.1) 75%,
764
- rgba(108, 123, 116, 0.1));
765
- background-size: 10px 10px;
766
- background-position: 0 0, 5px 5px;
767
  }
768
 
769
  @keyframes fadeInUp {
@@ -790,7 +632,7 @@
790
  width: 100%;
791
  max-height: 40vh;
792
  border-right: none;
793
- border-bottom: 2px solid var(--accent-tertiary);
794
  }
795
 
796
  .settings-panel.collapsed {
@@ -849,7 +691,7 @@
849
  padding: 8px 14px;
850
  }
851
 
852
- .form-field select, .form-field textarea, .form-field input, #userInput {
853
  font-size: 16px;
854
  }
855
  }
@@ -858,32 +700,29 @@
858
  <body>
859
  <div class="app-container" id="appContainer">
860
  <div class="settings-panel" id="settingsPanel">
861
- <h2 style="font-size: 1.4rem; margin-bottom: 24px; color: var(--accent-primary); font-weight: 700;">βš™οΈ Control Panel</h2>
862
  <div class="form-field">
863
  <label>πŸ€– Main Model:</label>
864
  <select id="modelSelect">
865
- <option value="mistralai/Mistral-7B-Instruct-v0.1">Mistral-7B-Instruct (Text)</option>
866
- <option value="meta-llama/Llama-2-7b-chat-hf">Llama-2-7b-chat (Text)</option>
867
- <option value="google/gemma-7b-it">Gemma-7b-it (Text)</option>
868
- <option value="HuggingFaceH4/zephyr-7b-beta">Zephyr-7b-beta (Text)</option>
869
- <option value="microsoft/phi-2">Phi-2 (Text)</option>
870
  </select>
871
  <p style="font-size: 0.8rem; color: var(--text-secondary); margin-top: 8px;">
872
- πŸ’‘ Choose a model. Smaller models (7B) are faster but less capable.
873
  </p>
874
  </div>
875
  <div class="form-field">
876
- <label>πŸ”‘ API Key:</label>
877
- <input type="password" id="apiKeyInput" placeholder="Enter your HuggingFace API key">
878
- <p style="font-size: 0.8rem; color: var(--text-secondary); margin-top: 8px;">
879
- πŸ”’ Your API key is stored locally only
880
- </p>
881
- </div>
882
- <div class="form-field">
883
- <label>⚑ Max Tokens:</label>
884
- <input type="number" id="maxTokensInput" value="512" min="100" max="2048">
885
  </div>
886
- <button id="saveSettingsBtn" class="rusty-border">πŸ’Ύ Save Settings</button>
887
  </div>
888
  <div class="main-content">
889
  <div class="floating-buttons">
@@ -899,31 +738,43 @@
899
  </div>
900
 
901
  <div class="mode-toggle">
902
- <button id="carouselModeBtn" class="active">πŸŽ›οΈ Command Center</button>
903
- <button id="chatModeBtn">πŸ’¬ Terminal</button>
904
  <div class="mode-toggle-slider" id="modeToggleSlider"></div>
905
  </div>
906
 
907
  <div id="carouselMode">
908
  <div class="carousel-container">
909
  <div class="carousel" id="promptCarousel">
910
- <div class="carousel-card metal-panel" style="transform: rotateY(0deg) translateZ(500px);">
911
  <label>🎯 Primary System Prompt:</label>
912
- <textarea id="primarySystemPrompt" placeholder="Enter primary system prompt for the AI assistant...">You are a helpful AI assistant that provides clear, accurate, and helpful responses. Focus on practical solutions and detailed explanations.</textarea>
913
  </div>
914
- <div class="carousel-card metal-panel" style="transform: rotateY(60deg) translateZ(500px); opacity: 0.8;">
 
 
 
 
915
  <label>πŸ’» Code Template:</label>
916
  <textarea id="codeTemplate" placeholder="Enter code formatting template...">```javascript
917
- // Code implementation
918
  function solution() {
919
- // Your code here
920
  return result;
921
  }
922
  ```</textarea>
923
  </div>
924
- <div class="carousel-card metal-panel" style="transform: rotateY(120deg) translateZ(500px); opacity: 0.8;">
925
  <label>πŸ“‹ Additional Instructions:</label>
926
- <textarea id="additionalInstructions" placeholder="Enter additional instructions for the AI...">Provide working code examples when possible. Explain complex concepts step by step. Use modern best practices.</textarea>
 
 
 
 
 
 
 
 
927
  </div>
928
  </div>
929
  <div class="carousel-controls">
@@ -934,8 +785,11 @@ function solution() {
934
  <div class="carousel-dot active" data-index="0"></div>
935
  <div class="carousel-dot" data-index="1"></div>
936
  <div class="carousel-dot" data-index="2"></div>
 
 
 
937
  </div>
938
- <button id="applyPromptBtn" style="margin-top: 24px;">βœ… Apply Prompts & Switch to Terminal</button>
939
  </div>
940
  </div>
941
 
@@ -945,12 +799,18 @@ function solution() {
945
  <span class="chip" data-prompt="Generate a complete function">⚑ Generate Function</span>
946
  <span class="chip" data-prompt="Debug and fix this issue">πŸ› Debug Code</span>
947
  <span class="chip" data-prompt="Optimize this for performance">πŸš€ Optimize</span>
 
 
948
  </div>
949
  <div class="chat-container" id="chatContainer"></div>
950
  <div class="input-container">
 
 
 
951
  <textarea id="userInput" placeholder="Type your message here... (Shift+Enter for new line)"></textarea>
952
  <button id="sendButton"><span class="material-icons">send</span></button>
953
  </div>
 
954
  </div>
955
 
956
  <div class="notification error-message" id="errorMessage">
 
6
  <title>AI Chatbot with HuggingFace API - Enhanced</title>
7
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css">
8
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 
9
  <style>
10
  :root {
11
+ --bg-primary: #0a0a0a;
12
+ --bg-secondary: #1a1a1a;
13
+ --bg-tertiary: #2a2a2a;
14
+ --text-primary: #ffffff;
15
+ --text-secondary: #b0b0b0;
16
+ --accent-primary: #00d4ff;
17
+ --accent-secondary: #ff6b35;
18
+ --accent-tertiary: #7c4dff;
19
+ --error: #ff4757;
20
+ --success: #2ed573;
21
+ --warning: #ffa502;
22
+ --glass-bg: rgba(255, 255, 255, 0.05);
23
+ --glass-border: rgba(255, 255, 255, 0.1);
24
+ --shadow-lg: 0 20px 40px rgba(0, 0, 0, 0.6);
25
+ --shadow-xl: 0 25px 50px rgba(0, 0, 0, 0.8);
26
+ --gradient-primary: linear-gradient(135deg, var(--accent-primary), var(--accent-tertiary));
27
+ --gradient-secondary: linear-gradient(135deg, var(--accent-secondary), var(--accent-primary));
28
+ --gradient-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
 
 
29
  }
30
 
31
  * {
 
37
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Inter', sans-serif;
38
  background: var(--bg-primary);
39
  background-image:
40
+ radial-gradient(ellipse at top left, rgba(0, 212, 255, 0.05) 0%, transparent 50%),
41
+ radial-gradient(ellipse at bottom right, rgba(124, 77, 255, 0.05) 0%, transparent 50%);
 
42
  color: var(--text-primary);
43
  display: flex;
44
  justify-content: center;
 
46
  min-height: 100vh;
47
  overflow: hidden;
48
  -webkit-tap-highlight-color: transparent;
49
+ backdrop-filter: blur(10px);
50
  }
51
 
52
  .app-container {
53
  width: 95%;
54
  max-width: 1400px;
55
  background: var(--glass-bg);
56
+ backdrop-filter: blur(20px);
57
  border: 1px solid var(--glass-border);
58
+ border-radius: 20px;
59
  box-shadow: var(--shadow-xl);
60
  display: flex;
61
  overflow: hidden;
 
63
  position: relative;
64
  animation: slideIn 0.8s cubic-bezier(0.23, 1, 0.32, 1);
65
  }
 
 
 
 
 
 
 
 
 
 
 
66
 
67
  @keyframes slideIn {
68
  from {
 
79
  width: 320px;
80
  padding: 24px;
81
  background: var(--bg-secondary);
82
+ backdrop-filter: blur(15px);
83
+ border-right: 1px solid var(--glass-border);
84
  transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1);
85
  overflow-y: auto;
86
  scrollbar-width: thin;
87
+ scrollbar-color: var(--accent-primary) transparent;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
89
 
90
  .settings-panel::-webkit-scrollbar {
 
92
  }
93
 
94
  .settings-panel::-webkit-scrollbar-track {
95
+ background: transparent;
96
  }
97
 
98
  .settings-panel::-webkit-scrollbar-thumb {
 
112
  flex-direction: column;
113
  position: relative;
114
  background: var(--bg-primary);
 
 
 
115
  }
116
 
117
  .form-field {
118
  margin-bottom: 20px;
119
  animation: fadeInUp 0.6s cubic-bezier(0.23, 1, 0.32, 1);
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
121
 
122
  .form-field label {
 
129
  letter-spacing: 0.5px;
130
  }
131
 
132
+ .form-field select, .form-field textarea {
133
  width: 100%;
134
  padding: 12px 16px;
135
+ border: 2px solid transparent;
136
+ border-radius: 12px;
137
  background: var(--bg-tertiary);
138
  color: var(--text-primary);
139
  font-size: 1rem;
140
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
141
+ backdrop-filter: blur(10px);
142
  }
143
 
144
+ .form-field select:focus, .form-field textarea:focus {
145
  outline: none;
146
  border-color: var(--accent-primary);
147
+ box-shadow: 0 0 20px rgba(0, 212, 255, 0.3);
148
+ transform: translateY(-2px);
149
  }
150
 
151
  .form-field textarea {
 
156
  button {
157
  padding: 12px 24px;
158
  border: none;
159
+ border-radius: 12px;
160
+ background: var(--gradient-primary);
161
+ color: var(--text-primary);
162
  cursor: pointer;
163
  font-size: 1rem;
164
  font-weight: 600;
 
166
  touch-action: manipulation;
167
  position: relative;
168
  overflow: hidden;
 
169
  }
170
 
171
  button::before {
 
175
  left: -100%;
176
  width: 100%;
177
  height: 100%;
178
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
179
  transition: left 0.5s;
180
  }
181
 
 
184
  }
185
 
186
  button:hover {
187
+ transform: translateY(-3px);
188
+ box-shadow: 0 10px 25px rgba(0, 212, 255, 0.4);
189
  }
190
 
191
  button:active {
192
+ transform: translateY(-1px);
 
193
  }
194
 
195
  .material-icons {
196
  font-family: 'Material Icons';
197
+ font-size: 28px;
198
  vertical-align: middle;
199
  }
200
 
 
206
  flex-direction: column;
207
  gap: 16px;
208
  scrollbar-width: thin;
209
+ scrollbar-color: var(--accent-primary) transparent;
 
 
 
210
  }
211
 
212
  .chat-container::-webkit-scrollbar {
 
214
  }
215
 
216
  .chat-container::-webkit-scrollbar-track {
217
+ background: transparent;
218
  }
219
 
220
  .chat-container::-webkit-scrollbar-thumb {
 
225
  .message {
226
  max-width: 80%;
227
  padding: 16px 20px;
228
+ border-radius: 20px;
229
  font-size: 1rem;
230
  line-height: 1.6;
231
  position: relative;
232
  animation: messageSlide 0.5s cubic-bezier(0.23, 1, 0.32, 1);
233
+ backdrop-filter: blur(10px);
 
 
 
 
 
 
 
 
 
 
234
  }
235
 
236
  @keyframes messageSlide {
 
245
  }
246
 
247
  .message.user {
248
+ background: var(--gradient-primary);
249
  align-self: flex-end;
250
+ box-shadow: 0 8px 20px rgba(0, 212, 255, 0.3);
251
  }
252
 
253
  .message.ai {
254
+ background: var(--glass-bg);
255
+ border: 1px solid var(--glass-border);
256
  align-self: flex-start;
257
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
258
  }
259
 
260
  .input-container {
261
  display: flex;
262
  gap: 12px;
263
  padding: 20px;
264
+ background: var(--glass-bg);
265
+ backdrop-filter: blur(20px);
266
+ border-top: 1px solid var(--glass-border);
267
  align-items: center;
 
 
 
 
 
 
 
 
 
 
 
 
268
  }
269
 
270
  #userInput {
271
  flex: 1;
272
  padding: 16px 20px;
273
+ border: 2px solid transparent;
274
+ border-radius: 20px;
275
+ background: var(--bg-secondary);
276
  color: var(--text-primary);
277
  resize: none;
278
  min-height: 60px;
279
  max-height: 150px;
280
+ font-size: 1rem;
281
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
282
+ backdrop-filter: blur(10px);
283
  }
284
 
285
  #userInput:focus {
286
  outline: none;
287
  border-color: var(--accent-primary);
288
+ box-shadow: 0 0 25px rgba(0, 212, 255, 0.3);
289
+ transform: translateY(-2px);
290
  }
291
 
292
  #sendButton, #attachButton {
 
295
  justify-content: center;
296
  width: 60px;
297
  height: 60px;
298
+ border-radius: 50%;
299
+ background: var(--gradient-primary);
300
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
 
301
  }
302
 
303
  #sendButton:hover, #attachButton:hover {
304
+ transform: translateY(-3px) scale(1.05);
305
+ box-shadow: 0 12px 30px rgba(0, 212, 255, 0.5);
 
 
 
 
 
306
  }
307
 
308
  #sendButton:disabled {
 
315
  .spinner {
316
  width: 28px;
317
  height: 28px;
318
+ border: 3px solid rgba(255, 255, 255, 0.3);
319
  border-top: 3px solid var(--accent-primary);
320
  border-radius: 50%;
321
  animation: spin 1s linear infinite;
 
330
  top: 24px;
331
  right: 24px;
332
  padding: 16px 24px;
333
+ border-radius: 12px;
334
  color: #fff;
335
  font-size: 1rem;
336
  font-weight: 600;
337
  z-index: 1000;
338
  display: none;
339
+ backdrop-filter: blur(15px);
340
  animation: notificationSlide 0.5s cubic-bezier(0.23, 1, 0.32, 1);
 
341
  }
342
 
343
  @keyframes notificationSlide {
 
352
  }
353
 
354
  .error-message {
355
+ background: linear-gradient(135deg, var(--error), #ff6b6b);
356
+ box-shadow: 0 10px 25px rgba(255, 71, 87, 0.4);
 
357
  }
358
 
359
  .success-message {
360
+ background: linear-gradient(135deg, var(--success), #5af78e);
361
+ box-shadow: 0 10px 25px rgba(46, 213, 115, 0.4);
 
362
  }
363
 
364
  .carousel-container {
 
371
  position: relative;
372
  user-select: none;
373
  padding: 24px;
 
374
  }
375
 
376
  .carousel {
 
379
  max-width: 500px;
380
  height: 300px;
381
  transform-style: preserve-3d;
382
+ transition: transform 0.6s cubic-bezier(0.23, 1, 0.32, 1);
383
  cursor: grab;
384
  }
385
 
386
  .carousel.dragging {
387
  cursor: grabbing;
 
388
  }
389
 
390
  .carousel-card {
391
  position: absolute;
392
  width: 100%;
393
  height: 100%;
394
+ background: var(--glass-bg);
395
+ backdrop-filter: blur(20px);
396
+ border: 1px solid var(--glass-border);
397
+ border-radius: 16px;
398
  padding: 24px;
399
+ box-shadow: var(--shadow-lg);
400
  display: flex;
401
  flex-direction: column;
402
  gap: 12px;
403
+ transition: all 0.6s cubic-bezier(0.23, 1, 0.32, 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
404
  }
405
 
406
  .carousel-controls, .carousel-indicator {
 
413
  width: 14px;
414
  height: 14px;
415
  background: var(--bg-tertiary);
416
+ border-radius: 50%;
417
  cursor: pointer;
418
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
419
+ border: 2px solid transparent;
 
420
  }
421
 
422
  .carousel-dot.active {
423
  background: var(--accent-primary);
424
+ box-shadow: 0 0 20px rgba(0, 212, 255, 0.5);
425
  transform: scale(1.2);
426
  }
427
 
 
432
 
433
  .mode-toggle {
434
  display: flex;
435
+ background: var(--bg-secondary);
436
+ backdrop-filter: blur(15px);
437
+ border-radius: 20px;
438
  padding: 4px;
439
  position: relative;
440
  margin-bottom: 20px;
441
+ border: 1px solid var(--glass-border);
442
  }
443
 
444
  .mode-toggle button {
 
451
  z-index: 1;
452
  font-size: 1rem;
453
  font-weight: 600;
454
+ border-radius: 16px;
455
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
 
456
  }
457
 
458
  .mode-toggle button.active {
459
+ color: var(--text-primary);
460
  }
461
 
462
  .mode-toggle-slider {
 
464
  top: 4px;
465
  left: 4px;
466
  height: calc(100% - 8px);
467
+ background: var(--gradient-primary);
468
+ border-radius: 16px;
469
+ transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1);
470
+ box-shadow: 0 4px 15px rgba(0, 212, 255, 0.3);
471
  }
472
 
473
  .dropzone {
 
476
  left: 0;
477
  right: 0;
478
  bottom: 0;
479
+ background: rgba(0, 212, 255, 0.1);
480
+ backdrop-filter: blur(20px);
481
  border: 3px dashed var(--accent-primary);
482
  display: none;
483
  align-items: center;
 
486
  font-size: 1.4rem;
487
  font-weight: 600;
488
  z-index: 10;
489
+ border-radius: 20px;
490
  }
491
 
492
  .dropzone.active {
 
521
 
522
  .chip {
523
  padding: 10px 18px;
524
+ background: var(--glass-bg);
525
+ backdrop-filter: blur(15px);
526
+ border: 1px solid var(--glass-border);
527
+ border-radius: 20px;
528
  font-size: 0.9rem;
529
  font-weight: 600;
530
  cursor: pointer;
531
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
532
  color: var(--text-secondary);
 
 
 
 
 
 
 
 
 
 
 
 
533
  }
534
 
535
  .chip:hover {
536
  background: var(--accent-primary);
537
+ color: var(--text-primary);
538
  transform: translateY(-2px);
539
+ box-shadow: 0 6px 20px rgba(0, 212, 255, 0.4);
 
 
 
 
 
540
  }
541
 
542
  .floating-buttons {
 
551
  .floating-btn {
552
  width: 48px;
553
  height: 48px;
554
+ border-radius: 50%;
555
+ background: var(--glass-bg);
556
+ backdrop-filter: blur(15px);
557
+ border: 1px solid var(--glass-border);
558
  display: flex;
559
  align-items: center;
560
  justify-content: center;
561
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
562
  padding: 0;
 
563
  }
564
 
565
  .floating-btn:hover {
566
  background: var(--accent-primary);
567
+ transform: translateY(-3px) scale(1.05);
568
+ box-shadow: 0 8px 25px rgba(0, 212, 255, 0.4);
 
 
 
 
 
569
  }
570
 
571
  .code-tools {
 
579
  .code-tools button {
580
  padding: 6px 12px;
581
  font-size: 0.85rem;
582
+ background: var(--glass-bg);
583
+ backdrop-filter: blur(10px);
584
+ border: 1px solid var(--glass-border);
585
  }
586
 
587
  pre {
588
  position: relative;
589
+ background: var(--bg-secondary);
590
+ border: 1px solid var(--glass-border);
591
  padding: 20px;
592
+ border-radius: 12px;
593
  overflow-x: auto;
594
+ backdrop-filter: blur(10px);
595
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
596
  }
597
 
 
603
  .image-preview {
604
  max-width: 100%;
605
  max-height: 300px;
606
+ border-radius: 12px;
607
  margin-top: 12px;
608
  box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
609
  }
610
 
611
  @keyframes fadeInUp {
 
632
  width: 100%;
633
  max-height: 40vh;
634
  border-right: none;
635
+ border-bottom: 1px solid var(--glass-border);
636
  }
637
 
638
  .settings-panel.collapsed {
 
691
  padding: 8px 14px;
692
  }
693
 
694
+ .form-field select, .form-field textarea, #userInput {
695
  font-size: 16px;
696
  }
697
  }
 
700
  <body>
701
  <div class="app-container" id="appContainer">
702
  <div class="settings-panel" id="settingsPanel">
703
+ <h2 style="font-size: 1.4rem; margin-bottom: 24px; background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;">βš™οΈ Settings</h2>
704
  <div class="form-field">
705
  <label>πŸ€– Main Model:</label>
706
  <select id="modelSelect">
707
+ <option value="Qwen/Qwen2.5-Coder-32B-Instruct">Qwen2.5-Coder 32B (Code/Text)</option>
708
+ <option value="Qwen/Qwen2-VL-72B-Instruct">Qwen2-VL 72B (Text/Image)</option>
709
+ <option value="microsoft/Florence-2-large">Florence-2 Large (Text/Image)</option>
710
+ <option value="mistralai/Mixtral-8x7B-Instruct-v0.1">Mixtral 8x7B (Text)</option>
711
+ <option value="meta-llama/Llama-2-70b-chat-hf">Llama-2 70B (Chat)</option>
712
  </select>
713
  <p style="font-size: 0.8rem; color: var(--text-secondary); margin-top: 8px;">
714
+ πŸ’‘ Choose a model. Use VL or Florence for image processing.
715
  </p>
716
  </div>
717
  <div class="form-field">
718
+ <label>πŸ‘οΈ OCR Model (for images):</label>
719
+ <select id="ocrModelSelect">
720
+ <option value="none">None</option>
721
+ <option value="scb10x/typhoon-v1.5x-72b-instruct">Typhoon 1.5x 72B</option>
722
+ <option value="microsoft/trocr-base-printed">TrOCR Base</option>
723
+ </select>
 
 
 
724
  </div>
725
+ <button id="saveSettingsBtn">πŸ’Ύ Save Settings</button>
726
  </div>
727
  <div class="main-content">
728
  <div class="floating-buttons">
 
738
  </div>
739
 
740
  <div class="mode-toggle">
741
+ <button id="carouselModeBtn" class="active">πŸŽ›οΈ Prompt Editor</button>
742
+ <button id="chatModeBtn">πŸ’¬ Chat</button>
743
  <div class="mode-toggle-slider" id="modeToggleSlider"></div>
744
  </div>
745
 
746
  <div id="carouselMode">
747
  <div class="carousel-container">
748
  <div class="carousel" id="promptCarousel">
749
+ <div class="carousel-card" style="transform: rotateY(0deg) translateZ(500px);">
750
  <label>🎯 Primary System Prompt:</label>
751
+ <textarea id="primarySystemPrompt" placeholder="Enter primary system prompt for the AI assistant...">You are a powerful AI assistant that excels at understanding code, images, and technical content. Provide clear, accurate, and helpful responses. Focus on practical solutions and detailed explanations.</textarea>
752
  </div>
753
+ <div class="carousel-card" style="transform: rotateY(60deg) translateZ(500px); opacity: 0.8;">
754
+ <label>πŸ‘οΈ OCR System Prompt:</label>
755
+ <textarea id="ocrSystemPrompt" placeholder="Enter OCR system prompt for image text extraction...">Extract all text from the provided image clearly and accurately. Preserve formatting, structure, and layout when possible. If text is unclear, indicate uncertain parts.</textarea>
756
+ </div>
757
+ <div class="carousel-card" style="transform: rotateY(120deg) translateZ(500px); opacity: 0.8;">
758
  <label>πŸ’» Code Template:</label>
759
  <textarea id="codeTemplate" placeholder="Enter code formatting template...">```javascript
760
+ // Enhanced code implementation
761
  function solution() {
762
+ // Your optimized code here
763
  return result;
764
  }
765
  ```</textarea>
766
  </div>
767
+ <div class="carousel-card" style="transform: rotateY(180deg) translateZ(500px); opacity: 0.8;">
768
  <label>πŸ“‹ Additional Instructions:</label>
769
+ <textarea id="additionalInstructions" placeholder="Enter additional instructions for the AI...">Always provide working, tested code examples. Include error handling and optimization suggestions. Explain complex concepts step by step. Use modern best practices.</textarea>
770
+ </div>
771
+ <div class="carousel-card" style="transform: rotateY(240deg) translateZ(500px); opacity: 0.8;">
772
+ <label>πŸš€ Prompt Prefix:</label>
773
+ <textarea id="promptPrefix" placeholder="Enter text to prepend to all prompts...">Please analyze the following request carefully and provide a comprehensive solution:</textarea>
774
+ </div>
775
+ <div class="carousel-card" style="transform: rotateY(300deg) translateZ(500px); opacity: 0.8;">
776
+ <label>✨ Prompt Suffix:</label>
777
+ <textarea id="promptSuffix" placeholder="Enter text to append to all prompts...">Ensure your response is complete, accurate, and includes practical examples where applicable.</textarea>
778
  </div>
779
  </div>
780
  <div class="carousel-controls">
 
785
  <div class="carousel-dot active" data-index="0"></div>
786
  <div class="carousel-dot" data-index="1"></div>
787
  <div class="carousel-dot" data-index="2"></div>
788
+ <div class="carousel-dot" data-index="3"></div>
789
+ <div class="carousel-dot" data-index="4"></div>
790
+ <div class="carousel-dot" data-index="5"></div>
791
  </div>
792
+ <button id="applyPromptBtn" style="margin-top: 24px;">βœ… Apply Prompts & Switch to Chat</button>
793
  </div>
794
  </div>
795
 
 
799
  <span class="chip" data-prompt="Generate a complete function">⚑ Generate Function</span>
800
  <span class="chip" data-prompt="Debug and fix this issue">πŸ› Debug Code</span>
801
  <span class="chip" data-prompt="Optimize this for performance">πŸš€ Optimize</span>
802
+ <span class="chip" data-prompt="Add error handling">πŸ›‘οΈ Error Handling</span>
803
+ <span class="chip" data-prompt="Convert to modern syntax">✨ Modernize</span>
804
  </div>
805
  <div class="chat-container" id="chatContainer"></div>
806
  <div class="input-container">
807
+ <button id="attachButton"><span class="material-icons">attach_file</span></button>
808
+ <input type="file" id="fileInput" multiple accept="image/*" style="display: none;">
809
+ <span class="file-name" id="fileName"></span>
810
  <textarea id="userInput" placeholder="Type your message here... (Shift+Enter for new line)"></textarea>
811
  <button id="sendButton"><span class="material-icons">send</span></button>
812
  </div>
813
+ <div class="dropzone" id="dropzone">πŸ“ Drop files here to attach them</div>
814
  </div>
815
 
816
  <div class="notification error-message" id="errorMessage">