Ezmary commited on
Commit
ba3efb2
·
verified ·
1 Parent(s): 6eb6278

Update src/App.scss

Browse files
Files changed (1) hide show
  1. src/App.scss +184 -219
src/App.scss CHANGED
@@ -1,133 +1,44 @@
1
- /* App.scss or your main SCSS/CSS file */
2
-
3
- /* Tailwind base, components, utilities (ensure this is at the top) */
4
  /* @tailwind base; */
5
  /* @tailwind components; */
6
  /* @tailwind utilities; */
7
 
 
 
 
 
8
  :root {
9
  --radius: 0.625rem; /* 10px */
10
  --radius-md: 0.5rem; /* 8px */
11
- --background: oklch(1 0 0); /* White */
12
- --foreground: oklch(0.145 0 0); /* Dark Gray/Black */
13
  --popover: oklch(1 0 0);
14
  --popover-foreground: oklch(0.145 0 0);
15
- --border: oklch(0.922 0 0); /* Light Gray */
 
 
 
16
 
17
- --color-cam-button-bg: #E0ECFF; // Light Blue
18
- --color-mic-button-bg: #fecdd3; // Light Red
19
- --color-red-500: #ef4444; // For mic pulse
20
  }
21
 
22
  .dark {
23
- --background: oklch(0.145 0 0); /* Dark Gray/Black */
24
- --foreground: oklch(0.985 0 0); /* Off-White */
25
  --popover: oklch(0.205 0 0);
26
  --popover-foreground: oklch(0.985 0 0);
27
- --border: oklch(1 0 0 / 10%); /* Very Dark Transparent Gray */
28
-
29
- --color-cam-button-bg: #223355; // Dark Blue
30
- --color-mic-button-bg: #5C2129; // Dark Red
31
- --color-red-500: #f87171; // Lighter Red for dark mode pulse
32
- }
33
-
34
- body {
35
- background-color: var(--background);
36
- color: var(--foreground);
37
- /* @apply antialiased; (If using Tailwind's font smoothing) */
38
- font-family: sans-serif; /* Or your preferred font stack */
39
- overflow-x: hidden;
40
- }
41
-
42
- /* Base styles for control buttons if not fully handled by Tailwind */
43
- .control-button {
44
- /* Tailwind handles size, border-radius, flex, items-center, justify-center, p-0 */
45
- /* Tailwind handles shadow, hover:scale, hover:shadow, transition */
46
- border-width: 1px; /* Or manage with Tailwind like 'border' */
47
- border-color: var(--border);
48
- cursor: pointer;
49
  }
50
 
51
- .cam-button-color {
52
- background-color: var(--color-cam-button-bg);
 
53
  }
54
- .mic-button-color {
55
- background-color: var(--color-mic-button-bg);
56
- }
57
-
58
- /* Mic Pulse Animation */
59
- @property --volume {
60
- syntax: "<length>";
61
- inherit: false;
62
- initial-value: 0px;
63
- }
64
-
65
- .mic-button-wrapper .control-button.active:before {
66
- position: absolute;
67
- z-index: -1;
68
- top: calc(var(--volume) * -1);
69
- left: calc(var(--volume) * -1);
70
- display: block;
71
- content: "";
72
- opacity: 0.35;
73
- background-color: var(--color-red-500); /* Use CSS variable */
74
- width: calc(100% + var(--volume) * 2);
75
- height: calc(100% + var(--volume) * 2);
76
- /* Ensure border-radius matches the button's rounded-full */
77
- border-radius: 9999px; /* Or inherit if possible */
78
- transition: all 0.02s ease-in-out;
79
- }
80
-
81
-
82
- /* Styles for the switch camera button container and content (from your HTML's CSS) */
83
- /* These are crucial for the pop-up animation of the switch camera button */
84
- .switch-camera-button-container {
85
- /* Tailwind classes in JSX now handle most of this:
86
- absolute bottom-[calc(100%+0.65rem)] left-1/2 z-[5] transform -translate-x-1/2
87
- opacity-0 scale-75 pointer-events-none translate-y-[15px]
88
- transition-opacity duration-300 ease-[cubic-bezier(0.68,-0.55,0.27,1.55)]
89
- transform-origin-center-bottom
90
- */
91
- /* The .visible class logic is now inline in JSX based on state */
92
- }
93
- /* .switch-camera-button-container.visible {
94
- opacity: 1;
95
- transform: translateY(0) scale(1) translateX(-50%);
96
- pointer-events: auto;
97
- } */
98
-
99
- .switch-camera-button-content {
100
- /* Tailwind classes in JSX now handle most of this:
101
- w-12 h-12 bg-background dark:bg-neutral-800 border dark:border-neutral-700 border-neutral-300
102
- rounded-full flex items-center justify-center shadow-lg hover:scale-110 hover:rotate-[-6deg]
103
- active:scale-105 active:rotate-0 transition-transform transform-origin-center
104
- */
105
- cursor: pointer; /* Ensure cursor is pointer */
106
- }
107
- .switch-camera-button-content svg {
108
- width: 22px; /* Or use Tailwind w-5 h-5 or similar */
109
- height: 22px;
110
- stroke: var(--foreground); /* Ensure SVG picks up text color */
111
- transition: transform 0.3s ease-in-out;
112
- }
113
- .switch-camera-button-content:hover svg {
114
- /* @apply rotate-[360deg]; (If you want to use Tailwind transform) */
115
- transform: rotate(360deg); /* Or keep as is */
116
- }
117
-
118
- /* Footer controls base class (if needed beyond Tailwind) */
119
- .footer-controls {
120
- /* Most styling now via Tailwind in JSX */
121
- /* width: 100%; display: flex; gap: 1rem; position: absolute;
122
- bottom: 0; padding: 2rem 3rem; align-items: center; */
123
- }
124
- /* .footer-controls.layout-default { justify-content: space-between; } */
125
- /* .footer-controls.layout-with-small-logo { justify-content: space-around; } */
126
-
127
-
128
- /* Other styles from App.scss (notification, header, video feed, logos) should remain */
129
- /* ... (rest of your App.scss from previous correct version) ... */
130
 
 
131
  .notification-popover-wrapper {
132
  position: fixed;
133
  top: 1rem;
@@ -161,22 +72,21 @@ body {
161
  transform: translateY(0) scale(1);
162
  pointer-events: auto;
163
  }
164
-
165
  .notification-popover-text-content {
166
  background-color: #eff6ff; /* bg-blue-50 */
167
- font-size: 0.875rem;
168
- line-height: 1.5rem;
169
- direction: rtl;
170
  padding: 1rem;
171
  border-radius: var(--radius-md, 0.5rem);
172
- color: oklch(0.145 0 0);
173
  }
174
-
175
  .dark .notification-popover-text-content {
176
  background-color: oklch(0.25 0.05 230);
177
  color: oklch(0.95 0.01 230);
178
  }
179
 
 
 
180
  .header-controls {
181
  display: flex;
182
  padding: 1rem;
@@ -190,142 +100,197 @@ body {
190
  }
191
 
192
  .header-button {
193
- display: flex;
194
- align-items: center;
195
- justify-content: center;
196
- padding: 0.5rem;
197
- border-radius: var(--radius-lg, 0.625rem);
198
  background-color: #e5e7eb; /* bg-gray-200 */
199
  cursor: pointer;
200
  transition: background-color 0.2s;
201
- border: none;
202
  }
203
  .header-button:hover {
204
  background-color: #d1d5db; /* bg-gray-300 */
205
  }
206
- .header-button svg {
207
- opacity: 0.7;
208
- stroke: #374151; /* gray-700 */
209
- width: 24px;
210
- height: 24px;
211
- }
212
 
213
  .dark .header-button {
214
- background-color: oklch(0.28 0 0);
215
  }
216
  .dark .header-button:hover {
217
  background-color: oklch(0.35 0 0);
218
  }
219
- .dark .header-button svg {
220
- opacity: 0.8;
221
- stroke: oklch(0.85 0 0);
222
- }
223
 
224
- .app-container {
225
- width: 100%;
226
- display: flex;
227
- flex-direction: column;
228
- align-items: center;
229
- justify-content: center;
230
- min-height: 90vh;
 
 
231
  }
232
- @media (min-width: 768px) {
233
- .app-container {
234
- min-height: 100vh;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  }
236
  }
237
-
238
- .main-content-wrapper {
239
- max-width: 48rem;
240
- width: 100%;
241
- display: flex;
242
- flex-direction: column;
243
- align-items: center;
244
- justify-content: center;
245
- height: 100%;
246
- position: relative;
247
  }
248
 
249
- .media-toggle-area {
250
- width: 100%;
251
- display: flex;
252
- flex-direction: column;
253
- align-items: center;
254
- justify-content: center;
255
- height: 90vh;
256
- background-color: var(--background);
257
- top: 0;
258
- left: 0;
259
- position: relative;
260
- }
261
 
262
- .video-feed {
 
263
  position: absolute;
264
- top: 0;
265
- left: 0;
266
- width: 100%;
267
- height: 100%;
268
- object-fit: cover;
269
- transform: scaleX(-1);
 
 
270
  }
271
-
272
- .large-logo-container, .small-logo-container {
 
 
 
 
 
 
 
 
 
273
  display: flex;
274
  align-items: center;
275
  justify-content: center;
 
 
 
 
276
  }
277
- .large-logo-container {
278
- width: 100%;
279
- height: 100%;
280
- position: absolute;
281
- top: 0;
282
- left: 0;
283
  }
284
-
285
- .App {
286
- height: 100vh;
287
- width: 100vw;
288
- overflow: hidden;
289
- background-color: var(--background);
290
  }
291
-
292
- .streaming-console { /* May not be used if SidePanel is removed */
293
- display: flex;
294
- flex-grow: 1;
295
- overflow: hidden;
296
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
 
298
- main {
299
- flex-grow: 1;
300
- display: flex;
301
- flex-direction: column;
302
- position: relative;
303
- overflow: hidden; /* Important for positioning Altair on top */
304
- height: 100%; /* Ensure main takes full height for absolute positioning inside */
 
 
 
 
 
 
 
 
305
  }
306
 
307
- .main-app-area {
308
- flex-grow: 1;
309
- position: relative; /* For positioning Altair and video feed */
310
- height: 100%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  }
312
 
313
- /* Example: Ensure Altair (chat bubbles) are visible and on top */
314
- /* You'll need to inspect Altair's generated classes or wrap it */
315
- div[class*="altair-chat-container"], /* Example selector, adjust as needed */
316
- .altair-chat {
317
- position: absolute;
318
- top: 60px; /* Adjust to be below your header */
319
- bottom: 120px; /* Adjust to be above your footer controls */
320
- left: 10px;
321
- right: 10px;
322
- z-index: 20; /* Ensure it's above video feed, but below popovers/modals */
323
- overflow-y: auto; /* Allow scrolling for chat messages */
324
- pointer-events: auto; /* Allow interaction with chat */
325
- /* background: rgba(255,255,255,0.1); // For testing visibility */
326
  }
327
 
328
- .dark div[class*="altair-chat-container"],
329
- .dark .altair-chat {
330
- /* background: rgba(0,0,0,0.1); // For testing visibility in dark mode */
 
 
 
 
 
 
331
  }
 
1
+ /* Import or define Tailwind base, components, utilities if not using CDN, or if extending */
 
 
2
  /* @tailwind base; */
3
  /* @tailwind components; */
4
  /* @tailwind utilities; */
5
 
6
+
7
+ /* CSS variables and base styles from your new HTML's <style> tag */
8
+ @custom-variant dark (&:is(.dark *)); /* If using PostCSS with custom variants */
9
+
10
  :root {
11
  --radius: 0.625rem; /* 10px */
12
  --radius-md: 0.5rem; /* 8px */
13
+ --background: oklch(1 0 0);
14
+ --foreground: oklch(0.145 0 0);
15
  --popover: oklch(1 0 0);
16
  --popover-foreground: oklch(0.145 0 0);
17
+ --border: oklch(0.922 0 0);
18
+ /* Add other variables from your HTML if they are defined in :root */
19
+ --accent-red: #fecdd3; /* Example mic button color */
20
+ --Blue-500: #3b82f6; /* Example connect button color */
21
 
22
+ /* For mic pulse from original control-tray.scss */
23
+ --volume: 0px;
 
24
  }
25
 
26
  .dark {
27
+ --background: oklch(0.145 0 0);
28
+ --foreground: oklch(0.985 0 0);
29
  --popover: oklch(0.205 0 0);
30
  --popover-foreground: oklch(0.985 0 0);
31
+ --border: oklch(1 0 0 / 10%);
32
+ --accent-red: #5C2129;
33
+ --Blue-500: #1e40af;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
36
+ @layer base {
37
+ * { @apply border-border outline-ring/50; } /* Requires Tailwind */
38
+ body { @apply bg-background text-foreground; overflow-x: hidden; } /* Requires Tailwind */
39
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
+ /* Notification Popover Wrapper & Content */
42
  .notification-popover-wrapper {
43
  position: fixed;
44
  top: 1rem;
 
72
  transform: translateY(0) scale(1);
73
  pointer-events: auto;
74
  }
75
+ /* Text content within the popover */
76
  .notification-popover-text-content {
77
  background-color: #eff6ff; /* bg-blue-50 */
78
+ font-size: 0.875rem; line-height: 1.5rem; direction: rtl;
 
 
79
  padding: 1rem;
80
  border-radius: var(--radius-md, 0.5rem);
81
+ color: oklch(0.145 0 0);
82
  }
 
83
  .dark .notification-popover-text-content {
84
  background-color: oklch(0.25 0.05 230);
85
  color: oklch(0.95 0.01 230);
86
  }
87
 
88
+
89
+ /* Header controls */
90
  .header-controls {
91
  display: flex;
92
  padding: 1rem;
 
100
  }
101
 
102
  .header-button {
103
+ display: flex; align-items: center; justify-content: center;
104
+ padding: 0.5rem; border-radius: var(--radius-lg, 0.625rem);
 
 
 
105
  background-color: #e5e7eb; /* bg-gray-200 */
106
  cursor: pointer;
107
  transition: background-color 0.2s;
 
108
  }
109
  .header-button:hover {
110
  background-color: #d1d5db; /* bg-gray-300 */
111
  }
112
+ .header-button svg { opacity: 0.7; stroke: #374151 /* gray-700 */; }
 
 
 
 
 
113
 
114
  .dark .header-button {
115
+ background-color: oklch(0.28 0 0);
116
  }
117
  .dark .header-button:hover {
118
  background-color: oklch(0.35 0 0);
119
  }
120
+ .dark .header-button svg { opacity: 0.8; stroke: oklch(0.85 0 0); }
 
 
 
121
 
122
+
123
+ @keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } }
124
+ .animate-ping { animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; }
125
+
126
+
127
+ .footer-controls {
128
+ width: 100%; display: flex; gap: 1rem; position: absolute;
129
+ bottom: 0; padding: 2rem 3rem; align-items: center;
130
+ z-index: 20; // Ensure they are above video but below modals
131
  }
132
+ .footer-controls.layout-default { justify-content: space-between; }
133
+ .footer-controls.layout-with-small-logo { justify-content: space-around; }
134
+
135
+ .control-button {
136
+ height: 80px; width: 80px; border-radius: 9999px;
137
+ padding: 0; display: flex; align-items: center; justify-content: center;
138
+ border-width: 1px;
139
+ border-color: var(--border);
140
+ box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06);
141
+ cursor: pointer;
142
+ transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
143
+ position: relative; // For pseudo-element pulse
144
+ z-index: 1; // For pulse
145
+ }
146
+ .control-button:hover {
147
+ transform: scale(1.05);
148
+ box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05);
149
+ }
150
+ .control-button:disabled {
151
+ opacity: 0.5;
152
+ cursor: not-allowed;
153
+ }
154
+ .cam-button-color { background-color: #E0ECFF; }
155
+ .mic-button-color { background-color: var(--accent-red); }
156
+ .dark .cam-button-color { background-color: #223355; }
157
+ .dark .mic-button-color { background-color: var(--accent-red); } // Using the variable directly
158
+
159
+
160
+ /* Mic pulse effect (adapted from original control-tray.scss) */
161
+ #mic-button { // Target by ID
162
+ &:before {
163
+ position: absolute;
164
+ z-index: -1;
165
+ top: calc(var(--volume) * -1);
166
+ left: calc(var(--volume) * -1);
167
+ display: block;
168
+ content: "";
169
+ opacity: 0.35;
170
+ background-color: var(--accent-red); /* Or a specific red like var(--Red-500) if defined */
171
+ .dark & {
172
+ background-color: var(--accent-red); /* Or a specific dark red */
173
+ }
174
+ width: calc(100% + var(--volume) * 2);
175
+ height: calc(100% + var(--volume) * 2);
176
+ border-radius: 9999px; // Match button's border-radius
177
+ transition: all 0.02s ease-in-out;
178
  }
179
  }
180
+ #mic-button:disabled:before, .mic-button.disabled:before { // If you add a disabled class
181
+ background: rgba(0, 0, 0, 0);
 
 
 
 
 
 
 
 
182
  }
183
 
 
 
 
 
 
 
 
 
 
 
 
 
184
 
185
+ /* Switch Camera Button Styles */
186
+ .switch-camera-button-container {
187
  position: absolute;
188
+ bottom: calc(100% + 0.65rem);
189
+ left: 50%;
190
+ z-index: 5;
191
+ opacity: 0;
192
+ transform: translateY(15px) scale(0.7) translateX(-50%);
193
+ pointer-events: none;
194
+ 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);
195
+ transform-origin: center bottom;
196
  }
197
+ .switch-camera-button-container.visible {
198
+ opacity: 1;
199
+ transform: translateY(0) scale(1) translateX(-50%);
200
+ pointer-events: auto;
201
+ }
202
+ .switch-camera-button-content {
203
+ width: 48px;
204
+ height: 48px;
205
+ background-color: var(--background);
206
+ border: 1px solid var(--border);
207
+ border-radius: 9999px;
208
  display: flex;
209
  align-items: center;
210
  justify-content: center;
211
+ box-shadow: 0 5px 10px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08);
212
+ cursor: pointer;
213
+ transform-origin: center;
214
+ transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
215
  }
216
+ .switch-camera-button-content:hover {
217
+ transform: scale(1.12) rotate(-6deg);
218
+ box-shadow: 0 7px 15px rgba(0,0,0,0.18), 0 3px 6px rgba(0,0,0,0.12);
 
 
 
219
  }
220
+ .switch-camera-button-content:active {
221
+ transform: scale(1.03) rotate(0deg);
 
 
 
 
222
  }
223
+ .switch-camera-button-content svg {
224
+ width: 22px;
225
+ height: 22px;
226
+ stroke: var(--foreground);
227
+ transition: transform 0.3s ease-in-out;
228
  }
229
+ .switch-camera-button-content:hover svg {
230
+ transform: rotate(360deg);
231
+ }
232
+ .switch-camera-button-content:disabled {
233
+ opacity: 0.5;
234
+ cursor: not-allowed;
235
+ &:hover { // Prevent hover effects on disabled
236
+ transform: none;
237
+ box-shadow: 0 5px 10px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08);
238
+ }
239
+ svg:hover {
240
+ transform: none;
241
+ }
242
+ }
243
+
244
 
245
+ /* Animations from Tailwind config */
246
+ @keyframes popover-drop-in {
247
+ '0%' { opacity: 0; transform: translateY(-100%) scale(0.9); }
248
+ '70%' { opacity: 1; transform: translateY(5px) scale(1.02); }
249
+ '100%' { opacity: 1; transform: translateY(0) scale(1); }
250
+ }
251
+ @keyframes popover-lift-out {
252
+ '0%' { opacity: 1; transform: translateY(0) scale(1); }
253
+ '100%' { opacity: 0; transform: translateY(-100%) scale(0.9); }
254
+ }
255
+ .animate-popover-open-top-center {
256
+ animation: popover-drop-in 0.4s cubic-bezier(0.68, -0.55, 0.27, 1.55) forwards;
257
+ }
258
+ .animate-popover-close-top-center {
259
+ animation: popover-lift-out 0.3s ease-in forwards;
260
  }
261
 
262
+ /* Altair chat window basic styling - adjust as needed */
263
+ .altair-chat-container { // You'd wrap <Altair /> in a div with this class
264
+ position: absolute;
265
+ top: 50%;
266
+ left: 50%;
267
+ transform: translate(-50%, -50%);
268
+ width: 90%;
269
+ max-width: 500px;
270
+ height: 70%;
271
+ max-height: 600px;
272
+ background-color: var(--background);
273
+ border: 1px solid var(--border);
274
+ border-radius: var(--radius-lg);
275
+ box-shadow: 0 10px 20px rgba(0,0,0,0.1);
276
+ z-index: 50; // Ensure it's above video but below modals/popovers
277
+ overflow: hidden; // Or auto if Altair itself doesn't scroll
278
+ display: flex; // If Altair component needs flex
279
+ flex-direction: column; // If Altair component needs flex
280
  }
281
 
282
+ body {
283
+ background-color: var(--background);
284
+ color: var(--foreground);
 
 
 
 
 
 
 
 
 
 
285
  }
286
 
287
+ /* Ensure material icons are available if you use them for connect/disconnect */
288
+ /* You might need to import them in your index.html or main CSS file */
289
+ /* e.g., <link href="https://fonts.googleapis.com/icon?family=Material+Symbols+Outlined" rel="stylesheet"> */
290
+ .material-symbols-outlined {
291
+ font-variation-settings:
292
+ 'FILL' 0, /* Change to 1 for filled icons if needed */
293
+ 'wght' 400,
294
+ 'GRAD' 0,
295
+ 'opsz' 24
296
  }