OPCIÓN C + A1: Consolidación técnica + orjson
C1: Materialized view part_vehicle_preview (creación en progreso) - Migración v3.3_materialized_view.sql - catalog_service.py y dashboard/server.py ahora usan la MV - Script refresh_part_vehicle_preview.py + warm_vehicle_cache.py actualizado C2: Fix cache warming script (autónomo) - Auto-re-ejecuta con sudo -u postgres si peer auth falla - Args CLI: --dsn, --batch-size, --ttl, --dry-run C3: CSS dinámico residual extraído - sidebar.js → sidebar.css (nuevo) - pos-utils.js → common.css (nuevo) - Links agregados a 14 templates POS C4: Script de load testing básico - scripts/load_test.py: métricas p50/p95/p99, throughput, errores C5: Documentación actualizada - FASES_IMPLEMENTADAS.md: test count real, FASE 7 completa - performance_audit_2026.md: anexo post-FASE 7, métricas actualizadas A1: Serialización orjson - pos/json_provider.py: DefaultJSONProvider con orjson.dumps/loads - Aplicado a POS app y Dashboard server - Fix indentation error en pos_bp.py Tests: 73/73 pasando
This commit is contained in:
93
pos/static/css/common.min.css
vendored
93
pos/static/css/common.min.css
vendored
@@ -1,85 +1,12 @@
|
||||
/* /home/Autopartes/pos/static/css/common.css */
|
||||
/* Theme variables — overridden by tenant theme */
|
||||
:root {
|
||||
--color-primary: #1a73e8;
|
||||
--color-secondary: #5f6368;
|
||||
--color-accent: #ff6b35;
|
||||
--color-bg: #ffffff;
|
||||
--color-surface: #f8f9fa;
|
||||
--color-text: #202124;
|
||||
--color-text-secondary: #5f6368;
|
||||
--color-border: #dadce0;
|
||||
--color-success: #34a853;
|
||||
--color-warning: #f9ab00;
|
||||
--color-error: #ea4335;
|
||||
--font-display: 'Sora', sans-serif;
|
||||
--font-body: 'Plus Jakarta Sans', sans-serif;
|
||||
--font-mono: 'JetBrains Mono', monospace;
|
||||
--radius: 8px;
|
||||
--shadow: 0 1px 3px rgba(0,0,0,0.12);
|
||||
/* common.css — Shared utilities extracted from JS inline injections (FASE C3) */
|
||||
|
||||
/* From pos-utils.js */
|
||||
@keyframes slideInRight {
|
||||
from { transform: translateX(100%); opacity: 0; }
|
||||
to { transform: translateX(0); opacity: 1; }
|
||||
}
|
||||
|
||||
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
font-family: var(--font-body);
|
||||
background: var(--color-bg);
|
||||
color: var(--color-text);
|
||||
line-height: 1.6;
|
||||
.filter-panel select:focus {
|
||||
outline: none;
|
||||
border-color: var(--color-primary, #F5A623);
|
||||
box-shadow: 0 0 0 2px var(--glow-color-soft, rgba(245, 166, 35, 0.15));
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 10px 20px;
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius);
|
||||
font-family: var(--font-body);
|
||||
font-size: 0.95rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
background: var(--color-surface);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.btn:hover { background: var(--color-border); }
|
||||
.btn--primary { background: var(--color-primary); color: white; border-color: var(--color-primary); }
|
||||
.btn--primary:hover { opacity: 0.9; }
|
||||
.btn--accent { background: var(--color-accent); color: white; border-color: var(--color-accent); }
|
||||
|
||||
.card {
|
||||
background: var(--color-surface);
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: var(--radius);
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
/* Catalog grid */
|
||||
.catalog-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; }
|
||||
.catalog-card { cursor: pointer; transition: all 0.2s; }
|
||||
.catalog-card:hover { border-color: var(--color-primary); transform: translateY(-2px); box-shadow: var(--shadow); }
|
||||
.stock-badge { display: inline-block; padding: 2px 8px; border-radius: 12px; font-size: 0.75rem; font-weight: 600; }
|
||||
.stock-badge--ok { background: #dcfce7; color: #166534; }
|
||||
.stock-badge--low { background: #fef9c3; color: #854d0e; }
|
||||
.stock-badge--zero { background: #fecaca; color: #991b1b; }
|
||||
|
||||
/* Cart sidebar */
|
||||
.cart-sidebar { position: fixed; right: 0; top: 0; bottom: 0; width: 360px; background: var(--color-surface); border-left: 1px solid var(--color-border); padding: 20px; overflow-y: auto; transform: translateX(100%); transition: transform 0.3s; z-index: 50; }
|
||||
.cart-sidebar.open { transform: translateX(0); }
|
||||
.cart-item { display: flex; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--color-border); }
|
||||
.cart-total { font-family: var(--font-mono); font-size: 1.3rem; font-weight: 700; }
|
||||
|
||||
/* Search bar */
|
||||
.search-bar { display: flex; gap: 8px; margin-bottom: 20px; }
|
||||
.search-bar input { flex: 1; padding: 10px 16px; border: 1px solid var(--color-border); border-radius: var(--radius); font-size: 1rem; }
|
||||
.search-bar input:focus { outline: none; border-color: var(--color-primary); }
|
||||
|
||||
/* Filter chips */
|
||||
.filter-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
|
||||
.chip { padding: 4px 12px; border-radius: 20px; border: 1px solid var(--color-border); font-size: 0.8rem; cursor: pointer; background: transparent; }
|
||||
.chip.active { background: var(--color-primary); color: white; border-color: var(--color-primary); }
|
||||
|
||||
/* External availability */
|
||||
.external-results { background: #eff6ff; border: 1px solid #bfdbfe; border-radius: var(--radius); padding: 16px; margin-top: 12px; }
|
||||
|
||||
Reference in New Issue
Block a user