/* CLAUD18-C: los @font-face locales se retiran en la nube y los
   repone la hoja de Google Fonts enlazada en index.html. Motivo:
   117 KB de base64 dejaban la pagina por encima de lo que Apps
   Script logra servir dentro de su marco aislado. */
:root {
--bg: #070C13;
--bg-deep: #04080D;
--surface: #0E1621;
--surface-alt: #131E2C;
--surface-3: #17222F;
--surface-glass: rgba(19,30,44,.72);
--ink: #EAF1F9;
--ink-soft: #93A5BB;
--ink-faint: #64768D;
--border: #1E2C3D;
--border-strong: #2C3E55;
--navy: #0B131D;
--brand-deep: #081D76;
--brand-700: #0B49D0;
--brand: #0080F0;
--brand-400: #00B0F0;
--brand-300: #6FDBFF;
--brand-glow: rgba(0,144,240,.32);
--accent: var(--brand);
--accent-soft: rgba(0,128,240,.14);
--azul: var(--brand);
--grad-marca: linear-gradient(135deg, #0B49D0 0%, #0080F0 48%, #00B0F0 100%);
--grad-superficie: linear-gradient(180deg, rgba(255,255,255,.045), rgba(255,255,255,0) 62%);
--ok: #2FD6A5;
--warn: #FFB443;
--crit: #FF5F6E;
--rojo: #FF5F6E;
--info: var(--brand-400);
--pend: #7A8798;
--font-ui: "Inter Variable", "Inter", "Segoe UI Variable", "Segoe UI", system-ui, -apple-system, sans-serif;
--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Consolas, monospace;
--fs-h1: 30px;
--fs-section: 18px;
--fs-kpi: 36px;
--fs-body: 14px;
--fs-table: 13.5px;
--fs-label: 11px;
--fs-badge: 10.5px;
--fs-id: 12px;
--r-sm: 10px;
--r-md: 12px;
--r-card: 16px;
--r-lg: 20px;
--r-pill: 999px;
--shadow-sm: 0 1px 2px rgba(0,0,0,.36);
--shadow-card: 0 1px 2px rgba(0,0,0,.30), 0 8px 24px -14px rgba(0,0,0,.72);
--shadow-md: 0 18px 48px -18px rgba(0,0,0,.80), 0 2px 8px rgba(0,0,0,.40);
--shadow-glow: 0 0 0 1px rgba(0,128,240,.30), 0 12px 40px -16px var(--brand-glow);
--s1: 4px; --s2: 8px; --s3: 12px; --s4: 16px; --s5: 24px; --s6: 32px; --s7: 48px;
--t-rapido: 130ms;
--t-medio: 240ms;
--t-lento: 420ms;
--ease: cubic-bezier(.22,.68,.28,1);
--ease-salida: cubic-bezier(.4,0,.2,1);
}
.dark-panel {
background: var(--bg-deep); color: var(--ink); border-radius: var(--r-lg);
border: 1px solid var(--border);
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
font-family: var(--font-ui);
background: var(--bg);
color: var(--ink);
font-size: var(--fs-body);
line-height: 1.5;
letter-spacing: -0.005em;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
button { font-family: inherit; }
.env-bar { display: flex; justify-content: flex-end; padding: 8px 20px 0; }
.env-chip {
position: relative; display: inline-flex; align-items: center; gap: 7px;
font-family: var(--font-mono); font-size: 10.5px; color: var(--ink-soft);
background: var(--surface); border: 1px solid var(--border); border-radius: 999px;
padding: 5px 12px 5px 10px; cursor: pointer; user-select: none;
}
.env-chip .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ok); flex-shrink: 0; }
.env-chip:hover { border-color: var(--accent); color: var(--ink); }
.env-detail {
display: none; position: absolute; top: 32px; right: 0; z-index: 60; width: 340px;
background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-card);
box-shadow: var(--shadow-md); padding: 14px 16px; text-align: left; cursor: default;
}
.env-chip.open .env-detail { display: block; }
.env-detail .row { display: flex; justify-content: space-between; gap: 10px; padding: 4px 0; font-size: 11px; color: var(--ink-soft); border-bottom: 1px dashed var(--border); }
.env-detail .row:last-child { border-bottom: none; }
.env-detail .row b { color: var(--ink); font-weight: 500; font-family: var(--font-mono); text-align: right; }
.env-detail .head { font-size: 11.5px; font-weight: 600; color: var(--ink); margin-bottom: 6px; }
.shell { display: grid; grid-template-columns: 240px 1fr; min-height: 100vh; }
.sidebar {
background: var(--navy); color: #E7ECF3; padding: var(--s5) var(--s4);
display: flex; flex-direction: column; gap: var(--s5);
}
.brand-name { font-weight: 650; font-size: 16px; line-height: 1.25; letter-spacing: -0.01em; }
.brand-sub { font-family: var(--font-mono); font-size: 10.5px; color: #93A6BE; margin-top: 4px; }
.global-search { position: relative; }
.global-search input {
width: 100%; padding: 9px 12px; border-radius: var(--r-sm); border: 1px solid #26456A;
background: #17324D; color: #fff; font-size: 12.5px; font-family: var(--font-ui);
}
.global-search input::placeholder { color: #7C93AE; }
.global-search input:focus { outline: 2px solid var(--accent); outline-offset: 1px; }
.search-results {
position: absolute; top: 40px; left: 0; right: 0; z-index: 40;
background: var(--surface); color: var(--ink); border-radius: var(--r-md);
box-shadow: var(--shadow-md); max-height: 320px; overflow: auto; display: none;
}
.search-results.show { display: block; }
.search-row { padding: 9px 12px; font-size: 12.5px; cursor: pointer; border-bottom: 1px solid var(--border); transition: background .1s ease; }
.search-row:last-child { border-bottom: none; }
.search-row:hover { background: var(--surface-alt); }
.search-row .type { font-family: var(--font-mono); font-size: 10px; color: var(--accent); margin-right: 6px; }
.nav { display: flex; flex-direction: column; gap: 1px; margin-top: var(--s2); }
.nav-item {
display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: var(--r-sm);
font-size: 13px; color: #C7D2E0; cursor: pointer; transition: background .12s ease;
}
.nav-item .ic { width: 16px; text-align: center; font-size: 13px; color: #6E85A2; flex-shrink: 0; }
.nav-item:hover { background: #17324D; color: #fff; }
.nav-item.active { background: var(--accent); color: #fff; }
.nav-item.active .ic { color: #fff; }
.nav-item.disabled { color: #55637A; cursor: default; opacity: .68; }
.nav-item.disabled:hover { background: transparent; color: #55637A; }
.nav-soon { font-family: var(--font-mono); font-size: 8.5px; color: #7189A8; margin-left: auto; letter-spacing: .02em; }
.sidebar-foot { margin-top: auto; }
.lock-chip {
font-family: var(--font-mono); font-size: 10.5px; color: #A9BCD4;
display: flex; align-items: center; gap: 6px;
}
.lock-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ok); display: inline-block; }
.main { padding: var(--s4) var(--s6) var(--s6); max-width: 1480px; }
.topbar { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--s5); margin-bottom: var(--s4); }
.page-title { font-size: var(--fs-h1); font-weight: 700; color: var(--ink); letter-spacing: -0.015em; }
.page-sub { color: var(--ink-soft); font-size: 12.5px; margin-top: 5px; max-width: 660px; }
.jarvis-bar {
display: flex; align-items: center; gap: 12px; background: var(--surface);
border: 1.5px solid var(--border); border-radius: 16px; padding: 13px 20px;
box-shadow: var(--shadow-card); margin-bottom: var(--s5); max-width: 860px;
transition: border-color .15s ease, box-shadow .15s ease;
}
.jarvis-bar:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.jarvis-bar .mark { color: var(--accent); font-size: 20px; line-height: 1; }
.jarvis-bar input { flex: 1; border: none; outline: none; font-size: 15px; font-family: var(--font-ui); background: transparent; color: var(--ink); height: 26px; }
.jarvis-bar .state { font-family: var(--font-mono); font-size: 9.5px; color: var(--ink-faint); background: var(--surface-alt); padding: 4px 9px; border-radius: 999px; white-space: nowrap; }
.kpi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--s4); margin-bottom: var(--s5); }
.kpi-card {
background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-card);
padding: 18px var(--s4); box-shadow: var(--shadow-card); cursor: pointer;
transition: box-shadow .15s ease, transform .15s ease, border-color .15s ease;
}
.kpi-card:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); border-color: rgba(59,130,246,.28); }
.kpi-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.kpi-card.static { cursor: default; }
.kpi-card.static:hover { box-shadow: var(--shadow-card); transform: none; border-color: var(--border); }
.kpi-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--s2); }
.kpi-label { font-size: var(--fs-label); color: var(--ink-soft); text-transform: uppercase; letter-spacing: .04em; font-weight: 550; }
.kpi-value { font-size: var(--fs-kpi); font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: -0.02em; line-height: 1.1;
white-space: nowrap; font-size: clamp(24px, 2.1vw, var(--fs-kpi)); }
.kpi-value.small { font-size: 20px; }
.kpi-context { font-size: 12px; color: var(--ink-soft); margin-top: 5px; }
.kpi-badges { display: flex; gap: 6px; margin-top: var(--s3); flex-wrap: wrap; }
.badge { display: inline-flex; align-items: center; gap: 4px; font-family: var(--font-mono); font-size: var(--fs-badge); padding: 2.5px 8px; border-radius: 999px; font-weight: 500; letter-spacing: .01em; }
.badge .dot { width: 5px; height: 5px; border-radius: 50%; }
.b-actual, .b-verificado, .b-ready, .b-resuelto, .b-cobrado, .b-facturado { background: rgba(35,129,90,.10); color: var(--ok); }
.b-actual .dot, .b-verificado .dot, .b-ready .dot, .b-resuelto .dot, .b-cobrado .dot, .b-facturado .dot { background: var(--ok); }
.b-reciente, .b-parcial, .b-ready_partial, .b-parcial_reciente, .b-vigente_parcial { background: rgba(198,138,32,.12); color: var(--warn); }
.b-reciente .dot, .b-parcial .dot, .b-ready_partial .dot, .b-parcial_reciente .dot, .b-vigente_parcial .dot { background: var(--warn); }
.b-desactualizado, .b-muy_desactualizado, .b-blocked_source, .b-blocked_data, .b-blocked_logic, .b-requiere_revision { background: rgba(200,55,55,.10); color: var(--crit); }
.b-desactualizado .dot, .b-muy_desactualizado .dot, .b-blocked_source .dot, .b-blocked_data .dot, .b-blocked_logic .dot, .b-requiere_revision .dot { background: var(--crit); }
.b-pendiente_fuente, .b-pendiente, .b-pendiente_cobro, .b-sin_verificacion, .b-no_confirmado { background: rgba(152,162,173,.16); color: #5B6675; }
.b-pendiente_fuente .dot, .b-pendiente .dot, .b-pendiente_cobro .dot, .b-sin_verificacion .dot, .b-no_confirmado .dot { background: var(--pend); }
.b-verificado_parcial, .b-vigente, .b-pendiente_deposito, .b-pago_notificado_bi_pendiente_deposito { background: var(--accent-soft); color: var(--accent); }
.b-verificado_parcial .dot, .b-vigente .dot, .b-pendiente_deposito .dot, .b-pago_notificado_bi_pendiente_deposito .dot { background: var(--accent); }
.atencion-col { display: flex; flex-direction: column; gap: 8px; }
.atencion-item {
display: flex; gap: 10px; align-items: flex-start; background: var(--surface);
border: 1px solid var(--border); border-left: 3px solid var(--warn); border-radius: var(--r-sm);
padding: 10px 12px; font-size: 12.5px;
}
.atencion-item.crit { border-left-color: var(--crit); }
.atencion-item .ic { font-size: 13px; margin-top: 1px; }
.atencion-item .t { font-weight: 600; font-size: 12.5px; }
.atencion-item .d { color: var(--ink-soft); font-size: 11.5px; margin-top: 2px; }
.alert-card { display: flex; gap: 12px; align-items: flex-start; background: #FBF4E9; border: 1px solid #EFD9AE; border-radius: var(--r-card); padding: 14px 16px; margin-bottom: var(--s4); }
.alert-card.crit { background: #FBEDEC; border-color: #F0BCBA; }
.alert-card .ic { font-size: 16px; }
.alert-card .t { font-weight: 600; font-size: 13.5px; }
.alert-card .d { color: var(--ink-soft); font-size: 12.5px; margin-top: 2px; }
.panel { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-card); box-shadow: var(--shadow-card); margin-bottom: var(--s5); }
.panel-head { padding: 15px 18px; border-bottom: 1px solid var(--border); display: flex; justify-content: space-between; align-items: center; gap: 10px; }
.panel-title { font-weight: 650; font-size: var(--fs-section); }
.panel-note { font-size: 11.5px; color: var(--ink-faint); margin-top: 2px; }
.panel-body { padding: 16px 18px; }
.two-col { display: grid; grid-template-columns: 1.5fr 1fr; gap: var(--s4); align-items: start; }
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); padding: 0 18px; }
.tab {
padding: 11px 4px; margin-bottom: -1px; font-size: 13px; font-weight: 550; color: var(--ink-soft);
border-bottom: 2px solid transparent; cursor: pointer; display: flex; align-items: center; gap: 7px;
}
.tab:hover { color: var(--ink); }
.tab.active { color: var(--accent); border-bottom-color: var(--accent); }
.tab .count { font-family: var(--font-mono); font-size: 10.5px; background: var(--surface-alt); color: var(--ink-soft); padding: 1px 7px; border-radius: 999px; }
.tab.active .count { background: var(--accent-soft); color: var(--accent); }
.tabs-row { display: flex; }
.btn { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 14px; border-radius: 9px; font-size: 12.5px; font-weight: 600; cursor: pointer; border: 1px solid transparent; font-family: var(--font-ui); transition: background .12s ease, border-color .12s ease, color .12s ease; }
.btn-primary { background: var(--navy); color: #fff; }
.btn-primary:hover { background: #0D2033; }
.btn-secondary { background: var(--surface); border-color: var(--border); color: var(--navy); }
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
.btn-ghost { background: transparent; color: var(--ink-soft); }
.btn-ghost:hover { background: var(--surface-alt); color: var(--ink); }
.btn-danger { background: transparent; border-color: rgba(180,35,44,.35); color: var(--rojo); }
.btn-danger:hover { background: rgba(180,35,44,.08); }
.btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.btn-sm { height: 30px; padding: 0 11px; font-size: 11.5px; border-radius: 8px; }
.table-wrap { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; font-size: var(--fs-table); }
thead th { text-align: left; font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); font-weight: 600; padding: 9px 10px; border-bottom: 1px solid var(--border); position: sticky; top: 0; background: var(--surface); }
th.num, td.num { text-align: right; }
tbody td { padding: 10px 10px; border-bottom: 1px solid var(--border); vertical-align: middle; }
tbody tr.clickable { cursor: pointer; transition: background .1s ease; }
tbody tr.clickable:hover { background: var(--surface-alt); }
.id-cell { font-family: var(--font-mono); font-size: var(--fs-id); color: var(--accent); font-weight: 500; }
.empty-state, .error-state { text-align: center; padding: var(--s7) var(--s4); color: var(--ink-soft); font-size: 13px; }
.empty-state .ic, .error-state .ic { font-size: 22px; margin-bottom: 8px; display: block; }
.error-state { color: var(--crit); }
.drawer-overlay { display: none; position: fixed; inset: 0; background: rgba(16,21,29,.44); z-index: 50; backdrop-filter: blur(1px); }
.drawer-overlay.show { display: block; }
.drawer {
position: fixed; top: 0; right: -560px; width: 560px; max-width: 92vw; height: 100vh; background: var(--surface);
box-shadow: -12px 0 36px rgba(16,21,29,.20); z-index: 51; padding: 28px 26px; overflow-y: auto;
transition: right .24s cubic-bezier(.2,.7,.3,1);
}
.drawer.show { right: 0; }
.drawer-close { position: absolute; top: 22px; right: 24px; font-family: var(--font-mono); font-size: 11.5px; color: var(--ink-faint); cursor: pointer; padding: 4px 8px; border-radius: 6px; }
.drawer-close:hover { background: var(--surface-alt); color: var(--ink); }
.drawer h2 { font-size: 20px; margin: 0 0 2px; font-weight: 700; letter-spacing: -0.01em; }
.drawer .sub { color: var(--ink-soft); font-size: 12px; margin-bottom: 20px; }
.drawer-section { margin-bottom: 22px; }
.drawer-section h3 { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-faint); font-weight: 650; margin: 0 0 12px; }
.kv { display: grid; grid-template-columns: 1fr 1fr; gap: 11px 14px; }
.kv .item .k { font-size: 10.5px; color: var(--ink-faint); }
.kv .item .v { font-size: 13.5px; font-weight: 550; margin-top: 2px; }
.timeline { display: flex; flex-direction: column; }
.tl-step { display: flex; gap: 12px; position: relative; padding-bottom: 18px; }
.tl-step:last-child { padding-bottom: 0; }
.tl-rail { display: flex; flex-direction: column; align-items: center; width: 18px; flex-shrink: 0; }
.tl-dot { width: 12px; height: 12px; border-radius: 50%; border: 2px solid var(--border); background: var(--surface); flex-shrink: 0; margin-top: 2px; }
.tl-line { flex: 1; width: 2px; background: var(--border); margin-top: 2px; min-height: 18px; }
.tl-step:last-child .tl-line { display: none; }
.tl-step.ok .tl-dot { border-color: var(--ok); background: var(--ok); }
.tl-step.ok .tl-line { background: linear-gradient(var(--ok), var(--border)); }
.tl-step.pend .tl-dot { border-color: var(--pend); background: var(--surface); }
.tl-step.conflict .tl-dot { border-color: var(--crit); background: var(--crit); }
.tl-body { flex: 1; padding-top: 0; }
.tl-node { font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-faint); font-weight: 600; }
.tl-value { font-size: 13.5px; font-weight: 600; margin-top: 2px; font-family: var(--font-mono); }
.tl-step.pend .tl-value { color: var(--ink-soft); font-weight: 500; }
.tl-note { font-size: 11px; color: var(--ink-faint); margin-top: 2px; }
.foot-note { font-size: 11px; color: var(--ink-faint); margin-top: 8px; line-height: 1.55; }
.source-link { font-size: 11.5px; color: var(--accent); text-decoration: none; word-break: break-all; }
.source-link:hover { text-decoration: underline; }
.shealth-score { display: flex; align-items: baseline; gap: 10px; }
.shealth-score .num { font-size: 42px; font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: -0.02em; }
.shealth-score .band { font-family: var(--font-mono); font-size: 11px; }
.sev-bar { display: flex; height: 10px; border-radius: 999px; overflow: hidden; margin: 12px 0; }
.sev-bar span { height: 100%; }
.sev-legend { display: flex; gap: 14px; flex-wrap: wrap; font-size: 11px; color: var(--ink-soft); }
.sev-legend .k { display: inline-flex; align-items: center; gap: 5px; }
.sev-legend .sw { width: 9px; height: 9px; border-radius: 2px; display: inline-block; }
.coverage-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--border); font-size: var(--fs-table); }
.coverage-row:last-child { border-bottom: none; }
.coverage-bar-bg { background: var(--border); border-radius: 999px; height: 6px; width: 140px; overflow: hidden; }
.coverage-bar-fg { height: 100%; border-radius: 999px; }
.cam-split { display: flex; gap: 8px; margin-top: 6px; }
.cam-split .chip { flex: 1; border: 1px solid var(--border); border-radius: var(--r-sm); padding: 8px 10px; }
.cam-split .chip .n { font-size: 18px; font-weight: 700; font-variant-numeric: tabular-nums; }
.cam-split .chip .l { font-size: 10px; text-transform: uppercase; letter-spacing: .03em; color: var(--ink-faint); margin-top: 2px; }
.inventory-tag { font-family: var(--font-mono); font-size: 10px; padding: 2px 7px; border-radius: 4px; }
.tag-REAL { background: rgba(35,129,90,.12); color: var(--ok); }
.tag-REAL_PARCIAL, .tag-REAL_CON_ADVERTENCIA { background: rgba(198,138,32,.14); color: var(--warn); }
.tag-COMING_NEXT, .tag-UI_ONLY, .tag-NO_MOSTRADO { background: rgba(152,162,173,.18); color: #5B6675; }
.skeleton { background: linear-gradient(90deg, var(--surface-alt) 25%, var(--border) 37%, var(--surface-alt) 63%); background-size: 400% 100%; animation: sk 1.3s ease infinite; border-radius: var(--r-sm); }
@keyframes sk { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
.op-shell { padding: 24px 26px 30px; margin: 0 0 var(--s5); }
.op-shell .kpi-card, .op-shell .panel { box-shadow: none; }
.op-shell .jarvis-bar { box-shadow: none; }
.activity-head, .activity-row {
display: grid; grid-template-columns: 74px 92px 92px 1fr 88px 96px 88px 128px;
gap: 10px; align-items: center; padding: 8px 4px; font-size: 12px;
}
.activity-head { color: var(--ink-faint); font-size: 10px; text-transform: uppercase; letter-spacing: .04em; border-bottom: 1px solid var(--border); padding-bottom: 8px; margin-bottom: 2px; }
.activity-row { border-bottom: 1px solid var(--border); cursor: pointer; transition: background .1s ease; }
.activity-row:last-child { border-bottom: none; }
.activity-row:hover, .activity-row:focus-visible { background: var(--surface-alt); outline: none; }
.activity-row .a-id { color: var(--accent); font-weight: 500; }
.activity-row .a-pil, .activity-row .a-cam { font-size: 10.5px; color: var(--ink-soft); }
.filters-row { display: flex; gap: 16px; flex-wrap: wrap; padding: 14px 0 16px; border-bottom: 1px solid var(--border); margin-bottom: 4px; }
.filter-select { display: flex; flex-direction: column; gap: 4px; font-size: 10.5px; color: var(--ink-faint); text-transform: uppercase; letter-spacing: .03em; }
.filter-select select {
font-family: var(--font-ui); font-size: 12.5px; color: var(--ink); background: var(--surface);
border: 1px solid var(--border); border-radius: var(--r-sm); padding: 7px 10px; min-width: 160px; text-transform: none;
}
.filter-select select:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.pager { display: flex; align-items: center; justify-content: center; gap: 14px; padding-top: 14px; }
.flota-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.flota-card {
background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-card);
padding: 14px; cursor: pointer; transition: border-color .12s ease, transform .12s ease;
}
.flota-card:hover, .flota-card:focus-visible { border-color: var(--accent); transform: translateY(-1px); outline: none; }
.fc-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.fc-id { font-size: 13px; color: var(--accent); font-weight: 600; }
.fc-model { font-size: 13px; font-weight: 550; margin-bottom: 2px; }
.fc-placa { font-size: 11px; color: var(--ink-soft); margin-bottom: 10px; }
.fc-row { display: flex; justify-content: space-between; font-size: 11px; color: var(--ink-soft); padding: 3px 0; border-top: 1px dashed var(--border); }
.fc-status { margin-top: 8px; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .04em; color: var(--ink-faint); text-align: center; padding: 4px; border: 1px dashed var(--border); border-radius: 6px; }
.drawer-nav-link { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--accent); cursor: pointer; background: none; border: none; padding: 0; font-family: var(--font-ui); }
.drawer-nav-link:hover { text-decoration: underline; }
@media (max-width: 1440px) { .main { max-width: 100%; } }
@media (max-width: 1366px) {
.kpi-grid { grid-template-columns: repeat(2, 1fr); } .two-col { grid-template-columns: 1fr; }
.activity-head, .activity-row { grid-template-columns: 64px 84px 1fr 80px 88px; }
.activity-head span:nth-child(3), .activity-head span:nth-child(5), .activity-head span:nth-child(6),
.activity-row .a-oc, .activity-row .a-pil, .activity-row .a-cam { display: none; }
.flota-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 900px) { .shell { grid-template-columns: 1fr; } .sidebar { display: none; } }
.b-blocked_reconciliation, .b-bloqueado { background: rgba(200,55,55,.10); color: var(--crit); }
.b-blocked_reconciliation .dot, .b-bloqueado .dot { background: var(--crit); }
.b-partial, .b-cierre_parcial, .b-requiere_conciliacion, .b-pendiente_conciliacion_pago,
.b-pendiente_deposito_bi, .b-alta { background: rgba(198,138,32,.12); color: var(--warn); }
.b-partial .dot, .b-cierre_parcial .dot, .b-requiere_conciliacion .dot,
.b-pendiente_conciliacion_pago .dot, .b-pendiente_deposito_bi .dot, .b-alta .dot { background: var(--warn); }
.b-not_applicable, .b-no_aplica, .b-media, .b-baja, .b-listo_no_aplica { background: rgba(152,162,173,.16); color: #5B6675; }
.b-not_applicable .dot, .b-no_aplica .dot, .b-media .dot, .b-baja .dot, .b-listo_no_aplica .dot { background: var(--pend); }
.b-resolved_source_convention, .b-resolved_source_rounding_order, .b-resuelto_en_derivadas,
.b-resuelto_cgpt41, .b-listo, .b-pagado_beneficiario_pendiente { background: rgba(35,129,90,.10); color: var(--ok); }
.b-resolved_source_convention .dot, .b-resolved_source_rounding_order .dot, .b-resuelto_en_derivadas .dot,
.b-resuelto_cgpt41 .dot, .b-listo .dot, .b-pagado_beneficiario_pendiente .dot { background: var(--ok); }
.origen-cinta {
display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
background: var(--surface-alt); border: 1px solid var(--border); border-left: 3px solid var(--accent);
border-radius: 8px; padding: 9px 13px; margin-bottom: 18px;
font-size: 11.5px; color: var(--ink-soft); line-height: 1.5;
}
.origen-cinta strong { color: var(--ink); font-weight: 600; }
.cierre-cobertura { display: grid; grid-template-columns: 210px 1fr; gap: 22px; align-items: center; }
.cierre-numero { font-size: 44px; font-weight: 300; letter-spacing: -.02em; line-height: 1; color: var(--ink); }
.cierre-numero span { font-size: 20px; color: var(--ink-soft); }
.cierre-expr { font-family: var(--font-mono); font-size: 11.5px; color: var(--ink-soft); margin-top: 6px; }
.cierre-barra { display: flex; height: 30px; border-radius: 8px; overflow: hidden; border: 1px solid var(--border); }
.cierre-seg { display: flex; align-items: center; justify-content: center;
font-family: var(--font-mono); font-size: 10.5px; font-weight: 600; color: #fff;
transition: filter 160ms ease; }
.cierre-seg:hover { filter: brightness(1.08); }
.cierre-seg.s-listo { background: var(--ok); }
.cierre-seg.s-parcial { background: var(--warn); }
.cierre-seg.s-bloqueado { background: var(--crit); }
.cierre-leyenda { display: flex; gap: 18px; flex-wrap: wrap; margin-top: 10px; font-size: 11.5px; color: var(--ink-soft); }
.cierre-leyenda i { width: 9px; height: 9px; border-radius: 2px; display: inline-block; margin-right: 6px; }
.significa-box { display: grid; grid-template-columns: 1fr 1fr; gap: 0; margin-top: 16px;
border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
.significa-box > div { padding: 11px 14px; font-size: 12px; line-height: 1.55; }
.significa-box .si { background: rgba(35,129,90,.06); border-right: 1px solid var(--border); }
.significa-box .no { background: rgba(200,55,55,.05); }
.significa-box b { display: block; font-family: var(--font-mono); font-size: 10px; letter-spacing: .06em;
margin-bottom: 5px; text-transform: uppercase; }
.significa-box .si b { color: var(--ok); }
.significa-box .no b { color: var(--crit); }
.control-row { display: grid; grid-template-columns: 130px 118px 1fr 150px; gap: 14px; align-items: start;
padding: 12px 14px; border-bottom: 1px solid var(--border); cursor: pointer; transition: background 140ms ease; }
.control-row:last-child { border-bottom: 0; }
.control-row:hover { background: var(--surface-alt); }
.control-row .c-area { font-size: 12.5px; font-weight: 600; }
.control-row .c-id { font-family: var(--font-mono); font-size: 10px; color: var(--ink-faint); margin-top: 2px; }
.control-row .c-res { font-size: 12px; color: var(--ink); line-height: 1.5; }
.control-row .c-lim { font-size: 11px; color: var(--ink-soft); margin-top: 3px; line-height: 1.5; }
.control-row .c-meta { font-size: 10.5px; color: var(--ink-faint); font-family: var(--font-mono); text-align: right; line-height: 1.6; }
.tes-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.tes-card { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 15px 16px; }
.tes-card.mixta { border-left: 3px solid var(--warn); }
.tes-top { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 12px; }
.tes-alias { font-size: 13px; font-weight: 600; }
.tes-ent { font-family: var(--font-mono); font-size: 10px; color: var(--ink-faint); }
.tes-linea { display: flex; justify-content: space-between; align-items: baseline; padding: 7px 0; border-top: 1px dashed var(--border); }
.tes-linea .l { font-size: 11.5px; color: var(--ink-soft); }
.tes-linea .v { font-family: var(--font-mono); font-size: 13px; font-weight: 550; }
.tes-linea .v.neg { color: var(--crit); }
.tes-linea .v.unk { font-size: 11px; font-weight: 500; color: var(--ink-faint); font-family: var(--font-ui); }
.tes-nota { font-size: 11px; color: var(--ink-soft); line-height: 1.5; margin-top: 11px; padding-top: 10px; border-top: 1px solid var(--border); }
.tarj-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.tarj-card { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 15px 16px; }
.tarj-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 4px; }
.tarj-alias { font-size: 13px; font-weight: 600; }
.tarj-mon { font-family: var(--font-mono); font-size: 11px; padding: 2px 7px; border-radius: 5px;
background: var(--surface-alt); border: 1px solid var(--border); color: var(--ink-soft); }
.tarj-fechas { font-size: 11px; color: var(--ink-soft); margin-bottom: 10px; }
.tarj-alt { display: grid; grid-template-columns: 1fr auto 1fr; gap: 8px; align-items: center;
background: var(--surface-alt); border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; margin-bottom: 8px; }
.tarj-alt .op { text-align: center; }
.tarj-alt .op .l { font-size: 10.5px; color: var(--ink-soft); margin-bottom: 3px; }
.tarj-alt .op .v { font-family: var(--font-mono); font-size: 15px; font-weight: 550; }
.tarj-alt .sep { font-family: var(--font-mono); font-size: 10px; color: var(--ink-faint);
border: 1px solid var(--border); border-radius: 999px; padding: 2px 8px; background: var(--surface); }
.pnl-linea { display: grid; grid-template-columns: 1fr 190px 150px; gap: 16px; align-items: center;
padding: 13px 16px; border-bottom: 1px solid var(--border); }
.pnl-linea:last-child { border-bottom: 0; }
.pnl-linea.derivada { background: var(--surface-alt); }
.pnl-linea.resultado { background: rgba(200,55,55,.04); border-top: 2px solid var(--border); }
.pnl-et { font-size: 13px; font-weight: 550; }
.pnl-cob { font-size: 11px; color: var(--ink-soft); margin-top: 3px; line-height: 1.5; }
.pnl-val { text-align: right; font-family: var(--font-mono); font-size: 16px; font-weight: 550; }
.pnl-val.nc { font-family: var(--font-ui); font-size: 12px; font-weight: 600; color: var(--crit); line-height: 1.4; }
.pnl-val.nc small { display: block; font-weight: 400; font-size: 10.5px; color: var(--ink-soft); margin-top: 2px; }
.exc-card { background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
border-left: 3px solid var(--pend); padding: 14px 16px; margin-bottom: 10px;
transition: box-shadow 160ms ease, transform 160ms ease; }
.exc-card:hover { box-shadow: 0 3px 14px rgba(16,21,29,.07); }
.exc-card.sev-alta { border-left-color: var(--crit); }
.exc-card.sev-media { border-left-color: var(--warn); }
.exc-card.cerrada { border-left-color: var(--ok); opacity: .82; }
.exc-top { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; margin-bottom: 7px; }
.exc-area { font-size: 12.5px; font-weight: 650; }
.exc-id { font-family: var(--font-mono); font-size: 10px; color: var(--ink-faint); }
.exc-imp { font-size: 12.5px; line-height: 1.55; margin-bottom: 8px; }
.exc-foot { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; border-top: 1px dashed var(--border); padding-top: 9px; }
.exc-foot .b { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .05em; color: var(--ink-faint); text-transform: uppercase; margin-bottom: 3px; }
.exc-foot .t { font-size: 11.5px; color: var(--ink-soft); line-height: 1.5; }
.flujo-serie { display: flex; align-items: flex-end; gap: 8px; height: 150px; padding: 10px 0 0; }
.flujo-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; height: 100%; justify-content: flex-end; }
.flujo-barras { display: flex; align-items: flex-end; gap: 2px; width: 100%; height: 100%; justify-content: center; }
.flujo-b { width: 12px; border-radius: 3px 3px 0 0; transition: opacity 160ms ease; }
.flujo-b.inn { background: rgba(35,129,90,.55); }
.flujo-b.out { background: rgba(200,55,55,.45); }
.flujo-col:hover .flujo-b { opacity: .78; }
.flujo-lab { font-family: var(--font-mono); font-size: 9.5px; color: var(--ink-faint); }
.flujo-hueco { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end;
height: 100%; border-left: 1px dashed var(--border); border-right: 1px dashed var(--border);
background: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(152,162,173,.10) 5px, rgba(152,162,173,.10) 10px); }
.flujo-hueco span { font-size: 10px; color: var(--ink-faint); text-align: center; padding: 0 4px 8px; line-height: 1.35; }
.nav-group { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .08em; text-transform: uppercase;
color: var(--ink-faint); padding: 14px 14px 5px; }
.nav-group:first-child { padding-top: 4px; }
.dir-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.dir-card { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 15px 16px;
cursor: pointer; transition: box-shadow 160ms ease, border-color 160ms ease; }
.dir-card:hover { box-shadow: 0 3px 14px rgba(16,21,29,.07); border-color: #D5D9E0; }
.dir-lab { font-size: 11.5px; color: var(--ink-soft); margin-bottom: 8px; }
.dir-val { font-size: 25px; font-weight: 350; letter-spacing: -.015em; line-height: 1.15; }
.dir-val.unk { font-size: 13px; font-weight: 600; color: var(--crit); line-height: 1.4; }
.dir-ctx { font-size: 11px; color: var(--ink-soft); margin-top: 7px; line-height: 1.5; }
.dir-banner { display: flex; align-items: center; justify-content: space-between; gap: 16px;
background: linear-gradient(180deg, var(--surface) 0%, var(--surface-alt) 100%);
border: 1px solid var(--border); border-left: 3px solid var(--accent);
border-radius: 10px; padding: 14px 18px; margin-bottom: 20px; cursor: pointer;
transition: box-shadow 160ms ease; }
.dir-banner:hover { box-shadow: 0 3px 14px rgba(16,21,29,.07); }
.dir-banner .t { font-size: 13.5px; font-weight: 600; margin-bottom: 3px; }
.dir-banner .d { font-size: 11.5px; color: var(--ink-soft); line-height: 1.5; }
@media (max-width: 1440px) {
.dir-grid { grid-template-columns: repeat(2, 1fr); }
.tes-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 1366px) {
.cierre-cobertura { grid-template-columns: 1fr; gap: 14px; }
.tes-grid, .tarj-grid { grid-template-columns: 1fr; }
.significa-box { grid-template-columns: 1fr; }
.significa-box .si { border-right: 0; border-bottom: 1px solid var(--border); }
.control-row { grid-template-columns: 1fr 118px; }
.control-row .c-meta { grid-column: 1 / -1; text-align: left; }
.pnl-linea { grid-template-columns: 1fr 150px; }
.pnl-linea > :last-child { grid-column: 1 / -1; }
.exc-foot { grid-template-columns: 1fr; }
}
.aviso-box { display: flex; align-items: flex-start; gap: 11px; text-align: left;
border-radius: 9px; padding: 13px 16px; font-size: 12.5px; line-height: 1.6; color: var(--ink);
border: 1px solid var(--border); background: var(--surface-alt); }
.aviso-box .ic { flex: 0 0 auto; font-size: 15px; line-height: 1.3; }
.aviso-box.warn { background: rgba(198,138,32,.08); border-color: rgba(198,138,32,.30); }
.aviso-box.warn .ic { color: var(--warn); }
.aviso-box.crit { background: rgba(200,55,55,.06); border-color: rgba(200,55,55,.28); }
.aviso-box.crit .ic { color: var(--crit); }
.b-historico, .b-superado_cgpt42, .b-superado { background: rgba(152,162,173,.16); color: #5B6675; }
.b-historico .dot, .b-superado_cgpt42 .dot, .b-superado .dot { background: var(--pend); }
.acceso-lan {
display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px;
margin: 10px 20px 0; padding: 9px 14px;
background: #FFF4E0; border: 1px solid #E9B949; border-left: 4px solid #C88A00;
border-radius: var(--r-sm); color: #7A4E00;
font-size: 11.5px; line-height: 1.5;
}
.acceso-lan b { font-family: var(--font-mono); font-size: 11px; letter-spacing: .04em; color: #8A5A00; }
.sysbar {
margin: 8px 20px 0; padding: 10px 14px;
background: var(--surface); border: 1px solid var(--border);
border-radius: var(--r-md);
}
.sysbar-grid {
display: flex; flex-wrap: wrap; gap: 6px 26px;
}
.sys-f { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.sys-f > span {
font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .07em;
color: var(--ink-faint); text-transform: uppercase;
}
.sys-f > b { font-size: 11.5px; font-weight: 600; color: var(--ink); word-break: break-word; }
.sys-f > b.mono { font-family: var(--font-mono); font-size: 11px; font-weight: 500; }
.sys-ok   { color: var(--ok) !important; }
.sys-warn { color: var(--warn) !important; }
.sys-crit { color: var(--crit) !important; }
.sysbar-refresh {
margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--border);
font-size: 11px; color: var(--ink-soft); line-height: 1.5;
}
.mobile-top { display: none; }
.nav-scrim { display: none; }
@media (max-width: 900px) {
.mobile-top {
display: flex; align-items: center; gap: 12px;
position: sticky; top: 0; z-index: 60;
background: var(--navy); color: #E7ECF3;
padding: 10px 14px;
}
.mobile-menu {
background: transparent; border: 1px solid #2C4E75; color: #E7ECF3;
font-size: 18px; line-height: 1; border-radius: var(--r-sm);
padding: 6px 11px; cursor: pointer;
}
.mobile-brand { font-weight: 650; font-size: 15px; letter-spacing: -0.01em; }
.shell { grid-template-columns: 1fr; }
.sidebar {
display: flex;
position: fixed; top: 0; left: 0; bottom: 0; z-index: 80;
width: 82vw; max-width: 300px;
overflow-y: auto; -webkit-overflow-scrolling: touch;
transform: translateX(-102%); transition: transform .18s ease;
}
body.nav-abierto .sidebar { transform: translateX(0); }
body.nav-abierto .nav-scrim {
display: block; position: fixed; inset: 0; z-index: 70;
background: rgba(9, 20, 33, .5);
}
.main { padding: var(--s4) 14px var(--s6); }
.sysbar, .acceso-lan, .env-bar { margin-left: 14px; margin-right: 14px; }
.env-bar { justify-content: flex-start; padding-left: 0; padding-right: 0; }
.sysbar-grid { gap: 10px 18px; }
.topbar { flex-direction: column; gap: var(--s3); }
.page-sub { max-width: 100%; }
.jarvis-bar { max-width: 100%; }
.table-wrap, .tbl-wrap, .pro-table-wrap { overflow-x: auto; }
table { min-width: 640px; }
}
@media (max-width: 560px) {
.page-title { font-size: 20px; }
.sysbar-grid { flex-direction: column; gap: 8px; }
.kpi-grid, .dir-grid { grid-template-columns: 1fr !important; }
}
html, body { max-width: 100%; overflow-x: hidden; }
.aviso-box { flex-direction: column; gap: 4px; margin: 10px 20px 0; padding: 11px 15px;
background: #FFF9E8; border: 1px solid #E3C86B; border-left: 4px solid #C9A227;
border-radius: var(--r-sm); color: #6B5200; }
.aviso-titulo { font-weight: 650; font-size: 12.5px; }
.aviso-cuerpo { font-size: 11.5px; line-height: 1.55; }
@media (max-width: 900px) { .aviso-box { margin-left: 14px; margin-right: 14px; } }
.sesion-chip { font-family: var(--font-mono); font-size: 10px; color: #93A6BE;
margin-top: 7px; word-break: break-all; line-height: 1.4; }
::selection { background: var(--brand); color: #fff; }
html { color-scheme: dark; }
body {
background:
radial-gradient(1200px 620px at 78% -12%, rgba(0,128,240,.13), transparent 62%),
radial-gradient(880px 520px at 8% 4%, rgba(11,73,208,.11), transparent 58%),
var(--bg);
background-attachment: fixed;
}
* { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 999px; border: 3px solid transparent; background-clip: content-box; }
*::-webkit-scrollbar-thumb:hover { background: #3C5170; background-clip: content-box; }
*::-webkit-scrollbar-track { background: transparent; }
#splash {
position: fixed; inset: 0; z-index: 9999;
display: flex; flex-direction: column; align-items: center; justify-content: center;
background:
radial-gradient(760px 460px at 50% 44%, rgba(0,128,240,.18), transparent 68%),
var(--bg-deep);
transition: opacity var(--t-lento) var(--ease-salida), visibility var(--t-lento);
}
#splash.fuera { opacity: 0; visibility: hidden; pointer-events: none; }
.splash-escena {
display: flex; flex-direction: column; align-items: center; gap: 26px;
min-height: 150px; justify-content: center;
}
.splash-pie {
position: absolute; left: 0; right: 0; bottom: 46px;
display: flex; flex-direction: column; align-items: center; gap: 12px;
}
.splash-lockup { display: flex; align-items: center; }
.splash-b {
width: 58px; height: 58px; flex: 0 0 auto;
transform-origin: center center;
animation: splashB 760ms var(--ease) both;
}
@keyframes splashB {
0%   { transform: scale(2.55); opacity: 0; filter: blur(9px); }
26%  { transform: scale(2.55); opacity: 1; filter: none; }
62%  { transform: scale(2.55); opacity: 1; }
100% { transform: scale(1);    opacity: 1; }
}
.splash-word {
font-size: 30px; font-weight: 800; letter-spacing: .1em; color: #fff;
text-transform: uppercase; line-height: 1; white-space: nowrap;
max-width: 0; overflow: hidden;
animation: splashPalabra 640ms 620ms var(--ease) both;
}
.splash-word b { font-weight: 800; }
.splash-word span { color: var(--brand-400); }
@keyframes splashPalabra {
0%   { max-width: 0;     padding-left: 0;    clip-path: inset(0 100% 0 0); opacity: .2; }
18%  { opacity: 1; }
100% { max-width: 460px; padding-left: 20px; clip-path: inset(0 0 0 0);    opacity: 1; }
}
.splash-saludo {
font-size: 15px; font-weight: 500; color: var(--ink-soft); letter-spacing: .01em;
opacity: 0; animation: splashSaludo 620ms 1360ms var(--ease) both;
}
@keyframes splashSaludo {
from { opacity: 0; transform: translateY(10px); filter: blur(4px); }
to   { opacity: 1; transform: none; filter: none; }
}
.splash-barra { width: 190px; height: 3px; border-radius: 999px; background: rgba(255,255,255,.09); overflow: hidden; }
.splash-barra i { display: block; height: 100%; width: 40%; border-radius: 999px; background: var(--grad-marca); animation: splashCarga 1.15s var(--ease) infinite; }
.splash-txt {
font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .16em;
text-transform: uppercase; color: var(--ink-faint); min-height: 14px;
}
@keyframes splashCarga {
0%   { transform: translateX(-105%); }
100% { transform: translateX(255%); }
}
@media (max-width: 480px) {
.splash-word { font-size: 23px; letter-spacing: .08em; }
.splash-b { width: 46px; height: 46px; }
.splash-saludo { font-size: 14px; }
}
@media (prefers-reduced-motion: reduce) {
.splash-b, .splash-word, .splash-saludo { animation: none; }
.splash-b { transform: none; }
.splash-word { max-width: 460px; padding-left: 20px; clip-path: none; opacity: 1; }
.splash-saludo { opacity: 1; }
.splash-barra i { animation: none; width: 100%; }
}
.marca-b { display: block; flex: 0 0 auto; }
.marca-b path { fill: url(#gradMarcaB); }
.brand-lockup {
display: flex; align-items: center; gap: 12px;
padding-bottom: 18px; margin-bottom: 4px; border-bottom: 1px solid var(--border);
}
.brand-lockup .marca-b { width: 34px; height: 34px; filter: drop-shadow(0 4px 14px var(--brand-glow)); }
.brand-lockup .txt { min-width: 0; }
.brand-name {
font-weight: 800; font-size: 14.5px; line-height: 1.15; letter-spacing: .1em;
text-transform: uppercase; color: #fff;
}
.brand-name em { font-style: normal; color: var(--brand-400); }
.brand-sub {
font-family: var(--font-mono); font-size: 9.5px; color: var(--ink-faint);
margin-top: 5px; letter-spacing: .05em;
}
@media (min-width: 901px) { .shell { grid-template-columns: 252px 1fr; } }
.sidebar {
background: linear-gradient(180deg, #0C141F 0%, #080E17 100%);
border-right: 1px solid var(--border);
padding: var(--s5) 14px var(--s4);
gap: 18px;
}
.global-search input {
background: rgba(255,255,255,.045); border: 1px solid var(--border);
border-radius: var(--r-pill); color: var(--ink); padding: 10px 14px;
transition: border-color var(--t-rapido) var(--ease), background var(--t-rapido) var(--ease), box-shadow var(--t-rapido) var(--ease);
}
.global-search input::placeholder { color: var(--ink-faint); }
.global-search input:focus {
outline: none; border-color: var(--brand);
background: rgba(0,128,240,.08); box-shadow: 0 0 0 3px var(--accent-soft);
}
.search-results { background: var(--surface-alt); border: 1px solid var(--border); border-radius: var(--r-md); box-shadow: var(--shadow-md); }
.search-row { border-bottom: 1px solid var(--border); }
.search-row:hover { background: rgba(0,128,240,.10); }
.nav { gap: 2px; }
.nav-group {
font-family: var(--font-mono); font-size: 9px; letter-spacing: .18em; text-transform: uppercase;
color: var(--ink-faint); padding: 16px 12px 6px;
}
.nav-item {
position: relative; border-radius: var(--r-pill); padding: 9px 13px; color: var(--ink-soft);
font-size: 13px; font-weight: 500; overflow: hidden;
transition: color var(--t-rapido) var(--ease), background var(--t-rapido) var(--ease), transform var(--t-rapido) var(--ease);
}
.nav-item .ic { color: var(--ink-faint); transition: color var(--t-rapido) var(--ease), transform var(--t-medio) var(--ease); }
.nav-item:hover { background: rgba(255,255,255,.05); color: var(--ink); transform: translateX(2px); }
.nav-item:hover .ic { color: var(--brand-400); transform: scale(1.14); }
.nav-item.active {
background: linear-gradient(90deg, rgba(0,128,240,.22), rgba(0,176,240,.07));
color: #fff; box-shadow: inset 0 0 0 1px rgba(0,128,240,.30);
}
.nav-item.active .ic { color: var(--brand-400); }
.nav-item.active::before {
content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
width: 3px; height: 18px; border-radius: 0 3px 3px 0; background: var(--grad-marca);
}
.nav-item.disabled { color: #4C5B6E; }
.nav-item.disabled:hover { background: transparent; color: #4C5B6E; transform: none; }
.nav-soon { color: var(--ink-faint); }
.lock-chip { color: var(--ink-faint); font-size: 9.5px; }
.lock-dot { box-shadow: 0 0 0 3px rgba(47,214,165,.16); animation: latido 2.6s ease-in-out infinite; }
@keyframes latido { 0%,100% { box-shadow: 0 0 0 3px rgba(47,214,165,.16); } 50% { box-shadow: 0 0 0 6px rgba(47,214,165,.05); } }
.sesion-chip { color: var(--ink-faint); }
.main { padding: var(--s5) var(--s6) 90px; }
.page-title {
font-size: var(--fs-h1); font-weight: 800; letter-spacing: -.028em;
background: linear-gradient(180deg, #FFFFFF 30%, #B9CBE0 100%);
-webkit-background-clip: text; background-clip: text; color: transparent;
}
.page-sub { color: var(--ink-soft); font-size: 13px; line-height: 1.6; }
.jarvis-bar {
background: var(--surface-glass); border: 1px solid var(--border); border-radius: var(--r-pill);
backdrop-filter: blur(10px); box-shadow: var(--shadow-card);
}
.jarvis-bar:focus-within { border-color: var(--brand); box-shadow: var(--shadow-glow); }
.jarvis-bar .mark { color: var(--brand-400); }
.jarvis-bar .state { background: rgba(255,255,255,.05); color: var(--ink-faint); }
.btn {
position: relative; overflow: hidden; height: 38px; padding: 0 18px;
border-radius: var(--r-pill); font-weight: 600; letter-spacing: .005em;
transition: transform var(--t-rapido) var(--ease), box-shadow var(--t-rapido) var(--ease),
background var(--t-rapido) var(--ease), border-color var(--t-rapido) var(--ease), color var(--t-rapido) var(--ease);
}
.btn:active { transform: scale(.965); }
.btn-primary { background: var(--grad-marca); color: #fff; box-shadow: 0 6px 18px -8px var(--brand-glow); }
.btn-primary:hover { background: var(--grad-marca); filter: brightness(1.12); transform: translateY(-1px); box-shadow: 0 12px 26px -10px var(--brand-glow); }
.btn-secondary { background: rgba(255,255,255,.05); border-color: var(--border-strong); color: var(--ink); }
.btn-secondary:hover { border-color: var(--brand); color: #fff; background: rgba(0,128,240,.12); transform: translateY(-1px); }
.btn-ghost { color: var(--ink-soft); }
.btn-ghost:hover { background: rgba(255,255,255,.06); color: var(--ink); }
.btn-danger { border-color: rgba(255,95,110,.34); color: var(--crit); }
.btn-danger:hover { background: rgba(255,95,110,.12); border-color: var(--crit); }
.btn:disabled, .btn[disabled] { opacity: .38; pointer-events: none; }
.btn-sm { height: 32px; padding: 0 14px; font-size: 11.5px; }
.btn:focus-visible { outline: 2px solid var(--brand-400); outline-offset: 2px; }
.onda {
position: absolute; border-radius: 50%; transform: scale(0); pointer-events: none;
background: rgba(255,255,255,.34); animation: onda 560ms var(--ease-salida) forwards;
}
@keyframes onda { to { transform: scale(2.6); opacity: 0; } }
.panel, .kpi-card, .flota-card, .atencion-item {
background: var(--surface); background-image: var(--grad-superficie);
border: 1px solid var(--border); box-shadow: var(--shadow-card);
}
.panel { border-radius: var(--r-card); }
.panel-head { border-bottom: 1px solid var(--border); padding: 16px 20px; }
.panel-title { font-weight: 700; letter-spacing: -.012em; }
.panel-note { color: var(--ink-faint); }
.panel-body { padding: 18px 20px; }
.kpi-card { border-radius: var(--r-card); padding: 20px; transition: transform var(--t-medio) var(--ease), box-shadow var(--t-medio) var(--ease), border-color var(--t-medio) var(--ease); }
.kpi-card:not(.static)::after {
content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
background: radial-gradient(340px 160px at var(--mx,50%) var(--my,0%), rgba(0,144,240,.16), transparent 62%);
opacity: 0; transition: opacity var(--t-medio) var(--ease);
}
.kpi-card { position: relative; }
.kpi-card:not(.static):hover { transform: translateY(-3px); border-color: rgba(0,128,240,.45); box-shadow: var(--shadow-md), var(--shadow-glow); }
.kpi-card:not(.static):hover::after { opacity: 1; }
.kpi-card:active { transform: scale(.99); }
.kpi-label { color: var(--ink-faint); letter-spacing: .09em; font-weight: 600; font-size: var(--fs-label); }
.kpi-value { letter-spacing: -.03em; font-weight: 750; color: #fff; }
.kpi-context { color: var(--ink-soft); font-size: 12px; }
.flota-card { border-radius: var(--r-card); }
.flota-card:hover, .flota-card:focus-visible { border-color: var(--brand); transform: translateY(-3px); box-shadow: var(--shadow-glow); }
.badge {
border-radius: var(--r-pill); padding: 3px 9px; font-weight: 500;
border: 1px solid transparent; letter-spacing: .02em; text-transform: uppercase; font-size: var(--fs-badge);
}
.b-actual, .b-verificado, .b-ready, .b-resuelto, .b-cobrado, .b-facturado,
.b-resolved_source_convention, .b-resolved_source_rounding_order, .b-resuelto_en_derivadas,
.b-resuelto_cgpt41, .b-listo, .b-pagado_beneficiario_pendiente
{ background: rgba(47,214,165,.12); color: var(--ok); border-color: rgba(47,214,165,.24); }
.b-reciente, .b-parcial, .b-ready_partial, .b-parcial_reciente, .b-vigente_parcial,
.b-partial, .b-cierre_parcial, .b-requiere_conciliacion, .b-pendiente_conciliacion_pago,
.b-pendiente_deposito_bi, .b-alta
{ background: rgba(255,180,67,.12); color: var(--warn); border-color: rgba(255,180,67,.24); }
.b-desactualizado, .b-muy_desactualizado, .b-blocked_source, .b-blocked_data, .b-blocked_logic,
.b-requiere_revision, .b-blocked_reconciliation, .b-bloqueado
{ background: rgba(255,95,110,.12); color: var(--crit); border-color: rgba(255,95,110,.26); }
.b-pendiente_fuente, .b-pendiente, .b-pendiente_cobro, .b-sin_verificacion, .b-no_confirmado,
.b-not_applicable, .b-no_aplica, .b-media, .b-baja, .b-listo_no_aplica,
.b-historico, .b-superado_cgpt42, .b-superado
{ background: rgba(122,135,152,.14); color: var(--ink-soft); border-color: rgba(122,135,152,.22); }
.b-verificado_parcial, .b-vigente, .b-pendiente_deposito, .b-pago_notificado_bi_pendiente_deposito
{ background: rgba(0,128,240,.14); color: var(--brand-400); border-color: rgba(0,128,240,.28); }
.badge .dot { box-shadow: 0 0 6px currentColor; }
thead th { background: var(--surface-alt); color: var(--ink-faint); border-bottom: 1px solid var(--border); letter-spacing: .09em; }
tbody td { border-bottom: 1px solid var(--border); }
tbody tr.clickable:hover { background: rgba(0,128,240,.07); }
.id-cell { color: var(--brand-400); }
.table-wrap { border-radius: var(--r-md); }
@media (max-width: 720px) {
table.as-cards { min-width: 0 !important; border-collapse: separate; border-spacing: 0 10px; }
table.as-cards thead { display: none; }
table.as-cards tbody tr {
display: block; background: var(--surface); background-image: var(--grad-superficie);
border: 1px solid var(--border); border-radius: var(--r-card); padding: 13px 15px;
box-shadow: var(--shadow-card);
}
table.as-cards tbody tr.clickable:active { border-color: var(--brand); transform: scale(.99); }
table.as-cards tbody td {
display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
padding: 6px 0; border: none; text-align: right; font-size: 13.5px;
}
table.as-cards tbody td + td { border-top: 1px dashed var(--border); }
table.as-cards tbody td::before {
content: attr(data-label); flex: 0 0 auto; text-align: left;
font-size: 10px; letter-spacing: .09em; text-transform: uppercase;
color: var(--ink-faint); font-weight: 600; font-family: var(--font-ui);
}
table.as-cards tbody td:empty { display: none; }
.table-wrap, .tbl-wrap, .pro-table-wrap { overflow: visible; }
}
.gfx { display: block; width: 100%; overflow: visible; }
.gfx .trazo { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.gfx .dibuja { stroke-dasharray: var(--len); stroke-dashoffset: var(--len); animation: dibuja 1100ms var(--ease) forwards; }
@keyframes dibuja { to { stroke-dashoffset: 0; } }
.gfx .sube { transform-origin: bottom; animation: sube 620ms var(--ease) both; }
@keyframes sube { from { transform: scaleY(0); opacity: .2; } to { transform: scaleY(1); opacity: 1; } }
.gfx text { font-family: var(--font-mono); fill: var(--ink-faint); }
.grafico-caja {
background: var(--surface); background-image: var(--grad-superficie);
border: 1px solid var(--border); border-radius: var(--r-card); padding: 18px 20px;
box-shadow: var(--shadow-card);
}
.grafico-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
.grafico-tit { font-size: 12.5px; font-weight: 650; color: var(--ink); }
.grafico-sub { font-family: var(--font-mono); font-size: 10px; color: var(--ink-faint); letter-spacing: .05em; text-transform: uppercase; }
.gfx-leyenda { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 12px; font-size: 11.5px; color: var(--ink-soft); }
.gfx-leyenda i { width: 9px; height: 9px; border-radius: 3px; display: inline-block; margin-right: 7px; vertical-align: -1px; }
.gfx-anillo-txt { text-anchor: middle; }
.gfx-anillo-num { font-size: 19px; font-weight: 750; fill: #fff; font-family: var(--font-ui); letter-spacing: -.02em; }
.gfx-anillo-lab { font-size: 8.5px; fill: var(--ink-faint); letter-spacing: .12em; }
.entra { animation: entra 520ms var(--ease) both; animation-delay: calc(var(--i, 0) * 45ms); }
@keyframes entra { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
.main > * { will-change: auto; }
.chip-avisos {
display: inline-flex; align-items: center; gap: 8px; cursor: pointer;
background: rgba(255,255,255,.045); border: 1px solid var(--border); border-radius: var(--r-pill);
padding: 7px 14px 7px 11px; font-size: 12px; color: var(--ink-soft);
transition: border-color var(--t-rapido) var(--ease), color var(--t-rapido) var(--ease), background var(--t-rapido) var(--ease);
}
.chip-avisos:hover { border-color: var(--brand); color: #fff; background: rgba(0,128,240,.10); }
.chip-avisos .n {
font-family: var(--font-mono); font-size: 10.5px; font-weight: 600; min-width: 20px; text-align: center;
padding: 1px 6px; border-radius: var(--r-pill); background: rgba(255,180,67,.16); color: var(--warn);
}
.chip-avisos.crit .n { background: rgba(255,95,110,.16); color: var(--crit); }
.chip-avisos.ok .n { background: rgba(47,214,165,.14); color: var(--ok); }
.aviso-box {
background: rgba(255,180,67,.07); border: 1px solid rgba(255,180,67,.26);
border-left: 3px solid var(--warn); color: var(--ink); border-radius: var(--r-md);
}
.aviso-titulo { color: #fff; }
.aviso-cuerpo { color: var(--ink-soft); }
.alert-card { background: rgba(255,180,67,.07); border: 1px solid rgba(255,180,67,.26); border-radius: var(--r-md); }
.alert-card.crit { background: rgba(255,95,110,.07); border-color: rgba(255,95,110,.26); }
.acceso-lan { background: rgba(255,180,67,.10); border: 1px solid rgba(255,180,67,.32); border-left: 4px solid var(--warn); color: var(--warn); border-radius: var(--r-md); }
.acceso-lan b { color: var(--warn); }
.error-state { color: var(--crit); }
.origen-cinta {
background: transparent; border: 1px solid var(--border); border-left: 2px solid var(--brand);
border-radius: var(--r-pill); padding: 0; margin-bottom: 16px; color: var(--ink-soft);
overflow: hidden; transition: border-radius var(--t-medio) var(--ease);
}
.origen-cinta > .origen-toggle {
display: flex; align-items: center; gap: 9px; width: 100%; text-align: left;
background: none; border: 0; cursor: pointer; color: var(--ink-faint);
font-family: var(--font-mono); font-size: 10px; letter-spacing: .14em; text-transform: uppercase;
padding: 9px 16px;
}
.origen-cinta > .origen-toggle:hover { color: var(--brand-400); }
.origen-cinta > .origen-toggle .flecha { margin-left: auto; transition: transform var(--t-medio) var(--ease); }
.origen-cinta > .origen-cuerpo { display: none; padding: 0 16px 13px; font-size: 12px; line-height: 1.65; }
.origen-cinta.abierta { border-radius: var(--r-md); }
.origen-cinta.abierta > .origen-cuerpo { display: block; animation: entra 260ms var(--ease) both; }
.origen-cinta.abierta > .origen-toggle .flecha { transform: rotate(180deg); }
.origen-cinta strong { color: var(--ink); }
.avisos-lista { display: flex; flex-direction: column; gap: 10px; }
.aviso-fila {
display: grid; grid-template-columns: 34px 1fr auto; gap: 14px; align-items: start;
background: var(--surface); background-image: var(--grad-superficie);
border: 1px solid var(--border); border-left: 3px solid var(--pend);
border-radius: var(--r-md); padding: 14px 16px;
transition: transform var(--t-rapido) var(--ease), border-color var(--t-rapido) var(--ease);
}
.aviso-fila:hover { transform: translateX(2px); border-color: var(--border-strong); }
.aviso-fila.crit { border-left-color: var(--crit); }
.aviso-fila.warn { border-left-color: var(--warn); }
.aviso-fila.ok { border-left-color: var(--ok); }
.aviso-fila.info { border-left-color: var(--brand); }
.aviso-fila .ico {
width: 34px; height: 34px; border-radius: 11px; display: grid; place-items: center;
background: rgba(255,255,255,.05); font-size: 15px;
}
.aviso-fila.crit .ico { background: rgba(255,95,110,.13); color: var(--crit); }
.aviso-fila.warn .ico { background: rgba(255,180,67,.13); color: var(--warn); }
.aviso-fila.ok .ico { background: rgba(47,214,165,.13); color: var(--ok); }
.aviso-fila.info .ico { background: rgba(0,128,240,.13); color: var(--brand-400); }
.aviso-fila .t { font-weight: 650; font-size: 13.5px; color: #fff; }
.aviso-fila .d { font-size: 12.5px; color: var(--ink-soft); margin-top: 4px; line-height: 1.6; }
.aviso-fila .meta { font-family: var(--font-mono); font-size: 10px; color: var(--ink-faint); letter-spacing: .06em; margin-top: 7px; }
.sysbar {
margin: 0 0 18px; padding: 11px 16px; border-radius: var(--r-pill);
background: var(--surface-glass); border: 1px solid var(--border); backdrop-filter: blur(10px);
}
.sysbar-grid { gap: 6px 24px; }
.sys-f > span { color: var(--ink-faint); }
.sysbar-refresh { border-top: 1px dashed var(--border); color: var(--ink-faint); }
.env-bar { display: none; }
.mobile-top { display: none; }
.bottom-nav { display: none; }
.ptr { display: none; }
@media (max-width: 900px) {
.mobile-top {
display: flex; align-items: center; gap: 12px;
background: rgba(10,16,25,.86); backdrop-filter: blur(14px) saturate(1.3);
border-bottom: 1px solid var(--border);
padding: 10px 14px; padding-top: calc(10px + env(safe-area-inset-top));
color: var(--ink);
}
.mobile-top .marca-b { width: 26px; height: 26px; }
.mobile-brand { font-weight: 800; font-size: 13.5px; letter-spacing: .1em; text-transform: uppercase; color: #fff; }
.mobile-brand em { font-style: normal; color: var(--brand-400); }
.mobile-menu {
background: rgba(255,255,255,.06); border: 1px solid var(--border); color: var(--ink);
border-radius: 12px; width: 40px; height: 40px; display: grid; place-items: center; font-size: 17px;
}
.mobile-menu:active { transform: scale(.93); }
.mobile-acciones { margin-left: auto; display: flex; gap: 8px; }
.sidebar { width: 84vw; max-width: 320px; padding-top: calc(var(--s5) + env(safe-area-inset-top)); }
.main { padding: 16px 14px calc(96px + env(safe-area-inset-bottom)); }
.sysbar, .acceso-lan, .aviso-box { margin-left: 0; margin-right: 0; }
.sysbar { border-radius: var(--r-md); }
.page-title { font-size: 23px; }
.kpi-value { font-size: 30px; }
.panel-body, .panel-head { padding-left: 15px; padding-right: 15px; }
.btn { height: 42px; }
.btn-sm { height: 36px; }
.nav-item { padding: 12px 14px; font-size: 14px; }
.tab { padding: 13px 10px; font-size: 13.5px; }
.bottom-nav {
display: grid; grid-template-columns: repeat(5, 1fr);
position: fixed; left: 0; right: 0; bottom: 0; z-index: 75;
background: rgba(9,15,23,.92); backdrop-filter: blur(16px) saturate(1.4);
border-top: 1px solid var(--border);
padding-bottom: env(safe-area-inset-bottom);
}
.bn-item {
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
padding: 9px 2px 8px; background: none; border: 0; cursor: pointer;
color: var(--ink-faint); font-family: var(--font-ui); font-size: 9.5px;
letter-spacing: .03em; position: relative; overflow: hidden;
transition: color var(--t-rapido) var(--ease);
}
.bn-item .ic { font-size: 16px; line-height: 1; transition: transform var(--t-medio) var(--ease); }
.bn-item.active { color: var(--brand-400); }
.bn-item.active .ic { transform: translateY(-2px) scale(1.12); }
.bn-item.active::after {
content: ""; position: absolute; top: 0; left: 50%; transform: translateX(-50%);
width: 26px; height: 2px; border-radius: 0 0 3px 3px; background: var(--grad-marca);
}
.bn-item .punto {
position: absolute; top: 7px; right: calc(50% - 16px);
width: 7px; height: 7px; border-radius: 50%; background: var(--warn);
box-shadow: 0 0 0 2px rgba(9,15,23,.92);
}
.ptr {
position: fixed; top: calc(env(safe-area-inset-top) + 54px); left: 50%; z-index: 65;
transform: translate(-50%, -20px); opacity: 0; pointer-events: none;
width: 34px; height: 34px; border-radius: 50%;
background: var(--surface-alt); border: 1px solid var(--border);
display: grid; place-items: center; color: var(--brand-400); font-size: 15px;
transition: opacity var(--t-rapido) linear;
}
.ptr.gira { animation: gira 800ms linear infinite; }
@keyframes gira { to { transform: translate(-50%, 6px) rotate(360deg); } }
.drawer { width: 100vw; max-width: 100vw; right: -100vw; border-radius: 0; padding: 22px 18px calc(28px + env(safe-area-inset-bottom)); }
.kv { grid-template-columns: 1fr; }
.grafico-caja { padding: 15px; }
}
@media (max-width: 560px) {
.kpi-grid, .dir-grid, .flota-grid { grid-template-columns: 1fr !important; }
.sysbar-grid { gap: 9px 16px; }
.filters-row { gap: 10px; }
.filter-select select { min-width: 0; width: 100%; }
.filter-select { flex: 1 1 45%; }
}
.paleta-fondo { position: fixed; inset: 0; z-index: 200; background: rgba(4,8,13,.72); backdrop-filter: blur(6px); display: none; }
.paleta-fondo.abierta { display: block; animation: entra 180ms var(--ease) both; }
.paleta {
position: fixed; z-index: 201; top: 14vh; left: 50%; transform: translateX(-50%);
width: min(620px, 92vw); background: var(--surface-alt); border: 1px solid var(--border-strong);
border-radius: var(--r-lg); box-shadow: var(--shadow-md); overflow: hidden; display: none;
}
.paleta.abierta { display: block; animation: paletaEntra 220ms var(--ease) both; }
@keyframes paletaEntra { from { opacity: 0; transform: translateX(-50%) translateY(-10px) scale(.97); } to { opacity: 1; transform: translateX(-50%); } }
.paleta input {
width: 100%; border: 0; outline: 0; background: transparent; color: var(--ink);
font-family: var(--font-ui); font-size: 16px; padding: 18px 20px; border-bottom: 1px solid var(--border);
}
.paleta-lista { max-height: 46vh; overflow-y: auto; padding: 8px; }
.paleta-item {
display: flex; align-items: center; gap: 12px; padding: 11px 13px; border-radius: var(--r-md);
cursor: pointer; font-size: 13.5px; color: var(--ink-soft);
}
.paleta-item .ic { color: var(--ink-faint); width: 18px; text-align: center; }
.paleta-item .grupo { margin-left: auto; font-family: var(--font-mono); font-size: 9.5px; color: var(--ink-faint); letter-spacing: .08em; text-transform: uppercase; }
.paleta-item.sel, .paleta-item:hover { background: rgba(0,128,240,.14); color: #fff; }
.paleta-item.sel .ic { color: var(--brand-400); }
.paleta-pie { padding: 9px 16px; border-top: 1px solid var(--border); font-family: var(--font-mono); font-size: 9.5px; color: var(--ink-faint); letter-spacing: .08em; }
.tabs { border-bottom: 1px solid var(--border); }
.tab { color: var(--ink-faint); border-radius: var(--r-sm) var(--r-sm) 0 0; transition: color var(--t-rapido) var(--ease), background var(--t-rapido) var(--ease); }
.tab:hover { color: var(--ink); background: rgba(255,255,255,.035); }
.tab.active { color: var(--brand-400); border-bottom-color: var(--brand); }
.tab .count { background: rgba(255,255,255,.06); color: var(--ink-faint); }
.tab.active .count { background: rgba(0,128,240,.18); color: var(--brand-400); }
.drawer { background: var(--surface); border-left: 1px solid var(--border); box-shadow: -24px 0 70px rgba(0,0,0,.6); border-radius: var(--r-lg) 0 0 var(--r-lg); }
.drawer-overlay { background: rgba(4,8,13,.62); backdrop-filter: blur(3px); }
.drawer h2 { color: #fff; letter-spacing: -.02em; }
.drawer-close { background: rgba(255,255,255,.06); border-radius: var(--r-pill); padding: 7px 13px; }
.drawer-close:hover { background: rgba(255,95,110,.16); color: var(--crit); }
.filter-select select { background: rgba(255,255,255,.045); border: 1px solid var(--border); border-radius: var(--r-pill); color: var(--ink); padding: 9px 13px; }
.filter-select select:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--accent-soft); }
.coverage-bar-bg { background: rgba(255,255,255,.07); }
.coverage-bar-fg { transition: width 900ms var(--ease); }
.cierre-barra { border-color: var(--border); }
.cierre-numero { color: #fff; font-weight: 300; }
.tl-dot { background: var(--surface); border-color: var(--border-strong); }
.tl-line { background: var(--border); }
.skeleton { background: linear-gradient(90deg, rgba(255,255,255,.04) 25%, rgba(255,255,255,.10) 37%, rgba(255,255,255,.04) 63%); background-size: 400% 100%; }
.source-link { color: var(--brand-400); }
.foot-note { color: var(--ink-faint); }
.empty-state { color: var(--ink-faint); }
.inventory-tag { border-radius: var(--r-pill); }
.tag-REAL { background: rgba(47,214,165,.13); color: var(--ok); }
.tag-REAL_PARCIAL, .tag-REAL_CON_ADVERTENCIA { background: rgba(255,180,67,.14); color: var(--warn); }
.tag-COMING_NEXT, .tag-UI_ONLY, .tag-NO_MOSTRADO { background: rgba(122,135,152,.16); color: var(--ink-soft); }
.activity-row:hover, .activity-row:focus-visible { background: rgba(0,128,240,.07); }
.activity-row .a-id { color: var(--brand-400); }
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .001ms !important; animation-iteration-count: 1 !important;
transition-duration: .001ms !important; scroll-behavior: auto !important;
}
}
.gfx-filas { display: flex; flex-direction: column; gap: 11px; }
.gfx-fila { display: grid; grid-template-columns: 128px 1fr auto; gap: 14px; align-items: center; animation: entra 460ms var(--ease) both; animation-delay: calc(var(--i,0) * 55ms); }
.gfx-fila-lab { font-size: 12px; color: var(--ink-soft); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gfx-fila-pista { height: 9px; border-radius: 999px; background: rgba(255,255,255,.06); overflow: hidden; }
.gfx-fila-pista i { display: block; height: 100%; border-radius: 999px; transform-origin: left; animation: creceX 780ms var(--ease) both; }
@keyframes creceX { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.gfx-fila-val { font-size: 12.5px; color: var(--ink); font-weight: 600; min-width: 74px; text-align: right; }
@media (max-width: 560px) { .gfx-fila { grid-template-columns: 96px 1fr auto; gap: 9px; } .gfx-fila-val { min-width: 62px; font-size: 11.5px; } }
.gfx-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s4); margin-bottom: var(--s5); }
.gfx-grid.dos { grid-template-columns: 1.35fr 1fr; }
@media (max-width: 1200px) { .gfx-grid, .gfx-grid.dos { grid-template-columns: 1fr 1fr; } }
@media (max-width: 760px) { .gfx-grid, .gfx-grid.dos { grid-template-columns: 1fr; } }
.head-acciones { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
@media (max-width: 900px) {
.shell { grid-template-columns: 1fr !important; }
.sysbar { padding: 9px 12px; border-radius: var(--r-md); }
.sysbar-grid {
display: flex; flex-direction: row; flex-wrap: nowrap; gap: 18px;
overflow-x: auto; -webkit-overflow-scrolling: touch;
scrollbar-width: none; padding-bottom: 2px;
}
.sysbar-grid::-webkit-scrollbar { display: none; }
.sys-f { flex: 0 0 auto; margin-left: 0 !important; }
.sys-f > b { white-space: nowrap; }
.sysbar-refresh { font-size: 10.5px; }
.jarvis-bar { flex-wrap: wrap; padding: 11px 16px; }
.jarvis-bar input { min-width: 0; flex: 1 1 auto; font-size: 14px; }
.jarvis-bar .state { display: none; }
.topbar, .head-acciones { width: 100%; }
.page-sub { font-size: 12.5px; }
.two-col, .dir-banner, .cierre-cobertura, .significa-box,
.tes-grid, .tarj-grid, .exc-foot { grid-template-columns: 1fr !important; display: block; }
.dir-banner { padding: 15px; }
.dir-banner .t { font-size: 15px; }
.dir-banner > div:last-child { margin-top: 12px; }
.atencion-col { max-width: 100% !important; }
.panel, .kpi-card, .grafico-caja { border-radius: 14px; }
.panel-head { flex-wrap: wrap; gap: 8px; }
.activity-head { display: none; }
.activity-row {
display: grid !important; grid-template-columns: 1fr auto; gap: 4px 10px;
background: var(--surface); border: 1px solid var(--border); border-radius: 14px;
padding: 12px 14px; margin-bottom: 10px;
}
.activity-row > span { font-size: 12px; }
.kv { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 480px) {
.main { padding-left: 12px; padding-right: 12px; }
.page-title { font-size: 21px; }
.kpi-value { font-size: 27px; }
.kv { grid-template-columns: 1fr; }
}
.page-sub, .panel-note, .foot-note, .kpi-context, .aviso-fila .d, .aviso-fila .meta,
.origen-cinta, .drawer .sub, .tl-note, .gfx-leyenda, .atencion-item .d, .empty-state {
overflow-wrap: anywhere;
}
.shell, .main, .two-col, .gfx-grid, .kpi-grid, .dir-grid, .flota-grid,
.tes-grid, .tarj-grid, .panel, .grafico-caja, .gfx-fila { min-width: 0; }
.shell > *, .two-col > *, .gfx-grid > *, .kpi-grid > *, .dir-grid > * { min-width: 0; }
.main { max-width: 100%; }
@media (max-width: 620px) {
.grafico-cab { flex-direction: column; align-items: flex-start; gap: 3px; }
.grafico-sub { font-size: 9.5px; }
.gfx-fila {
grid-template-columns: 1fr auto;
grid-template-areas: "lab val" "pista pista";
row-gap: 7px;
}
.gfx-fila-lab { grid-area: lab; white-space: normal; }
.gfx-fila-val { grid-area: val; }
.gfx-fila-pista { grid-area: pista; }
}
@media (max-width: 720px) {
table.as-cards tbody td.td-accion { justify-content: flex-end; padding-top: 10px; }
table.as-cards tbody td.td-accion::before { content: none; }
}
.gfx { overflow: hidden; }
@media (max-width: 900px) {
.tabs { overflow-x: auto; flex-wrap: nowrap; scrollbar-width: none; }
.tabs::-webkit-scrollbar { display: none; }
.tab { flex: 0 0 auto; white-space: nowrap; }
}
@media (max-width: 900px) {
.control-row, .pnl-linea, .obl-fila, .exc-card-foot {
grid-template-columns: 1fr !important;
row-gap: 8px;
}
.control-row > *, .pnl-linea > * { grid-column: 1 / -1 !important; text-align: left !important; }
.c-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.badge { max-width: 100%; white-space: normal; }
}
.main.es-bienvenida { padding: 0; max-width: 100%; }
.main.es-bienvenida .sysbar {
background: transparent; border: 0; box-shadow: none;
margin: 0; padding: 14px 20px 0; position: relative; z-index: 2;
}
.main.es-bienvenida .sysbar-refresh { border-top: 0; padding-top: 4px; }
.bv {
position: relative; min-width: 0;
min-height: calc(100vh - 96px);
display: flex; align-items: center; justify-content: center;
padding: 26px 20px 40px;
overflow: hidden;
}
.bv::after {
content: ""; position: absolute; inset: 0; pointer-events: none;
background: radial-gradient(820px 520px at 50% 38%, rgba(0,128,240,.15), transparent 68%);
}
.bv-particulas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.bv-contenido {
position: relative; z-index: 1; width: 100%; max-width: 1020px;
display: flex; flex-direction: column; align-items: center; text-align: center;
}
.bv-lockup { display: flex; align-items: center; gap: 13px; margin-bottom: 26px; animation: bvEntra 620ms var(--ease) both; }
.bv-lockup .marca-b { width: 34px; height: 34px; }
.bv-marca { font-size: 16px; font-weight: 800; letter-spacing: .14em; color: #fff; text-transform: uppercase; }
.bv-marca em { font-style: normal; color: var(--brand-400); }
.bv-saludo {
font-size: clamp(30px, 5vw, 50px); font-weight: 750; letter-spacing: -.025em;
color: #fff; margin: 0 0 10px; line-height: 1.06;
animation: bvEntra 620ms 90ms var(--ease) both;
}
.bv-hoy {
font-size: 14.5px; color: var(--ink-soft); margin-bottom: 18px;
animation: bvEntra 620ms 160ms var(--ease) both;
}
.bv-corte {
display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 9px;
font-size: 11.5px; color: var(--ink-faint); margin-bottom: 26px;
animation: bvEntra 620ms 230ms var(--ease) both;
}
.bv-corte b { color: var(--ink-soft); font-weight: 600; }
.bv-sep { opacity: .45; }
.bv-avisos {
display: inline-flex; align-items: center; gap: 7px;
background: var(--surface-alt); border: 1px solid var(--border);
color: var(--ink-soft); font: inherit; font-size: 11.5px;
padding: 5px 12px; border-radius: var(--r-pill); cursor: pointer;
transition: border-color var(--t-rapido) var(--ease), color var(--t-rapido) var(--ease), transform var(--t-rapido) var(--ease);
}
.bv-avisos:hover { border-color: var(--border-strong); color: var(--ink); transform: translateY(-1px); }
.bv-punto { width: 6px; height: 6px; border-radius: 50%; background: var(--warn); }
.bv-punto.crit { background: var(--crit); }
.bv-jarvis { width: 100%; max-width: 680px; margin-bottom: 30px; animation: bvEntra 620ms 300ms var(--ease) both; }
.bv-jarvis .jarvis-bar { margin: 0; }
.bv-grid {
display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px;
width: 100%; margin-bottom: 32px;
}
.bv-acceso {
display: flex; flex-direction: column; align-items: flex-start; gap: 5px;
min-width: 0; text-align: left; cursor: pointer;
padding: 18px 18px 16px; border-radius: var(--r-card);
background: linear-gradient(180deg, rgba(19,30,44,.82), rgba(14,22,33,.82));
border: 1px solid var(--border); color: var(--ink);
font: inherit; position: relative; overflow: hidden;
animation: bvEntra 560ms var(--ease) both;
transition: transform var(--t-medio) var(--ease), border-color var(--t-medio) var(--ease), box-shadow var(--t-medio) var(--ease);
}
.bv-acceso:nth-child(1) { animation-delay: 360ms; }
.bv-acceso:nth-child(2) { animation-delay: 410ms; }
.bv-acceso:nth-child(3) { animation-delay: 460ms; }
.bv-acceso:nth-child(4) { animation-delay: 510ms; }
.bv-acceso:nth-child(5) { animation-delay: 560ms; }
.bv-acceso:nth-child(6) { animation-delay: 610ms; }
.bv-acceso::before {
content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px;
background: var(--grad-marca); transform: scaleX(0); transform-origin: left;
transition: transform var(--t-medio) var(--ease);
}
.bv-acceso:hover, .bv-acceso:focus-visible {
transform: translateY(-3px); border-color: var(--border-strong);
box-shadow: 0 18px 40px -22px rgba(0,128,240,.55);
outline: none;
}
.bv-acceso:hover::before, .bv-acceso:focus-visible::before { transform: scaleX(1); }
.bv-acceso:active { transform: translateY(-1px); }
.bv-ic { font-size: 15px; color: var(--brand-400); line-height: 1; }
.bv-nombre { font-size: 12px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft); }
.bv-cifra {
font-size: clamp(21px, 2.2vw, 27px); font-weight: 750; color: #fff;
letter-spacing: -.02em; font-variant-numeric: tabular-nums; white-space: nowrap;
max-width: 100%; overflow: hidden; text-overflow: ellipsis;
}
.bv-sin { font-size: 14px; color: var(--ink-faint); font-family: var(--font-mono); }
.bv-pie { font-size: 11.5px; color: var(--ink-faint); line-height: 1.35; }
.bv-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px; }
.bv-final { display: flex; flex-direction: column; align-items: center; gap: 13px; animation: bvEntra 620ms 700ms var(--ease) both; }
.bv-final .btn { height: 46px; padding: 0 26px; font-size: 13.5px; }
.bv-nota { font-size: 11.5px; color: var(--ink-faint); max-width: 520px; line-height: 1.5; }
@keyframes bvEntra {
from { opacity: 0; transform: translateY(16px); filter: blur(5px); }
to   { opacity: 1; transform: none; filter: none; }
}
@media (max-width: 900px) {
.bv { min-height: calc(100vh - 168px); padding: 18px 14px 34px; }
.bv-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; }
}
@media (max-width: 520px) {
.bv-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.bv-acceso { padding: 14px 13px 13px; }
.bv-saludo { font-size: 29px; }
.bv-jarvis { margin-bottom: 22px; }
.main.es-bienvenida .sysbar { padding: 10px 14px 0; }
}
@media (prefers-reduced-motion: reduce) {
.bv-lockup, .bv-saludo, .bv-hoy, .bv-corte, .bv-jarvis, .bv-acceso, .bv-final { animation: none; }
.bv-acceso { transition: border-color var(--t-rapido) var(--ease); }
.bv-acceso:hover { transform: none; }
}
.bv-chips .badge { font-size: 8.5px; padding: 2px 7px; letter-spacing: 0; }
.bv-chips { max-width: 100%; }
body::before {
content: ""; position: fixed; inset: 0; pointer-events: none; z-index: -1;
background:
radial-gradient(980px 520px at 82% -8%, rgba(0,128,240,.10), transparent 60%),
radial-gradient(760px 460px at 4% 106%, rgba(11,73,208,.085), transparent 62%);
}
body::after {
content: ""; position: fixed; inset: 0; pointer-events: none; z-index: -1;
background-image:
linear-gradient(rgba(255,255,255,.014) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.014) 1px, transparent 1px);
background-size: 46px 46px;
mask-image: radial-gradient(1200px 700px at 50% 0%, #000 20%, transparent 78%);
-webkit-mask-image: radial-gradient(1200px 700px at 50% 0%, #000 20%, transparent 78%);
}
.kpi-card { position: relative; overflow: hidden; }
.kpi-card::after {
content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px;
background: var(--grad-marca); transform: scaleX(0); transform-origin: left;
transition: transform var(--t-medio) var(--ease);
}
.kpi-card:not(.static):hover::after, .kpi-card:not(.static):focus-visible::after { transform: scaleX(1); }
.kpi-card:not(.static):hover { transform: translateY(-2px); border-color: var(--border-strong); }
.kpi-card { transition: transform var(--t-medio) var(--ease), border-color var(--t-medio) var(--ease), box-shadow var(--t-medio) var(--ease); }
.panel { position: relative; }
.panel::before {
content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
background: linear-gradient(150deg, rgba(255,255,255,.045), transparent 34%);
}
.panel > * { position: relative; }
.dir-banner { position: relative; overflow: hidden; }
.dir-banner::before {
content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
background: var(--grad-marca);
}
@media (prefers-reduced-motion: reduce) {
.entra { animation: none; }
.kpi-card:not(.static):hover { transform: none; }
}
/* CLAUD22. Botones de la barra del sistema: la liberación, el programa y la
   sesión NUNCA cambian solos; se ofrecen y Edgar decide. */
.sys-info { color: var(--brand-400) !important; }
.sys-accion {
display: inline-block; margin-left: 8px; padding: 4px 10px; border-radius: 999px;
border: 1px solid currentColor; background: transparent; color: inherit;
font: 600 11px/1.3 var(--font-ui); cursor: pointer; vertical-align: baseline;
}
.sys-accion:hover { background: rgba(255,255,255,.06); }
