Major Features: - Authentication & Authorization with JWT and role-based access - Complete User Management System with CRUD operations - Course Management System with publishing and enrollment - Modern React UI with Tailwind CSS and responsive design - Internationalization (i18n) with English and Arabic support - File Upload System for images and documents - RESTful API with Express.js and Sequelize ORM - PostgreSQL database with proper relationships - Super Admin password change functionality - CSV import for bulk user creation - Modal-based user add/edit operations - Search, filter, and pagination capabilities Technical Improvements: - Fixed homepage routing and accessibility issues - Resolved API endpoint mismatches and data rendering - Enhanced security with proper validation and hashing - Optimized performance with React Query and caching - Improved error handling and user feedback - Clean code structure with ESLint compliance Bug Fixes: - Fixed non-functional Add/Edit/Delete buttons - Resolved CSV import BOM issues - Fixed modal rendering and accessibility - Corrected API base URL configuration - Enhanced backend stability and error handling This version represents a complete, production-ready Course Management System.
69 lines
No EOL
1.8 KiB
CSS
69 lines
No EOL
1.8 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
html {
|
|
font-family: 'Inter', system-ui, sans-serif;
|
|
}
|
|
|
|
body {
|
|
@apply bg-gray-50 text-gray-900;
|
|
}
|
|
}
|
|
|
|
@layer components {
|
|
.btn-primary {
|
|
@apply bg-primary-600 hover:bg-primary-700 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2;
|
|
}
|
|
|
|
.btn-secondary {
|
|
@apply bg-white hover:bg-gray-50 text-gray-700 font-medium py-2 px-4 rounded-lg border border-gray-300 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2;
|
|
}
|
|
|
|
.btn-danger {
|
|
@apply bg-red-600 hover:bg-red-700 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2;
|
|
}
|
|
|
|
.input-field {
|
|
@apply block w-full rounded-lg border-2 border-gray-300 bg-white shadow-sm px-4 py-2 text-base focus:border-primary-500 focus:ring-2 focus:ring-primary-200 focus:bg-blue-50 transition-all duration-150 placeholder-gray-400;
|
|
}
|
|
|
|
.card {
|
|
@apply bg-white rounded-lg shadow-sm border border-gray-200 p-6;
|
|
}
|
|
|
|
.card-hover {
|
|
@apply bg-white rounded-lg shadow-sm border border-gray-200 p-6 hover:shadow-md transition-shadow duration-200;
|
|
}
|
|
|
|
.badge {
|
|
@apply inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium;
|
|
}
|
|
|
|
.badge-primary {
|
|
@apply bg-primary-100 text-primary-800;
|
|
}
|
|
|
|
.badge-secondary {
|
|
@apply bg-gray-100 text-gray-800;
|
|
}
|
|
|
|
.badge-success {
|
|
@apply bg-green-100 text-green-800;
|
|
}
|
|
|
|
.badge-warning {
|
|
@apply bg-yellow-100 text-yellow-800;
|
|
}
|
|
|
|
.badge-danger {
|
|
@apply bg-red-100 text-red-800;
|
|
}
|
|
}
|
|
|
|
@layer utilities {
|
|
.text-balance {
|
|
text-wrap: balance;
|
|
}
|
|
} |