Add Asiakaspalvelu email ticketing system

IMAP client for fetching emails from asiakaspalvelu@cuitunet.fi,
Freshdesk-style ticket management with status tracking, message
threading, reply/note functionality, and IMAP settings in API tab.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 08:52:00 +02:00
parent cc3a6c465d
commit 42e3648e3d
4 changed files with 1068 additions and 1 deletions

147
style.css
View File

@@ -1088,6 +1088,153 @@ span.empty {
color: #888;
}
/* Ticket status badges */
.ticket-status {
display: inline-block;
padding: 3px 10px;
border-radius: 12px;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.3px;
white-space: nowrap;
}
.ticket-status-uusi {
background: #3498db;
color: #fff;
}
.ticket-status-kasittelyssa {
background: #f39c12;
color: #fff;
}
.ticket-status-odottaa {
background: #f1c40f;
color: #333;
}
.ticket-status-ratkaistu {
background: #2ecc71;
color: #fff;
}
.ticket-status-suljettu {
background: #bdc3c7;
color: #555;
}
/* Ticket thread */
.ticket-thread {
display: flex;
flex-direction: column;
gap: 0.75rem;
margin: 1.25rem 0;
padding: 1rem 0;
border-top: 2px solid #f0f2f5;
border-bottom: 2px solid #f0f2f5;
max-height: 60vh;
overflow-y: auto;
}
.ticket-message {
border-radius: 10px;
padding: 0.75rem 1rem;
position: relative;
}
.ticket-msg-in {
background: #f0f7ff;
border-left: 3px solid #3498db;
}
.ticket-msg-out {
background: #eafaf1;
border-left: 3px solid #2ecc71;
}
.ticket-msg-note {
background: #fffbea;
border-left: 3px solid #f39c12;
}
.ticket-msg-header {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 0.5rem;
font-size: 0.82rem;
color: #555;
flex-wrap: wrap;
}
.ticket-msg-type {
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.3px;
opacity: 0.7;
}
.ticket-msg-time {
margin-left: auto;
color: #999;
font-size: 0.78rem;
}
.ticket-msg-body {
font-size: 0.9rem;
line-height: 1.6;
color: #333;
white-space: pre-wrap;
word-break: break-word;
}
/* Ticket reply form */
.ticket-reply-form {
padding-top: 1rem;
}
.ticket-reply-form textarea {
width: 100%;
padding: 10px 12px;
border: 2px solid #e0e0e0;
border-radius: 8px;
font-size: 0.9rem;
font-family: inherit;
resize: vertical;
transition: border-color 0.2s, box-shadow 0.2s;
}
.ticket-reply-form textarea:focus {
outline: none;
border-color: #0f3460;
box-shadow: 0 0 0 3px rgba(15, 52, 96, 0.1);
}
.btn-reply-tab {
background: #f0f2f5;
border: 2px solid transparent;
padding: 6px 14px;
border-radius: 8px;
font-size: 0.82rem;
font-weight: 600;
cursor: pointer;
color: #888;
transition: all 0.15s;
}
.btn-reply-tab:hover {
color: #555;
background: #e8ebf0;
}
.btn-reply-tab.active {
color: #0f3460;
background: #fff;
border-color: #0f3460;
}
/* Changelog */
.nowrap {
white-space: nowrap;