Support Ticket System Html Template Free Access
.btn-primary background: #3b82f6; color: white; border: none; padding: 10px 20px; border-radius: 40px; font-weight: 600; font-size: 0.9rem; cursor: pointer; transition: 0.2s; display: inline-flex; align-items: center; gap: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.05);
.ticket-table td padding: 1rem 1rem; border-bottom: 1px solid #f0f2f5; vertical-align: middle; font-size: 0.9rem;
.action-icons i margin: 0 5px; color: #94a3b8; cursor: pointer; transition: 0.2s; support ticket system html template free
.btn-outline:hover background: #f8fafc; border-color: #94a3b8;
// Helper: update stats (open, in-progress, resolved, total) function updateStats() const total = tickets.length; const open = tickets.filter(t => t.status === "open").length; const inProgress = tickets.filter(t => t.status === "in-progress").length; const resolved = tickets.filter(t => t.status === "resolved").length; statsGrid.innerHTML = ` <div class="stat-card"><div class="stat-info"><h3>Total tickets</h3><div class="stat-number">$total</div></div><div class="stat-icon"><i class="fas fa-ticket"></i></div></div> <div class="stat-card"><div class="stat-info"><h3>Open</h3><div class="stat-number">$open</div></div><div class="stat-icon"><i class="fas fa-inbox"></i></div></div> <div class="stat-card"><div class="stat-info"><h3>In progress</h3><div class="stat-number">$inProgress</div></div><div class="stat-icon"><i class="fas fa-spinner"></i></div></div> <div class="stat-card"><div class="stat-info"><h3>Resolved</h3><div class="stat-number">$resolved</div></div><div class="stat-icon"><i class="fas fa-check-circle"></i></div></div> `; .btn-primary background: #3b82f6
.filter-group display: flex; gap: 12px; flex-wrap: wrap;
.ticket-table tr:hover td background-color: #fafcff; padding: 10px 20px
<!-- tickets table --> <div class="tickets-container"> <table class="ticket-table" id="ticketTable"> <thead> <tr> <th>Ticket ID</th><th>Subject</th><th>Status</th><th>Priority</th><th>Created</th><th>Actions</th> </tr> </thead> <tbody id="ticketTableBody"> <!-- dynamic rows injected --> </tbody> </table> </div> <div class="footer-note"> <i class="fas fa-headset"></i> Free support ticket template — fully functional demo with mock data, add & filter tickets </div> </div>
// DOM elements const tbody = document.getElementById("ticketTableBody"); const statsGrid = document.getElementById("statsGrid"); const filterBtns = document.querySelectorAll(".filter-btn"); const searchInput = document.getElementById("searchInput"); const newTicketBtn = document.getElementById("newTicketBtn"); const modal = document.getElementById("ticketModal"); const closeModalBtn = document.getElementById("closeModalBtn"); const ticketForm = document.getElementById("ticketForm"); const exportBtn = document.getElementById("exportBtn");
/* status badges */ .status-badge display: inline-flex; align-items: center; gap: 6px; background: #eef2ff; color: #1e40af; padding: 4px 12px; border-radius: 100px; font-size: 0.75rem; font-weight: 600; width: fit-content;