Ezmary commited on
Commit
ae193f8
·
verified ·
1 Parent(s): 75120d3

Update src/App.scss

Browse files
Files changed (1) hide show
  1. src/App.scss +332 -121
src/App.scss CHANGED
@@ -1,171 +1,382 @@
1
- :root {
2
- --text: white;
3
- --gray-200: #b4b8bb;
4
- --gray-300: #80868b;
5
- --gray-500: #5f6368;
6
- --gray-600: #444444;
7
- --gray-700: #202020;
8
- --gray-800: #171717;
9
- --gray-900: #111111;
10
- --gray-1000: #0a0a0a;
11
- --border-stroke: #444444;
12
- --accent-blue: rgb(161, 228, 242);
13
- --accent-blue-active-bg: #001233;
14
- --accent-blue-active: #98beff;
15
- --accent-blue-headers: #448dff;
16
- --accent-green: rgb(168, 218, 181);
17
-
18
- --midnight-blue: rgb(0, 18, 51);
19
- --blue-30: #99beff;
20
-
21
- --accent-red: #ff4600;
22
-
23
- --background: var(--gray-900);
24
- --color: var(--text);
25
 
26
- scrollbar-color: var(--gray-600) var(--gray-900);
27
- scrollbar-width: thin;
28
-
29
- --font-family: "Space Mono", monospace;
30
-
31
- /* */
32
- --Neutral-00: #000;
33
- --Neutral-5: #181a1b;
34
- --Neutral-10: #1c1f21;
35
- --Neutral-15: #232729;
36
- --Neutral-20: #2a2f31;
37
- --Neutral-30: #404547;
38
- --Neutral-50: #707577;
39
- --Neutral-60: #888d8f;
40
- --Neutral-80: #c3c6c7;
41
- --Neutral-90: #e1e2e3;
42
 
43
- --Green-500: #0d9c53;
44
- --Green-700: #025022;
 
 
 
 
45
 
46
- --Blue-500: #1f94ff;
47
- --Blue-800: #0f3557;
 
 
 
48
 
49
- --Red-400: #ff9c7a;
50
- --Red-500: #ff4600;
51
- --Red-600: #e03c00;
52
- --Red-700: #bd3000;
 
 
 
 
 
 
 
 
 
53
  }
54
 
55
- body {
56
- font-family: "Space Mono", monospace;
57
- background: var(--Neutral-30);
 
 
 
 
 
 
 
 
 
58
  }
59
 
60
- .material-symbols-outlined {
61
- &.filled {
62
- font-variation-settings:
63
- "FILL" 1,
64
- "wght" 400,
65
- "GRAD" 0,
66
- "opsz" 24;
67
- }
 
 
 
 
 
68
  }
69
 
70
- .space-mono-regular {
71
- font-family: "Space Mono", monospace;
72
- font-weight: 400;
73
- font-style: normal;
74
  }
75
 
76
- .space-mono-bold {
77
- font-family: "Space Mono", monospace;
78
- font-weight: 700;
79
- font-style: normal;
 
 
 
 
80
  }
81
 
82
- .space-mono-regular-italic {
83
- font-family: "Space Mono", monospace;
84
- font-weight: 400;
85
- font-style: italic;
86
  }
87
 
88
- .space-mono-bold-italic {
89
- font-family: "Space Mono", monospace;
90
- font-weight: 700;
91
- font-style: italic;
 
 
 
 
 
 
 
92
  }
93
 
94
- .hidden {
95
- display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  }
97
 
98
- .flex {
99
- display: flex;
 
 
 
 
 
 
 
100
  }
101
 
102
- .h-screen-full {
103
- height: 100vh;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  }
105
 
106
- .w-screen-full {
107
- width: 100vw;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  }
 
 
 
 
109
 
110
- .flex-col {
111
- flex-direction: column;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  }
113
 
114
- @media (prefers-reduced-motion: no-preference) {}
115
 
116
- .streaming-console {
117
- background: var(--Neutral-5);
118
- color: var(--gray-300);
119
- display: flex;
120
- height: 100vh;
121
- width: 100vw;
 
 
 
 
 
 
 
 
122
 
123
- a,
124
- a:visited,
125
- a:active {
126
- color: var(--gray-300);
127
- }
128
 
129
- .disabled {
130
- pointer-events: none;
 
131
 
132
- >* {
133
- pointer-events: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  }
135
- }
136
 
137
- main {
138
- position: relative;
 
139
  display: flex;
140
  flex-direction: column;
141
  align-items: center;
142
  justify-content: center;
143
- flex-grow: 1;
144
- gap: 1rem;
145
- max-width: 100%;
146
- overflow: hidden;
147
- }
148
 
149
- .main-app-area {
 
150
  display: flex;
151
- flex: 1;
152
  align-items: center;
153
  justify-content: center;
154
- }
 
 
 
 
 
155
 
156
- .function-call {
157
  position: absolute;
158
  top: 0;
 
159
  width: 100%;
160
- height: 50%;
161
- overflow-y: auto;
162
- }
163
  }
164
 
165
- /* video player */
166
- .stream {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  flex-grow: 1;
168
- max-width: 90%;
169
- border-radius: 32px;
170
- max-height: fit-content;
171
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Import Tailwind base, components, and utilities */
2
+ /* @tailwind base; */
3
+ /* @tailwind components; */
4
+ /* @tailwind utilities; */
5
+ /*
6
+ اگر TailwindCSS را به صورت PostCSS plugin نصب کرده‌اید،
7
+ نیازی به ایمپورت مستقیم فایل‌های بالا نیست و فقط باید فایل اصلی CSS خود را ایمپورت کنید.
8
+ اگر از CDN استفاده می‌کنید، این بخش را نادیده بگیرید و مطمئن شوید CDN در public/index.html شما هست.
9
+ برای سادگی، فرض می‌کنیم Tailwind به درستی در پروژه تنظیم شده است.
10
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ /* CSS variables and base styles from your HTML */
13
+ :root {
14
+ --radius: 0.625rem; /* 10px */
15
+ --radius-md: 0.5rem; /* 8px */
16
+ --background: oklch(1 0 0);
17
+ --foreground: oklch(0.145 0 0);
18
+ --popover: oklch(1 0 0);
19
+ --popover-foreground: oklch(0.145 0 0);
20
+ --border: oklch(0.922 0 0);
21
+ /* Gemini variables (optional, if you want to theme them) */
22
+ --Neutral-5: var(--background);
23
+ --Neutral-30: var(--border);
24
+ --Blue-500: #3b82f6; /* Example blue */
25
+ --Red-500: #ef4444; /* Example red */
26
+ }
 
27
 
28
+ .dark {
29
+ --background: oklch(0.145 0 0);
30
+ --foreground: oklch(0.985 0 0);
31
+ --popover: oklch(0.205 0 0);
32
+ --popover-foreground: oklch(0.985 0 0);
33
+ --border: oklch(1 0 0 / 10%);
34
 
35
+ --Neutral-5: var(--background);
36
+ --Neutral-30: var(--border);
37
+ --Blue-500: #60a5fa; /* Lighter blue for dark mode */
38
+ --Red-500: #f87171; /* Lighter red for dark mode */
39
+ }
40
 
41
+ @layer base {
42
+ * {
43
+ /* @apply border-border outline-ring/50; */ /* Tailwind directive */
44
+ /* For non-Tailwind setup, define border-border if needed */
45
+ border-color: var(--border);
46
+ }
47
+ body {
48
+ /* @apply bg-background text-foreground; */ /* Tailwind directive */
49
+ background-color: var(--background);
50
+ color: var(--foreground);
51
+ overflow-x: hidden;
52
+ font-family: sans-serif; /* Add a default font */
53
+ }
54
  }
55
 
56
+ /* Notification Popover Wrapper & Content - Converted from Tailwind classes */
57
+ .notification-popover-wrapper {
58
+ position: fixed;
59
+ top: 1rem;
60
+ left: 50%;
61
+ transform: translateX(-50%);
62
+ z-index: 100;
63
+ width: calc(100% - 2rem);
64
+ max-width: 28rem;
65
+ display: flex;
66
+ justify-content: center;
67
+ pointer-events: none;
68
  }
69
 
70
+ .popover-content {
71
+ width: 100%;
72
+ border-radius: var(--radius-md, 0.5rem);
73
+ border-width: 1px;
74
+ border-color: var(--border);
75
+ background-color: var(--popover);
76
+ color: var(--popover-foreground);
77
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
78
+ outline: none;
79
+ transition: opacity 0.3s ease-out, transform 0.4s cubic-bezier(0.68, -0.55, 0.27, 1.55);
80
+ opacity: 0;
81
+ transform: translateY(-100%) scale(0.9);
82
+ pointer-events: none;
83
  }
84
 
85
+ .popover-content.open {
86
+ opacity: 1;
87
+ transform: translateY(0) scale(1);
88
+ pointer-events: auto;
89
  }
90
 
91
+ .notification-popover-text-content {
92
+ background-color: #eff6ff; /* bg-blue-50 */
93
+ font-size: 0.875rem;
94
+ line-height: 1.5rem;
95
+ direction: rtl;
96
+ padding: 1rem;
97
+ border-radius: var(--radius-md, 0.5rem);
98
+ color: oklch(0.145 0 0);
99
  }
100
 
101
+ .dark .notification-popover-text-content {
102
+ background-color: oklch(0.25 0.05 230);
103
+ color: oklch(0.95 0.01 230);
 
104
  }
105
 
106
+ /* Header controls - Converted from Tailwind classes */
107
+ .header-controls {
108
+ display: flex;
109
+ padding: 1rem;
110
+ justify-content: space-between;
111
+ align-items: center;
112
+ width: 100%;
113
+ position: absolute;
114
+ top: 0;
115
+ left: 0;
116
+ z-index: 10;
117
  }
118
 
119
+ .header-button {
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ padding: 0.5rem;
124
+ border-radius: var(--radius-lg, 0.625rem);
125
+ background-color: #e5e7eb; /* bg-gray-200 */
126
+ cursor: pointer;
127
+ transition: background-color 0.2s;
128
+ border: none; /* Reset button border */
129
+ }
130
+ .header-button:hover {
131
+ background-color: #d1d5db; /* bg-gray-300 */
132
+ }
133
+ .header-button svg {
134
+ opacity: 0.7;
135
+ stroke: #374151; /* gray-700 */
136
+ width: 24px;
137
+ height: 24px;
138
  }
139
 
140
+ .dark .header-button {
141
+ background-color: oklch(0.28 0 0);
142
+ }
143
+ .dark .header-button:hover {
144
+ background-color: oklch(0.35 0 0);
145
+ }
146
+ .dark .header-button svg {
147
+ opacity: 0.8;
148
+ stroke: oklch(0.85 0 0);
149
  }
150
 
151
+ /* Footer controls styles, to be used by ControlTray.tsx */
152
+ .footer-controls {
153
+ width: 100%;
154
+ display: flex;
155
+ gap: 1rem;
156
+ position: absolute;
157
+ bottom: 0;
158
+ padding: 2rem 3rem;
159
+ align-items: center;
160
+ box-sizing: border-box; /* Add box-sizing */
161
+ }
162
+ .footer-controls.layout-default {
163
+ justify-content: space-between;
164
+ }
165
+ .footer-controls.layout-with-small-logo {
166
+ justify-content: space-around;
167
  }
168
 
169
+ .control-button {
170
+ height: 80px;
171
+ width: 80px;
172
+ border-radius: 9999px;
173
+ padding: 0;
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ border-width: 1px;
178
+ border-color: var(--border);
179
+ box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06);
180
+ cursor: pointer;
181
+ transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
182
+ }
183
+ .control-button:hover {
184
+ transform: scale(1.05);
185
+ box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05);
186
  }
187
+ .cam-button-color { background-color: #E0ECFF; }
188
+ .mic-button-color { background-color: #fecdd3; }
189
+ .dark .cam-button-color { background-color: #223355; }
190
+ .dark .mic-button-color { background-color: #5C2129; }
191
 
192
+ /* Styles for the switch camera button (used in ControlTray.tsx) */
193
+ .switch-camera-button-container {
194
+ position: absolute;
195
+ bottom: calc(100% + 0.65rem);
196
+ left: 50%;
197
+ z-index: 5;
198
+ opacity: 0;
199
+ transform: translateY(15px) scale(0.7) translateX(-50%);
200
+ pointer-events: none;
201
+ transition: opacity 0.35s cubic-bezier(0.68, -0.55, 0.27, 1.55), transform 0.35s cubic-bezier(0.68, -0.55, 0.27, 1.55);
202
+ transform-origin: center bottom;
203
+ }
204
+ .switch-camera-button-container.visible {
205
+ opacity: 1;
206
+ transform: translateY(0) scale(1) translateX(-50%);
207
+ pointer-events: auto;
208
+ }
209
+ .switch-camera-button-content {
210
+ width: 48px;
211
+ height: 48px;
212
+ background-color: var(--background);
213
+ border: 1px solid var(--border);
214
+ border-radius: 9999px;
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ box-shadow: 0 5px 10px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08);
219
+ cursor: pointer;
220
+ transform-origin: center;
221
+ transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
222
+ }
223
+ .switch-camera-button-content:hover {
224
+ transform: scale(1.12) rotate(-6deg);
225
+ }
226
+ .switch-camera-button-content:active {
227
+ transform: scale(1.03) rotate(0deg);
228
+ }
229
+ .switch-camera-button-content svg {
230
+ width: 22px;
231
+ height: 22px;
232
+ stroke: var(--foreground);
233
+ transition: transform 0.3s ease-in-out;
234
+ }
235
+ .switch-camera-button-content:hover svg {
236
+ transform: rotate(360deg);
237
  }
238
 
 
239
 
240
+ /* Styles for the mic button pulse (from original control-tray.scss) */
241
+ @property --volume {
242
+ syntax: "<length>";
243
+ inherit: false;
244
+ initial-value: 0px;
245
+ }
246
+
247
+ .mic-button-wrapper .control-button { /* Target the control-button specifically for mic */
248
+ position: relative;
249
+ /* background-color: var(--Red-500); */ /* This is already set by .mic-button-color */
250
+ z-index: 1;
251
+ color: black; /* Or var(--foreground) if it fits better */
252
+ transition: all 0.2s ease-in;
253
+ }
254
 
255
+ .mic-button-wrapper .control-button:focus {
256
+ /* border: 2px solid var(--Neutral-20); Using var(--border) is better */
257
+ outline: 2px solid var(--Red-500); /* Keep red outline for mic */
258
+ }
 
259
 
260
+ /* .mic-button-wrapper .control-button:hover {
261
+ background-color: var(--Red-400); No, keep original hover from .control-button
262
+ } */
263
 
264
+ .mic-button-wrapper .control-button.active:before { /* only show pulse when active (mic on) */
265
+ position: absolute;
266
+ z-index: -1;
267
+ top: calc(var(--volume) * -1);
268
+ left: calc(var(--volume) * -1);
269
+ display: block;
270
+ content: "";
271
+ opacity: 0.35;
272
+ background-color: var(--Red-500);
273
+ width: calc(100% + var(--volume) * 2);
274
+ height: calc(100% + var(--volume) * 2);
275
+ border-radius: calc(var(--radius-md) + var(--volume)); /* Adjust radius with volume */
276
+ transition: all 0.02s ease-in-out;
277
+ }
278
+ .app-container {
279
+ width: 100%;
280
+ display: flex;
281
+ flex-direction: column;
282
+ align-items: center;
283
+ justify-content: center;
284
+ min-height: 90vh; /* md:min-h-screen */
285
+ }
286
+ @media (min-width: 768px) {
287
+ .app-container {
288
+ min-height: 100vh;
289
  }
290
+ }
291
 
292
+ .main-content-wrapper {
293
+ max-width: 48rem; /* max-w-3xl */
294
+ width: 100%;
295
  display: flex;
296
  flex-direction: column;
297
  align-items: center;
298
  justify-content: center;
299
+ height: 100%;
300
+ position: relative;
301
+ }
 
 
302
 
303
+ .media-toggle-area {
304
+ width: 100%;
305
  display: flex;
306
+ flex-direction: column;
307
  align-items: center;
308
  justify-content: center;
309
+ height: 90vh; /* or 100% of its container if nested differently */
310
+ background-color: var(--background);
311
+ top: 0;
312
+ left: 0;
313
+ position: relative; /* Or absolute if it's layered */
314
+ }
315
 
316
+ .video-feed {
317
  position: absolute;
318
  top: 0;
319
+ left: 0;
320
  width: 100%;
321
+ height: 100%;
322
+ object-fit: cover;
323
+ transform: scaleX(-1); /* Mirror effect */
324
  }
325
 
326
+ .large-logo-container, .small-logo-container {
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ }
331
+ .large-logo-container {
332
+ width: 100%;
333
+ height: 100%;
334
+ position: absolute;
335
+ top: 0;
336
+ left: 0;
337
+ }
338
+
339
+ /* Add class for body when modal is open to prevent scrolling */
340
+ .body-no-scroll {
341
+ overflow: hidden;
342
+ }
343
+
344
+ /* Gemini Original App class, if needed for Altair or SidePanel */
345
+ .App {
346
+ /* display: flex; // This might conflict with new layout */
347
+ /* flex-direction: column; // This might conflict */
348
+ height: 100vh;
349
+ width: 100vw;
350
+ overflow: hidden; /* Prevent main app scroll if not desired */
351
+ background-color: var(--background); /* Ensure background consistency */
352
+ }
353
+
354
+ .streaming-console {
355
+ display: flex;
356
  flex-grow: 1;
357
+ overflow: hidden; /* If SidePanel or Altair have their own scroll */
 
 
358
  }
359
+
360
+ main {
361
+ flex-grow: 1;
362
+ display: flex;
363
+ flex-direction: column;
364
+ position: relative; /* For positioning Altair and video */
365
+ overflow: hidden;
366
+ }
367
+
368
+ .main-app-area {
369
+ flex-grow: 1;
370
+ position: relative;
371
+ }
372
+
373
+ /* Ensure Altair is visible if used */
374
+ /* .altair-chat {
375
+ position: absolute;
376
+ top: 0;
377
+ left: 0;
378
+ width: 100%;
379
+ height: 100%;
380
+ z-index: 5; // Example, adjust as needed
381
+ background: rgba(255,255,255,0.8); // Example for visibility
382
+ } */