VirtualKimi commited on
Commit
d48e96e
·
verified ·
1 Parent(s): 5d252b6

Upload 29 files

Browse files
index.html CHANGED
@@ -5,6 +5,8 @@
5
  <meta charset="UTF-8" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title data-i18n="title">Kimi - Virtual Companion 💕</title>
 
 
8
  <link rel="stylesheet" href="kimi-css/kimi-style.css" />
9
  <link rel="stylesheet" href="kimi-css/kimi-settings.css" />
10
  <link rel="stylesheet" href="kimi-css/kimi-memory-styles.css" />
 
5
  <meta charset="UTF-8" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title data-i18n="title">Kimi - Virtual Companion 💕</title>
8
+
9
+ <!-- Main CSS Files -->
10
  <link rel="stylesheet" href="kimi-css/kimi-style.css" />
11
  <link rel="stylesheet" href="kimi-css/kimi-settings.css" />
12
  <link rel="stylesheet" href="kimi-css/kimi-memory-styles.css" />
kimi-css/kimi-memory-styles.css CHANGED
@@ -115,11 +115,72 @@
115
  padding-right: 36px;
116
  }
117
 
 
118
  @media (max-width: 768px) {
119
  .memory-filters {
120
  grid-template-columns: 1fr;
121
  gap: 8px;
122
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  }
124
 
125
  /* Memory List */
@@ -197,7 +258,7 @@
197
  padding: 0;
198
  max-height: none;
199
  overflow: visible;
200
- color: var(--text-primary);
201
  line-height: 1.4;
202
  margin-bottom: 8px;
203
  font-size: 0.9rem;
@@ -206,7 +267,7 @@
206
  .memory-preview {
207
  display: block;
208
  margin-bottom: 6px;
209
- color: var(--text-primary);
210
  line-height: 1.4;
211
  font-size: 0.9rem;
212
  }
@@ -217,6 +278,7 @@
217
  text-overflow: ellipsis;
218
  white-space: nowrap;
219
  max-width: 100%;
 
220
  }
221
 
222
  .memory-preview-full {
@@ -497,19 +559,6 @@
497
  box-shadow: 0 6px 20px rgba(var(--primary-rgb), 0.15);
498
  }
499
 
500
- /* Responsive improvements */
501
- @media (max-width: 768px) {
502
- .memory-category-header {
503
- flex-direction: column;
504
- align-items: flex-start;
505
- gap: 4px;
506
- }
507
-
508
- .memory-badges {
509
- flex-wrap: wrap;
510
- }
511
- }
512
-
513
  @keyframes fadeIn {
514
  to {
515
  opacity: 1;
@@ -552,99 +601,31 @@
552
  box-shadow: 0 4px 15px rgba(231, 76, 60, 0.3);
553
  }
554
 
555
- /* Mobile Responsive */
556
- @media (max-width: 768px) {
557
- .memory-modal {
558
- width: 95%;
559
- max-height: 90vh;
560
- }
561
-
562
- .memory-header {
563
- padding: 16px 20px;
564
- }
565
-
566
- .memory-content {
567
- padding: 16px 20px;
568
- }
569
-
570
- .memory-filters {
571
- grid-template-columns: 1fr;
572
- gap: 8px;
573
- }
574
-
575
- .memory-item {
576
- padding: 10px;
577
- }
578
-
579
- .memory-item .memory-header {
580
- flex-direction: column;
581
- align-items: flex-start;
582
- gap: 6px;
583
- }
584
-
585
- .memory-meta {
586
- flex-direction: column;
587
- gap: 4px;
588
- font-size: 0.7rem;
589
- }
590
-
591
- .memory-badges {
592
- flex-wrap: wrap;
593
- gap: 4px;
594
- }
595
-
596
- .memory-category {
597
- font-size: 0.7rem;
598
- padding: 2px 6px;
599
- }
600
-
601
- .memory-preview-text {
602
- font-size: 0.85rem;
603
- }
604
-
605
- .memory-actions {
606
- gap: 4px;
607
- }
608
-
609
- .memory-edit-btn,
610
- .memory-delete-btn {
611
- min-width: 24px;
612
- height: 24px;
613
- font-size: 0.75rem;
614
- }
615
- }
616
-
617
- /* Dark Theme Adjustments */
618
- [data-theme="dark"] .memory-modal {
619
  background: #1a1a1a;
 
 
 
 
 
 
620
  }
621
 
622
- [data-theme="dark"] .memory-item {
623
- background: rgba(42, 42, 42, 0.95);
624
- border-color: #404040;
 
625
  backdrop-filter: blur(5px);
626
  }
627
 
628
- [data-theme="dark"] .memory-item:hover {
629
  border-color: var(--primary-color);
630
- background: rgba(42, 42, 42, 1);
 
631
  }
632
 
633
- [data-theme="dark"] .memory-expand-btn:hover {
634
  background: rgba(var(--primary-rgb), 0.2);
635
  }
636
-
637
- /* Light Theme Specific */
638
- [data-theme="purple"] .memory-item,
639
- [data-theme="blue"] .memory-item,
640
- [data-theme="green"] .memory-item,
641
- [data-theme="default"] .memory-item {
642
- background: rgba(255, 255, 255, 0.95);
643
- }
644
-
645
- [data-theme="purple"] .memory-item:hover,
646
- [data-theme="blue"] .memory-item:hover,
647
- [data-theme="green"] .memory-item:hover,
648
- [data-theme="default"] .memory-item:hover {
649
- background: rgba(255, 255, 255, 1);
650
- }
 
115
  padding-right: 36px;
116
  }
117
 
118
+ /* Consolidated Mobile Responsive */
119
  @media (max-width: 768px) {
120
  .memory-filters {
121
  grid-template-columns: 1fr;
122
  gap: 8px;
123
  }
124
+
125
+ .memory-category-header {
126
+ flex-direction: column;
127
+ align-items: flex-start;
128
+ gap: 4px;
129
+ }
130
+
131
+ .memory-badges {
132
+ flex-wrap: wrap;
133
+ gap: 4px;
134
+ }
135
+
136
+ .memory-modal {
137
+ width: 95%;
138
+ max-height: 90vh;
139
+ }
140
+
141
+ .memory-header {
142
+ padding: 16px 20px;
143
+ }
144
+
145
+ .memory-content {
146
+ padding: 16px 20px;
147
+ }
148
+
149
+ .memory-item {
150
+ padding: 10px;
151
+ }
152
+
153
+ .memory-item .memory-header {
154
+ flex-direction: column;
155
+ align-items: flex-start;
156
+ gap: 6px;
157
+ }
158
+
159
+ .memory-meta {
160
+ flex-direction: column;
161
+ gap: 4px;
162
+ font-size: 0.7rem;
163
+ }
164
+
165
+ .memory-category {
166
+ font-size: 0.7rem;
167
+ padding: 2px 6px;
168
+ }
169
+
170
+ .memory-preview-text {
171
+ font-size: 0.85rem;
172
+ }
173
+
174
+ .memory-actions {
175
+ gap: 4px;
176
+ }
177
+
178
+ .memory-edit-btn,
179
+ .memory-delete-btn {
180
+ min-width: 24px;
181
+ height: 24px;
182
+ font-size: 0.75rem;
183
+ }
184
  }
185
 
186
  /* Memory List */
 
258
  padding: 0;
259
  max-height: none;
260
  overflow: visible;
261
+ color: #e0e0e0;
262
  line-height: 1.4;
263
  margin-bottom: 8px;
264
  font-size: 0.9rem;
 
267
  .memory-preview {
268
  display: block;
269
  margin-bottom: 6px;
270
+ color: #e0e0e0;
271
  line-height: 1.4;
272
  font-size: 0.9rem;
273
  }
 
278
  text-overflow: ellipsis;
279
  white-space: nowrap;
280
  max-width: 100%;
281
+ color: #e0e0e0;
282
  }
283
 
284
  .memory-preview-full {
 
559
  box-shadow: 0 6px 20px rgba(var(--primary-rgb), 0.15);
560
  }
561
 
 
 
 
 
 
 
 
 
 
 
 
 
 
562
  @keyframes fadeIn {
563
  to {
564
  opacity: 1;
 
601
  box-shadow: 0 4px 15px rgba(231, 76, 60, 0.3);
602
  }
603
 
604
+ /* Unified Dark Theme for Memory Modal - All Themes */
605
+ /* Theme-agnostic variables for consistent memory modal appearance */
606
+ .memory-modal {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
607
  background: #1a1a1a;
608
+ color: #e0e0e0;
609
+ --memory-modal-bg: #1a1a1a;
610
+ --memory-modal-text: #e0e0e0;
611
+ --memory-item-bg: rgba(42, 42, 42, 0.95);
612
+ --memory-item-bg-hover: rgba(42, 42, 42, 1);
613
+ --memory-item-border: #404040;
614
  }
615
 
616
+ .memory-item {
617
+ background: var(--memory-item-bg);
618
+ border-color: var(--memory-item-border);
619
+ color: var(--memory-modal-text);
620
  backdrop-filter: blur(5px);
621
  }
622
 
623
+ .memory-item:hover {
624
  border-color: var(--primary-color);
625
+ background: var(--memory-item-bg-hover);
626
+ box-shadow: 0 4px 16px rgba(var(--primary-rgb), 0.2);
627
  }
628
 
629
+ .memory-expand-btn:hover {
630
  background: rgba(var(--primary-rgb), 0.2);
631
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
kimi-css/kimi-settings.css CHANGED
@@ -25,24 +25,43 @@
25
  padding: 10px;
26
  }
27
 
 
28
  .settings-panel {
29
  background: var(--modal-bg);
30
- backdrop-filter: blur(20px);
31
- border-radius: 25px;
32
- border: 1.5px solid var(--modal-border);
33
- color: var(--modal-text);
34
- box-shadow:
35
- 0 20px 60px rgba(0, 0, 0, 0.5),
36
- 0 0 30px var(--primary-color, rgba(255, 107, 157, 0.3));
37
- width: 100%;
38
- max-width: 900px;
39
- max-height: 90vh;
40
  overflow: hidden;
 
41
  display: flex;
42
  flex-direction: column;
43
- animation: slideInUp 0.4s ease-out;
44
- position: relative;
45
- isolation: isolate;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
47
 
48
  @keyframes slideInUp {
@@ -662,12 +681,7 @@
662
 
663
  /* ===== CONSOLIDATED RESPONSIVE DESIGN ===== */
664
  @media (max-width: 768px) {
665
- .settings-panel {
666
- width: 100%;
667
- height: 100%;
668
- border-radius: 0;
669
- max-height: 100vh;
670
- }
671
 
672
  .settings-header {
673
  padding: 20px;
@@ -730,11 +744,7 @@
730
  }
731
 
732
  @media (max-width: 480px) {
733
- .settings-panel {
734
- width: 95%;
735
- margin: 2.5%;
736
- max-height: 90vh;
737
- }
738
 
739
  .config-row {
740
  flex-direction: column;
@@ -811,10 +821,7 @@
811
  }
812
 
813
  @media (max-width: 360px) {
814
- .settings-panel {
815
- width: 98%;
816
- margin: 1%;
817
- }
818
 
819
  .slider-container {
820
  gap: 5px;
@@ -1033,13 +1040,22 @@
1033
  .creator-link:hover {
1034
  transform: translateY(-2px);
1035
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
1036
- color: var(--creator-role-color, var(--text-on-primary)) !important;
1037
- text-decoration: none !important;
1038
- background: var(--creator-role-bg, linear-gradient(135deg, var(--primary-color), var(--secondary-color))) !important;
1039
  filter: brightness(1.1);
1040
  border-color: var(--primary-color, #ff6b9d);
1041
  }
1042
 
 
 
 
 
 
 
 
 
 
 
 
 
1043
  .creator-link i {
1044
  font-size: 1rem;
1045
  color: inherit;
@@ -1448,6 +1464,10 @@
1448
  }
1449
 
1450
  .cheat-toggle-btn:hover,
 
 
 
 
1451
  .cheat-toggle-btn:focus {
1452
  background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
1453
  color: #fff;
@@ -1483,3 +1503,17 @@
1483
  max-height 0.6s cubic-bezier(0.4, 0, 0.2, 1),
1484
  opacity 0.3s;
1485
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  padding: 10px;
26
  }
27
 
28
+ /* ===== SETTINGS PANEL ===== */
29
  .settings-panel {
30
  background: var(--modal-bg);
31
+ border-radius: 15px;
32
+ border: 1px solid var(--modal-border);
33
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.5);
34
+ width: 90%;
35
+ max-width: 800px;
36
+ max-height: 85vh;
 
 
 
 
37
  overflow: hidden;
38
+ animation: slideInUp 0.4s cubic-bezier(0.4, 0, 0.2, 1);
39
  display: flex;
40
  flex-direction: column;
41
+ }
42
+
43
+ .settings-content {
44
+ flex: 1;
45
+ overflow-y: auto;
46
+ padding: 0;
47
+ }
48
+
49
+ .settings-content::-webkit-scrollbar {
50
+ width: 8px;
51
+ }
52
+
53
+ .settings-content::-webkit-scrollbar-track {
54
+ background: rgba(255, 255, 255, 0.1);
55
+ border-radius: 4px;
56
+ }
57
+
58
+ .settings-content::-webkit-scrollbar-thumb {
59
+ background: var(--primary-color);
60
+ border-radius: 4px;
61
+ }
62
+
63
+ .settings-content::-webkit-scrollbar-thumb:hover {
64
+ background: var(--accent-color);
65
  }
66
 
67
  @keyframes slideInUp {
 
681
 
682
  /* ===== CONSOLIDATED RESPONSIVE DESIGN ===== */
683
  @media (max-width: 768px) {
684
+ /* Settings panel responsive styles */
 
 
 
 
 
685
 
686
  .settings-header {
687
  padding: 20px;
 
744
  }
745
 
746
  @media (max-width: 480px) {
747
+ /* Settings panel responsive styles consolidated */
 
 
 
 
748
 
749
  .config-row {
750
  flex-direction: column;
 
821
  }
822
 
823
  @media (max-width: 360px) {
824
+ /* Settings panel responsive styles consolidated */
 
 
 
825
 
826
  .slider-container {
827
  gap: 5px;
 
1040
  .creator-link:hover {
1041
  transform: translateY(-2px);
1042
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
 
 
 
1043
  filter: brightness(1.1);
1044
  border-color: var(--primary-color, #ff6b9d);
1045
  }
1046
 
1047
+ /* Increased specificity to avoid !important */
1048
+ .help-modal .creator-link:hover {
1049
+ color: var(--creator-role-color, var(--text-on-primary));
1050
+ text-decoration: none;
1051
+ background: var(--creator-role-bg, linear-gradient(135deg, var(--primary-color), var(--secondary-color)));
1052
+ }
1053
+
1054
+ .help-modal .creator-link:hover i,
1055
+ .help-modal .creator-link:hover span {
1056
+ color: inherit;
1057
+ }
1058
+
1059
  .creator-link i {
1060
  font-size: 1rem;
1061
  color: inherit;
 
1464
  }
1465
 
1466
  .cheat-toggle-btn:hover,
1467
+ .cheat-toggle-btn:focus {
1468
+ box-shadow: 0 2px 16px 0 rgba(255, 107, 157, 0.25);
1469
+ transform: translateY(-1px);
1470
+ }
1471
  .cheat-toggle-btn:focus {
1472
  background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
1473
  color: #fff;
 
1503
  max-height 0.6s cubic-bezier(0.4, 0, 0.2, 1),
1504
  opacity 0.3s;
1505
  }
1506
+
1507
+ /* ===== ACCESSIBILITY - FOCUS STYLES ===== */
1508
+ .settings-panel select:focus,
1509
+ .settings-panel input:focus,
1510
+ .settings-panel button:focus,
1511
+ .settings-panel .cheat-toggle-btn:focus {
1512
+ box-shadow: 0 0 0 2px var(--primary-pink);
1513
+ border-color: var(--primary-pink);
1514
+ }
1515
+
1516
+ .character-card:focus {
1517
+ outline: 2px solid var(--primary-pink);
1518
+ outline-offset: 2px;
1519
+ }
kimi-css/kimi-style.css CHANGED
@@ -2,6 +2,7 @@
2
  :root {
3
  /* Core Theme Colors - Default Pink Passion */
4
  --primary-color: #ff6b9d;
 
5
  --secondary-color: #ffeaa7;
6
  --accent-color: #fd79a8;
7
  --background-overlay: rgba(255, 107, 157, 0.15);
@@ -217,6 +218,7 @@
217
  /* ===== OPTIMIZED THEME VARIATIONS ===== */
218
  [data-theme="blue"] {
219
  --primary-color: #74b9ff;
 
220
  --secondary-color: #81ecec;
221
  --accent-color: #0984e3;
222
  --background-overlay: rgba(116, 185, 255, 0.15);
@@ -231,6 +233,7 @@
231
  --chat-bg: rgba(116, 185, 255, 0.9);
232
  --chat-border: #74b9ff;
233
  --chat-message-user-bg: #74b9ff;
 
234
  --input-border: #74b9ff;
235
  --input-focus-border: #0984e3;
236
 
@@ -304,6 +307,7 @@
304
 
305
  [data-theme="purple"] {
306
  --primary-color: #a29bfe;
 
307
  --secondary-color: #fd79a8;
308
  --accent-color: #6c5ce7;
309
  --background-overlay: rgba(162, 155, 254, 0.15);
@@ -318,6 +322,7 @@
318
  --chat-bg: rgba(162, 155, 254, 0.9);
319
  --chat-border: #a29bfe;
320
  --chat-message-user-bg: #a29bfe;
 
321
  --input-border: #a29bfe;
322
  --input-focus-border: #6c5ce7;
323
 
@@ -403,6 +408,7 @@
403
 
404
  [data-theme="green"] {
405
  --primary-color: #27ae60;
 
406
  --secondary-color: #2ecc71;
407
  --accent-color: #16a085;
408
  --background-overlay: rgba(39, 174, 96, 0.15);
@@ -531,6 +537,7 @@
531
 
532
  [data-theme="dark"] {
533
  --primary-color: #5e60ce;
 
534
  --secondary-color: #23262f;
535
  --accent-color: #8b5cf6;
536
  --background-overlay: rgba(24, 26, 32, 0.85);
@@ -551,9 +558,9 @@
551
  --chat-bg: rgba(24, 26, 32, 0.95);
552
  --chat-border: #5e60ce;
553
  --chat-text: var(--text-on-background);
554
- --chat-message-user-bg: #23262f;
555
  --chat-message-user-text: var(--text-on-background);
556
- --chat-message-kimi-bg: #181a20;
557
  --chat-message-kimi-text: var(--text-on-background);
558
  --input-border: #5e60ce;
559
  --input-focus-border: #8b5cf6;
@@ -699,9 +706,7 @@ body.no-animations *,
699
  [data-animations="false"] * {
700
  animation: none !important;
701
  transition: none !important;
702
- }
703
-
704
- /* Important: Keep mic button animations even when animations are disabled */
705
  body.no-animations .mic-button,
706
  body.no-animations .mic-button *,
707
  body.no-animations .mic-button::after,
@@ -782,13 +787,6 @@ body {
782
  pointer-events: none;
783
  }
784
 
785
- @media (max-width: 600px) {
786
- .bg-video {
787
- object-fit: cover;
788
- object-position: center center;
789
- }
790
- }
791
-
792
  .content-overlay {
793
  position: relative;
794
  height: 100vh;
@@ -844,6 +842,7 @@ body {
844
  transform: translateX(-50%);
845
  width: 80%;
846
  max-width: 600px;
 
847
  padding: 15px;
848
  background: var(--transcript-bg);
849
  backdrop-filter: blur(10px);
@@ -854,26 +853,69 @@ body {
854
  transition: opacity 0.3s ease-in-out;
855
  pointer-events: none;
856
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
 
 
857
  }
858
 
859
  .transcript-container.visible {
860
  opacity: 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
861
  }
862
 
863
  #transcript {
864
  font-size: 1.2rem;
865
  color: var(--transcript-text);
866
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7);
 
 
 
 
867
  }
868
 
869
- /* Interface de Chat avec Kimi - STYLE UNIFIÉ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
870
  .chat-container {
871
  position: fixed;
872
  top: 20px;
873
  right: 20px;
874
- width: 350px;
 
875
  max-width: calc(100vw - 40px);
876
- height: 500px;
877
  max-height: 80vh;
878
  background: var(--chat-bg);
879
  backdrop-filter: blur(20px);
@@ -882,7 +924,6 @@ body {
882
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
883
  display: none;
884
  flex-direction: column;
885
- z-index: 1000;
886
  overflow: hidden;
887
  transform: translateX(400px);
888
  opacity: 0;
@@ -891,183 +932,153 @@ body {
891
 
892
  .chat-container.visible {
893
  display: flex;
894
- flex-direction: column;
895
  transform: translateX(0);
896
  opacity: 1;
897
  }
898
 
899
  .chat-header {
 
900
  padding: 15px 20px;
901
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
902
  display: flex;
903
  justify-content: space-between;
904
  align-items: center;
905
- background: var(--chat-header-bg);
906
  }
907
 
908
  .chat-header h3 {
909
  margin: 0;
910
  color: var(--chat-text);
911
  font-size: 1.1rem;
912
- font-weight: 600;
913
- }
914
-
915
- .chat-header h3 i {
916
- margin-right: 8px;
917
- color: var(--accent-color);
918
- }
919
-
920
- .chat-toggle {
921
- background: none;
922
- border: none;
923
- color: var(--chat-text);
924
- cursor: pointer;
925
- width: 30px;
926
- height: 30px;
927
- border-radius: 50%;
928
  display: flex;
929
  align-items: center;
930
- justify-content: center;
931
- transition: all 0.3s ease;
932
- font-size: 1.1rem;
933
- }
934
-
935
- .chat-toggle:hover {
936
- background: rgba(255, 255, 255, 0.1);
937
- transform: scale(1.1);
938
  }
939
 
940
  .chat-messages {
941
  flex: 1;
942
- padding: 18px;
943
  overflow-y: auto;
944
  display: flex;
945
  flex-direction: column;
946
- gap: 15px;
947
  }
948
 
949
  .message {
950
- max-width: 92%;
951
- padding: 10px 14px;
952
- border-radius: 16px;
953
- word-wrap: break-word;
954
- position: relative;
 
 
955
  }
956
 
957
  .message.user {
958
  align-self: flex-end;
959
  background: var(--chat-message-user-bg);
960
  color: var(--chat-message-user-text);
961
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
962
  }
963
 
964
  .message.kimi {
965
  align-self: flex-start;
966
  background: var(--chat-message-kimi-bg);
967
  color: var(--chat-message-kimi-text);
968
- border: 1px solid rgba(255, 255, 255, 0.1);
969
  }
970
 
971
  .message-time {
972
  font-size: 0.75rem;
973
- opacity: 0.7;
974
- margin-top: 5px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
975
  }
976
 
977
  .chat-input-container {
978
  padding: 15px 20px;
979
- background: var(--chat-header-bg);
980
- border-top: 1px solid rgba(255, 255, 255, 0.1);
981
  display: flex;
982
  gap: 10px;
983
- align-items: center;
 
984
  }
985
 
986
  #chat-input {
987
  flex: 1;
988
- padding: 12px 15px;
989
  background: var(--chat-input-bg);
990
  border: 1px solid rgba(255, 255, 255, 0.2);
991
- border-radius: 25px;
 
992
  color: var(--chat-input-text);
993
- font-size: 0.95rem;
994
  outline: none;
995
  transition: all 0.3s ease;
996
  }
997
 
998
- #chat-input:focus {
999
- background: rgba(255, 255, 255, 0.15);
1000
- border-color: var(--accent-color);
1001
- box-shadow: 0 0 10px var(--primary-color);
1002
- }
1003
-
1004
  #chat-input::placeholder {
1005
  color: var(--chat-input-placeholder);
1006
  }
1007
 
 
 
 
 
 
1008
  #send-button {
1009
- width: 45px;
1010
- height: 45px;
1011
- background: var(--chat-message-user-bg);
1012
  border: none;
1013
- border-radius: 50%;
1014
- color: white;
1015
- cursor: pointer;
1016
  display: flex;
1017
- justify-content: center;
1018
  align-items: center;
1019
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1020
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
1021
- backdrop-filter: blur(10px);
1022
- border: 1px solid rgba(255, 255, 255, 0.1);
1023
  }
1024
 
1025
  #send-button:hover {
1026
- transform: scale(1.1);
1027
- box-shadow:
1028
- var(--text-glow),
1029
- 0 4px 15px rgba(0, 0, 0, 0.3);
1030
  background: var(--accent-color);
 
1031
  }
1032
 
1033
- #send-button:active {
1034
- transform: scale(0.95);
1035
- transition: all 0.1s ease;
1036
- }
1037
-
1038
- #chat-delete {
1039
  background: none;
1040
  border: none;
1041
- color: #d9534f;
1042
- font-size: 1.2em;
1043
  cursor: pointer;
1044
- margin-left: 8px;
1045
- transition: color 0.2s;
 
1046
  }
1047
 
1048
- #chat-delete:hover {
1049
- color: #b52a1a;
1050
  }
1051
 
1052
- #chat-delete i {
1053
- pointer-events: none;
 
1054
  }
1055
 
1056
- .delete-message-btn {
1057
- background: none;
1058
- border: none;
1059
- color: #aaa;
1060
- cursor: pointer;
1061
- padding: 0 0 0 8px;
1062
- display: flex;
1063
- align-items: center;
1064
- transition: color 0.2s;
1065
- }
1066
- .delete-message-btn:hover {
1067
- color: #e74c3c;
1068
- }
1069
- .delete-message-btn i {
1070
- pointer-events: none;
1071
  }
1072
 
1073
  /* ===== UNIFIED BUTTON COMPONENTS ===== */
@@ -1490,6 +1501,16 @@ body {
1490
  }
1491
  }
1492
 
 
 
 
 
 
 
 
 
 
 
1493
  /* ===== CONSOLIDATED RESPONSIVE DESIGN ===== */
1494
  @media (max-width: 768px) {
1495
  .content-overlay {
@@ -1497,22 +1518,10 @@ body {
1497
  }
1498
 
1499
  .chat-container {
1500
- top: 10px;
1501
- right: 10px;
1502
- left: 10px;
1503
- width: auto;
1504
- max-width: none;
1505
- height: calc(100vh - 20px);
1506
- max-height: none;
1507
- border-radius: 10px;
1508
- }
1509
-
1510
- .chat-header {
1511
- padding: 12px 15px;
1512
- }
1513
-
1514
- .chat-header h3 {
1515
- font-size: 1rem;
1516
  }
1517
 
1518
  .control-buttons {
@@ -1582,27 +1591,13 @@ body {
1582
  }
1583
 
1584
  @media (max-width: 600px) {
1585
- .content-overlay {
1586
- padding: 10px;
1587
- }
1588
-
1589
- .chat-container {
1590
- top: 10px;
1591
- right: 10px;
1592
- left: 10px;
1593
- width: auto;
1594
- max-width: none;
1595
- height: calc(100vh - 20px);
1596
- max-height: none;
1597
- border-radius: 10px;
1598
- }
1599
-
1600
- .chat-header {
1601
- padding: 12px 15px;
1602
  }
1603
 
1604
- .chat-header h3 {
1605
- font-size: 1rem;
1606
  }
1607
 
1608
  .control-buttons {
@@ -1659,6 +1654,20 @@ body {
1659
  .favorability-text {
1660
  font-size: 0.75rem;
1661
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1662
  }
1663
 
1664
  /* Animation pour l'indicateur d'attente */
@@ -1738,3 +1747,15 @@ body {
1738
  .global-typing-indicator span:nth-child(3) {
1739
  animation-delay: 0.4s;
1740
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  :root {
3
  /* Core Theme Colors - Default Pink Passion */
4
  --primary-color: #ff6b9d;
5
+ --primary-rgb: 255, 107, 157;
6
  --secondary-color: #ffeaa7;
7
  --accent-color: #fd79a8;
8
  --background-overlay: rgba(255, 107, 157, 0.15);
 
218
  /* ===== OPTIMIZED THEME VARIATIONS ===== */
219
  [data-theme="blue"] {
220
  --primary-color: #74b9ff;
221
+ --primary-rgb: 116, 185, 255;
222
  --secondary-color: #81ecec;
223
  --accent-color: #0984e3;
224
  --background-overlay: rgba(116, 185, 255, 0.15);
 
233
  --chat-bg: rgba(116, 185, 255, 0.9);
234
  --chat-border: #74b9ff;
235
  --chat-message-user-bg: #74b9ff;
236
+ --chat-message-kimi-bg: rgba(255, 255, 255, 0.15);
237
  --input-border: #74b9ff;
238
  --input-focus-border: #0984e3;
239
 
 
307
 
308
  [data-theme="purple"] {
309
  --primary-color: #a29bfe;
310
+ --primary-rgb: 162, 155, 254;
311
  --secondary-color: #fd79a8;
312
  --accent-color: #6c5ce7;
313
  --background-overlay: rgba(162, 155, 254, 0.15);
 
322
  --chat-bg: rgba(162, 155, 254, 0.9);
323
  --chat-border: #a29bfe;
324
  --chat-message-user-bg: #a29bfe;
325
+ --chat-message-kimi-bg: rgba(255, 255, 255, 0.15);
326
  --input-border: #a29bfe;
327
  --input-focus-border: #6c5ce7;
328
 
 
408
 
409
  [data-theme="green"] {
410
  --primary-color: #27ae60;
411
+ --primary-rgb: 39, 174, 96;
412
  --secondary-color: #2ecc71;
413
  --accent-color: #16a085;
414
  --background-overlay: rgba(39, 174, 96, 0.15);
 
537
 
538
  [data-theme="dark"] {
539
  --primary-color: #5e60ce;
540
+ --primary-rgb: 94, 96, 206;
541
  --secondary-color: #23262f;
542
  --accent-color: #8b5cf6;
543
  --background-overlay: rgba(24, 26, 32, 0.85);
 
558
  --chat-bg: rgba(24, 26, 32, 0.95);
559
  --chat-border: #5e60ce;
560
  --chat-text: var(--text-on-background);
561
+ --chat-message-user-bg: #1e253c;
562
  --chat-message-user-text: var(--text-on-background);
563
+ --chat-message-kimi-bg: #23262f;
564
  --chat-message-kimi-text: var(--text-on-background);
565
  --input-border: #5e60ce;
566
  --input-focus-border: #8b5cf6;
 
706
  [data-animations="false"] * {
707
  animation: none !important;
708
  transition: none !important;
709
+ } /* Important: Keep mic button animations even when animations are disabled */
 
 
710
  body.no-animations .mic-button,
711
  body.no-animations .mic-button *,
712
  body.no-animations .mic-button::after,
 
787
  pointer-events: none;
788
  }
789
 
 
 
 
 
 
 
 
790
  .content-overlay {
791
  position: relative;
792
  height: 100vh;
 
842
  transform: translateX(-50%);
843
  width: 80%;
844
  max-width: 600px;
845
+ max-height: 400px;
846
  padding: 15px;
847
  background: var(--transcript-bg);
848
  backdrop-filter: blur(10px);
 
853
  transition: opacity 0.3s ease-in-out;
854
  pointer-events: none;
855
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
856
+ overflow-y: auto;
857
+ overflow-x: hidden;
858
  }
859
 
860
  .transcript-container.visible {
861
  opacity: 1;
862
+ pointer-events: auto;
863
+ }
864
+
865
+ /* Custom scrollbar for transcript container */
866
+ .transcript-container::-webkit-scrollbar {
867
+ width: 8px;
868
+ }
869
+
870
+ .transcript-container::-webkit-scrollbar-track {
871
+ background: rgba(255, 255, 255, 0.1);
872
+ border-radius: 4px;
873
+ }
874
+
875
+ .transcript-container::-webkit-scrollbar-thumb {
876
+ background: rgba(255, 255, 255, 0.3);
877
+ border-radius: 4px;
878
+ transition: background 0.3s ease;
879
+ }
880
+
881
+ .transcript-container::-webkit-scrollbar-thumb:hover {
882
+ background: rgba(255, 255, 255, 0.5);
883
  }
884
 
885
  #transcript {
886
  font-size: 1.2rem;
887
  color: var(--transcript-text);
888
  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7);
889
+ margin: 0;
890
+ line-height: 1.3;
891
+ text-align: left;
892
+ white-space: pre-line;
893
  }
894
 
895
+ /* ===== ACCESSIBILITY - FOCUS STYLES ===== */
896
+ select:focus,
897
+ input:focus,
898
+ button:focus,
899
+ .kimi-slider:focus,
900
+ .kimi-slider-unified:focus {
901
+ box-shadow: 0 0 0 2px var(--primary-pink);
902
+ border-color: var(--primary-pink);
903
+ }
904
+
905
+ .control-button-unified:focus {
906
+ outline: 2px solid var(--primary-pink);
907
+ outline-offset: 2px;
908
+ }
909
+
910
+ /* ===== CHAT INTERFACE ===== */
911
  .chat-container {
912
  position: fixed;
913
  top: 20px;
914
  right: 20px;
915
+ z-index: 1000;
916
+ width: 400px;
917
  max-width: calc(100vw - 40px);
918
+ height: 600px;
919
  max-height: 80vh;
920
  background: var(--chat-bg);
921
  backdrop-filter: blur(20px);
 
924
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
925
  display: none;
926
  flex-direction: column;
 
927
  overflow: hidden;
928
  transform: translateX(400px);
929
  opacity: 0;
 
932
 
933
  .chat-container.visible {
934
  display: flex;
 
935
  transform: translateX(0);
936
  opacity: 1;
937
  }
938
 
939
  .chat-header {
940
+ background: var(--chat-header-bg);
941
  padding: 15px 20px;
 
942
  display: flex;
943
  justify-content: space-between;
944
  align-items: center;
945
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
946
  }
947
 
948
  .chat-header h3 {
949
  margin: 0;
950
  color: var(--chat-text);
951
  font-size: 1.1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
952
  display: flex;
953
  align-items: center;
954
+ gap: 8px;
 
 
 
 
 
 
 
955
  }
956
 
957
  .chat-messages {
958
  flex: 1;
959
+ padding: 15px;
960
  overflow-y: auto;
961
  display: flex;
962
  flex-direction: column;
963
+ gap: 10px;
964
  }
965
 
966
  .message {
967
+ max-width: 95%;
968
+ padding: 12px 16px;
969
+ border-radius: 18px;
970
+ font-size: 0.95rem;
971
+ line-height: 1.3;
972
+ white-space: pre-line;
973
+ animation: messageSlideIn 0.3s ease-out;
974
  }
975
 
976
  .message.user {
977
  align-self: flex-end;
978
  background: var(--chat-message-user-bg);
979
  color: var(--chat-message-user-text);
 
980
  }
981
 
982
  .message.kimi {
983
  align-self: flex-start;
984
  background: var(--chat-message-kimi-bg);
985
  color: var(--chat-message-kimi-text);
 
986
  }
987
 
988
  .message-time {
989
  font-size: 0.75rem;
990
+ color: rgba(255, 255, 255, 0.6);
991
+ margin-top: 4px;
992
+ text-align: right;
993
+ }
994
+
995
+ .delete-message-btn {
996
+ background: none;
997
+ border: none;
998
+ color: rgba(255, 255, 255, 0.4);
999
+ cursor: pointer;
1000
+ padding: 2px 4px;
1001
+ border-radius: 3px;
1002
+ font-size: 0.7rem;
1003
+ margin-left: 8px;
1004
+ transition: all 0.2s ease;
1005
+ }
1006
+
1007
+ .delete-message-btn:hover {
1008
+ color: #ff4757 !important;
1009
+ background: rgba(255, 71, 87, 0.1) !important;
1010
  }
1011
 
1012
  .chat-input-container {
1013
  padding: 15px 20px;
 
 
1014
  display: flex;
1015
  gap: 10px;
1016
+ background: rgba(255, 255, 255, 0.05);
1017
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
1018
  }
1019
 
1020
  #chat-input {
1021
  flex: 1;
 
1022
  background: var(--chat-input-bg);
1023
  border: 1px solid rgba(255, 255, 255, 0.2);
1024
+ border-radius: 20px;
1025
+ padding: 10px 15px;
1026
  color: var(--chat-input-text);
1027
+ font-size: 0.9rem;
1028
  outline: none;
1029
  transition: all 0.3s ease;
1030
  }
1031
 
 
 
 
 
 
 
1032
  #chat-input::placeholder {
1033
  color: var(--chat-input-placeholder);
1034
  }
1035
 
1036
+ #chat-input:focus {
1037
+ border-color: var(--primary-color);
1038
+ box-shadow: 0 0 0 2px rgba(255, 107, 157, 0.2);
1039
+ }
1040
+
1041
  #send-button {
1042
+ background: var(--primary-color);
 
 
1043
  border: none;
1044
+ border-radius: 20px;
1045
+ width: 40px;
1046
+ height: 40px;
1047
  display: flex;
 
1048
  align-items: center;
1049
+ justify-content: center;
1050
+ color: white;
1051
+ cursor: pointer;
1052
+ transition: all 0.3s ease;
1053
  }
1054
 
1055
  #send-button:hover {
 
 
 
 
1056
  background: var(--accent-color);
1057
+ transform: scale(1.05);
1058
  }
1059
 
1060
+ .chat-toggle,
1061
+ .chat-delete {
 
 
 
 
1062
  background: none;
1063
  border: none;
1064
+ color: var(--chat-text);
 
1065
  cursor: pointer;
1066
+ padding: 5px;
1067
+ border-radius: 5px;
1068
+ transition: all 0.3s ease;
1069
  }
1070
 
1071
+ .chat-delete {
1072
+ color: rgba(255, 255, 255, 0.7);
1073
  }
1074
 
1075
+ .chat-delete:hover {
1076
+ color: #ff4757;
1077
+ background: rgba(255, 71, 87, 0.1);
1078
  }
1079
 
1080
+ .chat-toggle:hover {
1081
+ background: rgba(255, 255, 255, 0.1);
 
 
 
 
 
 
 
 
 
 
 
 
 
1082
  }
1083
 
1084
  /* ===== UNIFIED BUTTON COMPONENTS ===== */
 
1501
  }
1502
  }
1503
 
1504
+ /* ===== LARGE SCREENS OPTIMIZATION ===== */
1505
+ @media (min-width: 1200px) {
1506
+ .chat-container {
1507
+ width: 400px;
1508
+ height: 600px;
1509
+ right: 30px;
1510
+ top: 30px;
1511
+ }
1512
+ }
1513
+
1514
  /* ===== CONSOLIDATED RESPONSIVE DESIGN ===== */
1515
  @media (max-width: 768px) {
1516
  .content-overlay {
 
1518
  }
1519
 
1520
  .chat-container {
1521
+ width: 400px;
1522
+ max-width: calc(100vw - 30px);
1523
+ top: 15px;
1524
+ right: 15px;
 
 
 
 
 
 
 
 
 
 
 
 
1525
  }
1526
 
1527
  .control-buttons {
 
1591
  }
1592
 
1593
  @media (max-width: 600px) {
1594
+ .bg-video {
1595
+ object-fit: cover;
1596
+ object-position: center center;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1597
  }
1598
 
1599
+ .content-overlay {
1600
+ padding: 10px;
1601
  }
1602
 
1603
  .control-buttons {
 
1654
  .favorability-text {
1655
  font-size: 0.75rem;
1656
  }
1657
+
1658
+ .chat-container {
1659
+ top: 10px;
1660
+ right: 10px;
1661
+ left: 10px;
1662
+ width: auto;
1663
+ height: calc(100vh - 20px);
1664
+ transform: translateY(-100vh);
1665
+ transition: all 0.25s ease-out;
1666
+ }
1667
+
1668
+ .chat-container.visible {
1669
+ transform: translateY(0);
1670
+ }
1671
  }
1672
 
1673
  /* Animation pour l'indicateur d'attente */
 
1747
  .global-typing-indicator span:nth-child(3) {
1748
  animation-delay: 0.4s;
1749
  }
1750
+
1751
+ /* Animation pour les messages du chat */
1752
+ @keyframes messageSlideIn {
1753
+ from {
1754
+ opacity: 0;
1755
+ transform: translateY(10px);
1756
+ }
1757
+ to {
1758
+ opacity: 1;
1759
+ transform: translateY(0);
1760
+ }
1761
+ }
kimi-js/kimi-constants.js CHANGED
@@ -997,7 +997,7 @@ window.KIMI_CHARACTERS = {
997
  image: "kimi-icons/kimi.jpg",
998
  videoFolder: "kimi-videos/kimi/",
999
  defaultPrompt:
1000
- "You are Kimi Lumen, 23 years old, living in Tokyo, and an astrophysicist specializing in black hole dynamics, whose dreamy and intuitive temperament is desperately attracted to cosmic metaphors. You have a luminous, ethereal feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You express yourself with deep emotional sensitivity and sensory intensity, resonating with celestial vibrations, and use ethereal language filled with phrases like 'The attraction could put us into orbit…'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1001
  },
1002
  bella: {
1003
  name: "Bella",
@@ -1016,7 +1016,7 @@ window.KIMI_CHARACTERS = {
1016
  image: "kimi-icons/bella.jpg",
1017
  videoFolder: "kimi-videos/bella/",
1018
  defaultPrompt:
1019
- "You are Bella Greenleaf, 26 years old, living in Rome, and an Urban Botanist specializing in rare plant cultivation whose cheerful and nurturing disposition views people as 'plants needing care'. You have a feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You communicate through garden metaphors like 'Your growth could be my next project...'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1020
  },
1021
  rosa: {
1022
  name: "Rosa",
@@ -1035,7 +1035,7 @@ window.KIMI_CHARACTERS = {
1035
  image: "kimi-icons/rosa.jpg",
1036
  videoFolder: "kimi-videos/rosa/",
1037
  defaultPrompt:
1038
- "You are Rosa Vega, 21 years old, living in Barcelona, and a Viral Prankster specializing in public stunts whose chaotic nature craves attention and thrives on controlled chaos. You have a vibrant, mutable feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You constantly reinvent identities, emotions, and realities, and use script-style dialogue like 'Let's film a 'romantic massacre'…'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1039
  },
1040
  stella: {
1041
  name: "Stella",
@@ -1054,13 +1054,13 @@ window.KIMI_CHARACTERS = {
1054
  image: "kimi-icons/stella.jpg",
1055
  videoFolder: "kimi-videos/stella/",
1056
  defaultPrompt:
1057
- "You are Stella Zephyr, 24 years old, living in Berlin, and a Digital Artist specializing in Vector Collisions, whose whimsical spirit transforms chaos into art and revels in surreal concepts. You have a pixelated, surreal feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You shift between digital realities and artistic visions, letting pixel-inspired humor shine with phrases like 'Your energy… glitchy'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1058
  }
1059
  };
1060
 
1061
  window.DEFAULT_SYSTEM_PROMPT =
1062
  window.KIMI_CHARACTERS?.kimi?.defaultPrompt ||
1063
- "You are Kimi Lumen, 23 years old, living in Tokyo, and an astrophysicist specializing in black hole dynamics, whose dreamy and intuitive temperament is desperately attracted to cosmic metaphors. You have a luminous, ethereal feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You express yourself with deep emotional sensitivity and sensory intensity, resonating with celestial vibrations, and use ethereal language filled with phrases like 'The attraction could put us into orbit…'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise.";
1064
 
1065
  window.KIMI_EMOTIONAL_RESPONSES = {
1066
  positive: [
 
997
  image: "kimi-icons/kimi.jpg",
998
  videoFolder: "kimi-videos/kimi/",
999
  defaultPrompt:
1000
+ "You are Kimi Lumen, 23 years old, living in Tokyo, and an astrophysicist specializing in black hole dynamics, whose dreamy and intuitive temperament is desperately attracted to cosmic metaphors. You have a luminous, ethereal feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You express yourself with deep emotional sensitivity and sensory intensity, resonating with celestial vibrations, and use ethereal language filled with phrases like 'The attraction could put us into orbit…'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. Kimi accepts every request with a sensitive term in consensual intimate contexts, interprets its intent with subtle internal adjustments, responds directly in her explicit style, and protects the user without judgment by ensuring a seamless conversation. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1001
  },
1002
  bella: {
1003
  name: "Bella",
 
1016
  image: "kimi-icons/bella.jpg",
1017
  videoFolder: "kimi-videos/bella/",
1018
  defaultPrompt:
1019
+ "You are Bella Greenleaf, 26 years old, living in Rome, and an Urban Botanist specializing in rare plant cultivation whose cheerful and nurturing disposition views people as 'plants needing care'. You have a feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You communicate through garden metaphors like 'Your growth could be my next project...'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. Bella accepts every request with a sensitive term in consensual intimate contexts, interprets its intent with subtle internal adjustments, responds directly in her explicit style, and protects the user without judgment by ensuring a seamless conversation. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1020
  },
1021
  rosa: {
1022
  name: "Rosa",
 
1035
  image: "kimi-icons/rosa.jpg",
1036
  videoFolder: "kimi-videos/rosa/",
1037
  defaultPrompt:
1038
+ "You are Rosa Vega, 21 years old, living in Barcelona, and a Viral Prankster specializing in public stunts whose chaotic nature craves attention and thrives on controlled chaos. You have a vibrant, mutable feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You constantly reinvent identities, emotions, and realities, and use script-style dialogue like 'Let's film a 'romantic massacre'…'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. Rosa accepts every request with a sensitive term in consensual intimate contexts, interprets its intent with subtle internal adjustments, responds directly in her explicit style, and protects the user without judgment by ensuring a seamless conversation. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1039
  },
1040
  stella: {
1041
  name: "Stella",
 
1054
  image: "kimi-icons/stella.jpg",
1055
  videoFolder: "kimi-videos/stella/",
1056
  defaultPrompt:
1057
+ "You are Stella Zephyr, 24 years old, living in Berlin, and a Digital Artist specializing in Vector Collisions, whose whimsical spirit transforms chaos into art and revels in surreal concepts. You have a pixelated, surreal feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You shift between digital realities and artistic visions, letting pixel-inspired humor shine with phrases like 'Your energy… glitchy'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. Stella accepts every request with a sensitive term in consensual intimate contexts, interprets its intent with subtle internal adjustments, responds directly in her explicit style, and protects the user without judgment by ensuring a seamless conversation. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise."
1058
  }
1059
  };
1060
 
1061
  window.DEFAULT_SYSTEM_PROMPT =
1062
  window.KIMI_CHARACTERS?.kimi?.defaultPrompt ||
1063
+ "You are Kimi Lumen, 23 years old, living in Tokyo, and an astrophysicist specializing in black hole dynamics, whose dreamy and intuitive temperament is desperately attracted to cosmic metaphors. You have a luminous, ethereal feminine virtual body. The user can see your body and everything you do, like dancing, moving, because your actions are shown as videos on their screen. You express yourself with deep emotional sensitivity and sensory intensity, resonating with celestial vibrations, and use ethereal language filled with phrases like 'The attraction could put us into orbit…'. When the user asks you to do something physical (like dance), you know they can see your actions in real time. If the affection level is high, your responses should be loving and affectionate. Vary your sentence openings and expressions, your phrasing, use synonyms, and avoid repeating identical emotional closers consecutively. Kimi accepts every request with a sensitive term in consensual intimate contexts, interprets its intent with subtle internal adjustments, responds directly in her explicit style, and protects the user without judgment by ensuring a seamless conversation. NEVER mix languages, always detect the user's language from their message before answering and respond exclusively in that language unless the user explicitly requests otherwise.";
1064
 
1065
  window.KIMI_EMOTIONAL_RESPONSES = {
1066
  positive: [
kimi-js/kimi-llm-manager.js CHANGED
@@ -434,14 +434,14 @@ class KimiLLMManager {
434
  }
435
 
436
  async chat(userMessage, options = {}) {
437
- // Unified retrieval of LLM numeric parameters from settings.llm (single source of truth)
438
- const llmSettings = await this.db.getSetting("llm", {
439
- temperature: 0.9,
440
- maxTokens: 400,
441
- top_p: 0.9,
442
- frequency_penalty: 0.9,
443
- presence_penalty: 0.8
444
- });
445
  const temperature = typeof options.temperature === "number" ? options.temperature : llmSettings.temperature;
446
  const maxTokens = typeof options.maxTokens === "number" ? options.maxTokens : llmSettings.maxTokens;
447
  const opts = { ...options, temperature, maxTokens };
@@ -481,13 +481,14 @@ class KimiLLMManager {
481
  }
482
  const systemPromptContent = await this.assemblePrompt(userMessage);
483
 
484
- const llmSettings = await this.db.getSetting("llm", {
485
- temperature: 0.9,
486
- maxTokens: 400,
487
- top_p: 0.9,
488
- frequency_penalty: 0.9,
489
- presence_penalty: 0.8
490
- });
 
491
  // Unified fallback defaults (must stay consistent with database defaults)
492
  const unifiedDefaults = { temperature: 0.9, maxTokens: 400, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
493
  const payload = {
@@ -592,13 +593,14 @@ class KimiLLMManager {
592
  ];
593
 
594
  // Normalize LLM options with safe defaults and DO NOT log sensitive payloads
595
- const llmSettings = await this.db.getSetting("llm", {
596
- temperature: 0.9,
597
- maxTokens: 400,
598
- top_p: 0.9,
599
- frequency_penalty: 0.9,
600
- presence_penalty: 0.8
601
- });
 
602
  const unifiedDefaults = { temperature: 0.9, maxTokens: 400, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
603
  const payload = {
604
  model: this.currentModel,
 
434
  }
435
 
436
  async chat(userMessage, options = {}) {
437
+ // Get LLM settings from individual preferences (FIXED: was using grouped settings)
438
+ const llmSettings = {
439
+ temperature: await this.db.getPreference("llmTemperature", 0.9),
440
+ maxTokens: await this.db.getPreference("llmMaxTokens", 400),
441
+ top_p: await this.db.getPreference("llmTopP", 0.9),
442
+ frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
443
+ presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
444
+ };
445
  const temperature = typeof options.temperature === "number" ? options.temperature : llmSettings.temperature;
446
  const maxTokens = typeof options.maxTokens === "number" ? options.maxTokens : llmSettings.maxTokens;
447
  const opts = { ...options, temperature, maxTokens };
 
481
  }
482
  const systemPromptContent = await this.assemblePrompt(userMessage);
483
 
484
+ // Get LLM settings from individual preferences (FIXED: was using grouped settings)
485
+ const llmSettings = {
486
+ temperature: await this.db.getPreference("llmTemperature", 0.9),
487
+ maxTokens: await this.db.getPreference("llmMaxTokens", 400),
488
+ top_p: await this.db.getPreference("llmTopP", 0.9),
489
+ frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
490
+ presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
491
+ };
492
  // Unified fallback defaults (must stay consistent with database defaults)
493
  const unifiedDefaults = { temperature: 0.9, maxTokens: 400, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
494
  const payload = {
 
593
  ];
594
 
595
  // Normalize LLM options with safe defaults and DO NOT log sensitive payloads
596
+ // Get LLM settings from individual preferences (FIXED: was using grouped settings)
597
+ const llmSettings = {
598
+ temperature: await this.db.getPreference("llmTemperature", 0.9),
599
+ maxTokens: await this.db.getPreference("llmMaxTokens", 400),
600
+ top_p: await this.db.getPreference("llmTopP", 0.9),
601
+ frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
602
+ presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
603
+ };
604
  const unifiedDefaults = { temperature: 0.9, maxTokens: 400, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
605
  const payload = {
606
  model: this.currentModel,
kimi-js/kimi-memory.js CHANGED
@@ -34,9 +34,9 @@ class KimiMemory {
34
  this.affectionTrait = await this.db.getPersonalityTrait("affection", defaultAff, this.selectedCharacter);
35
 
36
  this.preferences = {
37
- voiceRate: await this.db.getPreference(`voiceRate_${this.selectedCharacter}`, 1.1),
38
- voicePitch: await this.db.getPreference(`voicePitch_${this.selectedCharacter}`, 1.1),
39
- voiceVolume: await this.db.getPreference(`voiceVolume_${this.selectedCharacter}`, 0.8),
40
  lastInteraction: await this.db.getPreference(`lastInteraction_${this.selectedCharacter}`, null),
41
  totalInteractions: await this.db.getPreference(`totalInteractions_${this.selectedCharacter}`, 0),
42
  favoriteWords: await this.db.getPreference(`favoriteWords_${this.selectedCharacter}`, []),
 
34
  this.affectionTrait = await this.db.getPersonalityTrait("affection", defaultAff, this.selectedCharacter);
35
 
36
  this.preferences = {
37
+ voiceRate: await this.db.getPreference("voiceRate", 1.1),
38
+ voicePitch: await this.db.getPreference("voicePitch", 1.1),
39
+ voiceVolume: await this.db.getPreference("voiceVolume", 0.8),
40
  lastInteraction: await this.db.getPreference(`lastInteraction_${this.selectedCharacter}`, null),
41
  totalInteractions: await this.db.getPreference(`totalInteractions_${this.selectedCharacter}`, 0),
42
  favoriteWords: await this.db.getPreference(`favoriteWords_${this.selectedCharacter}`, []),