This document provides a comprehensive overview of the design system used in the Lecture Management System (LMS). Use this as a reference to replicate the design in other projects.
- Color Schema
- Typography
- Layout & Structure
- Component Design
- Spacing & Sizing
- Shadows & Effects
- Responsive Design
- Animations & Transitions
--primary-color: #4f46e5; /* Indigo 600 - Main brand color */
--primary-dark: #4338ca; /* Indigo 700 - Darker variant */
--primary-light: #818cf8; /* Indigo 400 - Lighter variant */
--vibrant-blue: #0ea5e9; /* Sky 500 - Accent color */
--success-color: #10b981; /* Emerald 500 */
--warning-color: #f59e0b; /* Amber 500 */
--danger-color: #ef4444; /* Red 500 */
--text-primary: #1f2937; /* Gray 800 - Main text */
--text-secondary: #4b5563; /* Gray 600 - Secondary text */
--text-light: #6b7280; /* Gray 500 - Muted text */
--border-color: #e5e7eb; /* Gray 200 */
--card-bg: #ffffff; /* White */
--bg-light: #f9fafb; /* Gray 50 */
--bg-body: #f3f4f6; /* Gray 100 - Page background */--primary-color: #8b5cf6; /* Violet 500 - More vibrant purple */
--primary-dark: #7c3aed; /* Violet 600 */
--primary-light: #a78bfa; /* Violet 400 */
--vibrant-blue: #60a5fa; /* Blue 400 - Brighter for visibility */
--success-color: #10b981; /* Emerald 500 */
--warning-color: #f59e0b; /* Amber 500 */
--danger-color: #ef4444; /* Red 500 */
--text-primary: #f8fafc; /* Slate 50 - Bright white */
--text-secondary: #e2e8f0; /* Slate 200 */
--text-light: #cbd5e1; /* Slate 300 */
--border-color: #475569; /* Slate 600 */
--card-bg: #1e293b; /* Slate 800 - Card background */
--bg-light: #334155; /* Slate 700 */
--bg-body: #0f172a; /* Slate 900 - Deep blue-black background */--primary-gradient: linear-gradient(135deg, #4f46e5 0%, #818cf8 100%);
--success-gradient: linear-gradient(135deg, #10b981 0%, #34d399 100%);
--warning-gradient: linear-gradient(135deg, #f59e0b 0%, #fbbf24 100%);
--danger-gradient: linear-gradient(135deg, #ef4444 0%, #f87171 100%);--primary-gradient: linear-gradient(135deg, #7c3aed 0%, #a78bfa 100%);
--success-gradient: linear-gradient(135deg, #059669 0%, #10b981 100%);
--warning-gradient: linear-gradient(135deg, #d97706 0%, #f59e0b 100%);
--danger-gradient: linear-gradient(135deg, #dc2626 0%, #ef4444 100%);The system includes 5 preset color templates for each mode:
Light Mode Templates:
- Ocean Breeze (Blue/Teal)
- Forest Walk (Green/Earth)
- Sunset Glow (Orange/Red)
- Lavender Dream (Purple/Lilac)
- Corporate Blue (Deep Blue)
Dark Mode Templates:
- Midnight Blue
- Matrix Code (Black/Green)
- Vampire Night (Purple/Pink)
- Coffee House (Brown/Gray)
- Cyberpunk (Neon Pink/Blue)
font-family: 'Inter', sans-serif;- Extra Large Headings:
1.75rem(28px) - Large Headings:
1.5rem(24px) - Medium Headings:
1.25rem(20px) - Section Titles:
1.125rem(18px) - Body Text:
0.875rem(14px) - Small Text:
0.75rem(12px) - Extra Small:
0.7rem(11.2px)
- Bold:
700(Headings, important text) - Semibold:
600(Subheadings, card titles) - Medium:
500(Buttons, labels) - Regular:
400(Body text)
- Primary text:
var(--text-primary) - Secondary text:
var(--text-secondary) - Muted/light text:
var(--text-light) - Links/interactive:
var(--primary-color)
┌─────────────────────────────────────────┐
│ Sidebar (280px) │ Main Content │
│ │ │
│ - Logo/Title │ - Mobile Header │
│ - User Profile │ - Content Area │
│ - Navigation │ - Cards/Grids │
│ - Theme Toggle │ │
│ - Logout │ │
└─────────────────────────────────────────┘
- Width:
280px - Background: White (light) /
var(--card-bg)(dark) - Border:
1px solid var(--border-color)on right - Mobile: Fixed position, slides in from left
- Sections:
- Header with logo/title
- User profile card
- Navigation links
- Footer with logout
- Padding:
2rem(desktop),1rem(mobile) - Max Width:
1200pxfor content containers - Background:
var(--bg-body)
/* User/Lecture/Announcement Grids */
display: grid;
grid-template-columns: repeat(3, 1fr); /* Desktop */
gap: 1.5rem;
/* Tablet (769px - 1024px) */
grid-template-columns: repeat(2, 1fr);
/* Mobile (< 768px) */
grid-template-columns: 1fr;background-color: white / var(--card-bg);
border-radius: 0.5rem; /* var(--radius-lg) */
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
padding: 1.5rem;
margin-bottom: 1.5rem;┌──────────────────────────┐
│ Card Header │ ← padding: 1.5rem, border-bottom
├──────────────────────────┤
│ Card Body │ ← padding: 1.25rem, flex: 1
│ │
├──────────────────────────┤
│ Card Footer │ ← padding: 1rem, bg: var(--bg-light)
└──────────────────────────┘
.lecture-card:hover,
.announcement-card:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}background: var(--primary-gradient);
color: white;
padding: 0.75rem 1.5rem;
border-radius: 0.375rem;
font-weight: 500;
transition: all 0.2s ease-in-out;Hover State:
background: linear-gradient(135deg, var(--primary-dark) 0%, var(--primary-color) 100%);Dark Mode Hover:
background: linear-gradient(135deg, var(--vibrant-blue) 0%, var(--primary-light) 100%);
box-shadow: var(--shadow-md);
transform: translateY(-1px);background-color: var(--bg-light);
color: var(--text-primary);
/* Same padding and border-radius as primary */Hover (Light): background-color: #e5e7eb
Hover (Dark): background-color: var(--primary-dark); color: white
background-color: rgba(239, 68, 68, 0.1);
color: var(--danger-color);Hover: background-color: rgba(239, 68, 68, 0.2)
font-size: 0.75rem;
font-weight: 500;
padding: 0.25rem 0.75rem;
border-radius: 9999px; /* Fully rounded */
color: white;
box-shadow: var(--shadow);Subject Tag (First):
background: linear-gradient(135deg, #2563eb 0%, #60a5fa 100%);Stage Tag (Last):
background: linear-gradient(135deg, #7c3aed 0%, #a78bfa 100%);- Admin:
var(--primary-gradient) - Teacher:
var(--success-gradient) - Student:
var(--warning-gradient)
- Homework: Blue gradient
#2563eb → #60a5fa - Exam: Red gradient
#dc2626 → #ef4444 - Event: Purple gradient
#7c3aed → #a78bfa - Other: Gray gradient
#475569 → #94a3b8
width: 100%;
padding: 0.75rem;
border: 1px solid var(--border-color);
border-radius: 0.375rem;
font-size: 0.875rem;
transition: all 0.2s ease-in-out;Focus State:
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
outline: none;/* Icon positioned absolutely */
.input-icon {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
color: var(--text-light);
}
/* Input with left padding for icon */
.input-field.pl-10 {
padding-left: 2.5rem;
}/* Same as input field, plus: */
appearance: none;
background-image: url("data:image/svg+xml,..."); /* Custom arrow */
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 1rem;
padding-right: 2.5rem;display: flex;
align-items: center;
width: 100%;
padding: 0.75rem 1.5rem;
color: var(--text-secondary);
font-size: 0.875rem;
transition: all 0.2s ease-in-out;Icon Spacing:
svg {
margin-right: 0.75rem;
}Hover/Active State:
background-color: var(--bg-light);
color: var(--primary-color);position: absolute;
top: -5px;
right: -5px;
background-color: var(--danger-color);
color: white;
font-size: 0.75rem;
font-weight: 600;
width: 18px;
height: 18px;
border-radius: 50%;position: absolute;
top: 100%;
right: 0;
width: 320px;
background-color: white / var(--card-bg);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-lg);
margin-top: 0.5rem;
animation: fadeIn 0.2s ease;Animation:
@keyframes fadeIn {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}padding: 1rem;
border-bottom: 1px solid var(--border-color);
cursor: pointer;
transition: var(--transition);Unread State:
background-color: rgba(79, 70, 229, 0.05); /* Light */
background-color: rgba(139, 92, 246, 0.15); /* Dark */Hover:
background-color: var(--bg-light);--radius: 0.375rem; /* 6px - Small elements */
--radius-lg: 0.5rem; /* 8px - Cards, modals */- 0.25rem (4px): Tight spacing, badge padding
- 0.5rem (8px): Small gaps, tag spacing
- 0.75rem (12px): Input padding, button padding
- 1rem (16px): Standard spacing, margins
- 1.25rem (20px): Card body padding
- 1.5rem (24px): Card padding, section margins
- 2rem (32px): Large spacing, main content padding
- Avatar Small:
40px × 40px - Avatar Large:
48px × 48px - Avatar Creator:
60px × 60px - Icon Button:
40px × 40px - Notification Badge:
18px × 18px - Sidebar Width:
280px - Mobile Header Height:
60px
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1);Dark Mode Shadows:
/* Increase opacity to 0.3 for better visibility */
--shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.3);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.3);Cards maintain a clean, flat design without glassmorphism. Background colors are solid with subtle shadows for depth.
- Mobile:
< 768px - Tablet:
769px - 1024px - Desktop:
> 1024px
/* Show mobile header */
.mobile-header {
display: flex;
height: 60px;
position: fixed;
top: 0;
width: 100%;
}
/* Hide sidebar by default */
.sidebar {
position: fixed;
transform: translateX(-100%);
}
/* Sidebar open state */
.sidebar-open {
transform: translateX(0);
}
/* Main content with top margin */
.main-content {
padding: 1rem;
margin-top: 60px;
}.user-grid,
.lecture-grid,
.announcement-grid {
grid-template-columns: 1fr; /* Single column */
}.search-filter-container {
flex-direction: column; /* Stack vertically */
}.user-grid,
.lecture-grid,
.announcement-grid {
grid-template-columns: repeat(2, 1fr); /* Two columns */
}--transition: all 0.2s ease-in-out;.card:hover {
transform: translateY(-2px);
}.btn-primary:hover {
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}.loading-spinner {
width: 1.5rem;
height: 1.5rem;
border: 2px solid rgba(255, 255, 255, 0.3);
border-radius: 50%;
border-top-color: white;
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}.lecture-tag:hover {
transform: scale(1.05);
}.theme-transition {
transition-property: color, background-color, border-color;
transition-duration: 300ms;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}- Use CSS variables for all colors, spacing, and sizing
- Maintain consistent border-radius across components
- Apply uniform shadow levels based on hierarchy
- Primary actions use gradient backgrounds
- Secondary actions use subtle backgrounds
- Danger actions use red color scheme
- Text hierarchy: primary → secondary → light
- High contrast ratios in both light and dark modes
- Focus states with visible outlines
- Sufficient spacing for touch targets (minimum 40px)
- Semantic HTML structure
- Mobile-first approach
- Flexible grids that adapt to screen size
- Touch-friendly interface on mobile
- Collapsible sidebar on small screens
- Hover states on interactive elements
- Loading states for async operations
- Success/error messages with appropriate colors
- Smooth transitions for state changes
- Separate color palettes for light/dark modes
- Increased shadow opacity in dark mode
- Brighter accent colors for visibility
- Smooth theme transitions
When implementing this design in a new project:
- Set up CSS variables for colors (light and dark modes)
- Import Inter font from Google Fonts
- Define spacing and sizing variables
- Create base card component styles
- Implement button variants (primary, secondary, danger)
- Set up grid layouts with responsive breakpoints
- Add form input styles with focus states
- Create navigation component with active states
- Implement tag/badge components
- Add shadow levels
- Set up transition variables
- Create mobile header and sidebar toggle
- Test responsive behavior at all breakpoints
- Verify dark mode color contrast
- Add loading and error states
- Implement notification system
- Test accessibility (keyboard navigation, screen readers)
The LMS includes a built-in color customization feature that allows users to:
- Choose from preset color templates
- Customize individual colors (primary, background, text, etc.)
- Save preferences separately for light and dark modes
- Preview changes in real-time
- Reset to default colors
This is managed through:
ColorSettingsManagerutility classColorCustomizationReact component- LocalStorage for persistence
- CSS variable updates for live preview
- Clean, centered login/signup forms
- Gradient logo circle
- Maximum width of 400px
- Subtle background gradient
- Full-height viewer with controls
- Navigation buttons for pages
- Zoom controls
- Responsive height adjustments
- Banner image header (250px height)
- Gradient title text
- Creator card with avatar
- Feature list with bullet points
- Dashed border dropzone
- Visual feedback on file selection
- Progress bar with gradient fill
- Success/error messages
End of Design System Guide
Use this document as a reference to maintain design consistency or replicate the design system in other projects. All measurements, colors, and patterns are production-ready and tested across devices.