feat: implement route planning dashboard including KPIs, user workload tracking, and route assignment management features

This commit is contained in:
2026-08-29 11:55:03 -04:00
parent a0ea3fea48
commit cd5c57c5ee
41 changed files with 3811 additions and 151 deletions
@@ -233,6 +233,161 @@
cursor: not-allowed;
}
.file-label.has-error {
border-color: #F5A6A0;
background: var(--glm-rojo-ok);
}
.file-label.has-success {
border-color: var(--glm-verde);
background: var(--glm-verde-bg);
}
.preview-card {
padding: 12px;
border-radius: 4px;
border: 1px solid var(--glm-gris-medio);
background: var(--glm-surface);
font-size: 0.85rem;
}
.preview-success {
border-color: var(--glm-verde-claro);
background: var(--glm-verde-bg);
}
.preview-success .preview-header {
color: var(--glm-verde);
font-weight: 700;
display: flex;
align-items: center;
gap: 6px;
}
.preview-error {
border-color: #F5A6A0;
background: var(--glm-rojo-ok);
}
.preview-error .preview-header {
color: #D32F2F;
font-weight: 700;
display: flex;
align-items: center;
gap: 6px;
}
.preview-stats {
margin-top: 6px;
color: var(--glm-acero);
font-size: 0.8rem;
}
.preview-errors {
margin: 8px 0 0;
padding: 0 0 0 18px;
color: var(--glm-gris-oscuro);
font-size: 0.82rem;
}
.preview-errors li {
margin-bottom: 4px;
}
.error-value {
color: var(--glm-acero);
font-style: italic;
}
.more-errors {
color: var(--glm-acero);
font-style: italic;
}
.preview-loading {
color: var(--glm-acero);
font-size: 0.8rem;
}
.preview-loading-row {
display: flex;
align-items: center;
gap: 8px;
color: var(--glm-acero);
}
.params-card {
margin-top: 16px;
padding: 14px;
background: var(--glm-surface);
border: 1px solid var(--glm-gris-medio);
border-radius: 4px;
border-left: 3px solid var(--glm-azul);
}
.params-title {
margin: 0 0 10px;
font-size: 0.9rem;
color: var(--glm-azul);
font-weight: 700;
display: flex;
align-items: center;
gap: 6px;
}
.params-grid {
display: grid;
grid-template-columns: 1fr;
gap: 12px;
}
@media (min-width: 600px) {
.params-grid {
grid-template-columns: 1fr 1fr;
}
}
.param-field {
display: flex;
flex-direction: column;
gap: 4px;
}
.param-label {
font-size: 0.8rem;
font-weight: 600;
color: var(--glm-azul);
text-transform: uppercase;
letter-spacing: 0.2px;
}
.param-select {
padding: 8px 10px;
border: 1px solid var(--glm-gris-medio);
border-radius: 4px;
font-size: 0.9rem;
font-family: Arial, sans-serif;
background: #fff;
color: var(--glm-gris-oscuro);
}
.param-select:focus {
outline: none;
border-color: var(--glm-verde);
box-shadow: 0 0 0 2px rgba(108, 194, 74, 0.15);
}
.param-hint {
font-size: 0.75rem;
color: var(--glm-acero);
}
.hint-text {
color: var(--glm-acero);
font-size: 0.82rem;
margin-top: 4px;
}
.spinner-inline {
width: 16px;
height: 16px;