/* HEADER · VISPLAY CRM NEW · core/styles.css · v0.28.0 */
:root{--bg:#f4f5f7;--panel:#fff;--ink:#191b1f;--muted:#69707d;--line:#e3e6eb;--dark:#14171b;--ok:#2f8f5b;--warn:#b67b17;--danger:#b54848;--accent:#2c62d6;--radius:14px;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink)}*{box-sizing:border-box}body{margin:0;background:var(--bg)}button,input,select,textarea{font:inherit}.app{display:grid;grid-template-columns:230px 1fr;min-height:100vh}.sidebar{background:#111317;color:white;padding:22px 14px;display:flex;flex-direction:column;gap:24px}.brand{padding:8px 10px}.brand strong{font-size:25px;letter-spacing:1px}.brand span{display:block;font-size:10px;color:#a9b0bb;margin-top:3px}.sidebar nav{display:grid;gap:7px}.nav-section{font-size:9px;letter-spacing:.12em;color:#6f7680;padding:12px 12px 2px;font-weight:800}.nav-item{display:flex;gap:10px;align-items:center;border:0;background:transparent;color:#c8ccd3;padding:11px 12px;border-radius:10px;text-decoration:none;cursor:pointer;text-align:left}.nav-item.active,.nav-item:hover{background:#24282f;color:#fff}.side-note{margin-top:auto;color:#8f96a1;font-size:11px;line-height:1.45;padding:10px}main{min-width:0}.topbar{height:84px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:14px 26px;position:sticky;top:0;z-index:10}.topbar h1{margin:0;font-size:22px}.topbar p{margin:3px 0 0;color:var(--muted);font-size:12px}.status{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:7px}.dot{width:8px;height:8px;border-radius:50%;background:#bbb}.status.ok .dot{background:var(--ok)}.status.bad .dot{background:var(--danger)}#workspace{padding:22px}.btn{border:1px solid var(--line);background:#fff;border-radius:9px;padding:9px 12px;font-weight:700;font-size:12px;cursor:pointer}.btn:hover{background:#f7f8fa}.btn.dark{background:var(--dark);color:white;border-color:var(--dark)}.btn.primary{background:var(--accent);color:white;border-color:var(--accent)}.btn.danger{color:var(--danger)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 1px 2px rgba(20,25,30,.03)}.hidden{display:none!important}.toast-host{position:fixed;left:18px;bottom:18px;z-index:1000;display:grid;gap:8px}.toast{background:#15181d;color:#fff;padding:12px 14px;border-radius:10px;font-size:12px;box-shadow:0 8px 28px rgba(0,0,0,.18);min-width:250px}.toast.error{background:#8c3131}@media(max-width:900px){.app{grid-template-columns:72px 1fr}.sidebar{padding:18px 8px}.brand span,.nav-item span,.side-note{display:none}.brand strong{font-size:14px}.nav-item{justify-content:center;font-size:19px}.topbar{padding:12px 16px}#workspace{padding:14px}}
/* FOOTER · VISPLAY CRM NEW · core/styles.css · v0.3.0 */
.loading{padding:40px;color:var(--muted);font-size:13px}
/* FOOTER ADDENDUM · v0.3.0 */

.login-screen{min-height:100vh;display:grid;place-items:center;background:#f3f4f6;padding:24px}.login-card{width:min(420px,94vw);background:#fff;border:1px solid var(--line);border-radius:18px;padding:28px;box-shadow:0 24px 70px rgba(0,0,0,.12);display:grid;gap:14px}.brand-login{display:flex;justify-content:space-between;align-items:center}.brand-login strong{font-size:26px}.brand-login span{font-size:10px;color:var(--muted)}.login-card h1{margin:10px 0 0;font-size:24px}.login-card p{margin:0;color:var(--muted);font-size:12px}.login-card label{display:grid;gap:6px;font-size:11px;font-weight:800;text-transform:uppercase}.login-card input{border:1px solid var(--line);border-radius:9px;padding:11px;font-size:14px}.login-error{min-height:18px;color:#a22;font-size:11px}.hidden{display:none!important}.btn.mini{font-size:10px;padding:7px 9px;margin-top:8px}.side-note #sessionUser{font-size:10px;line-height:1.4}


/* VISPLAY GLOBAL MODAL NORMALIZATION · v0.25.0 */
dialog{background:#fff!important;color:#111!important;opacity:1!important;border-color:transparent}
dialog::backdrop{background:rgba(11,13,17,.58)!important}
dialog input,dialog select,dialog textarea{background:#fff!important;color:#111!important}
dialog label,dialog h1,dialog h2,dialog h3,dialog h4,dialog b,dialog strong{color:#111}
dialog .dialog-card,dialog .dlg-body,dialog .veh-form,dialog .veh-detail,dialog .admin-dialog,dialog form{background:#fff;color:#111}
dialog textarea{resize:vertical}

/* VISPLAY CRITICAL / DANGER CONTRAST · v0.26.0 */
.btn.danger,button.danger,.danger-button,.critical-button{background:var(--danger)!important;color:#fff!important;border-color:var(--danger)!important}
:is(.attention-tile,.qc-alert,.ins-alert,.pending-card,.alert-card,.warning-card,.veh-alert,.ap-att).danger{background:var(--danger)!important;color:#fff!important;border-color:var(--danger)!important}
:is(.attention-tile,.qc-alert,.ins-alert,.pending-card,.alert-card,.warning-card,.veh-alert,.ap-att).danger :is(span,small,p,b,strong,div){color:#fff!important}
:is(.btn.danger,button.danger,.danger-button,.critical-button) :is(span,small,p,b,strong){color:#fff!important}

/* CROSS CHECK TOTAL · CONTRASTE CRÍTICO · v0.28.0
   Cualquier superficie explícitamente marcada danger/critical debe conservar texto blanco. */
:is(button,.card,[role="button"]).danger,:is(button,.card,[role="button"]).critical,.danger-button,.critical-button{color:#fff!important}
:is(button,.card,[role="button"]).danger :is(*),:is(button,.card,[role="button"]).critical :is(*),.danger-button :is(*),.critical-button :is(*){color:#fff!important}
