smartparking / dashboardStyle.css
noor122's picture
Upload 43 files
d52cc5e verified
Raw History Blame Contribute Delete
22.2 kB
/* ================= المتغيرات الأساسية (عشان الألوان تبقى موحدة) ================= */
:root {
--bg-color: #05080f;
--surface-color: #0b1221;
--border-color: #1a2333;
--text-main: #ffffff;
--text-muted: #94a3b8;
--primary-color: #00c2b8;
--primary-hover: #00a39a;
--danger-color: #ef4444;
--success-color: #10b981;
--warning-color: #f59e0b;
}
body.dashboard-body {
margin: 0;
padding: 0;
background-color: var(--bg-color);
color: var(--text-main);
font-family: 'Cairo', sans-serif;
overflow-x: hidden;
}
/* ================= الهيكل الأساسي للداشبورد ================= */
.dashboard-layout {
display: flex;
min-height: 100vh;
}
/* --- القائمة الجانبية (Sidebar) --- */
.sidebar {
width: 260px;
background-color: var(--surface-color);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
padding: 20px;
position: fixed;
height: 100vh;
z-index: 100;
}
.sidebar-header .logo {
display: flex;
align-items: center;
gap: 12px;
font-size: 1.5rem;
font-weight: 700;
color: var(--text-main);
text-decoration: none;
margin-bottom: 40px;
font-family: 'Urbanist', sans-serif;
}
.sidebar-header .logo i {
color: var(--primary-color);
font-size: 1.8rem;
}
.sidebar-menu {
list-style: none;
padding: 0;
margin: 0;
flex: 1;
}
.sidebar-menu li {
margin-bottom: 10px;
}
.sidebar-menu a {
display: flex;
align-items: center;
gap: 15px;
padding: 12px 15px;
color: var(--text-muted);
text-decoration: none;
border-radius: 12px;
transition: 0.3s;
font-weight: 600;
}
.sidebar-menu li.active a, .sidebar-menu a:hover {
background-color: rgba(0, 194, 184, 0.1);
color: var(--primary-color);
}
.sidebar-footer .logout-btn {
display: flex;
align-items: center;
gap: 10px;
color: var(--danger-color);
text-decoration: none;
font-weight: 600;
padding: 10px;
transition: 0.3s;
}
/* ================= المحتوى الأساسي (Main Content) ================= */
.main-content {
flex: 1;
margin-left: 260px; /* نفس عرض السايدبار */
padding: 30px 40px;
position: relative;
}
/* --- الهيدر العلوي (Top Bar) --- */
.highlight-name {
background: linear-gradient(135deg, #00c2b8 0%, #1a6bff 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.wave-emoji {
display: inline-block;
transform-origin: 70% 70%;
animation: wave-animation 2.5s infinite;
}
@keyframes wave-animation {
0% { transform: rotate(0.0deg) }
10% { transform: rotate(14.0deg) }
20% { transform: rotate(-8.0deg) }
30% { transform: rotate(14.0deg) }
40% { transform: rotate(-4.0deg) }
50% { transform: rotate(10.0deg) }
60% { transform: rotate(0.0deg) }
100% { transform: rotate(0.0deg) }
}
/* ================= الهيدر العلوي (Top Bar) ================= */
.top-bar {
display: flex;
justify-content: space-between; /* دي اللي بتزق الكلام شمال والزراير يمين */
align-items: center; /* بتخلي الزراير والاسم على نفس الخط الأفقي */
width: 100%;
margin-bottom: 40px;
position: relative;
}
/* ================= رسالة الترحيب ================= */
.welcome-text {
display: flex;
flex-direction: column;
align-items: flex-start; /* بنخلي الكلام يبدأ من الشمال */
text-align: left;
margin: 0;
}
.welcome-text h2 {
font-family: 'Urbanist', sans-serif;
font-size: 2.6rem;
font-weight: 900;
color: var(--text-main);
margin: 0 0 10px 0;
display: flex;
align-items: center;
gap: 12px;
line-height: 1;
}
.highlight-name {
background: linear-gradient(135deg, #00c2b8 0%, #1a6bff 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.welcome-text p {
font-size: 1.05rem;
color: var(--text-muted);
font-weight: 600;
margin: 0;
}
/* ================= جزء البروفايل والمحفظة ================= */
.top-actions {
position: static; /* لغينا الطيران عشان يمشوا مع مساحة الشاشة صح */
display: flex;
align-items: center;
gap: 20px;
}
.wallet-badge {
background: rgba(0, 194, 184, 0.1);
color: var(--primary-color);
transition: transform 0.2s ease-in-out; /* سرعة تأثير التكبير */
text-decoration: none; /* إزالة الخط اللي تحت الرابط */
padding: 8px 15px;
border-radius: 20px;
font-weight: 600;
font-size: 0.95rem;
display: flex;
align-items: center;
gap: 8px;
border: 1px solid rgba(0, 194, 184, 0.2);
}
.wallet-badge:hover {
transform: scale(1.08); /* تكبير العنصر بنسبة 8% عند وقوف الماوس */
cursor: pointer;
}
.theme-toggle i {
font-size: 1.3rem;
color: var(--text-muted);
cursor: pointer;
transition: 0.3s;
}
.user-avatar img {
width: 44px;
height: 44px;
border-radius: 50%;
border: 2px solid var(--border-color);
}
/* ================= قسم الخريطة والجراجات ================= */
.location-section {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 30px;
}
.map-header, .nearest-garages h3 {
margin: 0 0 15px 0;
font-size: 1.2rem;
color: var(--text-main);
display: flex;
align-items: center;
gap: 10px;
}
.google-map-placeholder {
background: var(--surface-color);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 10px;
}
/* ================= كروت الجراجات ================= */
.nearest-garages {
display: flex;
flex-direction: column;
gap: 15px;
}
.garage-card {
background: var(--surface-color);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 20px;
transition: 0.3s;
}
.garage-card:hover {
border-color: var(--primary-color);
transform: translateY(-3px);
}
.garage-info h4 {
margin: 0 0 5px 0;
font-size: 1.1rem;
}
.garage-info p {
margin: 0 0 15px 0;
font-size: 0.85rem;
color: var(--text-muted);
}
.garage-status {
display: flex;
justify-content: space-between;
align-items: center;
}
.garage-status span {
font-weight: 700;
font-size: 0.9rem;
}
.garage-status.success span { color: var(--success-color); }
.garage-status.danger span { color: var(--danger-color); }
.btn {
background: var(--primary-color);
color: #fff;
border: none;
padding: 8px 16px;
border-radius: 8px;
font-weight: 600;
cursor: pointer;
transition: 0.3s;
}
.btn:hover { background: var(--primary-hover); }
/* ================= نافذة الحجز (Booking Modal) ================= */
.modal-overlay {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background: rgba(5, 8, 15, 0.8);
backdrop-filter: blur(8px);
display: flex; align-items: center; justify-content: center;
z-index: 2000;
opacity: 0; visibility: hidden; transition: 0.3s ease;
}
.modal-overlay.active { opacity: 1; visibility: visible; }
.booking-card {
background: var(--surface-color);
border: 1px solid var(--border-color);
border-radius: 24px;
width: 100%; max-width: 450px;
padding: 35px; position: relative;
transform: translateY(20px); transition: 0.4s ease;
box-shadow: 0 25px 50px rgba(0,0,0,0.3);
}
.modal-overlay.active .booking-card { transform: translateY(0); }
.close-modal {
position: absolute; top: 20px; right: 20px;
background: transparent; border: none; font-size: 1.2rem;
color: var(--text-muted); cursor: pointer; transition: 0.3s;
}
.close-modal:hover { color: var(--danger-color); transform: rotate(90deg); }
.booking-header h3 { font-size: 1.6rem; color: var(--text-main); margin: 0 0 5px 0; font-family: 'Urbanist', sans-serif; font-weight: 800;}
.booking-header p { color: var(--text-muted); font-size: 0.95rem; margin-bottom: 25px; font-weight: 600;}
/* خيارات نوع الركنة */
.section-subtitle { display: block; margin-bottom: 10px; font-weight: 600; font-size: 0.95rem;}
.spot-options { display: flex; gap: 10px; }
.spot-radio { flex: 1; cursor: pointer; }
.spot-radio input { display: none; }
.spot-box {
background: var(--bg-color); border: 2px solid var(--border-color);
border-radius: 14px; padding: 15px 10px; text-align: center;
transition: 0.3s; color: var(--text-muted);
}
.spot-box i { display: block; font-size: 1.5rem; margin-bottom: 8px; }
.spot-box span { font-size: 0.85rem; font-weight: 700; }
.spot-radio input:checked + .spot-box {
border-color: #00c2b8; background: rgba(0, 194, 184, 0.05); color: var(--text-main);
}
.spot-radio input:checked + .spot-box i { color: #00c2b8; }
/* التحكم في الوقت */
.duration-control {
display: flex; align-items: center; justify-content: space-between;
background: var(--bg-color); border: 1px solid var(--border-color);
border-radius: 14px; padding: 10px;
}
.dur-btn {
background: var(--surface-color); border: 1px solid var(--border-color);
color: var(--text-main); width: 40px; height: 40px; border-radius: 10px;
cursor: pointer; transition: 0.2s; font-size: 1rem;
}
.dur-btn:hover { background: #00c2b8; color: #05080f; border-color: #00c2b8; }
.dur-value { font-size: 1.5rem; font-weight: 800; color: var(--text-main); font-family: 'Urbanist', sans-serif;}
/* السعر */
.price-summary {
display: flex; justify-content: space-between; align-items: center;
background: linear-gradient(135deg, #0f172a 0%, #1e3a8a 100%);
padding: 20px; border-radius: 16px; color: white; margin-bottom: 10px;
}
.price-summary span { font-size: 0.95rem; font-weight: 600; opacity: 0.9; }
.total-price { font-size: 1.8rem; font-weight: 800; font-family: 'Urbanist', sans-serif; }
.price-hint { font-size: 0.75rem; color: #00c2b8; font-weight: 600; display: flex; gap: 6px; align-items: center; margin-bottom: 20px;}
.btn-primary-action {
width: 100%;
padding: 15px;
border-radius: 12px;
background: var(--primary-color);
color: #fff;
border: none;
font-size: 1.1rem;
font-weight: 700;
cursor: pointer;
transition: 0.3s;
}
.btn-primary-action:hover { background: var(--primary-hover); transform: translateY(-2px); }
/* ================= واجهة الملاحة للخريطة (Navigation) ================= */
#nav-top-bar {
display: none; position: absolute; top: 10px; left: 50%; transform: translateX(-50%);
background: rgba(0, 0, 0, 0.8); color: white; padding: 10px 20px;
border-radius: 8px; font-weight: bold; z-index: 10; font-size: 1.2rem;
}
#nav-bottom-bar {
display: none; position: absolute; bottom: 0; left: 0; width: 100%;
background: #0f172a; padding: 15px 20px; justify-content: space-between;
align-items: center; box-sizing: border-box; z-index: 10;
}
.nav-info { display: flex; flex-direction: column; color: white; }
.nav-time { font-size: 1.4rem; font-weight: bold; color: #10b981; }
.close-nav-btn {
background: #ef4444; color: white; border: none; padding: 10px 20px;
border-radius: 8px; font-weight: bold; cursor: pointer; font-size: 1.1rem;
}
#start-nav-btn {
display: none; position: absolute; bottom: 20px; left: 50%;
transform: translateX(-50%); background: #10b981; color: white;
padding: 12px 30px; font-size: 1.2rem; font-weight: bold;
border: none; border-radius: 30px; cursor: pointer; z-index: 10;
box-shadow: 0 4px 15px rgba(16, 185, 129, 0.4);
}
/* تأثير النبض وقت التتبع */
@keyframes pulseGlow {
0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4); }
70% { box-shadow: 0 0 0 15px rgba(16, 185, 129, 0); }
100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
}
.navigating-active { animation: pulseGlow 2s infinite; border: 2px solid #10b981 !important; }
/* ================= Light Mode (لو حابة تشغلي الدارك/لايت) ================= */
.light-mode.dashboard-body { background-color: #f8fafc; color: #0f172a; }
.light-mode .sidebar, .light-mode .garage-card, .light-mode .booking-card, .light-mode .google-map-placeholder {
background-color: #ffffff; border-color: #e2e8f0;
}
.light-mode .welcome-text h2 { color: #0f172a; }
.light-mode .sidebar-header .logo, .light-mode .map-header, .light-mode .nearest-garages h3, .light-mode .booking-header h3 { color: #0f172a; }
.light-mode .sidebar-menu a { color: #64748b; }
.light-mode .spot-box, .light-mode .duration-control { background: #f8fafc; border-color: #e2e8f0;}
.light-mode .dur-btn { background: #ffffff; color: #0f172a; }
/* تصميم مخطط الجراج */
.slots-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
gap: 15px;
}
.slot-box-ui {
border-radius: 8px;
padding: 15px 10px;
text-align: center;
transition: 0.3s;
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
}
/* الركنة المتاحة */
.slot-box-ui.available {
border: 2px dashed #10b981; /* أخضر */
background: rgba(16, 185, 129, 0.05);
color: #10b981;
cursor: pointer;
}
.slot-box-ui.available:hover {
background: rgba(16, 185, 129, 0.15);
}
.slot-box-ui.available .status-badge {
background: #10b981;
color: #0f172a;
}
/* الركنة المشغولة */
.slot-box-ui.occupied {
border: 2px dashed #ef4444; /* أحمر */
background: rgba(239, 68, 68, 0.05);
color: #ef4444;
cursor: not-allowed;
}
.slot-box-ui.occupied .status-badge {
background: #ef4444;
color: white;
}
/* الركنة المقفولة (عشان اليوزر مش مختار الفئة دي) */
.slot-box-ui.locked {
border: 2px dashed #475569;
background: #1e293b;
color: #64748b;
cursor: not-allowed;
opacity: 0.5;
}
.slot-box-ui.locked .status-badge {
background: #334155;
color: white;
}
.slot-name-ui {
font-weight: bold;
font-size: 1.1rem;
}
.status-badge {
font-size: 0.8rem;
padding: 2px 10px;
border-radius: 12px;
font-weight: bold;
}
/* ==========================================================================
Profile Dropdown & Right Notification Sidebar Styles
========================================================================== */
/* Notification Bell Styling Base */
.notification-trigger {
position: relative;
cursor: pointer;
background: rgba(255, 255, 255, 0.03);
padding: 10px 12px;
border-radius: 12px;
border: 1px solid var(--border-color);
transition: all 0.3s ease;
}
.notification-trigger:hover {
background: rgba(0, 194, 184, 0.1);
border-color: var(--primary-color);
}
.notification-trigger i {
font-size: 1.25rem;
color: var(--text-muted);
}
.notification-trigger:hover i {
color: var(--primary-color);
}
.badge-dot {
position: absolute;
top: 6px;
right: 8px;
width: 8px;
height: 8px;
background-color: var(--danger-color);
border-radius: 50%;
border: 2px solid var(--surface-color);
}
/* Dropdown Context Container Wrapper */
.profile-dropdown-wrapper {
position: relative;
}
.user-avatar {
cursor: pointer;
}
.dropdown-menu {
position: absolute;
top: calc(100% + 12px);
right: 0;
width: 220px;
background: var(--surface-color);
border: 1px solid var(--border-color);
border-radius: 14px;
padding: 10px 0;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.5);
display: none;
flex-direction: column;
z-index: 1500;
transform: translateY(10px);
transition: opacity 0.3s ease, transform 0.3s ease;
}
.dropdown-menu.active {
display: flex;
animation: slideDownMenu 0.25s forwards ease-out;
}
@keyframes slideDownMenu {
to { transform: translateY(0); }
}
.dropdown-header {
padding: 10px 20px;
display: flex;
flex-direction: column;
}
.dropdown-header strong {
color: var(--text-main);
font-size: 0.95rem;
}
.dropdown-header span {
color: var(--primary-color);
font-size: 0.8rem;
font-weight: 600;
}
.dropdown-menu hr {
border: 0;
border-top: 1px solid var(--border-color);
margin: 8px 0;
}
.dropdown-menu a {
padding: 10px 20px;
color: var(--text-muted);
text-decoration: none;
font-size: 0.9rem;
font-weight: 600;
display: flex;
align-items: center;
gap: 12px;
transition: 0.2s ease;
}
.dropdown-menu a:hover {
background: rgba(0, 194, 184, 0.08);
color: var(--primary-color);
}
.dropdown-menu a.logout-link {
color: var(--danger-color);
}
.dropdown-menu a.logout-link:hover {
background: rgba(239, 68, 68, 0.08);
}
/* Sliding Right Sidebar Styling Components */
.notif-sidebar {
position: fixed;
top: 0;
right: -360px;
width: 340px;
height: 100vh;
background-color: var(--surface-color);
border-left: 1px solid var(--border-color);
box-shadow: -10px 0 30px rgba(0, 0, 0, 0.4);
z-index: 2500;
display: flex;
flex-direction: column;
transition: right 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.notif-sidebar.active {
right: 0;
}
.notif-sidebar-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(5, 8, 15, 0.6);
backdrop-filter: blur(4px);
z-index: 2400;
display: none;
opacity: 0;
transition: opacity 0.3s ease;
}
.notif-sidebar-overlay.active {
display: block;
opacity: 1;
}
.notif-sidebar-header {
padding: 24px;
border-bottom: 1px solid var(--border-color);
display: flex;
justify-content: space-between;
align-items: center;
}
.notif-sidebar-header h3 {
margin: 0;
font-size: 1.15rem;
font-weight: 700;
color: var(--text-main);
display: flex;
align-items: center;
gap: 10px;
}
.notif-sidebar-header h3 i {
color: var(--primary-color);
}
#closeNotifBtn {
background: transparent;
border: none;
color: var(--text-muted);
font-size: 1.2rem;
cursor: pointer;
transition: 0.2s ease;
}
#closeNotifBtn:hover {
color: var(--danger-color);
transform: scale(1.1);
}
.notif-sidebar-content {
flex: 1;
overflow-y: auto;
padding: 15px;
display: flex;
flex-direction: column;
gap: 12px;
}
/* Individual Notification Items Base Design */
.notif-item {
background: rgba(255, 255, 255, 0.01);
border: 1px solid var(--border-color);
border-radius: 12px;
padding: 14px;
display: flex;
gap: 12px;
transition: transform 0.2s ease, border-color 0.2s ease;
}
.notif-item:hover {
transform: translateY(-2px);
border-color: rgba(0, 194, 184, 0.3);
}
.notif-item.unread {
background: rgba(0, 194, 184, 0.03);
border-color: rgba(0, 194, 184, 0.15);
}
.notif-icon {
width: 32px;
height: 32px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.95rem;
flex-shrink: 0;
}
.notif-icon.info { background: rgba(59, 130, 246, 0.15); color: #3b82f6; }
.notif-icon.warning { background: rgba(245, 158, 11, 0.15); color: var(--warning-color); }
.notif-icon.success { background: rgba(16, 185, 129, 0.15); color: var(--success-color); }
.notif-text p {
margin: 0 0 4px 0;
font-size: 0.88rem;
line-height: 1.4;
color: var(--text-main);
}
.notif-text strong {
color: var(--primary-color);
}
.notif-time {
font-size: 0.75rem;
color: var(--text-muted);
}
/* Light Mode Variables Adaptations */
.light-mode .dropdown-menu,
.light-mode .notif-sidebar {
background-color: #ffffff;
border-color: #e2e8f0;
}
.light-mode .dropdown-header strong,
.light-mode .notif-sidebar-header h3 {
color: #0f172a;
}
.light-mode .notif-item {
background: #f8fafc;
}
/* تنسيقات المعاينة والتحكم في أبعاد الصورة الشخصية */
.avatar-preview-container img {
width: 100%;
height: 100%;
object-fit: cover; /* دي أهم خاصية عشان الصورة متتمطش وتملى الدائرة بشكل ذكي */
object-position: center;
}
/* تحديث لأشكال الصور داخل الأواتار فوق لمنع التشويه */
.user-avatar img {
width: 44px;
height: 44px;
border-radius: 50%;
object-fit: cover; /* تضمن إن الصورة الجديدة تظهر دائرية ومظبوطة */
border: 2px solid var(--border-color);
transition: border-color 0.3s;
}
.user-avatar:hover img {
border-color: var(--primary-color);
}
/* تنسيق تبويب الإعدادات الجديد في السايدبار */
.sidebar-menu li.settings-tab a:hover {
background-color: rgba(0, 194, 184, 0.1);
color: var(--primary-color);
}
/* حالة النشاط (Active) لما اليوزر يكون جوه صفحة الإعدادات */
.sidebar-menu li.settings-tab.active a {
background-color: rgba(0, 194, 184, 0.15);
color: var(--primary-color);
border-left: 3px solid var(--primary-color);
border-radius: 0 12px 12px 0; /* انسيابية مع الحواف */
}