diff --git a/package.json b/package.json
index f6f7682..d87b8d8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ticketsystem",
- "version": "1.2.0",
+ "version": "1.3",
"description": "",
"main": "server.js",
"scripts": {
diff --git a/public/admin-script.js b/public/admin-script.js
index 5a837cd..3b41190 100644
--- a/public/admin-script.js
+++ b/public/admin-script.js
@@ -191,7 +191,6 @@ document.addEventListener('DOMContentLoaded', () => {
| ${ticket.id} |
${escapeHtml(shortTitle)} |
- ${escapeHtml(ticket.requester)} |
${escapeHtml(ticket.category) || '-'} |
${escapeHtml(ticket.status) || 'Unknown'} |
${escapeHtml(ticket.priority) || 'None'} |
diff --git a/public/admin.css b/public/admin.css
index 5cd08a0..9cca409 100644
--- a/public/admin.css
+++ b/public/admin.css
@@ -1,179 +1,124 @@
-/* admin.css - Dark Mode Only */
-
-/* ===== GLOBAL STYLES & VARIABLES ===== */
-@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
-
-:root {
- --primary-color: #4A90E2;
- --primary-hover-color: #357ABD;
- --secondary-color: #50E3C2;
- --accent-color: #F5A623;
- --success-color: #7ED321;
- --danger-color: #D0021B;
- --neutral-dark: #f0f0f0;
- --neutral-medium: #cccccc;
- --neutral-light: #999999;
- --bg-color: #121212;
- --card-bg-color: #1e1e1e;
- --border-color: #2a2a2a;
- --shadow-color: rgba(0, 0, 0, 0.5);
- --text-color: #f5f5f5;
- --link-color: var(--primary-color);
- --font-family: 'Inter', sans-serif;
- --border-radius: 8px;
- --card-padding: 25px;
- --input-padding: 12px 15px;
- --transition-speed: 0.2s ease-in-out;
-}
-
-* {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
-}
-
-body {
- font-family: var(--font-family);
- background-color: var(--bg-color);
- color: var(--text-color);
- font-size: 16px;
- line-height: 1.6;
-}
-
-a {
- color: var(--link-color);
- text-decoration: none;
- transition: color var(--transition-speed);
-}
-a:hover {
- color: var(--primary-hover-color);
- text-decoration: underline;
-}
-
-/* ===== UTILITY CLASSES ===== */
-.container {
- max-width: 1400px;
- margin: auto;
- padding: 20px 30px;
-}
-
-/* ===== HEADER ===== */
-.header {
- background: var(--card-bg-color);
- padding: 20px var(--card-padding);
- border-radius: var(--border-radius);
- box-shadow: 0 2px 10px var(--shadow-color);
- margin-bottom: 30px;
- display: flex;
- justify-content: space-between;
- align-items: center;
- gap: 20px;
-}
-
-.header h1 {
- color: var(--primary-color);
- font-size: 1.7rem;
- font-weight: 700;
- display: flex;
- align-items: center;
-}
-.header h1 i {
- margin-right: 12px;
-}
-
-/* ===== SECTION HEADER ===== */
-.section-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 25px;
- flex-wrap: wrap;
- gap: 15px;
-}
-.section-header h2 {
- color: var(--neutral-dark);
- font-size: 1.6rem;
- font-weight: 700;
-}
-.section-header h2 i {
- margin-right: 10px;
- color: var(--primary-color);
-}
+/* admin.css - Glassmorphism + Gradient Design (Admin) */
+/* NOTE: admin.html also loads user.css for shared base styles */
/* ===== STATS CARDS ===== */
.admin-stats {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
- gap: 20px;
- background: var(--card-bg-color);
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
+ gap: 16px;
+ background: var(--glass-bg);
+ backdrop-filter: blur(var(--card-blur));
+ -webkit-backdrop-filter: blur(var(--card-blur));
+ border: 1px solid var(--glass-border);
padding: var(--card-padding);
- border-radius: var(--border-radius);
+ border-radius: var(--border-radius-lg);
margin-bottom: 30px;
- box-shadow: 0 4px 15px var(--shadow-color);
+ box-shadow: var(--glass-shadow);
}
+
.stat-card {
text-align: center;
+ padding: 12px;
+ background: rgba(30, 30, 30, 0.3);
+ border-radius: var(--border-radius);
+ border: 1px solid rgba(148, 163, 184, 0.06);
+ transition: all var(--transition-speed);
}
+.stat-card:hover {
+ border-color: rgba(99, 102, 241, 0.2);
+ background: rgba(99, 102, 241, 0.05);
+}
+
.stat-value {
- font-size: 2.5rem;
+ font-size: 2.4rem;
color: var(--primary-color);
- font-weight: bold;
+ font-weight: 800;
+ line-height: 1.2;
+}
+ font-weight: 800;
+ line-height: 1.2;
}
.stat-label {
- font-size: 1rem;
+ font-size: 0.9rem;
color: var(--neutral-medium);
+ margin-top: 4px;
}
/* ===== FILTERS ===== */
.admin-filters {
display: flex;
flex-wrap: wrap;
- gap: 15px;
+ gap: 12px;
}
.admin-filters input,
.admin-filters select {
padding: var(--input-padding);
- background: #1c1c1c;
- border: 1px solid var(--border-color);
+ background: rgba(30, 30, 30, 0.5);
+ backdrop-filter: blur(8px);
+ border: 1px solid var(--glass-border);
color: var(--text-color);
border-radius: var(--border-radius);
font-size: 0.95rem;
+ font-family: var(--font-family);
+ transition: border-color var(--transition-speed), box-shadow var(--transition-speed);
+}
+.admin-filters input:focus,
+.admin-filters select:focus {
+ outline: none;
+ border-color: var(--primary-color);
+ box-shadow: 0 0 0 3px var(--primary-glow);
}
-/* ===== TICKET TABLE STYLES (OPEN + CLOSED) ===== */
+/* ===== TICKET TABLE ===== */
.admin-tickets-list {
- background: var(--card-bg-color);
+ background: var(--glass-bg);
+ backdrop-filter: blur(var(--card-blur));
+ -webkit-backdrop-filter: blur(var(--card-blur));
+ border: 1px solid var(--glass-border);
padding: var(--card-padding);
- border-radius: var(--border-radius);
+ border-radius: var(--border-radius-lg);
+ overflow-x: auto;
}
+
table {
width: 100%;
border-collapse: collapse;
font-size: 0.95rem;
}
-table th,
-table td {
+table th, table td {
padding: 12px 15px;
text-align: left;
- border-bottom: 1px solid var(--border-color);
+ border-bottom: 1px solid rgba(148, 163, 184, 0.08);
color: var(--text-color);
}
table th {
- background: #1a1a1a;
+ background: rgba(30, 30, 30, 0.4);
color: var(--neutral-medium);
font-weight: 600;
text-transform: uppercase;
font-size: 0.8rem;
+ letter-spacing: 0.5px;
+}
+table tr {
+ transition: background var(--transition-speed);
+}
+table tbody tr:hover {
+ background: rgba(99, 102, 241, 0.05);
+}
+.empty-table {
+ text-align: center;
+ color: var(--neutral-light);
+ padding: 30px !important;
}
-/* ===== TABLE ACTION BUTTONS ===== */
+/* ===== TABLE BUTTONS ===== */
.table-actions {
display: flex;
gap: 8px;
justify-content: center;
}
.table-btn {
- padding: 6px 10px;
+ padding: 7px 12px;
border-radius: var(--border-radius);
color: white;
font-size: 0.85rem;
@@ -181,76 +126,64 @@ table th {
align-items: center;
gap: 5px;
cursor: pointer;
+ border: none;
+ transition: all var(--transition-speed);
}
-.view-btn {
- background-color: var(--primary-color);
+.table-btn.view-btn {
+ background: var(--primary-color);
+
}
-.view-btn:hover {
- background-color: var(--primary-hover-color);
+.table-btn.view-btn:hover {
+ transform: translateY(-1px);
+
}
-.delete-btn {
- background-color: var(--danger-color);
+.table-btn.delete-btn {
+ background: #ef4444;
+
}
-.delete-btn:hover {
- background-color: #a60014;
+.table-btn.delete-btn:hover {
+ transform: translateY(-1px);
+
}
/* ===== BADGES ===== */
-.status-Open { background-color: rgba(74, 144, 226, 0.15); color: #4A90E2; }
-.status-In-Progress { background-color: rgba(245, 166, 35, 0.15); color: #F5A623; }
-.status-On-Hold { background-color: rgba(155, 155, 155, 0.15); color: #9B9B9B; }
-.status-Closed { background-color: rgba(126, 211, 33, 0.15); color: #7ED321; }
-
-.priority-Low { background-color: rgba(80, 227, 194, 0.2); color: #50E3C2; }
-.priority-Medium { background-color: rgba(74, 144, 226, 0.2); color: #4A90E2; }
-.priority-High { background-color: rgba(245, 166, 35, 0.2); color: #F5A623; }
-.priority-Urgent { background-color: rgba(208, 2, 27, 0.15); color: #D0021B; }
-
-.status-badge,
-.priority-badge {
- padding: 0.25em 0.6em;
+.status-badge, .priority-badge {
+ padding: 4px 12px;
border-radius: 9999px;
+ font-size: 0.82rem;
+ font-weight: 600;
+ white-space: nowrap;
}
-/* ===== CLOSED TICKETS SECTION ===== */
+.status-Open { background: rgba(99,102,241,0.15); color: #818cf8; }
+.status-In-Progress { background: rgba(245,158,11,0.15); color: #fbbf24; }
+.status-On-Hold { background: rgba(100,116,139,0.2); color: #94a3b8; }
+.status-Closed { background: rgba(34,197,94,0.15); color: #4ade80; }
+
+.priority-Low { background: rgba(6,182,212,0.15); color: #22d3ee; }
+.priority-Medium { background: rgba(99,102,241,0.15); color: #818cf8; }
+.priority-High { background: rgba(245,158,11,0.15); color: #fbbf24; }
+.priority-Urgent { background: rgba(239,68,68,0.15); color: #f87171; }
+
+/* ===== CLOSED TICKETS ===== */
.closed-tickets-section {
- margin-top: 30px;
-}
-.closed-tickets-section .section-header h2 {
- color: var(--success-color);
+ margin: 30px 30px 0;
+ position: relative;
+ z-index: 1;
}
/* ===== RESPONSIVE ===== */
@media (max-width: 768px) {
- .container {
- padding: 15px 20px;
- }
- .header {
- flex-direction: column;
- align-items: flex-start;
- }
- .section-header {
- flex-direction: column;
- align-items: flex-start;
- gap: 10px;
- }
+ .container { padding: 15px 20px; }
+ .header { flex-direction: column; align-items: flex-start; }
+ .section-header { flex-direction: column; align-items: flex-start; gap: 10px; }
+ .closed-tickets-section { margin: 20px 16px 0; }
}
@media (max-width: 480px) {
- .header h1 {
- font-size: 1.3rem;
- }
- .stat-value {
- font-size: 2rem;
- }
- .btn-primary,
- .btn-small {
- width: 100%;
- }
- table {
- font-size: 0.85rem;
- }
- table th,
- table td {
- padding: 8px 10px;
- }
-}
+ .header h1 { font-size: 1.3rem; }
+ .stat-value { font-size: 1.8rem; }
+ .admin-stats { grid-template-columns: repeat(2, 1fr); }
+ .btn-primary { width: 100%; }
+ table { font-size: 0.85rem; }
+ table th, table td { padding: 8px 10px; }
+}
\ No newline at end of file
diff --git a/public/admin.html b/public/admin.html
index 2316493..9854cfa 100644
--- a/public/admin.html
+++ b/public/admin.html
@@ -13,12 +13,12 @@