Muzanfer commited on
Commit
c904148
·
verified ·
1 Parent(s): cf29da0

Muzaffer, dolmuş takip uygulaman için bir **admin paneli** tasarlarken ihtiyaç duyacağın **tüm sayfaları**, her birinin **amaçlarını**, içeriklerini ve yönetsel fonksiyonlarını sana **mimari bakış açısıyla detaylı şekilde** İngilizce olarak açıklıyorum. Bu liste gerçek bir üretim sistemini karşılayacak kadar kapsamlıdır, ancak gereksiz şişkinlik yoktur.

Browse files

---

# **Admin Panel – Full Page & Feature Breakdown (English)**

Below is a complete, production-grade page list for a minibus/transport tracking system.
Each page includes **Purpose**, **Key Features**, and **Data Elements**.

---

# **1. Dashboard**

### **Purpose**

Give administrators a real-time overview of the entire transportation system.

### **Key Features**

* Live vehicle count (Online / Offline / Active / Idle)
* Map preview showing all active vehicles
* Today’s trip statistics (completed, ongoing, cancelled)
* Recent alerts (overspeed, route deviation, driver logout, GPS loss)
* System health indicators (Socket server status, API latency, Redis health)

### **Data Elements**

* Vehicle statuses
* Active route counts
* Today’s ridership summary
* Driver activity summary

---

# **2. Vehicle Management**

## **2.1 Vehicle List**

### **Purpose**

Manage all registered minibuses.

### **Key Features**

* Search & filter (plate, driver, route, status)
* Status badges (Active, In Maintenance, Offline)
* Bulk actions (assign route, enable/disable, update)

## **2.2 Add / Edit Vehicle**

### **Purpose**

Register or update a vehicle.

### **Fields**

* Plate number
* Vehicle ID / Code
* Brand & model
* Capacity
* Assigned route
* Assigned driver
* GPS device ID (optional)
* Activation status

---

# **3. Driver Management**

## **3.1 Driver List**

### **Purpose**

View and manage all drivers.

### **Key Features**

* Driver status (Online, Offline, On Trip)
* Assigned vehicle & assigned route
* Search by name, phone, license type

## **3.2 Add / Edit Driver**

### **Fields**

* Name / surname
* Phone number
* Profile photo
* License type & expiry
* Assigned vehicle
* Assigned route
* Employment status

## **3.3 Driver Activity Logs**

### **Purpose**

Track all driver actions.

### **Logs Include**

* Login / Logout timestamps
* Trip started / ended
* Speeding history
* Route deviation events
* Manual overrides

---

# **4. Route Management**

## **4.1 Route List**

### **Purpose**

Manage predefined routes.

### **Key Features**

* Route name & code
* Total stops count
* Assigned vehicles
* Assigned drivers
* Route length (km)
* Edit / Delete

## **4.2 Add / Edit Route**

### **Fields**

* Route name
* Route code
* Start point / End point
* Stops (with coordinates)
* Expected travel time
* Color tag (for map display)
* Active status

## **4.3 Route Visualization Screen**

### **Purpose**

Preview routes on a map with all stops.

---

# **5. Live Tracking (Real-Time Map)**

### **Purpose**

Monitor live vehicle movement in real time.

### **Key Features**

* Map showing all active vehicles
* Filter by route, driver, vehicle
* Click any vehicle to view:

* Speed
* Heading
* Last update time
* Driver name
* Current route
* Toggle route layers on map
* Playback mode:

* Replay past 1 hour of movement (useful for debugging)

---

# **6. Trip Management**

## **6.1 Trip List**

### **Purpose**

List all past and ongoing trips.

### **Columns**

* Trip ID
* Vehicle
* Driver
* Route
* Start time / End time
* Duration
* Status (Completed / Cancelled / In Progress)

## **6.2 Trip Details**

### **Purpose**

View detailed trip breakdown.

### **Information**

* Speed chart
* GPS path plotted on map
* Stops reached
* Alerts triggered during trip
* Passenger count (if available)

---

# **7. Passenger Management (Optional Feature)**

If your system includes passenger login or ticketing:

### **Features**

* Passenger list
* Ride history
* Balance / credits
* Blacklist / ban functionality

---

# **8. Alerts & Notifications**

### **Purpose**

Monitor system anomalies.

### **Alert Types**

* GPS lost
* Overspeed (> X km/h)
* Route deviation
* Driver logout during trip
* Vehicle inactive > X minutes

### **Features**

* Real-time alert feed
* Alerts filtering
* Resolve / acknowledge alert
* Export alert history

---

# **9. Reports**

A professional admin panel must include detailed reporting.

### **Report Types**

* Daily / Monthly trip summary
* Driver performance report
* Route efficiency report
* Vehicle usage report
* Speed violation report
* Passenger usage report

### **Export Options**

* PDF
* CSV
* Excel

---

# **10. System Settings**

### **Purpose**

Let administrators configure global system parameters.

### **Settings**

* Speed limit threshold
* GPS update interval (e.g., 5s)
* Allowed socket reconnect attempts
* Map provider (Google / Mapbox)
* API keys
* Timezone / locale
* Maintenance mode toggle

---

# **11. User & Role Management**

### **Purpose**

Control admin panel accounts and permissions.

### **Features**

* Admin user list
* Roles:

* Super Admin
* Route Manager
* Fleet Manager
* Viewer
* Assign permissions:

* View only
* Edit
* Delete
* Full control

---

# **12. Logs**

### **Purpose**

Track system-level events.

### **Log Types**

* Authentication logs
* API error logs
* Socket connection logs
* Vehicle update logs
* Admin action logs

### **Features**

* Search by user, IP, date range
* Download logs
* Live log monitor (tail -f style)

---

# **13. Integration Management**

### **Purpose**

Manage external services.

### **Integrations**

* Redis configuration
* SMS provider
* Email provider
* GPS tracker provider
* Webhooks

---

# **14. Maintenance & Tools**

### **Purpose**

Provide system support utilities.

### **Tools**

* Clear cache
* Reset socket server
* Bulk import vehicles
* Bulk import routes
* Test WebSocket connection
* Test push notification

---

# **Summary Table**

| Page | Purpose |
| ------------------ | ---------------------------- |
| Dashboard | System overview |
| Vehicle Management | Add / edit / assign vehicles |
| Driver Management | Manage drivers and logs |
| Route Management | Create & visualize routes |
| Live Tracking | Real-time map view |
| Trip Management | Monitor trips |
| Alerts | Detect anomalies |
| Reports | Analytics & exports |
| Settings | System configuration |
| User & Roles | Permission control |
| Logs | System audit |
| Integrations | 3rd-party services |
| Maintenance | Utilities |

---

If istersen Muzaffer, sonraki adımda her sayfanın **UI wireframe taslaklarını** çizebilirim veya her sayfa için **TypeScript + React admin panel kod yapısı** sağlayabilirim.

Ne ile devam etmek istersin?

Files changed (6) hide show
  1. README.md +8 -5
  2. components/navbar.js +38 -0
  3. components/sidebar.js +99 -0
  4. index.html +147 -19
  5. script.js +29 -0
  6. style.css +45 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Dolmu Tracker Admin Panel
3
- emoji: 📈
4
- colorFrom: purple
5
- colorTo: red
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: Dolmuş Tracker Admin Panel 🚐
3
+ colorFrom: gray
4
+ colorTo: purple
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://huggingface.co/deepsite).
components/navbar.js ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .navbar {
7
+ height: 64px;
8
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
9
+ }
10
+ </style>
11
+ <nav class="navbar bg-white border-b border-gray-200 px-6 flex items-center justify-between w-full">
12
+ <div class="flex items-center">
13
+ <button id="sidebar-toggle" class="mr-4 text-gray-500 focus:outline-none lg:hidden">
14
+ <i data-feather="menu"></i>
15
+ </button>
16
+ <h1 class="text-xl font-bold text-gray-800">Dolmuş Tracker Admin</h1>
17
+ </div>
18
+
19
+ <div class="flex items-center space-x-4">
20
+ <div class="relative">
21
+ <button class="p-2 rounded-full hover:bg-gray-100 text-gray-600">
22
+ <i data-feather="bell"></i>
23
+ </button>
24
+ <span class="absolute top-0 right-0 w-2 h-2 bg-red-500 rounded-full"></span>
25
+ </div>
26
+
27
+ <div class="flex items-center space-x-2">
28
+ <div class="w-8 h-8 rounded-full bg-primary-500 flex items-center justify-center text-white font-medium">
29
+ M
30
+ </div>
31
+ <span class="hidden md:inline text-sm font-medium">Muzaffer</span>
32
+ </div>
33
+ </div>
34
+ </nav>
35
+ `;
36
+ }
37
+ }
38
+ customElements.define('custom-navbar', CustomNavbar);
components/sidebar.js ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomSidebar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .sidebar {
7
+ width: 240px;
8
+ transition: transform 0.3s ease-in-out;
9
+ }
10
+
11
+ @media (max-width: 1023px) {
12
+ .sidebar {
13
+ transform: translateX(-100%);
14
+ position: fixed;
15
+ z-index: 40;
16
+ height: 100vh;
17
+ background: white;
18
+ }
19
+
20
+ .sidebar.open {
21
+ transform: translateX(0);
22
+ }
23
+ }
24
+
25
+ .nav-item {
26
+ transition: all 0.2s ease;
27
+ }
28
+
29
+ .nav-item:hover {
30
+ background-color: #f3f4f6;
31
+ }
32
+
33
+ .nav-item.active {
34
+ background-color: #e5e7eb;
35
+ }
36
+ </style>
37
+ <aside class="sidebar bg-white border-r border-gray-200 h-full fixed lg:static">
38
+ <div class="p-4 space-y-6">
39
+ <div class="space-y-2">
40
+ <h3 class="px-4 text-xs font-semibold text-gray-500 uppercase tracking-wider">Dashboard</h3>
41
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md active">
42
+ <i data-feather="home" class="w-4 h-4 mr-3"></i>
43
+ Overview
44
+ </a>
45
+ </div>
46
+
47
+ <div class="space-y-2">
48
+ <h3 class="px-4 text-xs font-semibold text-gray-500 uppercase tracking-wider">Management</h3>
49
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
50
+ <i data-feather="truck" class="w-4 h-4 mr-3"></i>
51
+ Vehicles
52
+ </a>
53
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
54
+ <i data-feather="users" class="w-4 h-4 mr-3"></i>
55
+ Drivers
56
+ </a>
57
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
58
+ <i data-feather="map" class="w-4 h-4 mr-3"></i>
59
+ Routes
60
+ </a>
61
+ </div>
62
+
63
+ <div class="space-y-2">
64
+ <h3 class="px-4 text-xs font-semibold text-gray-500 uppercase tracking-wider">Monitoring</h3>
65
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
66
+ <i data-feather="map-pin" class="w-4 h-4 mr-3"></i>
67
+ Live Tracking
68
+ </a>
69
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
70
+ <i data-feather="clock" class="w-4 h-4 mr-3"></i>
71
+ Trip History
72
+ </a>
73
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
74
+ <i data-feather="alert-circle" class="w-4 h-4 mr-3"></i>
75
+ Alerts
76
+ </a>
77
+ </div>
78
+
79
+ <div class="space-y-2">
80
+ <h3 class="px-4 text-xs font-semibold text-gray-500 uppercase tracking-wider">System</h3>
81
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
82
+ <i data-feather="settings" class="w-4 h-4 mr-3"></i>
83
+ Settings
84
+ </a>
85
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
86
+ <i data-feather="users" class="w-4 h-4 mr-3"></i>
87
+ Users
88
+ </a>
89
+ <a href="#" class="nav-item flex items-center px-4 py-2 text-sm font-medium text-gray-900 rounded-md">
90
+ <i data-feather="file-text" class="w-4 h-4 mr-3"></i>
91
+ Reports
92
+ </a>
93
+ </div>
94
+ </div>
95
+ </aside>
96
+ `;
97
+ }
98
+ }
99
+ customElements.define('custom-sidebar', CustomSidebar);
index.html CHANGED
@@ -1,19 +1,147 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Dolmuş Tracker Admin</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
10
+ <script src="https://unpkg.com/feather-icons"></script>
11
+ <script>
12
+ tailwind.config = {
13
+ theme: {
14
+ extend: {
15
+ colors: {
16
+ primary: {
17
+ light: '#93C5FD',
18
+ DEFAULT: '#3B82F6',
19
+ dark: '#1D4ED8'
20
+ },
21
+ secondary: {
22
+ light: '#A7F3D0',
23
+ DEFAULT: '#10B981',
24
+ dark: '#047857'
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
+ </script>
31
+ </head>
32
+ <body class="bg-gray-50">
33
+ <custom-navbar></custom-navbar>
34
+ <div class="flex">
35
+ <custom-sidebar></custom-sidebar>
36
+ <main class="flex-1 p-8">
37
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
38
+ <div class="bg-white rounded-lg shadow p-6">
39
+ <div class="flex items-center justify-between">
40
+ <h3 class="text-gray-500 font-medium">Active Vehicles</h3>
41
+ <div class="p-3 rounded-full bg-primary-100 text-primary-600">
42
+ <i data-feather="truck"></i>
43
+ </div>
44
+ </div>
45
+ <p class="text-3xl font-bold mt-4">42</p>
46
+ <p class="text-green-500 text-sm mt-2">+5% from yesterday</p>
47
+ </div>
48
+
49
+ <div class="bg-white rounded-lg shadow p-6">
50
+ <div class="flex items-center justify-between">
51
+ <h3 class="text-gray-500 font-medium">Online Drivers</h3>
52
+ <div class="p-3 rounded-full bg-secondary-100 text-secondary-600">
53
+ <i data-feather="users"></i>
54
+ </div>
55
+ </div>
56
+ <p class="text-3xl font-bold mt-4">36</p>
57
+ <p class="text-green-500 text-sm mt-2">+3% from yesterday</p>
58
+ </div>
59
+
60
+ <div class="bg-white rounded-lg shadow p-6">
61
+ <div class="flex items-center justify-between">
62
+ <h3 class="text-gray-500 font-medium">Today's Trips</h3>
63
+ <div class="p-3 rounded-full bg-purple-100 text-purple-600">
64
+ <i data-feather="map"></i>
65
+ </div>
66
+ </div>
67
+ <p class="text-3xl font-bold mt-4">128</p>
68
+ <p class="text-red-500 text-sm mt-2">-2% from yesterday</p>
69
+ </div>
70
+
71
+ <div class="bg-white rounded-lg shadow p-6">
72
+ <div class="flex items-center justify-between">
73
+ <h3 class="text-gray-500 font-medium">Active Alerts</h3>
74
+ <div class="p-3 rounded-full bg-yellow-100 text-yellow-600">
75
+ <i data-feather="alert-circle"></i>
76
+ </div>
77
+ </div>
78
+ <p class="text-3xl font-bold mt-4">7</p>
79
+ <p class="text-yellow-500 text-sm mt-2">3 new alerts</p>
80
+ </div>
81
+ </div>
82
+
83
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
84
+ <div class="lg:col-span-2 bg-white rounded-lg shadow p-6">
85
+ <div class="flex items-center justify-between mb-6">
86
+ <h2 class="text-xl font-bold">Live Vehicle Map</h2>
87
+ <button class="flex items-center text-primary-600">
88
+ <i data-feather="maximize-2" class="w-4 h-4 mr-1"></i>
89
+ View Fullscreen
90
+ </button>
91
+ </div>
92
+ <div class="h-96 bg-gray-200 rounded-lg flex items-center justify-center">
93
+ <p class="text-gray-500">Map visualization will appear here</p>
94
+ </div>
95
+ </div>
96
+
97
+ <div class="bg-white rounded-lg shadow p-6">
98
+ <div class="flex items-center justify-between mb-6">
99
+ <h2 class="text-xl font-bold">Recent Alerts</h2>
100
+ <button class="text-sm text-primary-600">View All</button>
101
+ </div>
102
+ <div class="space-y-4">
103
+ <div class="flex items-start">
104
+ <div class="p-2 rounded-full bg-red-100 text-red-600 mr-3">
105
+ <i data-feather="alert-triangle" class="w-4 h-4"></i>
106
+ </div>
107
+ <div>
108
+ <p class="font-medium">Overspeed detected</p>
109
+ <p class="text-sm text-gray-500">Vehicle #DOL-42 exceeded 80km/h</p>
110
+ <p class="text-xs text-gray-400 mt-1">2 minutes ago</p>
111
+ </div>
112
+ </div>
113
+
114
+ <div class="flex items-start">
115
+ <div class="p-2 rounded-full bg-yellow-100 text-yellow-600 mr-3">
116
+ <i data-feather="map-pin" class="w-4 h-4"></i>
117
+ </div>
118
+ <div>
119
+ <p class="font-medium">Route deviation</p>
120
+ <p class="text-sm text-gray-500">Vehicle #DOL-17 left the route</p>
121
+ <p class="text-xs text-gray-400 mt-1">15 minutes ago</p>
122
+ </div>
123
+ </div>
124
+
125
+ <div class="flex items-start">
126
+ <div class="p-2 rounded-full bg-blue-100 text-blue-600 mr-3">
127
+ <i data-feather="wifi-off" class="w-4 h-4"></i>
128
+ </div>
129
+ <div>
130
+ <p class="font-medium">GPS disconnected</p>
131
+ <p class="text-sm text-gray-500">Vehicle #DOL-08 lost signal</p>
132
+ <p class="text-xs text-gray-400 mt-1">32 minutes ago</p>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ </main>
139
+ </div>
140
+
141
+ <script src="components/navbar.js"></script>
142
+ <script src="components/sidebar.js"></script>
143
+ <script src="script.js"></script>
144
+ <script>feather.replace();</script>
145
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
146
+ </body>
147
+ </html>
script.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener('DOMContentLoaded', function() {
2
+ // Initialize tooltips
3
+ const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
4
+ tooltipTriggerList.map(function (tooltipTriggerEl) {
5
+ return new bootstrap.Tooltip(tooltipTriggerEl);
6
+ });
7
+
8
+ // Sidebar toggle functionality (will be used in mobile view)
9
+ const sidebarToggle = document.getElementById('sidebar-toggle');
10
+ const sidebar = document.getElementById('sidebar');
11
+
12
+ if (sidebarToggle && sidebar) {
13
+ sidebarToggle.addEventListener('click', function() {
14
+ sidebar.classList.toggle('-translate-x-full');
15
+ });
16
+ }
17
+
18
+ // Feather icons replacement
19
+ feather.replace();
20
+
21
+ // Simulate data loading
22
+ setTimeout(() => {
23
+ const loadingElements = document.querySelectorAll('.loading-skeleton');
24
+ loadingElements.forEach(el => {
25
+ el.classList.remove('loading-skeleton');
26
+ el.classList.remove('animate-pulse');
27
+ });
28
+ }, 1500);
29
+ });
style.css CHANGED
@@ -1,28 +1,55 @@
 
 
1
  body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
 
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
2
+
3
  body {
4
+ font-family: 'Inter', sans-serif;
5
+ }
6
+
7
+ /* Custom scrollbar */
8
+ ::-webkit-scrollbar {
9
+ width: 8px;
10
+ height: 8px;
11
+ }
12
+
13
+ ::-webkit-scrollbar-track {
14
+ background: #f1f1f1;
15
+ }
16
+
17
+ ::-webkit-scrollbar-thumb {
18
+ background: #c1c1c1;
19
+ border-radius: 4px;
20
  }
21
 
22
+ ::-webkit-scrollbar-thumb:hover {
23
+ background: #a8a8a8;
 
24
  }
25
 
26
+ /* Animation classes */
27
+ .fade-in {
28
+ animation: fadeIn 0.3s ease-in-out;
 
 
29
  }
30
 
31
+ @keyframes fadeIn {
32
+ from { opacity: 0; }
33
+ to { opacity: 1; }
 
 
 
34
  }
35
 
36
+ /* Badge styles */
37
+ .badge {
38
+ @apply inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium;
39
  }
40
+
41
+ .badge-primary {
42
+ @apply bg-primary-100 text-primary-800;
43
+ }
44
+
45
+ .badge-secondary {
46
+ @apply bg-secondary-100 text-secondary-800;
47
+ }
48
+
49
+ .badge-warning {
50
+ @apply bg-yellow-100 text-yellow-800;
51
+ }
52
+
53
+ .badge-danger {
54
+ @apply bg-red-100 text-red-800;
55
+ }