Ezmary commited on
Commit
2d9a144
·
verified ·
1 Parent(s): 1bfca6a

Update src/App.scss

Browse files
Files changed (1) hide show
  1. src/App.scss +89 -101
src/App.scss CHANGED
@@ -1,4 +1,3 @@
1
- // ... (بالای فایل App.scss بدون تغییر) ...
2
  // 1. Import Tailwind's base, components, and utilities
3
  @import 'tailwindcss/base';
4
  @import 'tailwindcss/components';
@@ -47,16 +46,28 @@
47
  }
48
 
49
  .main-wrapper {
50
- min-height: 100vh;
51
  display: flex;
52
  flex-direction: column;
53
  }
54
  .media-area {
55
- flex-grow: 1;
 
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- /* Notification Popover & Header controls ... (بدون تغییر از نسخه قبل) ... */
 
60
  .notification-popover-wrapper {
61
  position: fixed;
62
  top: 1rem;
@@ -69,7 +80,6 @@
69
  justify-content: center;
70
  pointer-events: none;
71
  }
72
-
73
  .popover-content {
74
  width: 100%;
75
  border-radius: var(--radius-md, 0.5rem);
@@ -83,14 +93,12 @@
83
  opacity: 0;
84
  transform: translateY(-100%) scale(0.9);
85
  pointer-events: none;
86
-
87
  &.open {
88
  opacity: 1;
89
  transform: translateY(0) scale(1);
90
  pointer-events: auto;
91
  }
92
  }
93
-
94
  .notification-popover-text-content {
95
  background-color: #eff6ff;
96
  font-size: 0.875rem;
@@ -104,10 +112,9 @@
104
  background-color: oklch(0.25 0.05 230);
105
  color: oklch(0.95 0.01 230);
106
  }
107
-
108
  .header-controls {
109
  display: flex;
110
- padding: 0.75rem 0.5rem;
111
  justify-content: space-between;
112
  align-items: center;
113
  width: 100%;
@@ -116,43 +123,38 @@
116
  left: 0;
117
  z-index: 10;
118
  }
119
-
120
  .header-button {
121
  display: flex;
122
  align-items: center;
123
  justify-content: center;
124
- padding: 0.5rem;
125
- width: 40px;
126
- height: 40px;
127
- border-radius: var(--radius-lg, 0.625rem);
128
- background-color: #e5e7eb;
129
  cursor: pointer;
130
- transition: background-color 0.2s, transform 0.1s ease-out;
131
-
132
  svg {
133
  opacity: 0.7;
134
- stroke: #374151;
135
- width: 24px;
136
  height: 24px;
137
  }
138
-
139
  &:hover {
140
- background-color: #d1d5db;
141
  }
142
-
143
  &:active {
144
- background-color: #9ca3af;
145
- transform: scale(0.95);
146
  }
147
  }
148
-
149
  .dark .header-button {
150
  background-color: oklch(0.28 0 0);
151
  &:hover {
152
  background-color: oklch(0.35 0 0);
153
  }
154
  &:active {
155
- background-color: oklch(0.40 0 0);
156
  transform: scale(0.95);
157
  }
158
  svg {
@@ -161,98 +163,105 @@
161
  }
162
  }
163
 
164
-
165
  .logo-animation-wrapper {
166
  position: relative;
167
  display: flex;
168
  align-items: center;
169
  justify-content: center;
170
- // svg inside the logo should fill its container
171
- & > div > svg {
172
  width: 100%;
173
  height: 100%;
174
  }
175
  }
 
 
 
 
176
 
177
  /* Footer styles to mimic HTML example */
178
  .footer-controls-html-like {
179
  width: 100%;
180
  display: flex;
181
- /* Default for HTML was space-between if no logo, space-around with logo.
182
- Let's try space-between and position logo absolutely for now. */
183
- justify-content: space-between; // Mic left, Cam right as per your HTML example
184
- align-items: center;
185
  position: absolute;
186
  bottom: 0;
187
- // Padding from your HTML example
188
- padding: 2rem 3rem; // 32px top/bottom, 48px left/right
189
  box-sizing: border-box;
190
- z-index: 20;
191
- }
192
 
193
- // Wrapper for the camera button and its switch button, to align with HTML
194
- .cam-wrapper-html-like {
195
- position: relative; // For absolute positioning of switch-camera-button
196
- display: flex;
197
- justify-content: center; // Center the button itself if wrapper is wider
198
  }
199
 
 
200
  .small-logo-footer-html-like {
201
- // This will be positioned between the two main buttons if footer uses space-around
202
- // If footer uses space-between, we might need to position it absolutely in the center
203
- // For now, let's assume it just takes its space if visible.
204
- // We need to ensure the parent .footer-controls-html-like can accommodate it.
205
- // To place it in the absolute center of the footer:
206
- position: absolute;
207
- left: 50%;
208
- top: 50%; // Relative to footer's padding box
209
- transform: translate(-50%, -50%);
210
- z-index: 1; // Behind buttons if they overlap
 
 
 
 
211
  }
212
 
213
 
 
 
 
 
 
 
 
214
  .control-button {
215
- height: 80px; // From your HTML
216
- width: 80px; // From your HTML
217
  border-radius: 9999px;
218
  padding: 0;
219
  display: flex;
220
  align-items: center;
221
  justify-content: center;
222
  border-width: 1px;
223
- border-color: var(--border); // Uses your theme's border color
224
  box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06);
225
  cursor: pointer;
226
  transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
227
  flex-shrink: 0;
228
- z-index: 2; // Ensure buttons are above the small logo
229
 
230
  &:hover {
231
  transform: scale(1.05);
232
  box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05);
233
  }
234
-
235
- // Ensure SVGs inside control buttons scale appropriately
236
  svg {
237
- // transform: scale(0.55); // If SVGs are too large by default
238
- // Or set explicit width/height if SVGs don't have inherent good sizes
239
- // width: 38px; height: 38px; // Example, adjust based on your SVGs
240
  }
241
  }
242
 
243
- // Mic button is on the left in HTML example
244
- .mic-button-color { background-color: #fecdd3; } // Reddish
245
- // Cam button is on the right in HTML example
246
- .cam-button-color { background-color: #E0ECFF; } // Blueish
247
 
248
  .dark .mic-button-color { background-color: #5C2129; }
249
  .dark .cam-button-color { background-color: #223355; }
250
 
251
 
252
- /* Switch Camera Button - positioning relative to its wrapper */
253
  .switch-camera-button-container {
254
  position: absolute;
255
- bottom: calc(100% + 0.65rem); // As in your HTML
256
  left: 50%;
257
  transform: translateX(-50%) translateY(15px) scale(0.7);
258
  z-index: 5;
@@ -260,17 +269,15 @@
260
  pointer-events: none;
261
  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);
262
  transform-origin: center bottom;
263
-
264
  &.visible {
265
  opacity: 1;
266
  transform: translateX(-50%) translateY(0) scale(1);
267
  pointer-events: auto;
268
  }
269
  }
270
-
271
  .switch-camera-button-content {
272
- width: 48px; // As in your HTML
273
- height: 48px; // As in your HTML
274
  background-color: var(--background);
275
  border: 1px solid var(--border);
276
  border-radius: 9999px;
@@ -281,53 +288,34 @@
281
  cursor: pointer;
282
  transform-origin: center;
283
  transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
284
-
285
  &:hover {
286
- transform: scale(1.12) rotate(-6deg); // As in your HTML
287
  box-shadow: 0 7px 15px rgba(0,0,0,0.18), 0 3px 6px rgba(0,0,0,0.12);
288
  }
289
  &:active {
290
- transform: scale(1.03) rotate(0deg); // As in your HTML
291
  }
292
-
293
  svg {
294
- width: 22px; // As in your HTML
295
- height: 22px; // As in your HTML
296
  stroke: var(--foreground);
297
  transition: transform 0.3s ease-in-out;
298
  }
299
  &:hover svg {
300
- transform: rotate(360deg); // As in your HTML
301
  }
302
  }
303
 
304
- /* Keyframes for popover ... (بدون تغییر) ... */
305
  @keyframes popover-drop-in {
306
- 0% {
307
- opacity: 0;
308
- transform: translateY(-100%) scale(0.9);
309
- }
310
- 70% {
311
- opacity: 1;
312
- transform: translateY(5px) scale(1.02);
313
- }
314
- 100% {
315
- opacity: 1;
316
- transform: translateY(0) scale(1);
317
- }
318
  }
319
-
320
  @keyframes popover-lift-out {
321
- 0% {
322
- opacity: 1;
323
- transform: translateY(0) scale(1);
324
- }
325
- 100% {
326
- opacity: 0;
327
- transform: translateY(-100%) scale(0.9);
328
- }
329
  }
330
-
331
  .animate-popover-open-top-center {
332
  animation: popover-drop-in 0.4s cubic-bezier(0.68, -0.55, 0.27, 1.55) forwards;
333
  }
 
 
1
  // 1. Import Tailwind's base, components, and utilities
2
  @import 'tailwindcss/base';
3
  @import 'tailwindcss/components';
 
46
  }
47
 
48
  .main-wrapper {
49
+ min-height: 100vh;
50
  display: flex;
51
  flex-direction: column;
52
  }
53
  .media-area {
54
+ flex-grow: 1;
55
+ position: relative; // برای large-logo-container
56
  }
57
 
58
+ #large-logo-container { // استایل از HTML مرجع شما
59
+ display: flex; // در App.tsx با flex items-center justify-center کنترل می شود
60
+ align-items: center;
61
+ justify-content: center;
62
+ width: 100%;
63
+ height: 100%;
64
+ position: absolute;
65
+ top: 0;
66
+ left: 0;
67
+ }
68
 
69
+
70
+ /* Notification Popover & Header controls (بدون تغییر از پاسخ قبلی) */
71
  .notification-popover-wrapper {
72
  position: fixed;
73
  top: 1rem;
 
80
  justify-content: center;
81
  pointer-events: none;
82
  }
 
83
  .popover-content {
84
  width: 100%;
85
  border-radius: var(--radius-md, 0.5rem);
 
93
  opacity: 0;
94
  transform: translateY(-100%) scale(0.9);
95
  pointer-events: none;
 
96
  &.open {
97
  opacity: 1;
98
  transform: translateY(0) scale(1);
99
  pointer-events: auto;
100
  }
101
  }
 
102
  .notification-popover-text-content {
103
  background-color: #eff6ff;
104
  font-size: 0.875rem;
 
112
  background-color: oklch(0.25 0.05 230);
113
  color: oklch(0.95 0.01 230);
114
  }
 
115
  .header-controls {
116
  display: flex;
117
+ padding: 0.75rem 0.5rem;
118
  justify-content: space-between;
119
  align-items: center;
120
  width: 100%;
 
123
  left: 0;
124
  z-index: 10;
125
  }
 
126
  .header-button {
127
  display: flex;
128
  align-items: center;
129
  justify-content: center;
130
+ padding: 0.5rem;
131
+ width: 40px;
132
+ height: 40px;
133
+ border-radius: var(--radius-lg, 0.625rem);
134
+ background-color: #e5e7eb;
135
  cursor: pointer;
136
+ transition: background-color 0.2s, transform 0.1s ease-out;
 
137
  svg {
138
  opacity: 0.7;
139
+ stroke: #374151;
140
+ width: 24px;
141
  height: 24px;
142
  }
 
143
  &:hover {
144
+ background-color: #d1d5db;
145
  }
 
146
  &:active {
147
+ background-color: #9ca3af;
148
+ transform: scale(0.95);
149
  }
150
  }
 
151
  .dark .header-button {
152
  background-color: oklch(0.28 0 0);
153
  &:hover {
154
  background-color: oklch(0.35 0 0);
155
  }
156
  &:active {
157
+ background-color: oklch(0.40 0 0);
158
  transform: scale(0.95);
159
  }
160
  svg {
 
163
  }
164
  }
165
 
166
+ /* Logo Animation Styling */
167
  .logo-animation-wrapper {
168
  position: relative;
169
  display: flex;
170
  align-items: center;
171
  justify-content: center;
172
+ & > div > svg { // اطمینان از اینکه SVG داخل لوگو تمام فضا را پر می کند
 
173
  width: 100%;
174
  height: 100%;
175
  }
176
  }
177
+ .logo-animation-wrapper.for-footer {
178
+ // اگر نیاز به استایل خاصی برای لوگوی فوتر باشد
179
+ }
180
+
181
 
182
  /* Footer styles to mimic HTML example */
183
  .footer-controls-html-like {
184
  width: 100%;
185
  display: flex;
186
+ align-items: center; // برای هم ترازی عمودی
 
 
 
187
  position: absolute;
188
  bottom: 0;
189
+ padding: 2rem 3rem; // 32px top/bottom, 48px left/right (از HTML مرجع)
 
190
  box-sizing: border-box;
191
+ z-index: 20; // بالاتر از محتوای مدیا
 
192
 
193
+ // چیدمان دکمه ها: میکروفون چپ، لوگو وسط (اگر فعال)، دوربین راست
194
+ // با استفاده از flex-grow برای لوگو، دکمه ها به کناره ها می چسبند
195
+ // یا با justify-content: space-between و margin auto برای لوگو
196
+ justify-content: space-between; // میکروفو�� چپ، دوربین راست
 
197
  }
198
 
199
+ // کانتینر برای لوگوی کوچک در فوتر، برای قرارگیری دقیق بین دکمه ها
200
  .small-logo-footer-html-like {
201
+ // این به صورت خودکار بین دو دکمه قرار می گیرد اگر فضای کافی باشد
202
+ // یا می توان آن را به صورت absolute در وسط قرار داد
203
+ // position: absolute;
204
+ // left: 50%;
205
+ // top: 50%;
206
+ // transform: translate(-50%, -50%);
207
+ // z-index: 1; // پشت دکمه ها اگر همپوشانی داشته باشند
208
+ // برای حالا، اجازه می دهیم با flex در جای خود قرار گیرد
209
+ display: flex;
210
+ align-items: center;
211
+ justify-content: center;
212
+ // اگر می خواهید دقیقاً وسط باشد و دکمه ها در کناره ها:
213
+ margin-left: auto;
214
+ margin-right: auto;
215
  }
216
 
217
 
218
+ .control-button-wrapper { // برای دکمه دوربین و دکمه تعویض آن
219
+ position: relative;
220
+ display: flex;
221
+ justify-content: center;
222
+ }
223
+ // .cam-wrapper-html-like در ControlTray.tsx استفاده شده
224
+
225
  .control-button {
226
+ height: 80px; // از HTML مرجع
227
+ width: 80px; // از HTML مرجع
228
  border-radius: 9999px;
229
  padding: 0;
230
  display: flex;
231
  align-items: center;
232
  justify-content: center;
233
  border-width: 1px;
234
+ border-color: var(--border);
235
  box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06);
236
  cursor: pointer;
237
  transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
238
  flex-shrink: 0;
239
+ z-index: 2; // اطمینان از اینکه دکمه ها قابل کلیک هستند
240
 
241
  &:hover {
242
  transform: scale(1.05);
243
  box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05);
244
  }
245
+ // اطمینان از اینکه SVG داخل دکمه ها به درستی نمایش داده می شود
 
246
  svg {
247
+ // اگر SVG ها خیلی بزرگ هستند، می توانید اندازه آنها را اینجا کنترل کنید
248
+ // مثال: width: 50%; height: 50%;
249
+ // یا با transform: scale(0.55); اگر در HTML اصلی شما اینگونه بوده
250
  }
251
  }
252
 
253
+ // ترتیب رنگ ها بر اساس HTML مرجع شما (میکروفون چپ، دوربین راست)
254
+ .mic-button-color { background-color: #fecdd3; } // قرمز برای میکروفون
255
+ .cam-button-color { background-color: #E0ECFF; } // آبی برای دوربین
 
256
 
257
  .dark .mic-button-color { background-color: #5C2129; }
258
  .dark .cam-button-color { background-color: #223355; }
259
 
260
 
261
+ /* Switch Camera Button (بدون تغییر از پاسخ قبلی) */
262
  .switch-camera-button-container {
263
  position: absolute;
264
+ bottom: calc(100% + 0.65rem);
265
  left: 50%;
266
  transform: translateX(-50%) translateY(15px) scale(0.7);
267
  z-index: 5;
 
269
  pointer-events: none;
270
  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);
271
  transform-origin: center bottom;
 
272
  &.visible {
273
  opacity: 1;
274
  transform: translateX(-50%) translateY(0) scale(1);
275
  pointer-events: auto;
276
  }
277
  }
 
278
  .switch-camera-button-content {
279
+ width: 48px;
280
+ height: 48px;
281
  background-color: var(--background);
282
  border: 1px solid var(--border);
283
  border-radius: 9999px;
 
288
  cursor: pointer;
289
  transform-origin: center;
290
  transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
 
291
  &:hover {
292
+ transform: scale(1.12) rotate(-6deg);
293
  box-shadow: 0 7px 15px rgba(0,0,0,0.18), 0 3px 6px rgba(0,0,0,0.12);
294
  }
295
  &:active {
296
+ transform: scale(1.03) rotate(0deg);
297
  }
 
298
  svg {
299
+ width: 22px;
300
+ height: 22px;
301
  stroke: var(--foreground);
302
  transition: transform 0.3s ease-in-out;
303
  }
304
  &:hover svg {
305
+ transform: rotate(360deg);
306
  }
307
  }
308
 
309
+ /* Keyframes for popover (بدون تغییر از پاسخ قبلی) */
310
  @keyframes popover-drop-in {
311
+ 0% { opacity: 0; transform: translateY(-100%) scale(0.9); }
312
+ 70% { opacity: 1; transform: translateY(5px) scale(1.02); }
313
+ 100% { opacity: 1; transform: translateY(0) scale(1); }
 
 
 
 
 
 
 
 
 
314
  }
 
315
  @keyframes popover-lift-out {
316
+ 0% { opacity: 1; transform: translateY(0) scale(1); }
317
+ 100% { opacity: 0; transform: translateY(-100%) scale(0.9); }
 
 
 
 
 
 
318
  }
 
319
  .animate-popover-open-top-center {
320
  animation: popover-drop-in 0.4s cubic-bezier(0.68, -0.55, 0.27, 1.55) forwards;
321
  }