kaan1233/bistelligence-api
0
1:root {
2 --bg-dark: #0a0f1e;
3 --bg-card: #111827;
4 --sidebar-bg: rgba(10, 15, 30, 0.95);
5 --glass-bg: rgba(17, 24, 39, 0.85);
6 --glass-border: rgba(255, 255, 255, 0.08);
7 --glass-border-hover: rgba(255, 255, 255, 0.15);
8 --text-primary: #f1f5f9;
9 --text-muted: #94a3b8;
10 --accent: #3b82f6;
11 --accent-hover: #2563eb;
12 --accent-glow: rgba(59, 130, 246, 0.15);
13 --success: #10b981;
14 --success-bg: rgba(16, 185, 129, 0.1);
15 --danger: #ef4444;
16 --danger-bg: rgba(239, 68, 68, 0.1);
17 --warning: #f59e0b;
18 --warning-bg: rgba(245, 158, 11, 0.1);
19 --purple: #8b5cf6;
20 --cyan: #06b6d4;
21}
22
23[data-theme="light"] {
24 --bg-dark: #f8fafc;
25 --bg-card: #ffffff;
26 --sidebar-bg: #f1f5f9;
27 --glass-bg: rgba(255, 255, 255, 0.9);
28 --glass-border: rgba(0, 0, 0, 0.1);
29 --glass-border-hover: rgba(0, 0, 0, 0.2);
30 --text-primary: #0f172a;
31 --text-muted: #64748b;
32 --accent: #2563eb;
33 --accent-hover: #1d4ed8;
34 --accent-glow: rgba(37, 99, 235, 0.15);
35 --success: #059669;
36 --success-bg: rgba(5, 150, 105, 0.1);
37 --danger: #dc2626;
38 --danger-bg: rgba(220, 38, 38, 0.1);
39 --warning: #d97706;
40 --warning-bg: rgba(217, 119, 6, 0.1);
41 --purple: #7c3aed;
42 --cyan: #0891b2;
43 --btn-text: #0f172a;
44}
45
46* {
47 margin: 0;
48 padding: 0;
49 box-sizing: border-box;
50 font-family: 'Inter', sans-serif;
51}
52
53body {
54 background-color: var(--bg-dark);
55 color: var(--text-primary);
56 min-height: 100vh;
57 overflow-x: hidden;
58 transition: background-color 0.3s ease, color 0.3s ease;
59 background:
60 radial-gradient(ellipse at 20% 0%, rgba(59, 130, 246, 0.08) 0%, transparent 50%),
61 radial-gradient(ellipse at 80% 100%, rgba(139, 92, 246, 0.06) 0%, transparent 50%),
62 var(--bg-dark);
63}
64
65/* ==================== Glassmorphism ==================== */
66.glass-form, .glass-table, .metric-card, .rec-card {
67 background: var(--glass-bg);
68 backdrop-filter: blur(16px);
69 -webkit-backdrop-filter: blur(16px);
70 border: 1px solid var(--glass-border);
71 border-radius: 16px;
72 padding: 24px;
73 box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25);
74 transition: background-color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease, transform 0.2s ease;
75}
76
77.glass-form:hover, .metric-card:hover, .rec-card:hover {
78 border-color: var(--glass-border-hover);
79}
80
81.rec-card:hover {
82 transform: translateY(-2px);
83}
84
85/* ==================== App Layout ==================== */
86.app-container {
87 display: flex;
88 min-height: 100vh;
89}
90
91/* ==================== Sidebar ==================== */
92.sidebar {
93 width: 260px;
94 background: var(--sidebar-bg);
95 border-right: 1px solid var(--glass-border);
96 display: flex;
97 flex-direction: column;
98 padding: 24px 0;
99 position: fixed;
100 height: 100%;
101 z-index: 100;
102 backdrop-filter: blur(20px);
103}
104
105.logo {
106 font-size: 22px;
107 font-weight: 700;
108 text-align: center;
109 margin-bottom: 40px;
110 background: linear-gradient(135deg, var(--accent), var(--purple));
111 -webkit-background-clip: text;
112 -webkit-text-fill-color: transparent;
113 background-clip: text;
114 position: relative;
115}
116
117.version-badge {
118 font-size: 10px;
119 background: var(--accent);
120 -webkit-text-fill-color: white;
121 padding: 2px 6px;
122 border-radius: 6px;
123 vertical-align: super;
124 font-weight: 600;
125}
126
127.nav-links {
128 list-style: none;
129 flex: 1;
130}
131
132.nav-links li {
133 padding: 14px 28px;
134 font-size: 15px;
135 color: var(--text-muted);
136 cursor: pointer;
137 transition: all 0.3s ease;
138 border-left: 3px solid transparent;
139 display: flex;
140 align-items: center;
141 gap: 10px;
142}
143
144.nav-links li:hover, .nav-links li.active {
145 background: var(--accent-glow);
146 color: var(--text-primary);
147 border-left: 3px solid var(--accent);
148}
149
150.nav-links li i {
151 width: 20px;
152 text-align: center;
153 font-size: 14px;
154}
155
156.sidebar-footer {
157 padding: 0 20px;
158 margin-top: auto;
159}
160
161.regime-badge {
162 display: flex;
163 align-items: center;
164 gap: 8px;
165 padding: 12px 16px;
166 background: rgba(59, 130, 246, 0.1);
167 border-radius: 10px;
168 border: 1px solid var(--glass-border);
169 font-size: 12px;
170 color: var(--text-muted);
171}
172
173/* ==================== Main Content ==================== */
174.content {
175 flex: 1;
176 margin-left: 260px;
177 padding: 40px;
178 position: relative;
179}
180
181.page {
182 display: none;
183 animation: fadeIn 0.4s ease-in-out;
184}
185
186.page.active {
187 display: block;
188}
189
190@keyframes fadeIn {
191 from { opacity: 0; transform: translateY(8px); }
192 to { opacity: 1; transform: translateY(0); }
193}
194
195header h1 {
196 font-size: 30px;
197 margin-bottom: 5px;
198 font-weight: 700;
199}
200header p {
201 color: var(--text-muted);
202 margin-bottom: 28px;
203 font-size: 15px;
204}
205
206/* ==================== Market Regime Banner ==================== */
207.regime-banner {
208 display: flex;
209 justify-content: space-between;
210 align-items: center;
211 padding: 20px 28px;
212 border-radius: 16px;
213 margin-bottom: 28px;
214 border: 1px solid var(--glass-border);
215 background: linear-gradient(135deg, rgba(17, 24, 39, 0.9), rgba(30, 41, 59, 0.6));
216}
217
218.regime-banner.strong_bull { border-left: 4px solid var(--success); }
219.regime-banner.weak_bull { border-left: 4px solid #22c55e; }
220.regime-banner.weak_bear { border-left: 4px solid var(--warning); }
221.regime-banner.strong_bear { border-left: 4px solid var(--danger); }
222
223.regime-info {
224 display: flex;
225 flex-direction: column;
226 gap: 4px;
227}
228
229.regime-label {
230 font-size: 22px;
231 font-weight: 700;
232}
233
234.regime-desc {
235 font-size: 13px;
236 color: var(--text-muted);
237 max-width: 500px;
238}
239
240.regime-stats {
241 display: flex;
242 gap: 30px;
243}
244
245.regime-stat {
246 display: flex;
247 flex-direction: column;
248 align-items: center;
249}
250
251.rs-title {
252 font-size: 11px;
253 color: var(--text-muted);
254 text-transform: uppercase;
255 letter-spacing: 1px;
256}
257
258.rs-value {
259 font-size: 20px;
260 font-weight: 600;
261 margin-top: 4px;
262}
263
264/* ==================== Metrics Grid ==================== */
265.metrics-grid {
266 display: grid;
267 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
268 gap: 20px;
269 margin-bottom: 36px;
270}
271
272.metric-card .m-title {
273 font-size: 12px;
274 color: var(--text-muted);
275 text-transform: uppercase;
276 letter-spacing: 1px;
277}
278
279.metric-card h2 {
280 font-size: 26px;
281 margin-top: 10px;
282 font-weight: 600;
283}
284
285/* ==================== Recommendations ==================== */
286.recommendations-section h3, .warnings-section h3 {
287 margin-bottom: 16px;
288 font-size: 18px;
289 font-weight: 600;
290}
291
292.recs-grid {
293 display: grid;
294 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
295 gap: 20px;
296 margin-bottom: 36px;
297}
298
299.rec-card {
300 cursor: pointer;
301 position: relative;
302 overflow: hidden;
303}
304
305.rec-card::before {
306 content: '';
307 position: absolute;
308 top: 0;
309 left: 0;
310 right: 0;
311 height: 3px;
312 background: linear-gradient(90deg, var(--accent), var(--purple));
313 opacity: 0;
314 transition: opacity 0.3s;
315}
316
317.rec-card:hover::before {
318 opacity: 1;
319}
320
321.rec-card h4 {
322 font-size: 20px;
323 color: var(--accent);
324 margin-bottom: 8px;
325 display: flex;
326 align-items: center;
327 gap: 10px;
328}
329
330.rec-card p { margin-bottom: 5px; font-size: 14px; }
331.rec-card .reason { color: var(--text-muted); font-size: 12px; margin-top: 10px; font-style: italic; }
332.rec-card.warn h4 { color: var(--danger); }
333
334/* ==================== Signal Badge ==================== */
335.signal-badge {
336 display: inline-flex;
337 align-items: center;
338 padding: 4px 10px;
339 border-radius: 6px;
340 font-size: 11px;
341 font-weight: 700;
342 letter-spacing: 0.5px;
343 white-space: nowrap;
344}
345
346.signal-badge.strong-buy { background: var(--success-bg); color: var(--success); border: 1px solid rgba(16, 185, 129, 0.3); }
347.signal-badge.buy { background: rgba(34, 197, 94, 0.1); color: #22c55e; border: 1px solid rgba(34, 197, 94, 0.3); }
348.signal-badge.hold { background: var(--warning-bg); color: var(--warning); border: 1px solid rgba(245, 158, 11, 0.3); }
349.signal-badge.sell { background: rgba(249, 115, 22, 0.1); color: #f97316; border: 1px solid rgba(249, 115, 22, 0.3); }
350.signal-badge.strong-sell{ background: var(--danger-bg); color: var(--danger); border: 1px solid rgba(239, 68, 68, 0.3); }
351
352/* ==================== Score Bar ==================== */
353.score-bar-container {
354 width: 100%;
355 height: 6px;
356 background: rgba(255,255,255,0.08);
357 border-radius: 3px;
358 margin-top: 8px;
359 overflow: hidden;
360}
361
362.score-bar {
363 height: 100%;
364 border-radius: 3px;
365 transition: width 0.6s ease;
366}
367
368/* ==================== Category Scores ==================== */
369.category-scores {
370 display: grid;
371 grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
372 gap: 12px;
373 margin-top: 16px;
374}
375
376.cat-score-item {
377 text-align: center;
378}
379
380.cat-score-item .cat-label {
381 font-size: 11px;
382 color: var(--text-muted);
383 text-transform: uppercase;
384 display: block;
385 margin-bottom: 4px;
386}
387
388.cat-score-item .cat-value {
389 font-size: 20px;
390 font-weight: 700;
391}
392
393/* ==================== Forms & Layouts ==================== */
394.pf-layout {
395 display: flex;
396 gap: 30px;
397}
398
399.pf-sidebar {
400 width: 300px;
401 flex-shrink: 0;
402}
403
404.pf-table-container {
405 flex: 1;
406 overflow-x: auto;
407}
408
409.mt-2 { margin-top: 20px; }
410
411form label, .form-group label {
412 display: block;
413 margin-top: 15px;
414 margin-bottom: 5px;
415 font-size: 13px;
416 color: var(--text-muted);
417}
418
419form select, form input, form textarea, .form-group select, .form-group input, .form-group textarea {
420 width: 100%;
421 padding: 10px 12px;
422 background: rgba(10, 15, 30, 0.6);
423 border: 1px solid var(--glass-border);
424 border-radius: 8px;
425 color: var(--text-primary);
426 font-family: 'Inter';
427 font-size: 14px;
428 transition: border-color 0.3s;
429}
430
431form select:focus, form input:focus, form textarea:focus, .form-group select:focus, .form-group input:focus, .form-group textarea:focus {
432 outline: none;
433 border-color: var(--accent);
434 box-shadow: 0 0 0 3px var(--accent-glow);
435}
436
437.btn {
438 width: 100%;
439 padding: 12px;
440 border: none;
441 border-radius: 8px;
442 font-size: 14px;
443 font-weight: 600;
444 cursor: pointer;
445 transition: all 0.3s;
446 margin-top: 20px;
447 color: var(--btn-text, white);
448 display: inline-flex;
449 align-items: center;
450 justify-content: center;
451 gap: 8px;
452}
453
454.btn.primary { background: var(--accent); color: white !important; }
455.btn.primary:hover { background: var(--accent-hover); transform: translateY(-1px); box-shadow: 0 4px 12px var(--accent-glow); }
456
457.btn.secondary { background: var(--glass-bg); border: 1px solid var(--glass-border); color: var(--text-primary) !important; }
458.btn.secondary:hover { background: var(--glass-border-hover); }
459
460.btn.success { background: var(--success); color: white !important; }
461.btn.success:hover { filter: brightness(1.1); }
462
463.btn.danger-sm {
464 background: rgba(239, 68, 68, 0.15);
465 color: var(--danger);
466 width: auto;
467 padding: 6px 12px;
468 margin: 0;
469 border: 1px solid rgba(239, 68, 68, 0.3);
470 font-size: 12px;
471}
472.btn.danger-sm:hover { background: var(--danger); color: white; }
473
474.btn.info-sm {
475 background: rgba(59, 130, 246, 0.15);
476 color: var(--primary);
477 width: auto;
478 padding: 6px 12px;
479 margin: 0;
480 margin-right: 4px;
481 border: 1px solid rgba(59, 130, 246, 0.3);
482 font-size: 12px;
483}
484.btn.info-sm:hover { background: var(--primary); color: white; }
485
486/* ==================== Tables ==================== */
487.data-table {
488 width: 100%;
489 border-collapse: collapse;
490}
491
492.data-table th, .data-table td {
493 padding: 12px 14px;
494 text-align: left;
495 border-bottom: 1px solid var(--glass-border);
496 font-size: 14px;
497}
498
499.data-table th {
500 color: var(--text-muted);
501 font-weight: 500;
502 font-size: 12px;
503 text-transform: uppercase;
504 letter-spacing: 0.5px;
505}
506
507.data-table tbody tr {
508 transition: background 0.2s;
509}
510
511.data-table tbody tr:hover {
512 background: rgba(59, 130, 246, 0.05);
513}
514
515.data-table tbody tr.clickable {
516 cursor: pointer;
517}
518
519.slim-table th, .slim-table td {
520 padding: 8px 10px;
521 font-size: 13px;
522}
523.slim-table-container {
524 max-height: 280px;
525 overflow-y: auto;
526}
527
528/* ==================== Rotation Signals ==================== */
529.rotation-tag {
530 display: inline-flex;
531 align-items: center;
532 padding: 3px 8px;
533 border-radius: 4px;
534 font-size: 11px;
535 font-weight: 600;
536}
537
538.rotation-tag.inflow { background: var(--success-bg); color: var(--success); }
539.rotation-tag.outflow { background: var(--danger-bg); color: var(--danger); }
540.rotation-tag.strong { background: rgba(34, 197, 94, 0.1); color: #22c55e; }
541.rotation-tag.weak { background: rgba(249, 115, 22, 0.1); color: #f97316; }
542.rotation-tag.neutral { background: rgba(148, 163, 184, 0.1); color: var(--text-muted); }
543
544/* ==================== AI Page ==================== */
545.ai-btn {
546 background: linear-gradient(135deg, var(--purple), var(--accent));
547}
548.ai-btn:hover {
549 box-shadow: 0 4px 20px rgba(139, 92, 246, 0.3);
550 transform: translateY(-1px);
551}
552.ai-output {
553 margin-top: 30px;
554 line-height: 1.7;
555}
556.ai-output h1, .ai-output h2, .ai-output h3 {
557 margin-top: 20px;
558 margin-bottom: 10px;
559 color: var(--accent);
560}
561.ai-output p { margin-bottom: 15px; }
562.ai-output ul, .ai-output ol { margin-left: 20px; margin-bottom: 15px; }
563.ai-output li { margin-bottom: 5px; }
564.hidden { display: none !important; }
565
566/* ==================== Modal ==================== */
567.modal-overlay {
568 position: fixed;
569 top: 0;
570 left: 0;
571 width: 100%;
572 height: 100%;
573 background: rgba(0, 0, 0, 0.6);
574 backdrop-filter: blur(4px);
575 z-index: 9999;
576 display: flex;
577 align-items: center;
578 justify-content: center;
579 animation: fadeIn 0.2s ease;
580}
581
582.modal-content {
583 width: 90%;
584 max-width: 800px;
585 max-height: 85vh;
586 overflow-y: auto;
587 border-radius: 20px;
588 border: 1px solid var(--glass-border);
589}
590
591.modal-header {
592 display: flex;
593 justify-content: space-between;
594 align-items: center;
595 margin-bottom: 24px;
596 padding-bottom: 16px;
597 border-bottom: 1px solid var(--glass-border);
598}
599
600.modal-header h2 {
601 font-size: 24px;
602 display: flex;
603 align-items: center;
604 gap: 12px;
605}
606
607.modal-close {
608 background: none;
609 border: 1px solid var(--glass-border);
610 color: var(--text-muted);
611 font-size: 18px;
612 cursor: pointer;
613 padding: 8px 12px;
614 border-radius: 8px;
615 transition: all 0.2s;
616}
617
618.modal-close:hover {
619 background: var(--danger-bg);
620 color: var(--danger);
621 border-color: var(--danger);
622}
623
624.modal-section {
625 margin-bottom: 24px;
626}
627
628.modal-section h3 {
629 font-size: 16px;
630 margin-bottom: 12px;
631 color: var(--accent);
632}
633
634.modal-grid {
635 display: grid;
636 grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
637 gap: 12px;
638}
639
640.modal-stat {
641 padding: 12px;
642 background: rgba(10, 15, 30, 0.5);
643 border-radius: 10px;
644 border: 1px solid var(--glass-border);
645}
646
647.modal-stat .ms-label {
648 font-size: 11px;
649 color: var(--text-muted);
650 text-transform: uppercase;
651 display: block;
652 margin-bottom: 4px;
653}
654
655.modal-stat .ms-value {
656 font-size: 20px;
657 font-weight: 600;
658}
659
660/* Fibonacci Levels */
661.fib-levels {
662 display: flex;
663 flex-direction: column;
664 gap: 6px;
665}
666
667.fib-level {
668 display: flex;
669 justify-content: space-between;
670 align-items: center;
671 padding: 6px 12px;
672 background: rgba(10, 15, 30, 0.4);
673 border-radius: 6px;
674 font-size: 13px;
675}
676
677.fib-level .fib-name { color: var(--text-muted); }
678.fib-level .fib-price { font-weight: 600; }
679
680/* Feature Importance */
681.feature-bar {
682 display: flex;
683 align-items: center;
684 gap: 10px;
685 margin-bottom: 6px;
686 font-size: 13px;
687}
688
689.feature-bar .fb-name {
690 width: 140px;
691 color: var(--text-muted);
692 flex-shrink: 0;
693}
694
695.feature-bar .fb-bar-bg {
696 flex: 1;
697 height: 8px;
698 background: rgba(255,255,255,0.06);
699 border-radius: 4px;
700 overflow: hidden;
701}
702
703.feature-bar .fb-bar {
704 height: 100%;
705 background: linear-gradient(90deg, var(--accent), var(--purple));
706 border-radius: 4px;
707 transition: width 0.5s ease;
708}
709
710.feature-bar .fb-value {
711 width: 40px;
712 text-align: right;
713 font-weight: 600;
714 font-size: 12px;
715}
716
717/* ==================== Loader ==================== */
718.loader-overlay {
719 position: absolute;
720 top: 0; left: 0; right: 0; bottom: 0;
721 background: var(--bg-dark);
722 display: flex;
723 flex-direction: column;
724 align-items: center;
725 justify-content: center;
726 z-index: 1000;
727}
728.spinner {
729 width: 48px;
730 height: 48px;
731 border: 3px solid var(--glass-border);
732 border-top-color: var(--accent);
733 border-radius: 50%;
734 animation: spin 1s linear infinite;
735 margin-bottom: 20px;
736}
737@keyframes spin { 100% { transform: rotate(360deg); } }
738
739/* ==================== Scrollbar ==================== */
740::-webkit-scrollbar {
741 width: 6px;
742 height: 6px;
743}
744::-webkit-scrollbar-track {
745 background: transparent;
746}
747::-webkit-scrollbar-thumb {
748 background: rgba(255,255,255,0.12);
749 border-radius: 3px;
750}
751::-webkit-scrollbar-thumb:hover {
752 background: rgba(255,255,255,0.2);
753}
754
755/* ==================== Text Utilities ==================== */
756.text-muted { color: var(--text-muted); }
757.text-success { color: var(--success); }
758.text-danger { color: var(--danger); }
759.text-warning { color: var(--warning); }
760
761/* ==================== AI PF Layout ==================== */
762.ai-pf-layout {
763 display: grid;
764 grid-template-columns: 1fr 350px;
765 gap: 20px;
766 margin-top: 20px;
767}
768
769/* ==================== Responsive (Native App Feel) ==================== */
770@media (max-width: 768px) {
771 body {
772 overflow-x: hidden;
773 -webkit-tap-highlight-color: transparent;
774 }
775
776 .app-container {
777 flex-direction: column;
778 }
779
780 /* Content Padding to clear the Bottom Bar and iOS SafeArea */
781 .content {
782 margin-left: 0;
783 padding: 15px;
784 padding-bottom: calc(80px + env(safe-area-inset-bottom));
785 }
786
787 /* Bottom Navigation Bar */
788 .sidebar {
789 width: 100%;
790 height: calc(65px + env(safe-area-inset-bottom));
791 position: fixed;
792 bottom: 0;
793 left: 0;
794 z-index: 9999;
795 flex-direction: row;
796 justify-content: space-around;
797 align-items: flex-start;
798 padding: 10px 0 env(safe-area-inset-bottom) 0;
799 background: rgba(10, 15, 30, 0.95);
800 backdrop-filter: blur(15px);
801 border-top: 1px solid var(--glass-border);
802 border-right: none;
803 }
804
805 .logo { display: none; }
806 .sidebar-footer { display: none; }
807
808 .nav-links {
809 display: flex;
810 width: 100%;
811 justify-content: space-around;
812 gap: 0;
813 }
814
815 .nav-links li {
816 flex: 1;
817 display: flex;
818 flex-direction: column;
819 align-items: center;
820 justify-content: center;
821 padding: 5px;
822 border-left: none;
823 border-bottom: none;
824 font-size: 10px;
825 color: var(--text-muted);
826 gap: 5px;
827 }
828
829 .nav-links li i {
830 font-size: 20px;
831 margin-right: 0;
832 }
833
834 .nav-links li.active {
835 color: var(--accent);
836 border-left: none;
837 border-bottom: none;
838 background: transparent;
839 }
840
841 /* Layout Overrides */
842 .pf-layout { flex-direction: column; }
843 .pf-sidebar { width: 100%; }
844 .regime-banner { flex-direction: column; gap: 16px; }
845 .metrics-grid { grid-template-columns: repeat(2, 1fr); }
846 .recs-grid { grid-template-columns: 1fr; }
847 .dashboard-grid { grid-template-columns: 1fr 1fr; }
848 .ai-pf-layout { grid-template-columns: 1fr; }
849 .modal-content { width: 95%; max-height: 90vh; padding: 15px; }
850
851 /* Better Table Readability for Mobile Touch */
852 .data-table th, .data-table td {
853 padding: 15px 10px;
854 font-size: 13px;
855 }
856
857 input[type="number"], input[type="text"], input[type="email"], input[type="password"] {
858 font-size: 16px; /* Prevents auto-zoom on iOS Safari */
859 }
860}
861
862
863/* ==========================================================================
864 Premium Login Screen Styles
865 ========================================================================== */
866.login-overlay {
867 background: radial-gradient(circle at center, rgba(10, 15, 30, 0.85) 0%, rgba(5, 8, 15, 0.98) 100%);
868 backdrop-filter: blur(12px);
869 -webkit-backdrop-filter: blur(12px);
870}
871
872.login-card {
873 background: rgba(17, 24, 39, 0.7);
874 border: 1px solid rgba(255, 255, 255, 0.1);
875 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.05) inset;
876 border-radius: 24px;
877 width: 100%;
878 max-width: 420px;
879 padding: 40px;
880 backdrop-filter: blur(20px);
881 -webkit-backdrop-filter: blur(20px);
882 transform: translateY(0);
883 animation: slideUpFade 0.6s cubic-bezier(0.16, 1, 0.3, 1);
884}
885
886@keyframes slideUpFade {
887 0% { opacity: 0; transform: translateY(40px) scale(0.95); }
888 100% { opacity: 1; transform: translateY(0) scale(1); }
889}
890
891.login-header {
892 text-align: center;
893 margin-bottom: 35px;
894}
895
896.login-logo {
897 width: 64px;
898 height: 64px;
899 background: linear-gradient(135deg, var(--primary), var(--accent));
900 border-radius: 18px;
901 display: flex;
902 align-items: center;
903 justify-content: center;
904 font-size: 30px;
905 color: white;
906 margin: 0 auto 24px auto;
907 box-shadow: 0 12px 24px rgba(59, 130, 246, 0.35);
908 border: 1px solid rgba(255,255,255,0.2);
909}
910
911.login-header h2 {
912 font-size: 26px;
913 font-weight: 700;
914 color: white;
915 margin-bottom: 10px;
916 letter-spacing: -0.5px;
917}
918
919.login-header p {
920 color: var(--text-muted);
921 font-size: 15px;
922}
923
924.input-group {
925 position: relative;
926 margin-bottom: 22px;
927}
928
929.input-icon {
930 position: absolute;
931 left: 18px;
932 top: 50%;
933 transform: translateY(-50%);
934 color: #6b7280;
935 font-size: 16px;
936 transition: color 0.3s ease;
937 z-index: 2;
938}
939
940.input-group input {
941 width: 100%;
942 padding: 15px 15px 15px 50px;
943 background: rgba(0, 0, 0, 0.25);
944 border: 1px solid rgba(255, 255, 255, 0.1);
945 border-radius: 14px;
946 color: white;
947 font-size: 15px;
948 transition: all 0.3s ease;
949}
950
951.input-group input::placeholder {
952 color: #6b7280;
953}
954
955.input-group input:focus {
956 outline: none;
957 border-color: var(--primary);
958 background: rgba(0, 0, 0, 0.4);
959 box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.15);
960}
961
962.input-group input:focus ~ .input-icon {
963 color: var(--primary);
964}
965
966.login-actions {
967 display: flex;
968 justify-content: flex-end;
969 margin-bottom: 25px;
970}
971
972.forgot-password {
973 color: var(--text-muted);
974 font-size: 14px;
975 font-weight: 500;
976 text-decoration: none;
977 transition: all 0.2s ease;
978}
979
980.forgot-password:hover {
981 color: var(--primary);
982}
983
984.btn-premium {
985 width: 100%;
986 padding: 16px;
987 background: linear-gradient(135deg, var(--primary) 0%, #2563eb 100%);
988 color: white;
989 border: none;
990 border-radius: 14px;
991 font-size: 16px;
992 font-weight: 600;
993 cursor: pointer;
994 display: flex;
995 justify-content: center;
996 align-items: center;
997 gap: 12px;
998 transition: all 0.3s ease;
999 box-shadow: 0 6px 20px rgba(37, 99, 235, 0.4);
1000}
1001
1002.btn-premium:hover {
1003 transform: translateY(-2px);
1004 box-shadow: 0 10px 25px rgba(37, 99, 235, 0.5);
1005 background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
1006}
1007
1008.btn-premium:active {
1009 transform: translateY(1px);
1010 box-shadow: 0 2px 10px rgba(37, 99, 235, 0.4);
1011}
1012
1013.divider {
1014 display: flex;
1015 align-items: center;
1016 margin: 28px 0;
1017 color: #6b7280;
1018 font-size: 14px;
1019 font-weight: 500;
1020}
1021
1022.divider::before, .divider::after {
1023 content: '';
1024 flex: 1;
1025 height: 1px;
1026 background: rgba(255, 255, 255, 0.08);
1027}
1028
1029.divider span {
1030 padding: 0 16px;
1031}
1032
1033.btn-google {
1034 width: 100%;
1035 padding: 15px;
1036 background: rgba(255, 255, 255, 0.05);
1037 color: white;
1038 border: 1px solid rgba(255, 255, 255, 0.1);
1039 border-radius: 14px;
1040 font-size: 15px;
1041 font-weight: 500;
1042 cursor: pointer;
1043 display: flex;
1044 justify-content: center;
1045 align-items: center;
1046 gap: 14px;
1047 transition: all 0.3s ease;
1048}
1049
1050.btn-google img {
1051 width: 22px;
1052 height: 22px;
1053}
1054
1055.btn-google:hover {
1056 background: rgba(255, 255, 255, 0.1);
1057 border-color: rgba(255, 255, 255, 0.2);
1058 transform: translateY(-1px);
1059}
1060
1061.login-error-msg {
1062 color: #fca5a5;
1063 font-size: 14px;
1064 font-weight: 500;
1065 text-align: center;
1066 margin-top: 24px;
1067 display: none;
1068 background: rgba(239, 68, 68, 0.15);
1069 padding: 12px;
1070 border-radius: 10px;
1071 border: 1px solid rgba(239, 68, 68, 0.3);
1072 animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
1073}
1074
1075@keyframes shake {
1076 10%, 90% { transform: translate3d(-1px, 0, 0); }
1077 20%, 80% { transform: translate3d(2px, 0, 0); }
1078 30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }
1079 40%, 60% { transform: translate3d(4px, 0, 0); }
1080}
1081
1082@media (max-width: 480px) {
1083 .login-card {
1084 border-radius: 20px;
1085 padding: 30px 20px;
1086 }
1087}
1088
1089/* Theme Switch */
1090#theme-switch-checkbox:checked ~ .slider {
1091 background-color: var(--primary) !important;
1092}
1093#theme-switch-checkbox:checked ~ .slider-circle {
1094 transform: translateX(20px);
1095 background-color: #fff !important;
1096}
1097
1098/* ==================== TOAST NOTIFICATIONS ==================== */
1099#toast-container {
1100 position: fixed;
1101 top: 20px;
1102 right: 20px;
1103 z-index: 99999;
1104 display: flex;
1105 flex-direction: column;
1106 gap: 10px;
1107}
1108
1109.toast {
1110 display: flex;
1111 align-items: center;
1112 background: var(--glass-bg);
1113 border: 1px solid var(--glass-border);
1114 backdrop-filter: blur(10px);
1115 -webkit-backdrop-filter: blur(10px);
1116 padding: 16px 20px;
1117 border-radius: 12px;
1118 box-shadow: 0 10px 30px rgba(0,0,0,0.5);
1119 color: var(--text-primary);
1120 font-size: 14px;
1121 transform: translateX(120%);
1122 transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
1123 min-width: 300px;
1124 max-width: 400px;
1125}
1126
1127.toast.show {
1128 transform: translateX(0);
1129}
1130
1131.toast-icon {
1132 font-size: 20px;
1133 margin-right: 15px;
1134}
1135
1136.toast-success .toast-icon { color: var(--success); }
1137.toast-error .toast-icon { color: var(--danger); }
1138.toast-warning .toast-icon { color: var(--warning); }
1139.toast-info .toast-icon { color: var(--accent); }
1140
1141.toast-message {
1142 flex-grow: 1;
1143 font-weight: 500;
1144}
1145 