OppaAI commited on
Commit
cadeccd
Β·
1 Parent(s): cf5c8bc

Finally fix rolling issue

Browse files
Files changed (1) hide show
  1. ui/css.py +71 -109
ui/css.py CHANGED
@@ -8,50 +8,44 @@ AIKO_CSS = r"""
8
  --aiko-user: #9be8ff;
9
  --aiko-bot: #d8c8ff;
10
  }
 
11
  html, body, .gradio-container, main, footer {
12
  background: radial-gradient(circle at top, #1b1432 0, var(--aiko-bg) 44%, #050509 100%) !important;
13
  color: var(--aiko-text) !important;
14
  margin: 0 !important;
15
  padding: 0 !important;
16
  }
17
- /* Lock Gradio to viewport */
 
18
  html,
19
  body,
20
  .gradio-container,
21
- main {
22
- height: 100vh !important;
23
- max-height: 100vh !important;
24
- overflow: hidden !important;
25
- }
26
- .gradio-container *, .gradio-container .prose, .gradio-container label {
27
- color: var(--aiko-text);
28
- }
29
-
30
- /* NEW BLOCK */
31
  .gradio-container > .flex-1,
32
- body > .gradio-container {
 
33
  height: 100vh !important;
34
  max-height: 100vh !important;
 
35
  overflow: hidden !important;
36
- }
37
- html, body {
38
- height: 100% !important;
39
- overflow: hidden !important;
40
- }
41
- .gradio-container {
42
- min-height: 100vh !important;
43
  transform: none !important;
44
  }
45
 
46
- #aiko-shell {
47
- max-width: 1180px;
48
- margin: 0 auto;
49
- padding: 0 12px 12px;
50
 
51
- height: 100vh;
52
- max-height: 100vh;
 
 
 
 
 
 
 
53
 
54
- overflow: hidden;
 
55
  }
56
 
57
  /* ── Title header ──────────────────────────────────────────────────── */
@@ -66,7 +60,7 @@ html, body {
66
  text-align: left;
67
  }
68
 
69
- /* Avatar card is the relative anchor for all overlays */
70
  #aiko-avatar-card,
71
  #aiko-avatar-card .html-container,
72
  #aiko-avatar-card .prose {
@@ -74,6 +68,7 @@ html, body {
74
  max-height: calc(100vh - 70px) !important;
75
  overflow: hidden !important;
76
  }
 
77
  #aiko-vrm-frame {
78
  display: block;
79
  width: 100%;
@@ -83,12 +78,19 @@ html, body {
83
  background: #080810;
84
  }
85
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
- /* ── Audio: completely removed from layout flow ─────────────────────
88
- Gradio wraps gr.Audio in multiple divs; we must collapse ALL of them.
89
- The selector chain hits: the component block > the wrap > inner audio.
90
- Using !important on every dimension + overflow property to prevent
91
- any Gradio update from re-expanding it. */
92
  #aiko-audio,
93
  #aiko-audio > *,
94
  div:has(> #aiko-audio),
@@ -109,18 +111,7 @@ div:has(> div > #aiko-audio) {
109
  visibility: hidden !important;
110
  }
111
 
112
- #aiko-tts-text,
113
- #aiko-tts-text.block,
114
- div:has(> #aiko-tts-text),
115
- div:has(> div > #aiko-tts-text) {
116
- display: none !important;
117
- height: 0 !important;
118
- min-height: 0 !important;
119
- margin: 0 !important;
120
- padding: 0 !important;
121
- }
122
-
123
- /* ── Emotion label (top-left of avatar card) ──────────────────────── */
124
  #aiko-emotion-label {
125
  position: absolute;
126
  top: 10px;
@@ -136,15 +127,13 @@ div:has(> div > #aiko-tts-text) {
136
  transition: opacity 0.4s ease;
137
  }
138
 
139
- /* Hide any duplicate emotion-label nodes that Gradio's hydration may
140
- inject outside the avatar card (keep only the one inside #aiko-avatar-card) */
141
  #aiko-emotion-label ~ #aiko-emotion-label,
142
  body > #aiko-emotion-label,
143
  .gradio-container > #aiko-emotion-label {
144
  display: none !important;
145
  }
146
 
147
- /* ── Hide Gradio message action buttons (copy/like/dislike/edit) ── */
148
  #aiko-chatbot .message-buttons,
149
  #aiko-chatbot .icon-button,
150
  #aiko-chatbot [data-testid="like"],
@@ -160,7 +149,7 @@ body > #aiko-emotion-label,
160
  display: none !important;
161
  }
162
 
163
- /* ── Chat overlay: right side, borderless ─────────────────────────── */
164
  #aiko-chat-overlay {
165
  position: absolute;
166
  top: 16px;
@@ -176,13 +165,12 @@ body > #aiko-emotion-label,
176
  overflow: hidden;
177
  }
178
 
179
- /* Chatbot itself */
180
  #aiko-chatbot,
181
  #aiko-chatbot * {
182
  pointer-events: auto !important;
183
  }
184
 
185
- /* Kill every background/border Gradio injects on chatbot */
186
  #aiko-chatbot,
187
  #aiko-chatbot > div,
188
  #aiko-chatbot > div > div,
@@ -210,7 +198,6 @@ body > #aiko-emotion-label,
210
  box-shadow: none !important;
211
  }
212
 
213
- /* Kill outer Gradio block wrapper */
214
  #aiko-chatbot.block,
215
  #aiko-chatbot .block,
216
  div:has(> #aiko-chatbot) {
@@ -221,7 +208,6 @@ div:has(> #aiko-chatbot) {
221
  padding: 0 !important;
222
  }
223
 
224
- /* Scrollable chatbot with subtle scrollbar */
225
  #aiko-chatbot {
226
  overflow-y: auto !important;
227
  scrollbar-width: thin;
@@ -230,18 +216,13 @@ div:has(> #aiko-chatbot) {
230
  max-height: 100% !important;
231
  padding: 0 4px 0 0 !important;
232
  }
233
- #aiko-chatbot::-webkit-scrollbar {
234
- width: 4px;
235
- }
236
- #aiko-chatbot::-webkit-scrollbar-track {
237
- background: transparent;
238
- }
239
  #aiko-chatbot::-webkit-scrollbar-thumb {
240
  background: rgba(182,140,255,0.35);
241
  border-radius: 4px;
242
  }
243
 
244
- /* Caption-style text β€” small, tight, NO extra paragraph spacing */
245
  #aiko-chatbot .message,
246
  #aiko-chatbot .bubble,
247
  #aiko-chatbot [data-testid="bot"],
@@ -254,20 +235,17 @@ div:has(> #aiko-chatbot) {
254
  max-width: 100% !important;
255
  }
256
 
257
- /* Kill paragraph margins inside messages */
258
  #aiko-chatbot p,
259
  #aiko-chatbot .md p {
260
  margin: 0 0 2px 0 !important;
261
  }
262
 
263
- /* Message row spacing */
264
  #aiko-chatbot .message-row,
265
  #aiko-chatbot [class*="message-row"] {
266
  margin-bottom: 2px !important;
267
  padding: 0 !important;
268
  }
269
 
270
- /* User = light cyan right-aligned; bot = light lavender */
271
  #aiko-chatbot [data-testid="user"],
272
  #aiko-chatbot [data-testid="user"] * {
273
  color: var(--aiko-user) !important;
@@ -278,7 +256,7 @@ div:has(> #aiko-chatbot) {
278
  color: var(--aiko-bot) !important;
279
  }
280
 
281
- /* ── Input row: pinned to bottom of avatar card ───────────────────── */
282
  #aiko-input-row {
283
  position: absolute;
284
  left: 16px;
@@ -291,29 +269,11 @@ div:has(> #aiko-chatbot) {
291
  flex-wrap: nowrap;
292
  }
293
 
294
- /* Make the textbox column shrink/grow */
295
  #aiko-msg {
296
  flex: 1 1 auto;
297
  min-width: 0;
298
  }
299
 
300
- #aiko-mic-btn,
301
- #aiko-mic-btn button,
302
- #aiko-send,
303
- #aiko-send button {
304
- width:48px !important;
305
- min-width:48px !important;
306
- height:48px !important;
307
- min-height:48px !important;
308
- padding:0 !important;
309
- border-radius:10px !important;
310
- display:flex !important;
311
- align-items:center !important;
312
- justify-content:center !important;
313
- flex-shrink:0;
314
- }
315
-
316
- /* Remove Gradio textbox wrapper */
317
  #aiko-msg,
318
  #aiko-msg > div,
319
  #aiko-msg .wrap,
@@ -325,7 +285,6 @@ div:has(> #aiko-chatbot) {
325
  padding: 0 !important;
326
  }
327
 
328
- /* Actual typing area */
329
  #aiko-msg textarea,
330
  #aiko-msg input {
331
  background: transparent !important;
@@ -338,7 +297,6 @@ div:has(> #aiko-chatbot) {
338
  }
339
  textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important; }
340
 
341
- /* Square send button */
342
  #aiko-send,
343
  #aiko-send button {
344
  background: linear-gradient(135deg, #7652d6, #bd7cff) !important;
@@ -356,7 +314,6 @@ textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important;
356
  flex-shrink: 0;
357
  }
358
 
359
- /* ── Mic button ────────────────────────────────────────────────────── */
360
  #aiko-mic-btn,
361
  #aiko-mic-btn button {
362
  background: rgba(118, 82, 214, 0.25) !important;
@@ -376,7 +333,6 @@ textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important;
376
  justify-content: center !important;
377
  }
378
 
379
- /* Hide the hidden recorder entirely from layout */
380
  #aiko-mic-audio { display: none !important; }
381
 
382
  #aiko-note { display: none; }
@@ -384,31 +340,25 @@ textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important;
384
  .hide { display: none !important; }
385
 
386
  /* ── Login overlay ─────────────────────────────────────────────────── */
387
- /* Lock Gradio's own wrapper from growing */
388
- .gradio-container {
389
- height: 100vh !important;
390
- max-height: 100vh !important;
391
- min-height: unset !important; /* ← kill this */
392
- overflow: hidden !important;
393
- transform: none !important;
394
- }
395
-
396
  #aiko-login-overlay {
397
- position: fixed !important;
398
- top: 0 !important;
399
- left: 0 !important;
400
- width: 100vw !important;
401
- height: 100vh !important;
402
- z-index: 9999 !important;
403
- display: flex !important;
404
- flex-direction: column;
405
- align-items: center;
406
- justify-content: center;
407
- background: /* your bg color */ #0d0d1a;
 
408
  }
 
409
  #aiko-login-overlay.hidden {
410
  display: none !important;
411
  }
 
412
  #aiko-login-overlay h1 {
413
  margin: 0;
414
  font-size: 1.6rem;
@@ -418,6 +368,7 @@ textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important;
418
  color: #ecdeff;
419
  text-shadow: 0 0 18px rgba(155, 124, 255, .55);
420
  }
 
421
  #aiko-login-overlay p {
422
  margin: 0;
423
  font-size: 0.78rem;
@@ -425,6 +376,18 @@ textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important;
425
  color: var(--aiko-muted);
426
  text-transform: uppercase;
427
  }
 
 
 
 
 
 
 
 
 
 
 
 
428
  #aiko-login-overlay button {
429
  background: linear-gradient(135deg, #7652d6, #bd7cff) !important;
430
  border: 0 !important;
@@ -434,9 +397,8 @@ textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important;
434
  font-size: 0.85rem !important;
435
  letter-spacing: .08em;
436
  box-shadow: 0 8px 30px rgba(155,124,255,0.35);
437
- }
438
-
439
- #aiko-shell.locked {
440
- display: none !important;
441
  }
442
  """
 
8
  --aiko-user: #9be8ff;
9
  --aiko-bot: #d8c8ff;
10
  }
11
+
12
  html, body, .gradio-container, main, footer {
13
  background: radial-gradient(circle at top, #1b1432 0, var(--aiko-bg) 44%, #050509 100%) !important;
14
  color: var(--aiko-text) !important;
15
  margin: 0 !important;
16
  padding: 0 !important;
17
  }
18
+
19
+ /* Lock everything to viewport β€” no min-height, no growth */
20
  html,
21
  body,
22
  .gradio-container,
 
 
 
 
 
 
 
 
 
 
23
  .gradio-container > .flex-1,
24
+ body > .gradio-container,
25
+ main {
26
  height: 100vh !important;
27
  max-height: 100vh !important;
28
+ min-height: unset !important;
29
  overflow: hidden !important;
 
 
 
 
 
 
 
30
  transform: none !important;
31
  }
32
 
33
+ .gradio-container *, .gradio-container .prose, .gradio-container label {
34
+ color: var(--aiko-text);
35
+ }
 
36
 
37
+ /* ── Shell ─────────────────────────────────────────────────────────── */
38
+ #aiko-shell {
39
+ max-width: 1180px;
40
+ margin: 0 auto;
41
+ padding: 0 12px 12px;
42
+ height: 100vh;
43
+ max-height: 100vh;
44
+ overflow: hidden;
45
+ }
46
 
47
+ #aiko-shell.locked {
48
+ display: none !important;
49
  }
50
 
51
  /* ── Title header ──────────────────────────────────────────────────── */
 
60
  text-align: left;
61
  }
62
 
63
+ /* ── Avatar card ───────────────────────────────────────────────────── */
64
  #aiko-avatar-card,
65
  #aiko-avatar-card .html-container,
66
  #aiko-avatar-card .prose {
 
68
  max-height: calc(100vh - 70px) !important;
69
  overflow: hidden !important;
70
  }
71
+
72
  #aiko-vrm-frame {
73
  display: block;
74
  width: 100%;
 
78
  background: #080810;
79
  }
80
 
81
+ /* ── TTS textbox: hidden from layout entirely ──────────────────────── */
82
+ #aiko-tts-text,
83
+ #aiko-tts-text.block,
84
+ div:has(> #aiko-tts-text),
85
+ div:has(> div > #aiko-tts-text) {
86
+ display: none !important;
87
+ height: 0 !important;
88
+ min-height: 0 !important;
89
+ margin: 0 !important;
90
+ padding: 0 !important;
91
+ }
92
 
93
+ /* ── Audio: collapsed from layout flow ─────────────────────────────── */
 
 
 
 
94
  #aiko-audio,
95
  #aiko-audio > *,
96
  div:has(> #aiko-audio),
 
111
  visibility: hidden !important;
112
  }
113
 
114
+ /* ── Emotion label ─────────────────────────────────────────────────── */
 
 
 
 
 
 
 
 
 
 
 
115
  #aiko-emotion-label {
116
  position: absolute;
117
  top: 10px;
 
127
  transition: opacity 0.4s ease;
128
  }
129
 
 
 
130
  #aiko-emotion-label ~ #aiko-emotion-label,
131
  body > #aiko-emotion-label,
132
  .gradio-container > #aiko-emotion-label {
133
  display: none !important;
134
  }
135
 
136
+ /* ── Hide Gradio chatbot action buttons ────────────────────────────── */
137
  #aiko-chatbot .message-buttons,
138
  #aiko-chatbot .icon-button,
139
  #aiko-chatbot [data-testid="like"],
 
149
  display: none !important;
150
  }
151
 
152
+ /* ── Chat overlay ──────────────────────────────────────────────────── */
153
  #aiko-chat-overlay {
154
  position: absolute;
155
  top: 16px;
 
165
  overflow: hidden;
166
  }
167
 
 
168
  #aiko-chatbot,
169
  #aiko-chatbot * {
170
  pointer-events: auto !important;
171
  }
172
 
173
+ /* Kill Gradio backgrounds/borders on chatbot */
174
  #aiko-chatbot,
175
  #aiko-chatbot > div,
176
  #aiko-chatbot > div > div,
 
198
  box-shadow: none !important;
199
  }
200
 
 
201
  #aiko-chatbot.block,
202
  #aiko-chatbot .block,
203
  div:has(> #aiko-chatbot) {
 
208
  padding: 0 !important;
209
  }
210
 
 
211
  #aiko-chatbot {
212
  overflow-y: auto !important;
213
  scrollbar-width: thin;
 
216
  max-height: 100% !important;
217
  padding: 0 4px 0 0 !important;
218
  }
219
+ #aiko-chatbot::-webkit-scrollbar { width: 4px; }
220
+ #aiko-chatbot::-webkit-scrollbar-track { background: transparent; }
 
 
 
 
221
  #aiko-chatbot::-webkit-scrollbar-thumb {
222
  background: rgba(182,140,255,0.35);
223
  border-radius: 4px;
224
  }
225
 
 
226
  #aiko-chatbot .message,
227
  #aiko-chatbot .bubble,
228
  #aiko-chatbot [data-testid="bot"],
 
235
  max-width: 100% !important;
236
  }
237
 
 
238
  #aiko-chatbot p,
239
  #aiko-chatbot .md p {
240
  margin: 0 0 2px 0 !important;
241
  }
242
 
 
243
  #aiko-chatbot .message-row,
244
  #aiko-chatbot [class*="message-row"] {
245
  margin-bottom: 2px !important;
246
  padding: 0 !important;
247
  }
248
 
 
249
  #aiko-chatbot [data-testid="user"],
250
  #aiko-chatbot [data-testid="user"] * {
251
  color: var(--aiko-user) !important;
 
256
  color: var(--aiko-bot) !important;
257
  }
258
 
259
+ /* ── Input row ─────────────────────────────────────────────────────── */
260
  #aiko-input-row {
261
  position: absolute;
262
  left: 16px;
 
269
  flex-wrap: nowrap;
270
  }
271
 
 
272
  #aiko-msg {
273
  flex: 1 1 auto;
274
  min-width: 0;
275
  }
276
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
277
  #aiko-msg,
278
  #aiko-msg > div,
279
  #aiko-msg .wrap,
 
285
  padding: 0 !important;
286
  }
287
 
 
288
  #aiko-msg textarea,
289
  #aiko-msg input {
290
  background: transparent !important;
 
297
  }
298
  textarea::placeholder, input::placeholder { color: var(--aiko-muted) !important; }
299
 
 
300
  #aiko-send,
301
  #aiko-send button {
302
  background: linear-gradient(135deg, #7652d6, #bd7cff) !important;
 
314
  flex-shrink: 0;
315
  }
316
 
 
317
  #aiko-mic-btn,
318
  #aiko-mic-btn button {
319
  background: rgba(118, 82, 214, 0.25) !important;
 
333
  justify-content: center !important;
334
  }
335
 
 
336
  #aiko-mic-audio { display: none !important; }
337
 
338
  #aiko-note { display: none; }
 
340
  .hide { display: none !important; }
341
 
342
  /* ── Login overlay ─────────────────────────────────────────────────── */
 
 
 
 
 
 
 
 
 
343
  #aiko-login-overlay {
344
+ position: fixed !important;
345
+ top: 0 !important;
346
+ left: 0 !important;
347
+ width: 100vw !important;
348
+ height: 100vh !important;
349
+ z-index: 9999 !important;
350
+ display: flex !important;
351
+ flex-direction: column;
352
+ align-items: center;
353
+ justify-content: center;
354
+ gap: 16px;
355
+ background: #0d0d1a;
356
  }
357
+
358
  #aiko-login-overlay.hidden {
359
  display: none !important;
360
  }
361
+
362
  #aiko-login-overlay h1 {
363
  margin: 0;
364
  font-size: 1.6rem;
 
368
  color: #ecdeff;
369
  text-shadow: 0 0 18px rgba(155, 124, 255, .55);
370
  }
371
+
372
  #aiko-login-overlay p {
373
  margin: 0;
374
  font-size: 0.78rem;
 
376
  color: var(--aiko-muted);
377
  text-transform: uppercase;
378
  }
379
+
380
+ /* Constrain the LoginButton and all its Gradio wrappers */
381
+ #aiko-login-overlay > div,
382
+ #aiko-login-overlay > div > div,
383
+ #aiko-login-overlay .block,
384
+ #aiko-login-overlay .wrap {
385
+ width: auto !important;
386
+ min-width: unset !important;
387
+ max-width: 280px !important;
388
+ flex-shrink: 0;
389
+ }
390
+
391
  #aiko-login-overlay button {
392
  background: linear-gradient(135deg, #7652d6, #bd7cff) !important;
393
  border: 0 !important;
 
397
  font-size: 0.85rem !important;
398
  letter-spacing: .08em;
399
  box-shadow: 0 8px 30px rgba(155,124,255,0.35);
400
+ width: auto !important;
401
+ min-width: unset !important;
402
+ cursor: pointer;
 
403
  }
404
  """