Files
Lucy ccd3962458 feat(design): add 16 new components + update 5 pages (ronda 2)
Bloqueantes POS: modal-pago, ticket-termico, banner-cliente, fkeys-footer, columnas-costo-margen
Componentes nuevos: calculadora-cambio, panel-deslizante, badge-cfdi, arbol-colapsable, tarjeta-metrica, grafica-barras, selector-periodo, etiqueta-codigo-barras
Estados: estado-vacio, banner-offline, modal-confirmacion
Páginas actualizadas: facturación, contabilidad, dashboard, configuración, reportes
2026-04-01 07:06:34 +00:00

353 lines
12 KiB
HTML

<!DOCTYPE html>
<html lang="es" data-theme="industrial">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nexus Autoparts — Badge CFDI</title>
<link rel="stylesheet" href="../tokens/tokens.css">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: var(--font-body); background: var(--color-bg-base);
color: var(--color-text-primary); padding: var(--space-8);
transition: var(--transition-normal);
}
.theme-switcher {
position: sticky; top: 0; z-index: calc(var(--z-modal) + 10);
display: flex; gap: var(--space-2);
padding: var(--space-3) var(--space-4);
background: var(--color-bg-elevated);
border-bottom: 1px solid var(--color-border);
margin: calc(-1 * var(--space-8)); margin-bottom: var(--space-8);
}
.theme-switcher button {
padding: var(--space-2) var(--space-4);
border: 1px solid var(--color-border);
background: var(--color-bg-base); color: var(--color-text-primary);
border-radius: var(--radius-md); cursor: pointer;
font-family: var(--font-body); font-size: var(--text-body-sm);
transition: var(--transition-fast);
}
.theme-switcher button.active {
background: var(--color-primary); color: var(--color-text-inverse);
border-color: var(--color-primary);
}
h1 { font-family: var(--font-heading); font-size: var(--text-h2);
font-weight: var(--heading-weight-primary); margin-bottom: var(--space-2);
color: var(--color-text-accent); }
.subtitle { color: var(--color-text-muted); font-size: var(--text-body); margin-bottom: var(--space-8); }
section { margin-bottom: var(--space-10); }
section > h2 {
font-family: var(--font-heading); font-size: var(--text-h4);
font-weight: var(--heading-weight-secondary); color: var(--color-text-secondary);
margin-bottom: var(--space-4); padding-bottom: var(--space-2);
border-bottom: 1px solid var(--color-border);
}
/* Badge base */
.badge {
display: inline-flex;
align-items: center;
gap: var(--space-2);
padding: var(--space-1) var(--space-3);
border-radius: var(--radius-full);
font-size: var(--text-caption);
font-weight: var(--font-weight-semibold);
letter-spacing: var(--tracking-wide);
text-transform: uppercase;
white-space: nowrap;
transition: var(--transition-fast);
border: 1px solid transparent;
line-height: 1.6;
}
/* Dot indicator */
.badge .dot {
width: 8px;
height: 8px;
border-radius: var(--radius-full);
flex-shrink: 0;
}
/* Pendiente — Blue / Primary */
.badge-pendiente {
background: var(--color-primary-muted);
color: var(--color-primary);
border-color: var(--color-primary);
}
.badge-pendiente .dot {
background: var(--color-primary);
}
/* Enviando — Yellow / Warning */
.badge-enviando {
background: var(--color-warning-light);
color: var(--color-warning-dark);
border-color: var(--color-warning);
}
.badge-enviando .dot {
background: var(--color-warning);
animation: pulse-dot 1.5s ease-in-out infinite;
}
/* Timbrada — Green / Success */
.badge-timbrada {
background: var(--color-success-light);
color: var(--color-success-dark);
border-color: var(--color-success);
}
.badge-timbrada .dot {
background: var(--color-success);
}
/* Fallida — Red / Error */
.badge-fallida {
background: var(--color-error-light);
color: var(--color-error-dark);
border-color: var(--color-error);
}
.badge-fallida .dot {
background: var(--color-error);
}
/* Cancelada — Gray / Muted */
.badge-cancelada {
background: var(--color-surface-2);
color: var(--color-text-muted);
border-color: var(--color-border-strong);
}
.badge-cancelada .dot {
background: var(--color-text-muted);
}
/* Pulse animation for Enviando */
@keyframes pulse-dot {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.75); }
}
/* Badge gallery */
.badge-gallery {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
align-items: center;
padding: var(--space-5);
background: var(--color-surface-1);
border: 1px solid var(--color-border);
border-radius: var(--radius-lg);
}
/* Badge sizes */
.badge-lg {
padding: var(--space-2) var(--space-4);
font-size: var(--text-body-sm);
}
.badge-lg .dot {
width: 10px;
height: 10px;
}
/* CFDI Table */
.cfdi-table {
width: 100%;
border-collapse: collapse;
background: var(--color-bg-elevated);
border: 1px solid var(--color-border);
border-radius: var(--radius-lg);
overflow: hidden;
}
.cfdi-table thead {
background: var(--color-surface-1);
}
.cfdi-table th {
padding: var(--space-3) var(--space-4);
text-align: left;
font-size: var(--text-caption);
font-weight: var(--font-weight-semibold);
color: var(--color-text-muted);
text-transform: uppercase;
letter-spacing: var(--tracking-wider);
border-bottom: 1px solid var(--color-border);
}
.cfdi-table td {
padding: var(--space-3) var(--space-4);
font-size: var(--text-body-sm);
color: var(--color-text-secondary);
border-bottom: 1px solid var(--color-border);
vertical-align: middle;
}
.cfdi-table tbody tr {
transition: var(--transition-fast);
}
.cfdi-table tbody tr:hover {
background: var(--color-primary-muted);
}
.cfdi-table tbody tr:last-child td {
border-bottom: none;
}
.cfdi-table .folio {
font-family: var(--font-mono);
font-weight: var(--font-weight-semibold);
color: var(--color-text-primary);
}
.cfdi-table .uuid {
font-family: var(--font-mono);
font-size: var(--text-caption);
color: var(--color-text-muted);
}
.cfdi-table .amount {
font-family: var(--font-mono);
text-align: right;
font-weight: var(--font-weight-semibold);
color: var(--color-text-primary);
}
.cfdi-table th.col-amount { text-align: right; }
/* Date column */
.cfdi-table .date {
font-size: var(--text-caption);
color: var(--color-text-muted);
white-space: nowrap;
}
/* Legend */
.legend {
display: flex;
flex-wrap: wrap;
gap: var(--space-4);
padding: var(--space-4) var(--space-5);
background: var(--color-surface-1);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
}
.legend-item {
display: flex;
align-items: center;
gap: var(--space-2);
font-size: var(--text-caption);
color: var(--color-text-secondary);
}
</style>
</head>
<body>
<div class="theme-switcher">
<button class="active" onclick="document.documentElement.dataset.theme='industrial'; this.classList.add('active'); this.nextElementSibling.classList.remove('active')">🔧 Industrial</button>
<button onclick="document.documentElement.dataset.theme='modern'; this.classList.add('active'); this.previousElementSibling.classList.remove('active')">⚡ Moderno</button>
</div>
<h1>Badge CFDI</h1>
<p class="subtitle">Indicadores de estatus para comprobantes fiscales digitales (CFDI)</p>
<!-- All badges inline -->
<section>
<h2>Variantes de Badge</h2>
<div class="badge-gallery">
<span class="badge badge-pendiente"><span class="dot"></span>Pendiente</span>
<span class="badge badge-enviando"><span class="dot"></span>Enviando</span>
<span class="badge badge-timbrada"><span class="dot"></span>Timbrada</span>
<span class="badge badge-fallida"><span class="dot"></span>Fallida</span>
<span class="badge badge-cancelada"><span class="dot"></span>Cancelada</span>
</div>
</section>
<!-- Large size -->
<section>
<h2>Tamaño Grande</h2>
<div class="badge-gallery">
<span class="badge badge-lg badge-pendiente"><span class="dot"></span>Pendiente</span>
<span class="badge badge-lg badge-enviando"><span class="dot"></span>Enviando</span>
<span class="badge badge-lg badge-timbrada"><span class="dot"></span>Timbrada</span>
<span class="badge badge-lg badge-fallida"><span class="dot"></span>Fallida</span>
<span class="badge badge-lg badge-cancelada"><span class="dot"></span>Cancelada</span>
</div>
</section>
<!-- Legend -->
<section>
<h2>Leyenda</h2>
<div class="legend">
<div class="legend-item"><span class="badge badge-pendiente"><span class="dot"></span>Pendiente</span> Generada, sin enviar al PAC</div>
<div class="legend-item"><span class="badge badge-enviando"><span class="dot"></span>Enviando</span> En proceso de timbrado</div>
<div class="legend-item"><span class="badge badge-timbrada"><span class="dot"></span>Timbrada</span> Timbrada correctamente por el SAT</div>
<div class="legend-item"><span class="badge badge-fallida"><span class="dot"></span>Fallida</span> Error al timbrar</div>
<div class="legend-item"><span class="badge badge-cancelada"><span class="dot"></span>Cancelada</span> Cancelada ante el SAT</div>
</div>
</section>
<!-- Table context -->
<section>
<h2>En Contexto: Lista de CFDI</h2>
<table class="cfdi-table">
<thead>
<tr>
<th>Folio</th>
<th>Cliente</th>
<th>UUID</th>
<th>Fecha</th>
<th class="col-amount">Total</th>
<th>Estatus</th>
</tr>
</thead>
<tbody>
<tr>
<td class="folio">FA-00142</td>
<td>Taller Hermanos López</td>
<td class="uuid">a8d2e1f4-3b7c-...</td>
<td class="date">01/Abr/2026</td>
<td class="amount">$18,450.00</td>
<td><span class="badge badge-timbrada"><span class="dot"></span>Timbrada</span></td>
</tr>
<tr>
<td class="folio">FA-00141</td>
<td>Roberto Méndez G.</td>
<td class="uuid">c3f1a902-7d4e-...</td>
<td class="date">01/Abr/2026</td>
<td class="amount">$4,828.50</td>
<td><span class="badge badge-enviando"><span class="dot"></span>Enviando</span></td>
</tr>
<tr>
<td class="folio">FA-00140</td>
<td>Auto Partes del Norte SA</td>
<td class="uuid">--</td>
<td class="date">31/Mar/2026</td>
<td class="amount">$32,100.00</td>
<td><span class="badge badge-pendiente"><span class="dot"></span>Pendiente</span></td>
</tr>
<tr>
<td class="folio">FA-00139</td>
<td>María Elena Ríos</td>
<td class="uuid">f7e2d301-1a9b-...</td>
<td class="date">30/Mar/2026</td>
<td class="amount">$1,250.00</td>
<td><span class="badge badge-timbrada"><span class="dot"></span>Timbrada</span></td>
</tr>
<tr>
<td class="folio">FA-00138</td>
<td>Servicio Automotriz Reyes</td>
<td class="uuid">b1c4d5e6-8f2a-...</td>
<td class="date">29/Mar/2026</td>
<td class="amount">$7,680.00</td>
<td><span class="badge badge-fallida"><span class="dot"></span>Fallida</span></td>
</tr>
<tr>
<td class="folio">FA-00137</td>
<td>Transportes Garza</td>
<td class="uuid">e9a8b7c6-5d4f-...</td>
<td class="date">28/Mar/2026</td>
<td class="amount">$55,200.00</td>
<td><span class="badge badge-cancelada"><span class="dot"></span>Cancelada</span></td>
</tr>
<tr>
<td class="folio">FA-00136</td>
<td>Refaccionaria Central</td>
<td class="uuid">d2f3e4a5-6b7c-...</td>
<td class="date">27/Mar/2026</td>
<td class="amount">$9,320.00</td>
<td><span class="badge badge-timbrada"><span class="dot"></span>Timbrada</span></td>
</tr>
</tbody>
</table>
</section>
</body>
</html>