Ezmary commited on
Commit
6ef0e61
·
verified ·
1 Parent(s): 35ee466

Update src/App.scss

Browse files
Files changed (1) hide show
  1. src/App.scss +153 -170
src/App.scss CHANGED
@@ -1,12 +1,13 @@
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 */
@@ -15,12 +16,7 @@
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 {
@@ -29,16 +25,35 @@
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;
@@ -46,7 +61,7 @@
46
  transform: translateX(-50%);
47
  z-index: 100;
48
  width: calc(100% - 2rem);
49
- max-width: 28rem;
50
  display: flex;
51
  justify-content: center;
52
  pointer-events: none;
@@ -59,37 +74,38 @@
59
  border-color: var(--border);
60
  background-color: var(--popover);
61
  color: var(--popover-foreground);
62
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
63
  outline: none;
64
  transition: opacity 0.3s ease-out, transform 0.4s cubic-bezier(0.68, -0.55, 0.27, 1.55);
65
  opacity: 0;
66
  transform: translateY(-100%) scale(0.9);
67
  pointer-events: none;
68
- }
69
 
70
- .popover-content.open {
71
- opacity: 1;
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;
93
  justify-content: space-between;
94
  align-items: center;
95
  width: 100%;
@@ -100,89 +116,81 @@
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);
@@ -193,68 +201,60 @@
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
- /* CORRECTED KEYFRAMES */
247
  @keyframes popover-drop-in {
248
- 0% { opacity: 0; transform: translateY(-100%) scale(0.9); }
249
- 70% { opacity: 1; transform: translateY(5px) scale(1.02); }
250
- 100% { opacity: 1; transform: translateY(0) scale(1); }
251
  }
252
 
253
  @keyframes popover-lift-out {
254
- 0% { opacity: 1; transform: translateY(0) scale(1); }
255
- 100% { opacity: 0; transform: translateY(-100%) scale(0.9); }
256
  }
257
 
 
258
  .animate-popover-open-top-center {
259
  animation: popover-drop-in 0.4s cubic-bezier(0.68, -0.55, 0.27, 1.55) forwards;
260
  }
@@ -262,38 +262,21 @@
262
  animation: popover-lift-out 0.3s ease-in forwards;
263
  }
264
 
265
- /* Altair chat window basic styling - adjust as needed */
266
- .altair-chat-container { // You'd wrap <Altair /> in a div with this class
267
- position: absolute;
268
- top: 50%;
269
- left: 50%;
270
- transform: translate(-50%, -50%);
271
- width: 90%;
272
- max-width: 500px;
273
- height: 70%;
274
- max-height: 600px;
275
- background-color: var(--background);
276
- border: 1px solid var(--border);
277
- border-radius: var(--radius-lg);
278
- box-shadow: 0 10px 20px rgba(0,0,0,0.1);
279
- z-index: 50; // Ensure it's above video but below modals/popovers
280
- overflow: hidden; // Or auto if Altair itself doesn't scroll
281
- display: flex; // If Altair component needs flex
282
- flex-direction: column; // If Altair component needs flex
283
- }
284
-
285
- body {
286
- background-color: var(--background);
287
- color: var(--foreground);
288
- }
289
 
290
- /* Ensure material icons are available if you use them for connect/disconnect */
291
- /* You might need to import them in your index.html or main CSS file */
292
- /* e.g., <link href="https://fonts.googleapis.com/icon?family=Material+Symbols+Outlined" rel="stylesheet"> */
293
- .material-symbols-outlined {
294
- font-variation-settings:
295
- 'FILL' 0, /* Change to 1 for filled icons if needed */
296
- 'wght' 400,
297
- 'GRAD' 0,
298
- 'opsz' 24
299
- }
 
1
+ // src/App.scss
 
 
 
2
 
3
+ // 1. Import Tailwind's base, components, and utilities
4
+ // این خطوط فرض می‌کنند که Tailwind به عنوان یک وابستگی npm نصب شده است.
5
+ // اگر از CDN استفاده می‌کنید، این خطوط را حذف کنید و Tailwind از طریق CDN بارگذاری می‌شود.
6
+ @import 'tailwindcss/base';
7
+ @import 'tailwindcss/components';
8
+ @import 'tailwindcss/utilities';
9
 
10
+ // 2. Define CSS Variables
 
 
11
  :root {
12
  --radius: 0.625rem; /* 10px */
13
  --radius-md: 0.5rem; /* 8px */
 
16
  --popover: oklch(1 0 0);
17
  --popover-foreground: oklch(0.145 0 0);
18
  --border: oklch(0.922 0 0);
19
+ // --ring: oklch(0.6 0.15 260); // Example ring color if needed for outline-ring/50
 
 
 
 
 
20
  }
21
 
22
  .dark {
 
25
  --popover: oklch(0.205 0 0);
26
  --popover-foreground: oklch(0.985 0 0);
27
  --border: oklch(1 0 0 / 10%);
28
+ // --ring: oklch(0.7 0.1 250); // Example dark ring color
 
29
  }
30
 
31
+ // 3. Apply base styles using Tailwind's @layer directive
32
+ // اگر از @import های بالا استفاده نمی‌کنید (مثلاً با CDN)، این بخش @layer ممکن است کار نکند
33
+ // و باید استایل‌های body را به صورت CSS معمولی بنویسید.
34
  @layer base {
35
+ * {
36
+ // استفاده از متغیر --border برای رنگ بوردر
37
+ // ترجمه outline-ring/50 به CSS استاندارد بدون دانستن تعریف دقیق آن در Tailwind سخت است.
38
+ // می‌توانید یک outline ساده‌تر قرار دهید یا اگر در tailwind.config.js تعریف شده، @apply کار خواهد کرد.
39
+ border-color: var(--border);
40
+ outline-color: var(--foreground); // یک رنگ پیش‌فرض برای outline
41
+ }
42
+ body {
43
+ @apply bg-background text-foreground; // اگر Tailwind پردازش می‌کند
44
+ // اگر Tailwind پردازش نمی‌کند، معادل CSS آن را بنویسید:
45
+ // background-color: var(--background);
46
+ // color: var(--foreground);
47
+ overflow-x: hidden;
48
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; // فونت پیش‌فرض Tailwind
49
+ -webkit-font-smoothing: antialiased;
50
+ -moz-osx-font-smoothing: grayscale;
51
+ }
52
  }
53
 
54
+ // 4. Styles for components (previously in <style jsx global>)
55
+
56
+ /* Notification Popover */
57
  .notification-popover-wrapper {
58
  position: fixed;
59
  top: 1rem;
 
61
  transform: translateX(-50%);
62
  z-index: 100;
63
  width: calc(100% - 2rem);
64
+ max-width: 28rem; /* max-w-md */
65
  display: flex;
66
  justify-content: center;
67
  pointer-events: none;
 
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); // shadow-lg
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
+ &.open { // SCSS nesting for .popover-content.open
85
+ opacity: 1;
86
+ transform: translateY(0) scale(1);
87
+ pointer-events: auto;
88
+ }
89
  }
90
+
91
  .notification-popover-text-content {
92
  background-color: #eff6ff; /* bg-blue-50 */
93
+ font-size: 0.875rem; /* text-sm */
94
+ line-height: 1.5rem; /* leading-6 */
95
+ direction: rtl;
96
+ padding: 1rem; /* p-4 */
97
+ border-radius: var(--radius-md, 0.5rem); /* rounded-md */
98
+ color: oklch(0.145 0 0); // رنگ متن برای خوانایی روی پس‌زمینه آبی روشن
99
  }
100
  .dark .notification-popover-text-content {
101
+ background-color: oklch(0.25 0.05 230); /* رنگ آبی تیره‌تر برای حالت تاریک */
102
+ color: oklch(0.95 0.01 230); /* رنگ متن روشن‌تر برای حالت تاریک */
103
  }
104
 
 
105
  /* Header controls */
106
  .header-controls {
107
  display: flex;
108
+ padding: 1rem; /* p-4 */
109
  justify-content: space-between;
110
  align-items: center;
111
  width: 100%;
 
116
  }
117
 
118
  .header-button {
119
+ display: flex;
120
+ align-items: center;
121
+ justify-content: center;
122
+ padding: 0.5rem; /* p-2 */
123
+ border-radius: var(--radius-lg, 0.625rem); /* rounded-lg */
124
  background-color: #e5e7eb; /* bg-gray-200 */
125
  cursor: pointer;
126
  transition: background-color 0.2s;
127
+
128
+ &:hover {
129
+ background-color: #d1d5db; /* bg-gray-300 */
130
+ }
131
+
132
+ svg {
133
+ opacity: 0.7;
134
+ stroke: #374151; /* gray-700 */
135
+ }
136
  }
 
 
 
 
137
 
138
  .dark .header-button {
139
+ background-color: oklch(0.28 0 0); /* خاکستری تیره‌تر */
140
+ &:hover {
141
+ background-color: oklch(0.35 0 0);
142
+ }
143
+ svg {
144
+ opacity: 0.8;
145
+ stroke: oklch(0.85 0 0); /* رنگ روشن‌تر برای آیکون */
146
+ }
147
  }
 
 
 
 
 
 
148
 
149
+ /* Footer and Control Buttons */
150
  .footer-controls {
151
+ width: 100%;
152
+ display: flex;
153
+ gap: 1rem; /* gap-4 */
154
+ position: absolute;
155
+ bottom: 0;
156
+ padding: 2rem 3rem; /* p-8 pl-12 pr-12 (تقریبی) */
157
+ align-items: center;
158
+
159
+ &.layout-default {
160
+ justify-content: space-between;
161
+ }
162
+ &.layout-with-small-logo {
163
+ justify-content: space-around;
164
+ }
165
  }
 
 
166
 
167
  .control-button {
168
+ height: 80px;
169
+ width: 80px;
170
+ border-radius: 9999px; /* rounded-full */
171
+ padding: 0;
172
+ display: flex;
173
+ align-items: center;
174
+ justify-content: center;
175
  border-width: 1px;
176
  border-color: var(--border);
177
+ box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06); // shadow-md
178
  cursor: pointer;
179
  transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
 
181
+ &:hover {
182
+ transform: scale(1.05);
183
+ box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05); // shadow-lg
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  }
185
  }
 
 
 
186
 
187
+ .cam-button-color { background-color: #E0ECFF; }
188
+ .mic-button-color { background-color: #fecdd3; /* bg-rose-200 */ }
189
+
190
+ .dark .cam-button-color { background-color: #223355; /* آبی تیره‌تر */ }
191
+ .dark .mic-button-color { background-color: #5C2129; /* قرمز/رز تیره‌تر */ }
192
 
193
+ /* Switch Camera Button */
194
  .switch-camera-button-container {
195
  position: absolute;
196
  bottom: calc(100% + 0.65rem);
 
201
  pointer-events: none;
202
  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);
203
  transform-origin: center bottom;
204
+
205
+ &.visible {
206
+ opacity: 1;
207
+ transform: translateY(0) scale(1) translateX(-50%);
208
+ pointer-events: auto;
209
+ }
210
  }
211
+
 
 
 
 
212
  .switch-camera-button-content {
213
  width: 48px;
214
  height: 48px;
215
  background-color: var(--background);
216
  border: 1px solid var(--border);
217
+ border-radius: 9999px; /* rounded-full */
218
  display: flex;
219
  align-items: center;
220
  justify-content: center;
221
+ box-shadow: 0 5px 10px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08); /* سایه سفارشی */
222
  cursor: pointer;
223
  transform-origin: center;
224
  transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
225
+
226
+ &:hover {
227
+ transform: scale(1.12) rotate(-6deg);
228
+ box-shadow: 0 7px 15px rgba(0,0,0,0.18), 0 3px 6px rgba(0,0,0,0.12);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  }
230
+ &:active {
231
+ transform: scale(1.03) rotate(0deg);
232
  }
 
233
 
234
+ svg {
235
+ width: 22px;
236
+ height: 22px;
237
+ stroke: var(--foreground);
238
+ transition: transform 0.3s ease-in-out;
239
+ }
240
+ &:hover svg {
241
+ transform: rotate(360deg);
242
+ }
243
+ }
244
 
245
+ /* Keyframes for popover */
 
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)'; } /* Slight overshoot */
249
+ '100%': { opacity: '1'; transform: 'translateY(0) scale(1)'; }
250
  }
251
 
252
  @keyframes popover-lift-out {
253
+ '0%': { opacity: '1'; transform: 'translateY(0) scale(1)'; }
254
+ '100%': { opacity: '0'; transform: 'translateY(-100%) scale(0.9)'; }
255
  }
256
 
257
+ /* Classes that use these keyframes */
258
  .animate-popover-open-top-center {
259
  animation: popover-drop-in 0.4s cubic-bezier(0.68, -0.55, 0.27, 1.55) forwards;
260
  }
 
262
  animation: popover-lift-out 0.3s ease-in forwards;
263
  }
264
 
265
+ /*
266
+ Utility overrides (اینها هک هستند و بهتر است در صورت امکان از طریق تنظیمات Tailwind یا اعمال مستقیم کلاس‌ها انجام شوند)
267
+ اگر این کلاس‌ها در Tailwind شما تعریف نشده‌اند، این بخش را می‌توانید حذف کنید،
268
+ چون رنگ‌ها مستقیماً در استایل‌های بالا یا از طریق متغیرهای CSS اعمال شده‌اند.
269
+ */
270
+ // .bg-blue-200 { background-color: #bfdbfe !important; }
271
+ // .bg-blue-300 { background-color: #93c5fd !important; }
272
+ // .bg-blue-400 { background-color: #60a5fa !important; }
273
+ // .bg-green-200 { background-color: #bbf7d0 !important; }
274
+ // .bg-green-300 { background-color: #86efac !important; }
275
+ // .bg-green-400 { background-color: #4ade80 !important; }
 
 
 
 
 
 
 
 
 
 
 
 
 
276
 
277
+ // کلاس antialiased که در body تگ HTML بود، معادل Tailwind برای font-smoothing است.
278
+ // این مورد توسط @import 'tailwindcss/base'; یا استایل پیش‌فرض مرورگرها پوشش داده می‌شود.
279
+ // .antialiased {
280
+ // -webkit-font-smoothing: antialiased;
281
+ // -moz-osx-font-smoothing: grayscale;
282
+ // }