:root {
    /* Pure Light Theme Palette */
    --bg-main: #f8fafc;
    --sidebar-bg: #ffffff;
    --card-bg: #ffffff;
    --text-primary: #0f172a;
    --text-secondary: #475569;
    --text-light: #334155;
    
    /* Wolco Corporate Colors */
    --accent-red: #003a68;
    --accent-red-hover: #00305a;
    --accent-dark: #0f172a;
    --accent-blue: #2563eb;
    
    --border-color: #cbd5e1;
    --soft-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);
    --glass-border: 1px solid var(--border-color);
    
    --success: #10b981;
    --error: #ef4444;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: 'Inter', sans-serif;
}

body {
    background-color: var(--bg-main);
    color: var(--text-primary);
    min-height: 100vh;
    display: flex;
    overflow-x: hidden;
}

/* --- LOGIN SCREEN --- */
.login-wrapper {
    position: fixed;
    top: 0; left: 0; width: 100%; height: 100%;
    background: linear-gradient(120deg, #071427, #0b2a4a, #0a1a2f, #0b1f3a);
    background-size: 300% 300%;
    animation: loginBgShift 20s ease infinite;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 1000;
    overflow: hidden;
    padding: 20px;
}
.login-wrapper.hidden { display: none !important; }
@keyframes loginBgShift { 0%{background-position:0% 50%;} 50%{background-position:100% 50%;} 100%{background-position:0% 50%;} }

/* Aurora animada de fondo */
.login-aurora { position: absolute; inset: 0; overflow: hidden; z-index: 0; }
.login-aurora span { position: absolute; display: block; border-radius: 50%; filter: blur(55px); opacity: .8; will-change: transform; }
.login-aurora span:nth-child(1) { width: 560px; height: 560px; background: #2563eb; top: -160px; left: -120px; animation: loginBlob1 11s ease-in-out infinite; }
.login-aurora span:nth-child(2) { width: 500px; height: 500px; background: #003a68; bottom: -180px; right: -110px; animation: loginBlob2 13s ease-in-out infinite; }
.login-aurora span:nth-child(3) { width: 440px; height: 440px; background: #06b6d4; top: 30%; left: 45%; animation: loginBlob3 9s ease-in-out infinite; }
@keyframes loginBlob1 { 0%,100%{transform:translate(0,0) scale(1);} 50%{transform:translate(320px,220px) scale(1.35);} }
@keyframes loginBlob2 { 0%,100%{transform:translate(0,0) scale(1);} 50%{transform:translate(-300px,-170px) scale(1.3);} }
@keyframes loginBlob3 { 0%,100%{transform:translate(0,0) scale(.85);} 50%{transform:translate(-230px,160px) scale(1.25);} }

/* Contenedor split (glass) */
.login-split {
    position: relative; z-index: 1;
    display: flex; width: 100%; max-width: 920px; min-height: 540px;
    background: rgba(255,255,255,.08);
    border: 1px solid rgba(255,255,255,.14);
    border-radius: 24px;
    box-shadow: 0 30px 80px rgba(0,0,0,.45);
    overflow: hidden;
    backdrop-filter: blur(8px);
}

/* Panel de marca */
.login-brand {
    flex: 1 1 46%;
    padding: 40px;
    color: #fff;
    display: flex; flex-direction: column; justify-content: space-between;
    background: linear-gradient(150deg, rgba(11,60,115,.92), rgba(29,78,216,.78) 55%, rgba(225,29,72,.55));
    position: relative;
}
.login-brand-top { text-align: center; }
.login-brand-top .login-logo { display: block; text-align: center; }
.login-brand-top .login-logo img { display: block; margin: 0 auto; max-height: 72px; max-width: 240px; object-fit: contain; filter: brightness(0) invert(1); }
.login-company { margin-top: 12px; font-size: 1.15rem; font-weight: 800; letter-spacing: .5px; color: #fff; }
.login-logo-txt { font-size: 1.6rem; font-weight: 800; letter-spacing: 2px; }
.login-brand-mid h1 { font-size: 1.9rem; font-weight: 800; line-height: 1.15; margin: 0 0 12px; }
.login-brand-mid h1 .login-h1-name { display: block; font-size: 1.9rem; font-weight: 800; opacity: 1; letter-spacing: 0; }
.login-brand-mid h1 .login-h1-sub { display: block; font-weight: 600; opacity: .9; font-size: 1.15rem; letter-spacing: 1px; margin-top: 2px; }
.login-brand-mid p { font-size: 0.92rem; line-height: 1.5; opacity: .9; margin: 0 0 22px; max-width: 340px; }
.login-features { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 12px; }
.login-features li { display: flex; align-items: center; gap: 12px; font-size: 0.9rem; font-weight: 500; }
.login-features li i { width: 34px; height: 34px; border-radius: 10px; background: rgba(255,255,255,.16); display: inline-flex; align-items: center; justify-content: center; font-size: 0.9rem; }
.login-brand-foot { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; }
.login-erps { flex: 1; min-width: 0; }
.login-erps-lbl { font-size: 0.74rem; opacity: .8; display: block; margin-bottom: 10px; }
.login-erps-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px 12px; align-items: center; justify-items: center; }
.erp-chip { display: inline-flex; align-items: center; justify-content: center; height: 34px; width: 100%; }
.erp-chip img { height: 30px; max-width: 90px; object-fit: contain; opacity: .92; transition: opacity .15s, transform .15s; }
.erp-chip:hover img { opacity: 1; transform: translateY(-2px); }
.erp-chip b { font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: .92rem; letter-spacing: .3px; color: rgba(255,255,255,.9); }
.login-erps-row img:hover { opacity: 1; transform: translateY(-2px); }
.login-qr { flex-shrink: 0; text-align: center; text-decoration: none; }
.login-qr img { width: 62px; height: 62px; border-radius: 8px; background: #fff; padding: 4px; display: block; }
.login-qr span { display: block; font-size: 0.62rem; opacity: .75; margin-top: 4px; color: #fff; }
.login-dot { width: 9px; height: 9px; border-radius: 50%; background: #4ade80; box-shadow: 0 0 0 0 rgba(74,222,128,.7); animation: loginPulseDot 2s infinite; }
@keyframes loginPulseDot { 0%{box-shadow:0 0 0 0 rgba(74,222,128,.6);} 70%{box-shadow:0 0 0 8px rgba(74,222,128,0);} 100%{box-shadow:0 0 0 0 rgba(74,222,128,0);} }

/* Tarjeta de acceso */
.login-card {
    flex: 1 1 54%;
    background: var(--card-bg, #fff);
    padding: 44px 40px;
    display: flex; flex-direction: column; justify-content: center;
    text-align: left;
}
.login-logo--mobile { display: none; text-align: center; margin-bottom: 14px; }
.login-logo--mobile img { max-height: 46px; }
.login-card h2 { font-weight: 800; color: var(--text-primary); margin: 0 0 4px; font-size: 1.5rem; }
.login-subtitle { color: var(--text-secondary); font-size: 0.9rem; margin: 0 0 26px; }
.login-field label { display: block; font-size: 0.78rem; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .3px; margin-bottom: 6px; }
.login-input { position: relative; display: flex; align-items: center; }
.login-input > i { position: absolute; left: 14px; color: #94a3b8; font-size: 0.9rem; pointer-events: none; }
.login-input input { width: 100%; padding: 13px 14px 13px 40px; border: 1.5px solid var(--border-color, #e2e8f0); border-radius: 12px; font-size: 0.95rem; transition: border-color .15s, box-shadow .15s; background: #fff; }
.login-input input:focus { outline: none; border-color: #1d4ed8; box-shadow: 0 0 0 4px rgba(29,78,216,.14); }
.login-eye { position: absolute; right: 8px; background: none; border: none; color: #94a3b8; cursor: pointer; padding: 6px 8px; }
.login-eye:hover { color: #1d4ed8; }
.login-remember-row { display: flex; flex-direction: row; align-items: center; gap: 8px; }
.login-remember-row input { width: auto; }
.login-remember-row label { margin: 0; cursor: pointer; font-weight: 500; font-size: 0.85rem; color: var(--text-secondary); }
.login-submit { display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-weight: 700; padding: 13px; border-radius: 12px; background: linear-gradient(135deg, #003a68, #00305a); border: none; box-shadow: 0 6px 18px rgba(225,29,72,.32); transition: transform .12s, box-shadow .12s; }
.login-submit:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(225,29,72,.4); }
.login-submit i { transition: transform .15s; }
.login-submit:hover:not(:disabled) i { transform: translateX(3px); }
.login-sep { display: flex; align-items: center; gap: 12px; margin: 20px 0 12px; color: #94a3b8; font-size: 0.76rem; }
.login-sep::before, .login-sep::after { content: ''; flex: 1; height: 1px; background: var(--border-color, #e5e7eb); }
.login-card .outline-btn { border-radius: 12px; padding: 12px; font-weight: 600; }
.login-hint { margin: 10px 0 0; color: #94a3b8; font-size: 0.72rem; text-align: center; }
.login-error { color: var(--error, #dc2626); background: rgba(239,68,68,.1); padding: 10px 12px; border-radius: 10px; margin-top: 15px; font-size: 0.85rem; text-align: center; }
.login-credit { position: absolute; bottom: 16px; left: 0; right: 0; z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 0.8rem; color: rgba(255,255,255,.7); }
.login-credit-logos { display: flex; align-items: center; justify-content: center; gap: 12px; }
.login-credit-logo { height: 20px; width: auto; opacity: .9; filter: drop-shadow(0 1px 4px rgba(0,0,0,.35)); }
.login-credit-sep { width: 1px; height: 18px; background: rgba(255,255,255,.25); border-radius: 1px; }
.login-credit a { color: #fff; font-weight: 700; text-decoration: none; }
.login-credit-heart { color: #f43f5e; margin: 0 1px; animation: creditHeart 1.6s ease-in-out infinite; }
@keyframes creditHeart { 0%,100%{transform:scale(1);} 15%{transform:scale(1.3);} 30%{transform:scale(1);} 45%{transform:scale(1.2);} }
.login-credit-copy { font-size: .68rem; color: rgba(255,255,255,.5); letter-spacing: .2px; }
.login-credit a:hover { text-decoration: underline; }

/* Responsivo: móvil/tablet estrecho → una sola columna, panel de marca oculto */
@media (max-width: 760px) {
    /* El wrapper deja de centrar rígido: apila en columna y permite scroll */
    .login-wrapper { flex-direction: column; justify-content: flex-start; align-items: center; overflow-y: auto; padding: 24px 16px 28px; }
    /* flex-shrink:0 => el card NO se encoge; el wrapper hace scroll y no se recorta nada */
    .login-split { flex: 0 0 auto; flex-direction: column; max-width: 420px; min-height: 0; width: 100%; }
    .login-brand { display: none; }
    .login-card { flex: 0 0 auto; padding: 22px 20px; border-radius: 22px; }
    .login-logo--mobile { display: block; }
    .login-card h2 { text-align: center; }
    .login-subtitle { text-align: center; }
    /* El crédito (logo Redline + copyright) baja al flujo, ya NO se superpone al botón */
    .login-credit { position: static; margin-top: 16px; }
    /* Compactar para que TODO (incluido "Ver como funciona") entre sin depender del scroll */
    .login-card h2 { font-size: 1.35rem; margin-bottom: 2px; }
    .login-subtitle { font-size: .82rem; margin-bottom: 14px; }
    .login-field { margin-bottom: 12px; }
    .login-input { padding-top: 11px; padding-bottom: 11px; }
    .login-sep { margin: 14px 0; }
    .login-hint { margin-top: 8px; }
    .login-tour-btn { margin-top: 12px; padding: 10px 16px; }
    .login-credit-logo { height: 18px; }
    /* Reducir el ritmo vertical (las utilidades mt-3 metian mucho aire) */
    #login-form .mt-3 { margin-top: 10px !important; }
    #login-form label { margin-bottom: 4px; }
    .login-brand-top .login-logo, .login-logo--mobile { max-height: 46px; }
}
/* Pantallas muy bajas: recortar aún más para que quepa el login completo */
@media (max-width: 760px) and (max-height: 740px) {
    .login-card { padding: 14px 18px; }
    .login-logo--mobile { max-height: 38px; }
    .login-card h2 { font-size: 1.2rem; }
    .login-subtitle { margin-bottom: 10px; }
    #login-form .mt-3 { margin-top: 8px !important; }
    .login-input { padding-top: 9px; padding-bottom: 9px; }
    .login-sep { margin: 9px 0; }
    .login-hint { font-size: .68rem; margin-top: 6px; }
    .login-tour-btn { margin-top: 9px; padding: 9px 14px; }
}

/* --- GLOBAL LOADER (PREMIUM GLASSMORPHISM) --- */
.global-loader {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background: rgba(248, 250, 252, 0.85);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    z-index: 9999;
    display: flex;
    justify-content: center;
    align-items: center;
    transition: opacity 0.4s ease, visibility 0.4s ease;
}

.global-loader.hidden {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}

.loader-content {
    text-align: center;
    background: rgba(255, 255, 255, 0.6);
    padding: 40px 60px;
    border-radius: 24px;
    border: 1px solid rgba(255, 255, 255, 0.8);
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.02);
}

.spinner {
    width: 50px;
    height: 50px;
    border: 4px solid rgba(37, 99, 235, 0.1);
    border-top-color: var(--accent-blue);
    border-radius: 50%;
    animation: spin 1s cubic-bezier(0.4, 0, 0.2, 1) infinite;
    margin: 0 auto 20px;
}

@keyframes spin {
    to { transform: rotate(360deg); }
}

.loader-text {
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: 5px;
    letter-spacing: 1px;
}

.loader-sub {
    color: var(--text-secondary);
    font-size: 0.9rem;
}

/* --- APP SHELL --- */
.app-container {
    display: flex;
    width: 100%;
    height: 100vh;
}
.app-container.hidden {
    display: none !important;
}

/* Sidebar */
.sidebar {
    width: 260px;
    background-color: var(--sidebar-bg);
    border-right: var(--glass-border);
    display: flex;
    flex-direction: column;
    box-shadow: 2px 0 10px rgba(0,0,0,0.02);
}

.logo-area {
    padding: 24px;
    display: flex;
    justify-content: center;
    align-items: center;
    border-bottom: var(--glass-border);
}
.sidebar-logo {
    max-height: 46px;
    max-width: 150px;
    width: auto;
    object-fit: contain;
}

.user-profile {
    padding: 20px 24px;
    display: flex;
    align-items: center;
    gap: 12px;
    border-bottom: var(--glass-border);
}
.avatar {
    width: 40px;
    height: 40px;
    background: rgba(225, 29, 72, 0.1);
    color: var(--accent-red);
    border-radius: 50%;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 1.2rem;
}
.user-info {
    display: flex;
    flex-direction: column;
}
.user-name {
    font-weight: 600;
    font-size: 0.95rem;
}
.user-role {
    font-size: 0.75rem;
    color: var(--text-secondary);
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 0.5px;
}

.menu {
    padding: 20px 12px;
    flex: 1;
    overflow-y: auto;
}
.menu-section {
    margin-bottom: 10px;
}
/* Cabecera de categoría: pastilla con tinte corporativo, barra de acento y chevron.
   Se diferencia claramente de las opciones (que van sangradas debajo). */
.menu-label {
    display: flex;
    align-items: center;
    padding: 9px 12px;
    font-size: 0.82rem;
    color: #0a3160;
    text-transform: uppercase;
    font-weight: 800;
    margin-bottom: 6px;
    letter-spacing: 0.3px;
    cursor: pointer;
    border-radius: 10px;
    user-select: none;
    background: rgba(11,60,115,.10);
    transition: background .2s ease, box-shadow .2s ease;
}
.menu-label::before {
    content: '';
    width: 4px; height: 15px;
    border-radius: 3px;
    background: linear-gradient(180deg, #0B3C73, #1d6fb8);
    margin-right: 9px;
    flex: 0 0 auto;
}
.menu-label::after {
    content: '\f078';
    font-family: 'Font Awesome 6 Free'; font-weight: 900;
    font-size: 0.6rem; color: #0B3C73; opacity: .55;
    margin-left: auto;
    transition: transform .2s ease;
}
.menu-label:hover {
    background: linear-gradient(90deg, rgba(11,60,115,.16), rgba(11,60,115,.04));
    box-shadow: 0 1px 4px rgba(11,60,115,.10);
}
.menu-label:hover::after { opacity: .9; }
.menu-section.collapsed .menu-label { margin-bottom: 0; }
.menu-section.collapsed .menu-label::after { transform: rotate(-90deg); }
.menu-section.collapsed .menu-item { display: none !important; }
/* Opciones sangradas bajo su cabecera, con guía vertical sutil */
.menu-section:not(.collapsed) .menu-item { margin-left: 10px; }
.menu-section:not(.collapsed) { border-left: 2px solid rgba(11,60,115,.06); border-radius: 2px; }

.menu-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    color: var(--text-secondary);
    text-decoration: none;
    border-radius: 8px;
    transition: all 0.2s ease;
    font-weight: 500;
    font-size: 0.95rem;
}

.menu-item { position: relative; }
.menu-item i { transition: transform .18s ease; }
.menu-item:hover {
    background-color: var(--bg-main);
    color: var(--text-primary);
    transform: translateX(3px);
}
.menu-item:hover i { transform: scale(1.12); }

.menu-item.active {
    background-color: rgba(225, 29, 72, 0.1);
    color: var(--accent-red);
    font-weight: 600;
    animation: menuActiveGlow 2.6s ease-in-out infinite;
}
@keyframes menuActiveGlow {
    0%,100% { background-color: rgba(225,29,72,.08); }
    50% { background-color: rgba(225,29,72,.16); }
}
/* Filete rojo animado en la opción activa */
.menu-item.active::before {
    content: ''; position: absolute; left: 2px; top: 50%; transform: translateY(-50%);
    width: 3px; height: 60%; background: var(--accent-red); border-radius: 3px;
    animation: menuActiveIn .25s ease;
}
@keyframes menuActiveIn { from { height: 0; opacity: 0; } to { height: 60%; opacity: 1; } }

.sidebar-footer {
    padding: 20px;
    border-top: var(--glass-border);
}

.connection-status {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.8rem;
    color: var(--text-secondary);
    justify-content: center;
}

.status-indicator {
    width: 8px;
    height: 8px;
    border-radius: 50%;
}
.status-indicator.offline { background-color: var(--text-secondary); }
.status-indicator.online { background-color: var(--success); box-shadow: 0 0 8px var(--success); }

/* Main Content */
.main-content {
    flex: 1;
    display: block;
    height: 100vh;
    overflow-y: auto;
}

.topbar {
    padding: 20px 40px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: rgba(255, 255, 255, 0.8);
    backdrop-filter: blur(10px);
    position: sticky;
    top: 0;
    z-index: 10;
    border-bottom: var(--glass-border);
}

.topbar h2 {
    position: relative;
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
    font-size: 1.32rem;
    letter-spacing: -0.2px;
    color: var(--accent-dark);
    padding-left: 16px;
    line-height: 1.2;
}
.topbar h2::before {
    content: "";
    position: absolute;
    left: 0; top: 50%;
    transform: translateY(-50%);
    width: 5px; height: 26px;
    border-radius: 4px;
    background: linear-gradient(180deg, #2563eb, #7c3aed);
}

.topbar-actions {
    display: flex;
    gap: 15px;
}
.icon-btn {
    background: var(--bg-main);
    border: var(--glass-border);
    color: var(--text-secondary);
    width: 36px;
    height: 36px;
    border-radius: 50%;
    cursor: pointer;
    transition: all 0.2s;
    display: flex;
    justify-content: center;
    align-items: center;
}
.icon-btn:hover { color: var(--text-primary); background: #e2e8f0; }

.content-area {
    padding: 30px 40px;
    flex: 1;
}

.hidden {
    display: none !important;
}

.view-panel {
    display: none;
    animation: fadeIn 0.3s ease;
}
.view-panel.active {
    display: block;
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

/* Cards & Components */
.glass-card {
    background: var(--card-bg);
    border-radius: 12px;
    border: var(--glass-border);
    box-shadow: var(--soft-shadow);
    padding: 24px;
}

.mt-4 { margin-top: 24px; }
.mt-3 { margin-top: 16px; }
.mt-2 { margin-top: 8px; }
.mb-2 { margin-bottom: 8px; }
.mb-3 { margin-bottom: 16px; }
.w-100 { width: 100%; }

h3 {
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 10px;
    font-weight: 600;
    color: var(--accent-dark);
}
h4 {
    margin: 0;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--text-primary);
}

.hint-text {
    color: var(--text-secondary);
    font-size: 0.875rem;
    margin-bottom: 20px;
}

/* Forms */
.form-group {
    display: flex;
    flex-direction: column;
    gap: 8px;
    text-align: left;
}

label {
    font-size: 0.85rem;
    color: var(--text-secondary);
    font-weight: 600;
}

input, textarea, select {
    background: var(--bg-main);
    border: 1px solid var(--border-color);
    padding: 10px 14px;
    border-radius: 8px;
    color: var(--text-primary);
    font-size: 0.95rem;
    outline: none;
    transition: all 0.2s;
}

input:focus, textarea:focus, select:focus {
    border-color: var(--accent-blue);
    background: #fff;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}

/* Buttons */
.btn {
    padding: 10px 20px;
    border: none;
    border-radius: 8px;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.2s ease;
    height: 42px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    font-size: 0.95rem;
}
.btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.primary-btn {
    background-color: var(--accent-red);
    color: white;
}
.primary-btn:hover:not(:disabled) { background-color: var(--accent-red-hover); transform: translateY(-1px); }

.secondary-btn {
    background-color: var(--accent-dark);
    color: white;
}
.secondary-btn:hover:not(:disabled) { background-color: #1e293b; transform: translateY(-1px); }

.outline-btn {
    background-color: transparent;
    border: 1px solid var(--border-color);
    color: var(--text-secondary);
}
.outline-btn:hover { background-color: var(--bg-main); color: var(--text-primary); }

.btn-sm {
    padding: 6px 12px;
    height: auto;
    font-size: 0.85rem;
}

/* Layouts Specific */
.connect-form {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 20px;
    align-items: end;
}

/* DB Workspace */
.db-toolbar {
    background: var(--card-bg);
    padding: 20px;
    border-radius: 12px;
    border: var(--glass-border);
    margin-bottom: 20px;
    box-shadow: var(--soft-shadow);
}
.db-connect-bar {
    display: flex;
    gap: 15px;
    align-items: center;
    flex-wrap: wrap;
}
.db-connect-bar input { flex: 1; min-width: 150px; }
.db-selector-bar {
    display: flex;
    gap: 15px;
    align-items: center;
    padding-top: 15px;
    margin-top: 15px;
    border-top: var(--glass-border);
}
.db-selector-bar select { min-width: 300px; }

.db-workspace {
    display: flex;
    gap: 20px;
    height: calc(100vh - 280px);
}
.db-sidebar {
    width: 280px;
    background: var(--card-bg);
    border: var(--glass-border);
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    box-shadow: var(--soft-shadow);
}
.db-sidebar-header {
    padding: 15px;
    background: var(--bg-main);
    border-bottom: var(--glass-border);
    border-radius: 12px 12px 0 0;
}
.db-tree {
    list-style: none;
    padding: 10px;
    overflow-y: auto;
    flex: 1;
}
.db-tree li {
    padding: 10px 15px;
    border-radius: 8px;
    cursor: pointer;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 0.9rem;
    transition: all 0.2s;
}
.db-tree li:hover { background: var(--bg-main); color: var(--text-primary); }
.db-tree li.active { background: rgba(37, 99, 235, 0.1); color: var(--accent-blue); font-weight: 500; }

.db-main {
    flex: 1;
    background: var(--card-bg);
    border: var(--glass-border);
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    box-shadow: var(--soft-shadow);
}
.db-main-header {
    padding: 15px 24px;
    background: var(--bg-main);
    border-bottom: var(--glass-border);
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-radius: 12px 12px 0 0;
}

/* Terminal */
.terminal-card {
    padding: 0;
    height: 500px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
.terminal-header {
    background: var(--bg-main);
    padding: 12px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom: var(--glass-border);
}
.terminal-header h3 { margin: 0; font-size: 1rem; }
.window-controls { display: flex; gap: 8px; }
.window-controls span { width: 12px; height: 12px; border-radius: 50%; }
.window-controls span:nth-child(1) { background: #ff5f56; }
.window-controls span:nth-child(2) { background: #ffbd2e; }
.window-controls span:nth-child(3) { background: #27c93f; }

.terminal-body {
    flex: 1;
    background: #1e1e1e;
    padding: 20px;
    overflow-y: auto;
    font-family: 'Consolas', 'Courier New', monospace;
    font-size: 0.9rem;
}
.log-line.system { color: #888; font-style: italic; }
.log-line.cmd { color: #4af626; }
.log-line.out { color: #eee; white-space: pre-wrap; }
.log-line.err { color: #ff5555; white-space: pre-wrap; }

.cmd-input-area {
    display: flex;
    background: #1e1e1e;
    padding: 15px 20px;
    border-top: 1px solid #333;
    align-items: center;
    gap: 10px;
}
.prompt { color: #4af626; font-family: monospace; font-weight: bold; }
.cmd-input-area input {
    flex: 1; background: transparent; border: none; color: #fff;
    font-family: monospace; padding: 0; box-shadow: none;
}

/* Tables */
.table-container { width: 100%; overflow: auto; flex: 1; }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 12px 16px; text-align: left; border-bottom: var(--glass-border); white-space: nowrap; font-size: 0.9rem; }
th { background: var(--bg-main); font-weight: 600; color: var(--text-primary); position: sticky; top: 0; z-index: 3; }
thead th { box-shadow: inset 0 -1px 0 var(--border-color, #d8dee9); }
tr:hover { background: var(--bg-main); }

.empty-state {
    text-align: center;
    padding: 60px 40px;
    color: var(--text-secondary);
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

/* API Docs */
.api-doc-section p { color: var(--text-secondary); line-height: 1.6; margin-bottom: 15px; font-size: 0.95rem; }
.code-block {
    background: #1e1e1e; border-radius: 8px; position: relative; padding-top: 35px; overflow: hidden;
}
.lang-badge {
    position: absolute; top: 0; left: 0; right: 0; background: #2d2d2d;
    padding: 5px 15px; font-size: 0.75rem; color: #aaa; font-weight: 600;
    text-transform: uppercase; border-bottom: 1px solid #444;
}
.code-block pre { margin: 0; padding: 15px; overflow-x: auto; }
.code-block code { 
    font-family: 'Consolas', 'Courier New', monospace; 
    color: #dcdcdc; 
    font-size: 0.9rem;
    background: transparent;
    padding: 0;
}
code { background: var(--bg-main); padding: 2px 6px; border-radius: 4px; font-family: monospace; color: var(--accent-red); font-size: 0.9em; }

.api-table {
    border-radius: 8px;
    overflow: hidden;
    border: var(--glass-border);
}
.api-table th { background: var(--bg-main); }
.hidden { display: none !important; }

/* --- MES MODULE STYLES --- */
.mes-header {
    display: flex; gap: 15px; margin-bottom: 20px; align-items: stretch;
}
.mes-stat-card {
    background: var(--card-bg); padding: 12px 18px; border-radius: 8px;
    border: var(--glass-border); display: flex; align-items: center; gap: 15px;
    box-shadow: var(--soft-shadow); flex: 1;
}
.card-user {
    background: linear-gradient(135deg, rgba(59, 130, 246, 0.05) 0%, rgba(37, 99, 235, 0.1) 100%);
    border-left: 4px solid var(--accent-blue);
}
.card-machine {
    background: linear-gradient(135deg, rgba(139, 92, 246, 0.05) 0%, rgba(124, 58, 237, 0.1) 100%);
    border-left: 4px solid var(--accent-purple);
}
.card-timer {
    background: linear-gradient(135deg, rgba(245, 158, 11, 0.05) 0%, rgba(217, 119, 6, 0.1) 100%);
    border-left: 4px solid var(--accent-orange);
}
.mes-stat-card i { font-size: 1.8rem; }
.mes-stat-card h5 { margin: 0; color: var(--text-secondary); font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px;}
.mes-stat-card h3 { margin: 2px 0 0 0; font-size: 1.3rem; color: var(--text-primary); }

.mes-workspace {
    display: grid; grid-template-columns: 350px 1fr; gap: 30px; height: calc(100vh - 220px);
}
.mes-order-list {
    background: var(--card-bg); border-radius: 12px; border: var(--glass-border);
    display: flex; flex-direction: column; overflow: hidden; box-shadow: var(--soft-shadow);
}
.mes-list-header {
    padding: 20px; background: var(--bg-main); border-bottom: var(--glass-border);
}
.mes-search {
    width: 100%; padding: 12px; border-radius: 8px; border: 1px solid var(--border-color);
    margin-top: 15px; font-size: 1rem;
}
.mes-cards-container {
    flex: 1; overflow-y: auto; padding: 15px;
}
.mes-order-card {
    background: #fff; border: 1px solid var(--border-color); padding: 15px;
    border-radius: 10px; margin-bottom: 15px; cursor: pointer; transition: all 0.2s;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}
.mes-order-card:hover { transform: translateY(-2px); border-color: var(--accent-blue); }
.mes-order-card.active { border: 2px solid var(--accent-blue); background: rgba(37, 99, 235, 0.03); }
.mes-order-title { font-weight: 700; color: var(--text-primary); margin-bottom: 5px; font-size: 1.1rem; }
.mes-order-prod { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 10px; }
.mes-order-qty { display: inline-block; background: var(--bg-main); padding: 4px 10px; border-radius: 20px; font-size: 0.8rem; font-weight: 600;}

.mes-execution-panel {
    background: var(--card-bg); border-radius: 12px; border: var(--glass-border);
    padding: 40px; box-shadow: var(--soft-shadow); display: flex; flex-direction: column;
}
.mes-mo-header {
    display: flex; justify-content: space-between; align-items: center; margin-bottom: 30px;
    padding-bottom: 20px; border-bottom: 1px solid var(--border-color);
}
.mes-mo-header h2 { font-size: 2rem; margin: 0; color: var(--accent-dark); }
.badge { background: var(--accent-dark); color: #fff; padding: 6px 15px; border-radius: 20px; font-size: 0.9rem; font-weight: 600;}

.mes-mo-details { display: flex; gap: 20px; margin-bottom: 40px; }
.detail-box { flex: 1; background: var(--bg-main); padding: 20px; border-radius: 10px; text-align: center; }
.detail-box span { display: block; color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 5px; text-transform: uppercase; font-weight: 600;}
.detail-box strong { font-size: 1.8rem; color: var(--text-primary); }

.mes-timer-display {
    text-align: center; margin-bottom: 40px; padding: 30px; background: #0f172a; border-radius: 16px; color: #fff;
}
#mes-chronometer { font-size: 5rem; font-family: monospace; font-weight: 700; letter-spacing: -2px; line-height: 1;}
.status-label { margin-top: 10px; font-size: 1.2rem; font-weight: 600; letter-spacing: 2px; color: #94a3b8; }
.status-label.running { color: #4ade80; }
.status-label.paused { color: #fbbf24; }

.mes-action-buttons {
    display: flex; gap: 20px; margin-bottom: 40px;
}
.mes-btn-huge {
    flex: 1; height: 80px; font-size: 1.5rem; font-weight: 700; border-radius: 16px;
    text-transform: uppercase; letter-spacing: 1px; transition: all 0.2s;
}
.play-btn { background: var(--success); color: white; }
.play-btn:hover { background: #059669; transform: scale(1.02); }
.pause-btn { background: #f59e0b; color: white; }
.pause-btn:hover { background: #d97706; transform: scale(1.02); }
.stop-btn { background: var(--accent-red); color: white; }
.stop-btn:hover { background: var(--accent-red-hover); transform: scale(1.02); }

.mes-report-section {
    background: var(--bg-main); padding: 30px; border-radius: 12px;
}
.qty-input-group {
    display: flex; gap: 10px; align-items: stretch; margin-top: 15px; height: 60px;
}
.qty-input-group input { flex: 1; text-align: center; font-size: 1.5rem; font-weight: 700; }
.qty-input-group .btn { min-width: 60px; font-size: 1.2rem; }
.qty-input-group #btn-mes-report { flex: 2; font-size: 1.2rem; }

/* =========================================================
   MES STYLE
   ========================================================= */

.mes-workspace-area {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    padding: 0;
    margin-top: 10px;
}

.mes-card-area {
    background: var(--card-bg);
    padding: 15px; /* Compact padding */
    border-radius: 12px;
    box-shadow: var(--soft-shadow);
    border: 1px solid var(--border-color);
    width: 100%;
}

.mes-title-area {
    text-align: center;
    color: var(--accent-dark);
    margin-bottom: 8px; /* Extremely compact */
    font-size: 1.1rem;
    font-weight: 700;
}

.mes-form-area .form-section {
    margin-bottom: 6px; /* Extremely compact */
}

.mes-form-area label {
    display: block;
    margin-bottom: 2px;
    color: var(--text-secondary);
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.mes-form-area .section-title {
    font-size: 0.8rem;
    color: var(--accent-blue);
    margin-top: 15px;
    margin-bottom: 15px;
    border-bottom: 2px solid var(--border-color);
    padding-bottom: 6px;
}

.input-with-icon {
    position: relative;
}

.input-with-icon input,
.input-with-icon select {
    width: 100%;
    padding: 6px 10px; /* Compact padding */
    padding-right: 40px;
    border: 1px solid var(--border-color);
    background: #ffffff;
    color: var(--text-primary);
    border-radius: 6px;
    font-size: 0.9rem; /* Compact font */
    transition: all 0.3s;
    appearance: none;
}

.input-with-icon input:focus,
.input-with-icon select:focus {
    border-color: var(--accent-blue);
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
    outline: none;
}

.input-with-icon input:disabled,
.input-with-icon select:disabled {
    background: #f1f5f9;
    color: #94a3b8;
    cursor: not-allowed;
}

.input-with-icon .bg-icon {
    position: absolute;
    right: 14px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-secondary);
    font-size: 1.1rem;
    pointer-events: none;
}

.mes-form-area select {
    width: 100%;
    padding: 10px 14px;
    border: 1px solid var(--border-color);
    background: #ffffff;
    color: var(--text-primary);
    border-radius: 6px;
    font-size: 1rem;
}

.mes-form-area select:disabled {
    background: #f1f5f9;
    color: #94a3b8;
    cursor: not-allowed;
}

.validation-banner {
    margin-top: 10px;
    padding: 10px 14px;
    background: rgba(16, 185, 129, 0.1);
    border-left: 4px solid var(--success-color);
    border-radius: 4px;
    color: var(--success-color);
    font-weight: 500;
    font-size: 0.95rem;
}

.btn-bio-green {
    background-color: var(--success-color);
    color: white;
    font-size: 1.2rem;
    font-weight: 700;
    padding: 16px;
    border-radius: 8px;
    border: none;
    cursor: pointer;
    transition: transform 0.2s, background-color 0.3s;
}

.btn-bio-green:hover:not(:disabled) {
    background-color: #059669;
    transform: translateY(-2px);
}

.btn-bio-green:disabled {
    background-color: var(--border-color);
    color: var(--text-muted);
    cursor: not-allowed;
}

.btn-bio-red {
    background-color: var(--error);
    color: white;
    font-size: 1.2rem;
    font-weight: 700;
    padding: 16px;
    border-radius: 8px;
    border: none;
    cursor: pointer;
    transition: all 0.3s;
    animation: pulseRed 2s infinite;
}

.btn-bio-red:hover {
    background-color: #dc2626;
}

@keyframes pulseRed {
    0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); }
    70% { box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); }
    100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
}

.footer-times {
    display: flex;
    justify-content: space-between;
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--border-color);
}

.time-col {
    display: flex;
    flex-direction: column;
    gap: 8px;
    color: var(--text-muted);
}

.time-col.text-right {
    text-align: right;
    align-items: flex-end;
}

.timer-display {
    margin-top: 8px;
    font-size: 0.9rem;
}

.timer-display strong {
    font-size: 1.5rem;
    color: var(--primary-color);
    display: block;
    line-height: 1.2;
}

/* =========================================================
   DASHBOARDS STYLE
   ========================================================= */

.dashboard-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 24px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--border-color);
}

.dashboard-header h2 {
    color: var(--primary-color);
    font-size: 1.5rem;
    display: flex;
    align-items: center;
    gap: 10px;
}

.dashboard-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 20px;
}

.kpi-stat-card {
    background: rgba(255, 255, 255, 0.7);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    border: 1px solid rgba(255, 255, 255, 0.4);
    border-radius: 16px;
    padding: 24px;
    box-shadow: 0 4px 15px rgba(0,0,0,0.03);
    display: flex;
    flex-direction: column;
    justify-content: center;
    transition: all 0.3s ease;
    overflow: hidden;
}

.kpi-stat-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 10px 25px rgba(0,0,0,0.08);
    background: rgba(255, 255, 255, 0.9);
}

.kpi-stat-card h3 {
    font-size: 0.85rem;
    text-transform: uppercase;
    color: var(--text-secondary);
    margin-bottom: 12px;
    font-weight: 700;
    letter-spacing: 0.5px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.stat-value {
    font-size: 2.2rem;
    font-weight: 800;
    line-height: 1.1;
    color: var(--accent-dark);
    word-break: break-word;
}

.stat-value.text-muted {
    color: #94a3b8;
    font-weight: 500;
}
}

.text-blue { color: #3b82f6; }
.text-green { color: #10b981; }
.text-red { color: #ef4444; }
.text-orange { color: #f59e0b; }

.chart-card {
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    padding: 20px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.1);
    min-height: 300px;
    position: relative;
}

.chart-card h3 {
    font-size: 1.1rem;
    color: var(--text-light);
    margin-bottom: 20px;
    font-weight: 600;
    text-align: center;
}

.chart-card {
    background: var(--card-bg);
    border-radius: 12px;
    border: var(--glass-border);
    box-shadow: var(--soft-shadow);
    padding: 24px;
    display: flex;
    flex-direction: column;
    position: relative;
    min-height: 300px;
    height: 380px; /* Constraints needed for Chart.js */
}
.chart-card h3 {
    margin-bottom: 15px;
    font-size: 1.1rem;
    flex-shrink: 0;
}
.chart-card canvas {
    flex: 1;
    min-height: 0; /* Prevents flex children from growing infinitely */
}

.span-1 { grid-column: span 1; }
.span-2 { grid-column: span 2; }
.span-3 { grid-column: span 3; }

.gauge-percentage {
    position: absolute;
    top: 60%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-size: 3rem;
    font-weight: 700;
    color: var(--text-light);
}

@media (max-width: 1024px) {
    .dashboard-grid {
        grid-template-columns: 1fr;
    }
    .span-1, .span-2, .span-3 {
        grid-column: span 1;
    }
}

/* MES Modern Form Styling */
.form-section {
    background: rgba(255, 255, 255, 0.7);
    backdrop-filter: blur(10px);
    border: 1px solid rgba(226, 232, 240, 0.8);
    border-left: 4px solid var(--accent-blue);
    border-radius: 12px;
    padding: 10px 16px; /* Compact padding */
    margin-bottom: 12px; /* Compact margin */
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.03);
    transition: all 0.3s ease;
    position: relative;
    z-index: 1; /* Base z-index */
}

/* Fix for Tom Select rendering behind other absolute/relative elements */
.ts-dropdown {
    z-index: 9999 !important;
    font-size: 1.15rem; /* Make options larger and more readable */
}

/* Make selected text larger as well */
.ts-control {
    font-size: 1.15rem !important;
    padding: 12px 15px !important;
}

.ts-control .item {
    font-size: 1.15rem !important;
}

/* Ensure dropdowns pop over the next sections */
.form-section:focus-within {
    z-index: 99;
}

.form-section:hover {
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.06);
    background: rgba(255, 255, 255, 0.9);
}

.form-section .section-title {
    display: block;
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--accent-blue);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px; /* Compact margin */
    border-bottom: 1px dashed rgba(226, 232, 240, 0.8);
    padding-bottom: 4px; /* Compact padding */
}

.form-section > label {
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--text-dark);
    margin-bottom: 4px; /* Compact margin */
    display: flex;
    align-items: center;
    gap: 8px;
}

/* Individual Block Accents */
#section-machine { border-left-color: var(--accent-purple); }
#section-machine .section-title { color: var(--accent-purple); }

#section-task { border-left-color: var(--accent-orange); }
#section-task .section-title { color: var(--accent-orange); }

#section-concept { border-left-color: var(--accent-green); }
#section-concept .section-title { color: var(--accent-green); }

/* MES Buttons */
.btn-bio-green {
    background-color: var(--accent-green, #10b981);
    color: white;
    font-size: 1.2rem;
    padding: 15px;
    border-radius: 8px;
    border: none;
    cursor: pointer;
    font-weight: bold;
}
.btn-bio-green:hover { background-color: #059669; }

.btn-bio-red {
    background-color: var(--accent-red, #ef4444);
    color: white;
    font-size: 1.2rem;
    padding: 15px;
    border-radius: 8px;
    border: none;
    cursor: pointer;
    font-weight: bold;
}
.btn-bio-red:hover { background-color: #dc2626; }

/* =========================================================
   MES LOGS TABLE
   ========================================================= */
.mes-logs-table {
    border-collapse: collapse;
}

.mes-logs-table th {
    background-color: var(--card-bg);
    padding: 8px;
    border-bottom: 2px solid var(--border-color);
    position: sticky;
    top: 0;
}

.mes-logs-table td {
    padding: 6px 8px;
    border-bottom: 1px solid var(--border-color);
    vertical-align: top;
    word-break: break-all;
}

.mes-logs-table tr:hover td {
    background-color: rgba(37, 99, 235, 0.05);
}

.log-query-cell {
    max-width: 300px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    font-family: monospace;
    font-size: 0.8rem;
    color: #475569;
}

.log-query-cell:hover {
    white-space: normal;
    background: #f8fafc;
    border: 1px solid #cbd5e1;
    position: relative;
    z-index: 10;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
    border-radius: 4px;
    padding: 4px;
}

.log-status-ok {
    color: #16a34a;
    font-weight: 600;
}

.log-status-error {
    color: #dc2626;
    font-weight: 600;
}

/* Modal Overlay */
.mes-modal {
    position: fixed;
    top: 0; left: 0; width: 100vw; height: 100vh;
    background: rgba(15, 23, 42, 0.8);
    backdrop-filter: blur(4px);
    display: flex;
    justify-content: center;
    align-items: center;
    /* Por encima del botón flotante de soporte (.sopw 11500) y de los desplegables de la barra
       (12000), para que nada tape el botón GUARDAR del modal. Por debajo de los toasts (12100)
       para que los avisos de éxito/error sigan viéndose sobre el modal. */
    z-index: 12050;
}
.mes-modal.hidden {
    display: none !important;
}
.mes-modal-content {
    background: var(--card-bg);
    padding: 30px;
    border-radius: 12px;
    width: 90%;
    max-width: 500px;
    max-height: 92vh;          /* nunca más alto que la pantalla */
    overflow-y: auto;          /* y si no cabe, scroll dentro del modal */
    box-shadow: 0 10px 25px rgba(0,0,0,0.5);
    border: 1px solid var(--border-color);
}
.huge-input {
    font-size: 2rem;
    font-weight: 700;
    text-align: center;
    padding: 15px;
    width: 100%;
    border-radius: 8px;
    border: 2px solid var(--border-color);
}
.huge-input:focus {
    border-color: var(--accent-blue);
    outline: none;
}
.text-danger {
    color: var(--error);
}

/* =========================================
   KPI DASHBOARD (Premium Styling)
   ========================================= */

.kpi-dashboard {
    padding: 24px;
    background: #f8fafc;
    min-height: 100vh;
}

.kpi-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 30px;
    font-family: 'Montserrat', sans-serif;
}

.kpi-header h2 {
    font-size: 2rem;
    font-weight: 700;
    color: var(--accent-dark);
    margin: 0;
    display: flex;
    align-items: center;
    gap: 12px;
}

.kpi-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 24px;
    margin-bottom: 24px;
}

.kpi-card {
    background: linear-gradient(135deg, rgba(255,255,255,0.95), rgba(255,255,255,0.85));
    border-radius: 16px;
    padding: 24px;
    border: 1px solid rgba(255, 255, 255, 0.5);
    box-shadow: 0 10px 30px rgba(15, 23, 42, 0.05);
    backdrop-filter: blur(10px);
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s ease;
    display: flex;
    flex-direction: column;
}

.kpi-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 20px 40px rgba(15, 23, 42, 0.1);
}

.kpi-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 16px;
}

.kpi-card-title {
    font-family: 'Montserrat', sans-serif;
    font-weight: 600;
    font-size: 1.1rem;
    color: var(--text-secondary);
}

.kpi-card-icon {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.5rem;
    color: white;
}

.icon-blue { background: linear-gradient(135deg, var(--accent-blue), #60a5fa); }
.icon-red { background: linear-gradient(135deg, var(--accent-red), #fb7185); }
.icon-green { background: linear-gradient(135deg, #10b981, #34d399); }
.icon-yellow { background: linear-gradient(135deg, #f59e0b, #fbbf24); }

.kpi-card-value {
    font-family: 'Montserrat', sans-serif;
    font-size: 2.5rem;
    font-weight: 700;
    color: var(--accent-dark);
    margin-bottom: 8px;
}

.kpi-card-target {
    font-size: 0.9rem;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: 6px;
}

.kpi-card-target .indicator {
    padding: 2px 8px;
    border-radius: 12px;
    font-weight: 600;
    font-size: 0.8rem;
}

.indicator.up { background: #dcfce7; color: #166534; }
.indicator.down { background: #fee2e2; color: #991b1b; }

.kpi-chart-card {
    background: white;
    border-radius: 16px;
    padding: 24px;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
    border: var(--glass-border);
    margin-bottom: 24px;
}

.kpi-chart-title {
    font-family: 'Montserrat', sans-serif;
    font-weight: 600;
    font-size: 1.25rem;
    color: var(--accent-dark);
    margin-bottom: 20px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--border-color);
}

.kpi-chart-container {
    position: relative;
    height: 300px;
    width: 100%;
}
/* --- OVERVIEW REDISEÑO DENSO (QUIMUNSA STYLE PREMIUM) --- */
.dense-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    margin-bottom: 24px;
}
.ultra-dense-grid {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 16px;
    margin-bottom: 20px;
}
.dense-card {
    background: linear-gradient(145deg, #ffffff, #f8fafc);
    border-radius: 12px;
    padding: 14px;
    border: 1px solid rgba(226, 232, 240, 0.8);
    box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.05), 0 8px 10px -6px rgba(15, 23, 42, 0.01);
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.dense-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 20px 30px -10px rgba(15, 23, 42, 0.1);
}
.dense-card::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 100%; height: 4px;
    background: linear-gradient(90deg, var(--accent-blue), #60a5fa);
    opacity: 0;
    transition: opacity 0.3s ease;
}
.dense-card:hover::before {
    opacity: 1;
}
.dense-card-title {
    font-size: 0.78rem;
    color: #64748b;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 8px;
    letter-spacing: 0.8px;
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.dense-card-value {
    font-size: 1.5rem;
    font-weight: 800;
    color: #0f172a;
    line-height: 1.2;
    display: flex;
    align-items: baseline;
    gap: 8px;
    flex-wrap: wrap;
}
.kpi-yoy {
    display: inline-flex;
    align-items: center;
    margin-top: 8px;
}
.badge {
    padding: 4px 10px;
    border-radius: 20px;
    font-size: 0.8rem;
    font-weight: 600;
    color: white;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.historical-table {
    width: 100%;
    margin-top: 16px;
    font-size: 0.85rem;
    border-collapse: collapse;
    background: #f8fafc;
    border-radius: 8px;
    overflow: hidden;
}
.historical-table td {
    padding: 6px 12px;
    border-bottom: 1px solid rgba(226, 232, 240, 0.8);
    color: #475569;
}
.historical-table tr:last-child td { border-bottom: none; }
.historical-table td:last-child {
    text-align: right;
    font-weight: 700;
    color: #1e293b;
}
.dense-chart-container {
    background: white;
    border-radius: 12px;
    padding: 14px;
    border: 1px solid rgba(226, 232, 240, 0.8);
    height: 160px;
    position: relative;
    box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.05);
}
.dense-chart-container.large {
    height: 200px;
}
.dense-row {
    display: flex;
    gap: 10px;
    margin-bottom: 10px;
}
.flex-1 { flex: 1; }
.flex-2 { flex: 2; }
.flex-3 { flex: 3; }
.pnc-table-wrapper {
    overflow-x: auto;
    font-size: 0.75rem;
}
.pnc-table th {
    padding: 6px 10px;
}
.pnc-table td {
    padding: 6px 10px;
}

/* ============================================================
   KPI Historical Cards (estilo PDF referencia)
   ============================================================ */
.kpi-hist-card {
    padding: 12px 14px;
}
.kpi-hist-title {
    font-size: 0.72rem;
    font-weight: 700;
    color: var(--text-secondary);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 4px;
}
.kpi-hist-value {
    font-size: 1.65rem;
    font-weight: 800;
    color: var(--text-primary);
    letter-spacing: -0.03em;
    line-height: 1.1;
    margin-bottom: 6px;
}
.kpi-hist-table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 4px;
}
.kpi-hist-table tr td {
    font-size: 0.78rem;
    padding: 2px 0;
    color: var(--text-secondary);
    border: none;
}
.kpi-hist-table tr:last-child td {
    font-weight: 700;
    color: var(--text-primary);
}
.kpi-hist-table tr td:last-child {
    text-align: right;
    font-weight: 600;
}



/* GLOBAL SCALE REDUCTION & LOADER */
.main-content { padding: 1.5rem; }
.kpi-dashboard { transform: scale(1); }

/* Global Loader Overlay */
#global-blur-loader {
    position: fixed;
    top: 0; left: 0; width: 100%; height: 100%;
    background: rgba(255, 255, 255, 0.4);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    z-index: 9999;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    transition: opacity 0.3s ease;
}
#global-blur-loader.hidden {
    opacity: 0;
    pointer-events: none;
    visibility: hidden;
}
.loader-spinner {
    width: 60px;
    height: 60px;
    border: 5px solid rgba(37, 99, 235, 0.2);
    border-radius: 50%;
    border-top-color: var(--accent-blue);
    animation: spin 1s ease-in-out infinite;
    margin-bottom: 20px;
}
@keyframes spin {
    to { transform: rotate(360deg); }
}
.loader-text {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--accent-dark);
    letter-spacing: 2px;
    animation: pulse 1.5s infinite;
}
@keyframes pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.5; }
}

/* ===== Generador de Códigos de Barras ===== */
#barcodes-view .form-control,
#barcodes-view textarea.form-control {
    width: 100%;
    padding: 9px 11px;
    border: 1px solid var(--border-color, #d8dee9);
    border-radius: 8px;
    background: var(--bg-card, #fff);
    color: var(--text-primary, #1f2937);
    font-size: 0.9rem;
    font-family: inherit;
    box-sizing: border-box;
}
#barcodes-view .form-control:focus {
    outline: none;
    border-color: var(--accent-red, #d12b2b);
}
.bc-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 14px;
}
.bc-card {
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    padding: 12px 10px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    break-inside: avoid;
}
.bc-card .bc-name {
    font-weight: 700;
    font-size: 0.82rem;
    color: #111827;
    word-break: break-word;
}
.bc-card svg, .bc-card canvas, .bc-card img { max-width: 100%; height: auto; }

/* Filtro de estado en Trazabilidad */
.of-estado.active { background: var(--accent-dark, #0B3C73); color: #fff; border-color: var(--accent-dark, #0B3C73); }

/* ===== Lista guiada de operaciones (MES) ===== */
.op-cards { display: flex; flex-direction: column; gap: 8px; max-height: 300px; overflow-y: auto; }
/* Al plegar (operación elegida) no hace falta scroll interno */
.op-cards.op-collapsed { max-height: none; overflow: visible; }
.op-card {
    border: 2px solid var(--border-color, #d8dee9); border-radius: 10px;
    padding: 10px 12px; background: var(--bg-card, #fff); cursor: pointer;
    display: flex; align-items: center; gap: 12px; transition: border-color .12s, background .12s;
}
.op-card:hover { border-color: var(--accent-blue, #2563eb); }
.op-card.op-selected { border-color: var(--accent-blue, #2563eb); background: rgba(37,99,235,0.08); }
.op-card.op-disabled { opacity: 0.55; cursor: not-allowed; background: #f3f4f6; }
.op-card.op-disabled:hover { border-color: var(--border-color, #d8dee9); }
.op-card .op-main { flex: 1; min-width: 0; }
.op-card .op-of { font-weight: 700; font-size: 0.98rem; color: var(--text-primary, #111827); }
.op-card .op-sub { font-size: 0.82rem; color: var(--text-secondary, #64748b); margin-top: 2px; }
.op-card .op-badge {
    font-size: 0.7rem; font-weight: 700; padding: 3px 8px; border-radius: 999px;
    white-space: nowrap; text-transform: uppercase;
}
.op-badge.b-progress { background: #16a34a; color: #fff; }
.op-badge.b-ready    { background: #2563eb; color: #fff; }
.op-badge.b-waiting  { background: #f59e0b; color: #fff; }
.op-badge.b-pending  { background: #94a3b8; color: #fff; }
.op-card .op-suger { font-size: 0.68rem; font-weight: 700; color: #16a34a; }
.op-card .op-urgente { color: #dc2626; }
.op-cards-empty { color: var(--text-secondary, #64748b); font-size: 0.88rem; padding: 10px 2px; }
.op-card .op-aviso { color: #b45309; font-size: 0.74rem; }
.op-card .op-prio { color: #dc2626; font-weight: 800; font-size: 0.68rem; margin-left: 6px; }
.op-card.op-prioritaria, .op-card.prio { border-left: 4px solid #dc2626; }

/* ===== Gestión de prioridades de cola ===== */
.prio-list { display: flex; flex-direction: column; gap: 18px; }
.prio-zone { background: var(--bg-secondary, #f8fafc); border: 1px solid var(--border-color, #e2e8f0); border-radius: 12px; padding: 12px 14px; }
.prio-zone-top { border-color: #fca5a5; background: #fef2f2; }
.prio-zone-title { font-weight: 700; font-size: 0.82rem; color: var(--text-secondary, #475569); text-transform: uppercase; letter-spacing: .03em; margin-bottom: 10px; }
.prio-zone-top .prio-zone-title { color: #b91c1c; }
.prio-drop { display: flex; flex-direction: column; gap: 8px; min-height: 44px; }
.prio-empty { color: var(--text-secondary, #94a3b8); font-size: 0.85rem; padding: 10px; border: 2px dashed var(--border-color, #cbd5e1); border-radius: 8px; text-align: center; }
.prio-card { display: flex; align-items: center; gap: 12px; background: #fff; border: 1px solid var(--border-color, #e2e8f0); border-radius: 10px; padding: 10px 12px; box-shadow: 0 1px 2px rgba(0,0,0,.04); }
.prio-card.is-prio { border-left: 4px solid #dc2626; cursor: grab; }
.prio-card.is-prio:active { cursor: grabbing; }
.prio-card.dragging { opacity: .5; box-shadow: 0 6px 16px rgba(0,0,0,.15); }
.prio-drag { color: #cbd5e1; font-size: 1.1rem; cursor: grab; }
.prio-num { font-size: 0.62rem; font-weight: 800; color: #94a3b8; background: #f1f5f9; border-radius: 6px; padding: 3px 6px; }
.prio-main { flex: 1; min-width: 0; }
.prio-of { font-weight: 700; font-size: 0.95rem; }
.prio-sub { font-size: 0.8rem; color: var(--text-secondary, #64748b); }
.prio-btn { border: none; border-radius: 8px; padding: 7px 12px; font-weight: 700; font-size: 0.8rem; cursor: pointer; white-space: nowrap; }
.prio-add { background: #fee2e2; color: #b91c1c; }
.prio-add:hover { background: #fecaca; }
.prio-quitar { background: #e2e8f0; color: #475569; }
.prio-quitar:hover { background: #cbd5e1; }

/* ===== Planificador (Gantt) ===== */
/* Tarjetas resumen */
.plan-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 4px; }
.plan-kpi { background: #fff; border: 1px solid var(--border-color, #e2e8f0); border-radius: 12px; padding: 10px 14px; border-left: 4px solid #0B3C73; }
.plan-kpi.ok { border-left-color: #16a34a; }
.plan-kpi.bad { border-left-color: #dc2626; }
.plan-kpi-v { font-size: 1.5rem; font-weight: 800; color: #0B3C73; line-height: 1.1; }
.plan-kpi.bad .plan-kpi-v { color: #dc2626; }
.plan-kpi.ok .plan-kpi-v { color: #16a34a; }
.plan-kpi-v small { font-size: 0.8rem; font-weight: 600; }
.plan-kpi-l { font-size: 0.72rem; color: var(--text-secondary, #64748b); text-transform: uppercase; letter-spacing: .3px; margin-top: 2px; }
/* Leyenda */
.gantt-legend { display: flex; gap: 16px; font-size: 0.76rem; color: var(--text-secondary, #64748b); margin: 12px 0 8px; }
.gantt-legend span { display: inline-flex; align-items: center; gap: 6px; }
.gantt-dot { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
.gantt-dot.ok { background: linear-gradient(180deg,#22c55e,#16a34a); }
.gantt-dot.late { background: linear-gradient(180deg,#ef4444,#b91c1c); }
.gantt-dot.hoy { background: #f59e0b; border-radius: 50%; }
/* Tabla Gantt */
.gantt-wrap { overflow-x: auto; }
.gantt-head, .gantt-row { display: flex; align-items: center; gap: 10px; min-width: 860px; }
.gantt-row { padding: 4px 0; border-top: 1px solid var(--border-color, #eef2f7); }
.gantt-row:hover { background: #f8fafc; }
.gantt-lbl { flex: 0 0 240px; font-size: 0.8rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; gap: 6px; }
.gantt-n { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; background: #eef2f7; color: #475569; border-radius: 6px; font-size: 0.68rem; font-weight: 700; }
.gantt-op { color: var(--text-secondary, #94a3b8); font-size: 0.74rem; overflow: hidden; text-overflow: ellipsis; }
.gantt-dates { flex: 0 0 170px; display: flex; flex-direction: column; font-size: 0.7rem; color: #475569; line-height: 1.3; }
.gantt-entrega { color: var(--text-secondary, #64748b); }
.gantt-entrega.late { color: #dc2626; font-weight: 700; }
.gantt-track { flex: 1; position: relative; height: 26px; background: #f8fafc; border-radius: 5px; overflow: hidden; }
.gantt-grid-line { position: absolute; top: 0; bottom: 0; width: 1px; background: #eef2f7; }
.gantt-tick { position: absolute; top: 3px; font-size: 0.64rem; color: #94a3b8; border-left: 1px solid #cbd5e1; padding-left: 3px; height: 16px; }
.gantt-hoy { position: absolute; top: 0; bottom: 0; width: 2px; background: #f59e0b; z-index: 3; }
.gantt-hoy span { position: absolute; top: -1px; left: 3px; font-size: 0.6rem; font-weight: 800; color: #b45309; background: #fef3c7; padding: 0 4px; border-radius: 3px; }
.gantt-bar { position: absolute; top: 4px; height: 18px; background: linear-gradient(180deg,#22c55e,#16a34a); border-radius: 4px; display: flex; align-items: center; overflow: hidden; box-shadow: 0 1px 2px rgba(0,0,0,.25); z-index: 2; }
.gantt-bar.late { background: linear-gradient(180deg,#ef4444,#b91c1c); }
.gantt-bar-txt { color: #fff; font-size: 0.62rem; font-weight: 700; padding: 0 5px; white-space: nowrap; }

/* ===== Gestión de máquinas (tarjetas) ===== */
.maq-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(270px, 1fr)); gap: 16px; }
.maq-card { position: relative; background: #fff; border: 1px solid var(--border-color, #e8edf3); border-radius: 16px; padding: 16px; cursor: pointer; transition: transform .15s, box-shadow .15s, border-color .15s; box-shadow: 0 1px 3px rgba(15,23,42,.05); overflow: hidden; }
/* Filete de estado a la izquierda */
.maq-card::before { content: ''; position: absolute; top: 0; left: 0; bottom: 0; width: 4px; background: #cbd5e1; }
.maq-card:hover { transform: translateY(-4px); box-shadow: 0 14px 30px rgba(11,60,115,.13); border-color: #cbd5e1; }
.maq-card.activa::before { background: linear-gradient(180deg,#22c55e,#16a34a); }
.maq-card.activa { animation: wolcoPulse 2.4s ease-in-out infinite; }
.maq-card.nodata { opacity: .65; }
.maq-card-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.maq-code { display:inline-flex; align-items:center; justify-content:center; min-width: 38px; height: 32px; padding: 0 10px; background: linear-gradient(160deg,#0B3C73,#1d4ed8); color: #fff; border-radius: 10px; font-weight: 800; font-size: 1rem; box-shadow: 0 2px 6px rgba(11,60,115,.25); letter-spacing: .5px; }
.maq-badge { font-size: 0.6rem; font-weight: 800; letter-spacing: .4px; padding: 4px 10px; border-radius: 999px; display:inline-flex; align-items:center; gap: 5px; text-transform: uppercase; }
.maq-badge.on { background: #dcfce7; color: #15803d; }
.maq-badge.off { background: #f1f5f9; color: #64748b; }
.maq-badge.nod { background: #fef3c7; color: #b45309; }
.maq-name { font-weight: 700; font-size: 0.94rem; color: #1e293b; margin-bottom: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.maq-stats { display: grid; grid-template-columns: repeat(4, 1fr); text-align: center; margin-bottom: 12px; background: #f8fafc; border: 1px solid #eef2f7; border-radius: 12px; padding: 10px 4px; }
.maq-stats > div { position: relative; }
.maq-stats > div + div::before { content: ''; position: absolute; left: 0; top: 15%; height: 70%; width: 1px; background: #e2e8f0; }
.maq-s-v { font-weight: 800; font-size: 1.1rem; color: #0B3C73; white-space: nowrap; line-height: 1.15; }
.maq-s-v small { font-size: 0.58rem; font-weight: 700; color: #64748b; }
.maq-s-l { font-size: 0.58rem; color: var(--text-secondary, #94a3b8); text-transform: uppercase; letter-spacing: .3px; margin-top: 2px; }
.maq-mant { margin-bottom: 12px; }
.maq-mant-bar { height: 7px; background: #eef2f7; border-radius: 999px; overflow: hidden; margin-top: 4px; }
.maq-mant-bar > div { height: 100%; border-radius: 999px; transition: width .3s; }
.maq-foot { display: flex; justify-content: space-between; gap: 6px; align-items: center; border-top: 1px solid var(--border-color, #f1f5f9); padding-top: 10px; }
.maq-foot > span { font-size: 0.7rem; font-weight: 600; color: #475569; background: #f1f5f9; padding: 3px 9px; border-radius: 999px; white-space: nowrap; }
/* OFs en curso / cola dentro de la tarjeta de máquina */
.maq-ofs { margin-bottom: 10px; display: flex; flex-direction: column; gap: 5px; }
.maq-of-row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.maq-of-lbl { font-size: 0.66rem; font-weight: 700; color: var(--text-secondary, #64748b); text-transform: uppercase; letter-spacing: .3px; margin-right: 2px; }
.maq-of { font-size: 0.7rem; font-weight: 700; padding: 2px 7px; border-radius: 999px; white-space: nowrap; }
.maq-of.on { background: #dcfce7; color: #15803d; }
.maq-of.q { background: #eef2f7; color: #475569; }
.maq-of.more { background: transparent; color: var(--text-secondary, #64748b); font-weight: 600; }
/* Lista de OFs en el modal de detalle */
.maq-of-item { display: flex; align-items: center; gap: 8px; padding: 5px 9px; border-radius: 7px; font-size: 0.8rem; margin-bottom: 4px; }
.maq-of-item.on { background: #f0fdf4; border-left: 3px solid #16a34a; }
.maq-of-item.q { background: #f8fafc; border-left: 3px solid #cbd5e1; }
.maq-of-item span { color: var(--text-secondary, #64748b); font-size: 0.74rem; }
.maq-of-item span.q { margin-left: auto; font-weight: 700; color: #475569; }

/* ===== Paneles Ejecutivos (Comercial / Dirección — propuesta David) ===== */
.dav-tile { background: linear-gradient(160deg,#0B3C73,#1d4ed8); color:#fff; border-radius: 12px; padding: 12px 14px; box-shadow: 0 4px 14px rgba(11,60,115,.18); }
.dav-t-lbl { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing:.4px; opacity:.85; }
.dav-t-val { font-size: 1.5rem; font-weight: 800; margin-top: 3px; line-height:1.1; }
.dav-t-sub { font-size: 0.7rem; opacity:.8; margin-top: 2px; min-height: 0.9em; }
.dav-pend { display:inline-block; font-size: 0.72rem; font-weight: 700; background: rgba(255,255,255,.18); color:#fff; padding: 2px 8px; border-radius: 999px; }
.dav-ch-title { font-size: 0.8rem; font-weight: 700; color: var(--text-secondary, #64748b); margin-bottom: 6px; }
.dav-reco { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 18px; }
.dav-reco-item { font-size: 0.82rem; color: var(--text-secondary, #64748b); display:flex; align-items:center; gap:8px; }
.dav-reco-item i { font-size: 0.7rem; color: #cbd5e1; }
.dav-reco-item.done { color: var(--text-primary, #1e293b); }
.dav-reco-item.done i { color: #16a34a; }
.dav-reco-tag { font-size: 0.66rem; font-weight: 700; background:#dcfce7; color:#15803d; padding:1px 7px; border-radius:999px; }
.dav-pyg { width: 100%; border-collapse: collapse; font-size: 0.78rem; }
.dav-pyg th, .dav-pyg td { padding: 6px 10px; text-align: right; white-space: nowrap; }
.dav-pyg .pyg-lbl { text-align: left; font-weight: 600; position: sticky; left: 0; }
/* Cabecera */
.dav-pyg thead th { background: #0B3C73; color: #fff; font-size: 0.7rem; text-transform: uppercase; letter-spacing: .3px; padding: 8px 10px; }
.dav-pyg thead th:first-child { border-top-left-radius: 8px; text-align: left; }
.dav-pyg thead th:last-child { border-top-right-radius: 8px; }
.dav-pyg thead th.pyg-total-h { background: #082a52; }
.dav-pyg thead th.pyg-mes-actual { background: #1d4ed8; }
/* Filas */
.dav-pyg tbody tr { border-bottom: 1px solid var(--border-color, #eef2f7); }
.dav-pyg tbody tr:hover td { background: #f8fafc; }
.dav-pyg .pyg-lbl { background: #fff; }
.dav-pyg td.pyg-num { font-variant-numeric: tabular-nums; color: #334155; }
.dav-pyg td.pyg-mes-actual { background: #eff6ff; }
.dav-pyg td.pyg-pos { color: #15803d; }
.dav-pyg td.pyg-neg { color: #dc2626; }
.dav-pyg td.pyg-zero { color: #cbd5e1; }
/* Ingresos: resaltado azul; costes: atenuados */
.dav-pyg tr.dav-pyg-ing .pyg-lbl { color: #0B3C73; }
.dav-pyg tr.dav-pyg-ing td { font-weight: 600; }
.dav-pyg tr.dav-pyg-cost .pyg-lbl { color: var(--text-secondary, #64748b); font-weight: 500; }
.dav-pyg tr.dav-pyg-cost td.pyg-num { color: #94a3b8; }
/* Subtotales (Margen, EBITDA) y total (Resultado) */
.dav-pyg tr.dav-pyg-sub td { font-weight: 700; background: #f8fafc; border-top: 1px solid #e2e8f0; }
.dav-pyg tr.dav-pyg-sub .pyg-lbl { background: #f8fafc; }
.dav-pyg tr.dav-pyg-total td { border-top: 2px solid #0B3C73; border-bottom: 2px solid #0B3C73; font-weight: 800; font-size: 0.84rem; background: #eef4fb; }
.dav-pyg tr.dav-pyg-total .pyg-lbl { background: #eef4fb; color: #0B3C73; }
.dav-ratio { padding: 10px 14px; display: flex; align-items: center; justify-content: space-between; }
.dav-ratio span { font-size: 0.76rem; color: var(--text-secondary, #64748b); }
.dav-ratio b { font-size: 1.05rem; color: #0B3C73; }
.dav-obj { width: 100%; border-collapse: collapse; font-size: 0.82rem; }
.dav-obj th, .dav-obj td { padding: 9px 12px; text-align: left; vertical-align: middle; }
.dav-obj thead th { color: var(--text-secondary, #64748b); font-size: 0.68rem; text-transform: uppercase; letter-spacing: .4px; border-bottom: 2px solid var(--border-color, #e2e8f0); }
.dav-obj tbody tr { border-bottom: 1px solid var(--border-color, #f1f5f9); transition: background .15s; }
.dav-obj tbody tr:last-child { border-bottom: none; }
.dav-obj tbody tr:hover { background: #f8fafc; }
.dav-obj-ind { font-weight: 600; color: #1e293b; }
.dav-obj-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; vertical-align: middle; }
.dav-obj-dot.up { background: #0B3C73; }
.dav-obj-dot.down { background: #f59e0b; }
.dav-obj-ic { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; margin-right: 9px; vertical-align: middle; font-size: 0.8rem; }
.dav-obj-ic.up { background: #e0ecff; color: #0B3C73; }
.dav-obj-ic.down { background: #fef3c7; color: #b45309; }
.dav-obj-real { font-variant-numeric: tabular-nums; font-weight: 700; color: #0B3C73; }
.dav-inwrap { display: inline-flex; align-items: center; gap: 5px; }
.dav-obj input { width: 78px; border: 1px solid var(--border-color, #cbd5e1); border-radius: 7px; font-size: 0.85rem; padding: 5px 8px; text-align: right; transition: border-color .15s, box-shadow .15s; }
.dav-obj input:focus { outline: none; border-color: #1d4ed8; box-shadow: 0 0 0 3px rgba(29,78,216,.12); }
.dav-inunit { font-size: 0.76rem; color: var(--text-secondary, #94a3b8); min-width: 26px; }
.dav-obj-none { font-size: 0.78rem; color: #cbd5e1; font-style: italic; }
/* Barra de progreso "cómo vamos" */
.dav-prog { display: flex; align-items: center; gap: 10px; min-width: 180px; }
.dav-prog-track { flex: 1; height: 8px; background: #eef2f7; border-radius: 999px; overflow: hidden; min-width: 90px; }
.dav-prog-fill { height: 100%; border-radius: 999px; transition: width .5s ease; }
.dav-prog-fill.ok { background: linear-gradient(90deg,#22c55e,#16a34a); }
.dav-prog-fill.warn { background: linear-gradient(90deg,#fbbf24,#f59e0b); }
.dav-prog-fill.bad { background: linear-gradient(90deg,#f87171,#dc2626); }
.dav-prog-lbl { font-weight: 700; font-size: 0.75rem; white-space: nowrap; }
.dav-prog-lbl.ok { color: #15803d; }
.dav-prog-lbl.warn { color: #b45309; }
.dav-prog-lbl.bad { color: #b91c1c; }

/* ===== Campana con alertas: palpita ===== */
#btn-bell.has-alerts { animation: bellRing 2.4s ease-in-out infinite; transform-origin: 50% 4px; }
#btn-bell.has-alerts .bell-badge { animation: bellBadgePulse 1.6s ease-in-out infinite; }
@keyframes bellRing {
    0%, 60%, 100% { transform: rotate(0); }
    64% { transform: rotate(12deg); } 68% { transform: rotate(-10deg); }
    72% { transform: rotate(8deg); } 76% { transform: rotate(-6deg); }
    80% { transform: rotate(3deg); } 84% { transform: rotate(0); }
}
@keyframes bellBadgePulse { 0%,100%{ box-shadow:0 0 0 0 rgba(220,38,38,.6);} 70%{ box-shadow:0 0 0 6px rgba(220,38,38,0);} }

/* ===== Dropdowns del topbar (alertas / usuario) ===== */
.bell-badge { position: absolute; top: -3px; right: -3px; min-width: 16px; height: 16px; padding: 0 4px; background: #dc2626; color: #fff; border-radius: 999px; font-size: 0.62rem; font-weight: 800; display: flex; align-items: center; justify-content: center; }
.topbar-dropdown { position: absolute; top: calc(100% + 8px); right: 0; width: 320px; max-height: 70vh; overflow-y: auto; background: #fff; border: 1px solid var(--border-color, #e2e8f0); border-radius: 12px; box-shadow: 0 12px 40px rgba(0,0,0,.18); z-index: 12000; }
.topbar-dd-head { font-size: 0.82rem; font-weight: 800; color: #0B3C73; padding: 12px 14px; border-bottom: 1px solid var(--border-color, #eef2f7); position: sticky; top: 0; background: #fff; }
.topbar-dd-empty { padding: 18px 14px; text-align: center; color: var(--text-secondary, #64748b); font-size: 0.85rem; }
.alerta-item { display: flex; gap: 10px; align-items: flex-start; padding: 10px 14px; border-left: 4px solid #0B3C73; border-bottom: 1px solid var(--border-color, #f1f5f9); }
.alerta-item:hover { background: #f8fafc; }
.alerta-ic { font-size: 1.1rem; }
.alerta-txt { font-size: 0.85rem; font-weight: 600; color: #1e293b; }
.alerta-det { font-size: 0.75rem; color: var(--text-secondary, #64748b); }
.topbar-dd-user { display: flex; align-items: center; gap: 10px; padding: 14px; border-bottom: 1px solid var(--border-color, #eef2f7); }
.topbar-dd-user img { width: 42px; height: 42px; border-radius: 50%; object-fit: cover; }
.topbar-dd-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 11px 14px; background: none; border: none; cursor: pointer; font-size: 0.86rem; color: #334155; }
.topbar-dd-item:hover { background: #f1f5f9; }
.topbar-dd-item.danger { color: #dc2626; border-top: 1px solid var(--border-color, #eef2f7); }
.topbar-dd-item i { width: 18px; text-align: center; color: #64748b; }
.topbar-dd-item.danger i { color: #dc2626; }

.ia-lbl { display: block; font-size: 0.74rem; font-weight: 700; color: var(--text-secondary,#64748b); text-transform: uppercase; margin-bottom: 5px; letter-spacing: .3px; }

/* ===== Fondo animado sutil de la app ===== */
#app-container { position: relative; }
#app-container::before {
    content: ''; position: fixed; inset: -20%; z-index: 0; pointer-events: none;
    background: radial-gradient(38% 38% at 18% 28%, rgba(29,78,216,.06), transparent 70%),
                radial-gradient(34% 34% at 82% 78%, rgba(225,29,72,.05), transparent 70%),
                radial-gradient(30% 30% at 60% 12%, rgba(6,182,212,.045), transparent 70%);
    animation: appBgDrift 28s ease-in-out infinite;
}
@keyframes appBgDrift {
    0%,100% { transform: translate(0,0) scale(1); }
    50% { transform: translate(2.5%, -2%) scale(1.08); }
}
.content-area { position: relative; z-index: 1; }
.sidebar { position: relative; z-index: 2; }

/* ===== Asistente IA (vista completa estilo ChatGPT) ===== */
.ai-screen { display: flex; flex-direction: column; height: calc(100vh - 150px); max-width: 780px; margin: 0 auto; }
.ai-msgs { flex: 1; overflow-y: auto; padding: 8px 4px 16px; display: flex; flex-direction: column; gap: 16px; }
/* Estado inicial: hero centrado (como ChatGPT vacío) */
.ai-msgs.ai-empty { justify-content: center; align-items: center; }
.ai-hero { text-align: center; max-width: 560px; }
.ai-hero-ic { width: 76px; height: 76px; border-radius: 22px; margin: 0 auto 18px; display: flex; align-items: center; justify-content: center; font-size: 2rem; color: #fff; background: linear-gradient(135deg,#0B3C73,#1d4ed8); box-shadow: 0 12px 30px rgba(11,60,115,.32); animation: aiFabPulse 3.5s ease-in-out infinite; }
@keyframes aiFabPulse { 0%,100%{ box-shadow:0 12px 30px rgba(11,60,115,.3);} 50%{ box-shadow:0 12px 40px rgba(29,78,216,.55);} }
.ai-hero h2 { margin: 0 0 8px; font-size: 1.7rem; font-weight: 800; color: var(--text-primary,#1e293b); }
.ai-hero p { margin: 0 0 22px; color: var(--text-secondary,#64748b); font-size: 0.95rem; line-height: 1.55; }
.ai-hero .ai-quick { justify-content: center; }
.ai-row { display: flex; gap: 12px; align-items: flex-start; }
.ai-row.user { flex-direction: row-reverse; }
.ai-ava { width: 46px; height: 46px; flex-shrink: 0; border-radius: 14px; display: flex; align-items: center; justify-content: center; color: #fff; overflow: hidden; }
.ai-row.bot .ai-ava { background: linear-gradient(135deg,#1d4ed8,#4f46e5); box-shadow: 0 6px 16px rgba(37,99,235,.32); animation: aiAvaFloat 3.6s ease-in-out infinite; }
.ai-row.user .ai-ava { background: #e2e8f0; border-radius: 50%; box-shadow: 0 3px 10px rgba(15,23,42,.14); }
.ai-ava.user img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
@keyframes aiAvaFloat { 0%,100%{transform:translateY(0) rotate(0);} 50%{transform:translateY(-3px) rotate(-2deg);} }

/* Carita de robot simpática y animada (amigable, parpadea y sonríe) */
.ai-bot-face { position: relative; width: 30px; height: 25px; border-radius: 9px; background: rgba(255,255,255,.18); box-shadow: inset 0 0 0 2px rgba(255,255,255,.55); }
.ai-bot-antenna { position: absolute; top: -8px; left: 50%; transform: translateX(-50%); width: 2.5px; height: 7px; background: rgba(255,255,255,.8); border-radius: 2px; }
.ai-bot-antenna::after { content: ''; position: absolute; top: -4px; left: 50%; transform: translateX(-50%); width: 6px; height: 6px; border-radius: 50%; background: #7dd3fc; box-shadow: 0 0 8px #38bdf8; animation: aiBotBlinkLed 2.2s ease-in-out infinite; }
.ai-bot-eyes { position: absolute; top: 6px; left: 0; right: 0; display: flex; justify-content: center; gap: 8px; }
.ai-bot-eye { position: relative; width: 8px; height: 8px; border-radius: 50%; background: #fff; transform-origin: center; animation: aiBotBlink 4.2s infinite; }
.ai-bot-eye::after { content: ''; position: absolute; top: 2px; left: 2px; width: 3.5px; height: 3.5px; border-radius: 50%; background: #1d4ed8; animation: aiBotLook 5s ease-in-out infinite; }
.ai-bot-mouth { position: absolute; bottom: 4px; left: 50%; transform: translateX(-50%); width: 11px; height: 5px; border: 2px solid rgba(255,255,255,.9); border-top: none; border-radius: 0 0 8px 8px; animation: aiBotSmile 4.2s infinite; }
/* mejillas */
.ai-bot-face::before, .ai-bot-face::after { content: ''; position: absolute; bottom: 6px; width: 4px; height: 3px; border-radius: 50%; background: rgba(253,164,175,.75); }
.ai-bot-face::before { left: 2px; } .ai-bot-face::after { right: 2px; }
@keyframes aiBotBlink { 0%,90%,100%{transform:scaleY(1);} 94%{transform:scaleY(.1);} }
@keyframes aiBotLook { 0%,40%,100%{transform:translateX(0);} 55%,75%{transform:translateX(1.5px);} }
@keyframes aiBotSmile { 0%,88%,100%{width:11px;height:5px;} 44%,56%{width:14px;height:6px;} }
@keyframes aiBotBlinkLed { 0%,100%{opacity:1;transform:translateX(-50%) scale(1);} 50%{opacity:.4;transform:translateX(-50%) scale(.8);} }
.ai-hero-face { background: linear-gradient(135deg,#1d4ed8,#4f46e5) !important; }
.ai-bot-face-lg { width: 52px; height: 43px; border-radius: 15px; }
.ai-bot-face-lg .ai-bot-antenna { top: -13px; width: 4px; height: 11px; }
.ai-bot-face-lg .ai-bot-antenna::after { width: 9px; height: 9px; top: -7px; }
.ai-bot-face-lg .ai-bot-eyes { top: 11px; gap: 14px; }
.ai-bot-face-lg .ai-bot-eye { width: 13px; height: 13px; }
.ai-bot-face-lg .ai-bot-eye::after { width: 6px; height: 6px; top: 3.5px; left: 3.5px; }
.ai-bot-face-lg .ai-bot-mouth { bottom: 7px; width: 18px; height: 8px; border-width: 3px; }
.ai-bot-face-lg::before, .ai-bot-face-lg::after { bottom: 11px; width: 7px; height: 5px; }
.ai-bot-face-lg::before { left: 5px; } .ai-bot-face-lg::after { right: 5px; }
.ai-msg { padding: 13px 17px; border-radius: 16px; font-size: 0.96rem; line-height: 1.55; max-width: 74%; }
.ai-msg.bot { background: #fff; border: 1px solid var(--border-color,#eef2f7); color: #1e293b; border-top-left-radius: 5px; box-shadow: 0 4px 14px rgba(15,23,42,.06); }
.ai-msg.user { background: linear-gradient(135deg,#1d4ed8,#4f46e5); color: #fff; border-top-right-radius: 5px; box-shadow: 0 6px 16px rgba(37,99,235,.28); }
.ai-composer { padding-top: 6px; }
.ai-quick { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; justify-content: center; }
.ai-chip { font-size: 0.82rem; border: 1px solid #c7d2fe; background: #eef2ff; color: #1d4ed8; border-radius: 999px; padding: 7px 14px; cursor: pointer; transition: background .12s; }
.ai-chip:hover { background: #dbeafe; }
.ai-form { display: flex; gap: 10px; align-items: center; background: #fff; border: 1.5px solid var(--border-color,#e2e8f0); border-radius: 16px; padding: 6px 6px 6px 16px; box-shadow: 0 4px 16px rgba(15,23,42,.06); }
.ai-form:focus-within { border-color: #1d4ed8; box-shadow: 0 0 0 4px rgba(29,78,216,.1); }
.ai-form input { flex: 1; border: none; outline: none; font-size: 0.98rem; padding: 8px 0; background: transparent; }
.ai-form button { width: 44px; height: 44px; flex-shrink: 0; border: none; border-radius: 12px; background: linear-gradient(135deg,#0B3C73,#1d4ed8); color: #fff; cursor: pointer; font-size: 1rem; transition: transform .12s; }
.ai-form button:hover { transform: scale(1.06); }
.ai-foot { text-align: center; font-size: 0.74rem; color: var(--text-secondary,#94a3b8); margin-top: 10px; }

/* ===== Configuración IA (panel moderno) ===== */
.iacfg-head { display: flex; align-items: center; gap: 16px; margin-bottom: 20px; }
.iacfg-badge { width: 56px; height: 56px; flex-shrink: 0; border-radius: 16px; display: flex; align-items: center; justify-content: center; font-size: 1.4rem; color: #fff; background: linear-gradient(135deg,#0B3C73,#1d4ed8); box-shadow: 0 8px 20px rgba(11,60,115,.3); }
.iacfg-head h2 { margin: 0; font-size: 1.4rem; font-weight: 800; }
.iacfg-head p { margin: 3px 0 0; color: var(--text-secondary,#64748b); font-size: 0.85rem; max-width: 640px; }
.iacfg-switch { margin-left: auto; display: inline-flex; align-items: center; gap: 10px; cursor: pointer; flex-shrink: 0; }
.iacfg-switch input { display: none; }
.iacfg-switch span { width: 46px; height: 26px; border-radius: 999px; background: #cbd5e1; position: relative; transition: background .2s; }
.iacfg-switch span::after { content: ''; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%; background: #fff; transition: transform .2s; box-shadow: 0 1px 3px rgba(0,0,0,.3); }
.iacfg-switch input:checked + span { background: #16a34a; }
.iacfg-switch input:checked + span::after { transform: translateX(20px); }
.iacfg-switch em { font-style: normal; font-size: 0.86rem; font-weight: 700; color: var(--text-secondary,#64748b); }
.iacfg-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.iacfg-card { background: #fff; border: 1px solid var(--border-color,#e8edf3); border-radius: 14px; padding: 16px; box-shadow: 0 1px 3px rgba(15,23,42,.05); }
.iacfg-card.iacfg-wide { grid-column: 1 / -1; }
.iacfg-card-t { font-size: 0.9rem; font-weight: 800; color: #0B3C73; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
.iacfg-card-t i { color: #1d4ed8; }
/* Campos anchos y premium dentro del panel IA */
.iacfg-card .form-control,
.iacfg-card textarea,
.iacfg-card select,
.iacfg-card input[type="text"],
.iacfg-card input[type="password"] { width: 100%; box-sizing: border-box; }
.iacfg-card textarea { min-height: 120px; resize: vertical; line-height: 1.55; font-size: 0.92rem; padding: 12px 14px; border-radius: 10px; }
.iacfg-card.iacfg-wide textarea { min-height: 140px; }
.iacfg-card { padding: 20px 22px; transition: box-shadow .18s, border-color .18s; }
.iacfg-card:hover { box-shadow: 0 6px 22px rgba(15,23,42,.08); }
.iacfg-grid { gap: 20px; }
.iacfg-head { padding: 22px 24px; border-radius: 18px; background: linear-gradient(135deg, rgba(11,60,115,.05), rgba(29,78,216,.05)); border: 1px solid rgba(29,78,216,.12); }

/* ===== Soporte (Redline Asesores) ===== */
.sop-hero { text-align: center; padding: 0 0 14px; display: flex; align-items: center; justify-content: center; gap: 14px; flex-wrap: wrap; }
.sop-hero-badge { width: 46px; height: 46px; border-radius: 13px; display: flex; align-items: center; justify-content: center; font-size: 1.15rem; color: #fff; background: linear-gradient(135deg,#0B3C73,#1d4ed8); box-shadow: 0 6px 16px rgba(11,60,115,.3); }
.sop-hero h2 { margin: 0; font-size: 1.3rem; font-weight: 800; color: var(--text-primary,#1e293b); }
.sop-hero p { flex-basis: 100%; margin: 2px 0 0; color: var(--text-secondary,#64748b); font-size: 0.86rem; }
.sop-card { max-width: 560px; margin: 0 auto; background: #fff; border: 1px solid var(--border-color,#e8edf3); border-radius: 20px; padding: 28px; box-shadow: 0 10px 30px rgba(15,23,42,.08); text-align: center; position: relative; overflow: hidden; }
.sop-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 5px; background: linear-gradient(90deg,#003a68,#0B3C73); }
.sop-brand { margin-bottom: 6px; }
.sop-logo { font-size: 1.9rem; font-weight: 900; letter-spacing: 2px; color: #003a68; line-height: 1; }
.sop-logo span { color: #0B3C73; }
.sop-brand-sub { font-size: 0.8rem; letter-spacing: 4px; text-transform: uppercase; color: var(--text-secondary,#94a3b8); font-weight: 700; }
.sop-desc { color: var(--text-secondary,#64748b); font-size: 0.9rem; line-height: 1.5; margin: 14px auto 20px; max-width: 420px; }
.sop-contact { display: flex; flex-direction: column; gap: 10px; text-align: left; }
.sop-item { display: flex; align-items: center; gap: 14px; padding: 12px 16px; border: 1px solid var(--border-color,#eef2f7); border-radius: 12px; text-decoration: none; color: var(--text-primary,#1e293b); transition: border-color .15s, transform .12s, box-shadow .12s; }
.sop-item:hover { border-color: #1d4ed8; transform: translateY(-2px); box-shadow: 0 8px 18px rgba(29,78,216,.12); }
.sop-ic { width: 42px; height: 42px; border-radius: 12px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-size: 1.05rem; color: #fff; background: linear-gradient(135deg,#0B3C73,#1d4ed8); }
.sop-item-txt { display: flex; flex-direction: column; font-size: 0.92rem; word-break: break-word; }
.sop-item-txt b { font-size: 0.72rem; text-transform: uppercase; letter-spacing: .4px; color: var(--text-secondary,#94a3b8); font-weight: 700; }
.sop-foot { margin-top: 20px; font-size: 0.78rem; color: var(--text-secondary,#94a3b8); }

/* ===== Balance resumido ===== */
#dav-dir-balance .bal-col { background: #f8fafc; border: 1px solid var(--border-color, #e2e8f0); border-radius: 12px; padding: 12px 14px; }
#dav-dir-balance .bal-col.activo { border-top: 3px solid #0B3C73; }
#dav-dir-balance .bal-col.pasivo { border-top: 3px solid #f59e0b; }
.bal-head { font-size: 0.8rem; font-weight: 800; text-transform: uppercase; letter-spacing: .4px; margin-bottom: 8px; display: flex; align-items: center; gap: 7px; }
#dav-dir-balance .activo .bal-head { color: #0B3C73; }
#dav-dir-balance .pasivo .bal-head { color: #b45309; }
.bal-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 0.86rem; color: #475569; border-bottom: 1px solid #eef2f7; }
.bal-row:last-child { border-bottom: none; }
.bal-row .bal-v { font-variant-numeric: tabular-nums; font-weight: 600; color: #1e293b; }
.bal-row.total { border-top: 2px solid; margin-top: 3px; padding-top: 7px; font-weight: 800; }
#dav-dir-balance .activo .bal-row.total { border-color: #0B3C73; }
#dav-dir-balance .activo .bal-row.total, #dav-dir-balance .activo .bal-row.total .bal-v { color: #0B3C73; }
#dav-dir-balance .pasivo .bal-row.total { border-color: #f59e0b; }
#dav-dir-balance .pasivo .bal-row.total, #dav-dir-balance .pasivo .bal-row.total .bal-v { color: #b45309; }
.bal-check { grid-column: 1 / -1; text-align: center; font-size: 0.82rem; font-weight: 700; padding: 8px; border-radius: 8px; }
.bal-check.ok { background: #dcfce7; color: #15803d; }
.bal-check.bad { background: #fee2e2; color: #b91c1c; }

/* ===== Fila/celda P&G clicable (desglose) ===== */
.pyg-cel-clic { cursor: pointer; }
.pyg-cel-clic:hover { background: #dbeafe !important; outline: 1px solid #93c5fd; }
.pyg-clic { cursor: pointer; }
.pyg-fila-clic:hover { background: #eff6ff; }
.pyg-clic i { color: #94a3b8; font-size: 0.72rem; opacity: .6; transition: opacity .12s; }
.pyg-clic:hover { color: #1d4ed8; }
.pyg-clic:hover i { opacity: 1; color: #1d4ed8; }

/* ===== OF clicable (abre el detalle en cualquier vista) ===== */
.of-link { cursor: pointer; border-bottom: 1px dashed currentColor; transition: opacity .12s; }
.of-link:hover { opacity: .7; }

/* ===== Horas trabajadas (supervisión) ===== */
.sh-tot { background: linear-gradient(160deg,#0B3C73,#1d4ed8); color: #fff; border-radius: 12px; padding: 12px 16px; box-shadow: 0 4px 14px rgba(11,60,115,.18); }
.sh-tot-l { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .4px; opacity: .85; }
.sh-tot-v { font-size: 1.6rem; font-weight: 800; margin-top: 2px; }
.sh-per.active { background: #0B3C73 !important; color: #fff !important; }
.sh-table { width: 100%; border-collapse: collapse; font-size: 0.84rem; }
.sh-table th, .sh-table td { padding: 8px 12px; text-align: right; border-bottom: 1px solid var(--border-color, #eef2f7); white-space: nowrap; }
.sh-table th { background: #f8fafc; color: var(--text-secondary, #64748b); font-size: 0.72rem; text-transform: uppercase; position: sticky; top: 0; }
.sh-table th:nth-child(2), .sh-table td.sh-op { text-align: left; font-weight: 600; }
.sh-table th:first-child, .sh-table td.sh-rk { text-align: center; color: var(--text-secondary, #94a3b8); }
.sh-table tbody tr:hover { background: #f8fafc; }
.sh-table tr.sh-inactivo { opacity: .55; }
.sh-table tr.sh-inactivo .sh-op::after { content: ' · sin actividad'; font-size: 0.7rem; color: #dc2626; font-weight: 600; }

/* ===== Emparejamientos de turno ===== */
.emparej-grupo { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; padding: 8px 10px; border: 1px solid var(--border-color, #e2e8f0); border-radius: 10px; margin-bottom: 8px; background: #f8fafc; }
.emparej-num { width: 22px; height: 22px; border-radius: 50%; background: #0B3C73; color: #fff; font-size: 0.72rem; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; }
.emparej-chip { display: inline-flex; align-items: center; gap: 5px; background: #e0ecff; color: #0B3C73; font-size: 0.82rem; font-weight: 600; padding: 3px 8px; border-radius: 999px; }
.emparej-chip .emparej-del { border: none; background: transparent; color: #0B3C73; cursor: pointer; font-size: 0.8rem; padding: 0; line-height: 1; }
.emparej-chip .emparej-del:hover { color: #dc2626; }
.emparej-add { border: 1px dashed var(--border-color, #cbd5e1); border-radius: 7px; font-size: 0.8rem; padding: 3px 6px; background: #fff; }
.emparej-rmg { margin-left: auto; border: none; background: transparent; cursor: pointer; font-size: 0.95rem; }

/* ===== MES: modo entre tareas (obliga a encadenar o cerrar jornada) ===== */
.mes-between { background: linear-gradient(160deg,#f0fdf4,#ecfdf5); border: 1px solid #86efac; border-radius: 14px; padding: 16px; margin-bottom: 14px; box-shadow: 0 4px 14px rgba(22,163,74,.12); }
.mes-between-txt { font-size: 0.95rem; color: #14532d; text-align: center; margin-bottom: 12px; line-height: 1.4; }
.mes-between-btns { display: flex; flex-direction: column; gap: 8px; }
.mes-between-btns .btn { font-size: 0.95rem; font-weight: 700; padding: 12px; }

/* ===== Relevo de turno (aviso al operario que entra) ===== */
#mes-relevo-banner { margin-top: 8px; display: flex; flex-direction: column; gap: 8px; }
.mes-relevo-nota { background: #fffbeb; border: 1px solid #fcd34d; border-left: 4px solid #f59e0b; border-radius: 8px; padding: 9px 11px; }
.mes-relevo-head { font-size: 0.78rem; color: #92400e; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.mes-relevo-head span { margin-left: auto; color: #b45309; font-size: 0.72rem; }
.mes-relevo-txt { font-size: 0.9rem; color: #1e293b; margin: 5px 0 8px; white-space: pre-wrap; line-height: 1.35; }
.mes-relevo-ok { background: #f59e0b; color: #fff; border: none; border-radius: 6px; padding: 4px 12px; font-size: 0.78rem; font-weight: 700; cursor: pointer; }
.mes-relevo-ok:hover { background: #d97706; }

/* ===== Feed de imputaciones (abajo-izquierda) ===== */
.imput-toast { background: rgba(11,60,115,.96); color:#fff; border-radius:10px; padding:9px 12px; box-shadow:0 6px 18px rgba(0,0,0,.22); font-size:0.82rem; display:flex; align-items:center; gap:8px; animation: imputIn .35s ease; }
.imput-toast.fin { background: rgba(22,163,74,.96); }
.imput-toast.out { animation: imputOut .5s ease forwards; }
.imput-toast .it-ic { font-size:1rem; }
.imput-toast b { font-weight:800; }
@keyframes imputIn { from{transform:translateX(-24px);opacity:0;} to{transform:translateX(0);opacity:1;} }
@keyframes imputOut { to{transform:translateX(-24px);opacity:0;} }

/* ===== Animaciones "en vivo" (verde) ===== */
@keyframes wolcoPulse { 0%{box-shadow:0 0 0 0 rgba(22,163,74,.55);} 70%{box-shadow:0 0 0 8px rgba(22,163,74,0);} 100%{box-shadow:0 0 0 0 rgba(22,163,74,0);} }
@keyframes wolcoDot { 0%,100%{opacity:1;transform:scale(1);} 50%{opacity:.35;transform:scale(.7);} }
.planta-marker.live { animation: wolcoPulse 1.8s ease-in-out infinite; }
.sup-card.activa { animation: wolcoPulse 2.2s ease-in-out infinite; }
.sup-badge.on { position: relative; }
.sup-live-dot { display:inline-block; width:7px; height:7px; border-radius:50%; background:#16a34a; margin-right:5px; animation: wolcoDot 1.1s ease-in-out infinite; vertical-align:middle; }
.sup-time-val.ticking { color:#16a34a; }

/* ===== Supervisión de operarios ===== */
.sup-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.sup-card { background: #fff; border: 1px solid var(--border-color, #e2e8f0); border-left: 4px solid #94a3b8; border-radius: 10px; padding: 12px 14px; cursor: pointer; transition: box-shadow .1s; }
.sup-card:hover { box-shadow: 0 3px 12px rgba(0,0,0,.1); }
.sup-card.activa { border-left-color: #16a34a; }
.sup-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.sup-name { font-weight: 700; font-size: 0.98rem; }
.sup-avatar { width: 34px; height: 34px; border-radius: 50%; overflow: hidden; background: #e2e8f0; color: #64748b; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; font-size: 0.95rem; }
.sup-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sup-badge { font-size: 0.66rem; font-weight: 800; padding: 3px 8px; border-radius: 20px; white-space: nowrap; }
.sup-badge.on { background: #dcfce7; color: #15803d; }
.sup-badge.off { background: #f1f5f9; color: #64748b; }
.sup-badge.pend { background: #fef3c7; color: #b45309; }
.sup-of { font-size: 0.9rem; margin-top: 8px; font-weight: 600; }
.sup-meta { font-size: 0.78rem; color: var(--text-secondary, #64748b); margin-top: 2px; }
.sup-times { display: flex; gap: 16px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border-color, #e2e8f0); }
.sup-time-lbl { font-size: 0.64rem; color: var(--text-secondary, #94a3b8); text-transform: uppercase; }
.sup-time-val { font-size: 1rem; font-weight: 800; font-variant-numeric: tabular-nums; }
.sup-msg-btn { margin-top: 10px; width: 100%; background: #eef2ff; color: #0B3C73; border: none; border-radius: 8px; padding: 7px; font-weight: 700; font-size: 0.8rem; cursor: pointer; }
.sup-msg-btn:hover { background: #e0e7ff; }

/* Avisos emergentes (toast) */
.msg-toast { background: #0B3C73; color: #fff; border-radius: 10px; padding: 12px 14px; box-shadow: 0 6px 20px rgba(0,0,0,.25); animation: msgIn .25s ease, msgPulse 2s ease-in-out infinite; pointer-events: auto; border: 2px solid #f59e0b; }
@keyframes msgPulse { 0%,100% { box-shadow: 0 6px 20px rgba(0,0,0,.25), 0 0 0 0 rgba(245,158,11,.55); } 50% { box-shadow: 0 6px 20px rgba(0,0,0,.25), 0 0 0 8px rgba(245,158,11,0); } }
#msg-toasts-badge { position: fixed; top: 84px; right: 18px; z-index: 2147483001; background: #dc2626; color: #fff; font-weight: 800; font-size: 0.8rem; padding: 4px 10px; border-radius: 999px; box-shadow: 0 4px 12px rgba(0,0,0,.3); pointer-events: none; display: none; }
.msg-toast .mt-head { font-size: 0.72rem; font-weight: 700; opacity: .85; display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 4px; }
.msg-toast .mt-body { font-size: 0.95rem; line-height: 1.35; white-space: pre-wrap; }
.msg-toast .mt-recibido { margin-top: 10px; cursor: pointer; background: #fff; border: none; color: #0B3C73; border-radius: 8px; padding: 7px 14px; font-weight: 800; font-size: 0.85rem; width: 100%; }
.msg-toast .mt-recibido:hover { background: #e0e7ff; }
@keyframes msgIn { from { transform: translateX(20px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }

/* ===== OEE (KPI Producción) ===== */
.oee-factor { background: var(--bg-secondary, #f8fafc); border: 1px solid var(--border-color, #e2e8f0); border-radius: 10px; padding: 12px 14px; text-align: center; }
.oee-factor.oee-nd { background: #f1f5f9; border-style: dashed; }
.oee-lbl { font-size: 0.72rem; font-weight: 700; color: var(--text-secondary, #64748b); text-transform: uppercase; letter-spacing: .02em; }
.oee-val { font-size: 1.7rem; font-weight: 800; margin: 4px 0 2px; }
.oee-sub { font-size: 0.68rem; color: var(--text-secondary, #94a3b8); }

/* ===== Formulario de usuario: evitar desborde por la derecha ===== */
#usr-form-card > div > div { min-width: 0; }   /* permite que las celdas del grid encojan */
#usr-form-card input, #usr-form-card select { width: 100%; box-sizing: border-box; max-width: 100%; }

/* ===== Escáner de códigos (cámara) ===== */
.scan-overlay {
    position: fixed; inset: 0; z-index: 9999;
    background: rgba(0,0,0,0.7);
    display: flex; align-items: center; justify-content: center;
    padding: 16px;
}
.scan-overlay.hidden { display: none; }
.scan-modal {
    background: #fff; border-radius: 14px; width: 100%; max-width: 420px;
    overflow: hidden; box-shadow: 0 20px 60px rgba(0,0,0,0.4);
}
.scan-header {
    display: flex; align-items: center; justify-content: space-between;
    padding: 12px 16px; background: var(--accent-dark, #0B3C73); color: #fff;
    font-weight: 700;
}
.scan-close { background: none; border: none; color: #fff; font-size: 1.6rem; line-height: 1; cursor: pointer; }
#scan-reader { background: #000; }
.scan-result { padding: 12px 16px; font-size: 0.9rem; color: #374151; text-align: center; }

/* Solo se imprime la rejilla de etiquetas */
@media print {
    body * { visibility: hidden !important; }
    #bc-output, #bc-output * { visibility: visible !important; }
    #bc-output {
        position: absolute; left: 0; top: 0; width: 100%;
        grid-template-columns: repeat(3, 1fr);
        gap: 10px;
    }
    .bc-card { border: 1px solid #999; page-break-inside: avoid; }
}

/* ===== LOGIN: boton Ver tour ===== */
.login-tour-btn { display: flex; align-items: center; justify-content: center; gap: 9px; width: 100%; margin: 16px 0 0; background: linear-gradient(90deg, rgba(37,99,235,.06), rgba(124,58,237,.06)); border: 1px solid rgba(37,99,235,.22); color: #334155; padding: 12px 18px; border-radius: 12px; font-size: .9rem; font-weight: 600; cursor: pointer; transition: background .18s, border-color .18s, transform .12s, box-shadow .18s; }
.login-tour-btn:hover { background: linear-gradient(90deg, rgba(37,99,235,.12), rgba(124,58,237,.12)); border-color: rgba(37,99,235,.45); transform: translateY(-1px); box-shadow: 0 6px 18px rgba(37,99,235,.14); }
.login-tour-btn i { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%; background: linear-gradient(135deg,#2563eb,#7c3aed); color: #fff; font-size: .82rem; }

/* ===== TOUR / INFOGRAFIA COMERCIAL ===== */
.tour-overlay { position: fixed; inset: 0; z-index: 12000; background: radial-gradient(120% 120% at 50% 0%, #0b1220 0%, #0a0f1c 45%, #060913 100%); overflow: hidden; }
.tour-overlay.hidden { display: none; }
.tour-aurora { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.tour-aurora span { position: absolute; width: 46vw; height: 46vw; border-radius: 50%; filter: blur(80px); opacity: .5; }
.tour-aurora span:nth-child(1) { background: #2563eb; top: -12vw; left: -8vw; animation: tourBlob1 18s ease-in-out infinite; }
.tour-aurora span:nth-child(2) { background: #7c3aed; top: 20vh; right: -12vw; animation: tourBlob2 22s ease-in-out infinite; }
.tour-aurora span:nth-child(3) { background: #0ea5e9; bottom: -16vw; left: 25vw; animation: tourBlob3 20s ease-in-out infinite; }
@keyframes tourBlob1 { 0%,100%{transform:translate(0,0) scale(1);} 50%{transform:translate(6vw,5vh) scale(1.15);} }
@keyframes tourBlob2 { 0%,100%{transform:translate(0,0) scale(1);} 50%{transform:translate(-7vw,6vh) scale(1.2);} }
@keyframes tourBlob3 { 0%,100%{transform:translate(0,0) scale(1);} 50%{transform:translate(4vw,-6vh) scale(1.1);} }
.tour-close { position: fixed; top: 22px; right: 26px; z-index: 12002; width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,.2); background: rgba(255,255,255,.08); color: #fff; font-size: 1.15rem; cursor: pointer; backdrop-filter: blur(6px); transition: background .15s, transform .15s; }
.tour-close:hover { background: rgba(255,255,255,.18); transform: rotate(90deg); }
/* --- Slider onboarding (sin scroll) --- */
.tour-progress { position: fixed; top: 0; left: 0; right: 0; height: 3px; background: rgba(255,255,255,.08); z-index: 12002; }
.tour-progress span { display: block; height: 100%; width: 20%; background: linear-gradient(90deg,#60a5fa,#a78bfa); border-radius: 0 3px 3px 0; transition: width .45s cubic-bezier(.4,0,.2,1); }
.tour-viewport { position: absolute; inset: 0; z-index: 12001; overflow: hidden; }
.tour-track { display: flex; height: 100%; width: 100%; transition: transform .5s cubic-bezier(.5,.05,.2,1); }
.tour-slide { flex: 0 0 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; text-align: center; padding: 40px 28px 118px; color: #e8edf6; box-sizing: border-box; overflow-y: auto; }

.tour-badge { display: inline-flex; align-items: center; gap: 8px; padding: 7px 16px; border-radius: 999px; background: rgba(37,99,235,.14); border: 1px solid rgba(96,165,250,.35); color: #bfdbfe; font-size: .8rem; font-weight: 600; letter-spacing: .3px; }
.tour-badge-dot { width: 8px; height: 8px; border-radius: 50%; background: #34d399; box-shadow: 0 0 0 0 rgba(52,211,153,.6); animation: tourPulse 2s infinite; }
@keyframes tourPulse { 0%{box-shadow:0 0 0 0 rgba(52,211,153,.6);} 70%{box-shadow:0 0 0 10px rgba(52,211,153,0);} 100%{box-shadow:0 0 0 0 rgba(52,211,153,0);} }
.tour-eyebrow { text-transform: uppercase; letter-spacing: 3px; font-size: .74rem; font-weight: 800; color: #93a0b6; }
.tour-title { font-size: clamp(1.9rem, 4.6vw, 3.2rem); line-height: 1.08; font-weight: 800; margin: 18px 0 16px; letter-spacing: -.5px; max-width: 720px; }
.tour-title-sm { font-size: clamp(1.6rem, 3.6vw, 2.5rem); line-height: 1.12; font-weight: 800; margin: 12px 0 14px; letter-spacing: -.3px; max-width: 640px; }
.tour-grad { background: linear-gradient(90deg,#60a5fa,#a78bfa,#38bdf8); -webkit-background-clip: text; background-clip: text; color: transparent; }
.tour-sub { max-width: 560px; margin: 0 auto; font-size: 1.02rem; line-height: 1.6; color: #aeb9cc; }

/* Solo la slide activa anima su contenido (efecto entrada) */
.tour-slide-anim > * { opacity: 0; transform: translateY(18px); animation: tourItemIn .55s cubic-bezier(.2,.7,.2,1) forwards; }
.tour-slide-anim > *:nth-child(1){animation-delay:.05s} .tour-slide-anim > *:nth-child(2){animation-delay:.13s}
.tour-slide-anim > *:nth-child(3){animation-delay:.21s} .tour-slide-anim > *:nth-child(4){animation-delay:.29s}
.tour-slide-anim > *:nth-child(5){animation-delay:.37s}
@keyframes tourItemIn { to{opacity:1;transform:none;} }

/* Visuales */
.tour-visual { margin-bottom: 26px; display: flex; align-items: center; justify-content: center; }
.tv-hero .tv-orbit { position: relative; width: 200px; height: 200px; }
.tv-core { position: absolute; inset: 0; margin: auto; width: 92px; height: 92px; border-radius: 26px; display: flex; align-items: center; justify-content: center; font-size: 2.2rem; color: #fff; background: linear-gradient(135deg,#1d4ed8,#7c3aed); box-shadow: 0 18px 44px rgba(37,99,235,.5); animation: tvFloat 3.5s ease-in-out infinite; }
.tv-orbit .tv-chip { position: absolute; width: 46px; height: 46px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; color: #fff; background: rgba(255,255,255,.1); border: 1px solid rgba(255,255,255,.18); backdrop-filter: blur(6px); animation: tvChip 4s ease-in-out infinite; }
.tv-c1 { top: 0; left: 50%; margin-left: -23px; }
.tv-c2 { top: 50%; right: 0; margin-top: -23px; animation-delay: .5s; }
.tv-c3 { bottom: 0; left: 50%; margin-left: -23px; animation-delay: 1s; }
.tv-c4 { top: 50%; left: 0; margin-top: -23px; animation-delay: 1.5s; }
@keyframes tvFloat { 0%,100%{transform:translateY(0) rotate(0);} 50%{transform:translateY(-8px) rotate(3deg);} }
@keyframes tvChip { 0%,100%{transform:translateY(0);} 50%{transform:translateY(-9px);} }

.tv-flow { gap: 0; }
.tv-fnode { width: 108px; height: 108px; border-radius: 24px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; color: #fff; font-size: 1.9rem; }
.tv-fnode b { font-size: .82rem; font-weight: 700; }
.tv-erp { background: linear-gradient(135deg,#1d4ed8,#3b82f6); }
.tv-plat { background: linear-gradient(135deg,#7c3aed,#a78bfa); }
.tv-line { width: 70px; height: 3px; background: linear-gradient(90deg,#3b82f6,#a78bfa); position: relative; border-radius: 3px; }
.tv-line .tv-dot { position: absolute; top: 50%; left: 0; width: 10px; height: 10px; margin-top: -5px; border-radius: 50%; background: #fff; box-shadow: 0 0 10px #60a5fa; animation: tvDot 1.6s linear infinite; }
@keyframes tvDot { 0%{left:0;} 100%{left:100%;} }
.tour-erps-mini { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-top: 22px; }
.tour-erps-mini span { font-size: .78rem; font-weight: 700; color: #cbd5e1; padding: 6px 14px; border-radius: 999px; border: 1px solid rgba(255,255,255,.14); background: rgba(255,255,255,.04); }

.tv-mes .tv-phone { position: relative; width: 130px; height: 180px; border-radius: 22px; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.16); padding: 20px 16px; box-shadow: 0 16px 40px rgba(0,0,0,.4); }
.tv-phone-top { width: 40px; height: 5px; border-radius: 3px; background: rgba(255,255,255,.25); margin: 0 auto 18px; }
.tv-bar { height: 12px; border-radius: 6px; margin-bottom: 12px; background: linear-gradient(90deg,#3b82f6,#60a5fa); animation: tvBar 2.4s ease-in-out infinite; }
.tv-b1 { width: 90%; } .tv-b2 { width: 65%; animation-delay: .3s; background: linear-gradient(90deg,#7c3aed,#a78bfa); } .tv-b3 { width: 78%; animation-delay: .6s; background: linear-gradient(90deg,#059669,#34d399); }
@keyframes tvBar { 0%,100%{opacity:.55;transform:scaleX(.9);transform-origin:left;} 50%{opacity:1;transform:scaleX(1);} }
.tv-pulse { position: absolute; bottom: -14px; right: -14px; width: 48px; height: 48px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; background: linear-gradient(135deg,#16a34a,#34d399); box-shadow: 0 0 0 0 rgba(52,211,153,.6); animation: tourPulse 2s infinite; }

.tv-sync .tv-cycle { position: relative; width: 170px; height: 170px; }
.tv-cycle-ic { position: absolute; inset: 0; margin: auto; font-size: 4.5rem; color: #60a5fa; animation: tvSpin 4s linear infinite; }
@keyframes tvSpin { to{transform:rotate(360deg);} }
.tv-cycle-a, .tv-cycle-b { position: absolute; width: 50px; height: 50px; border-radius: 15px; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 1.2rem; }
.tv-cycle-a { top: -6px; left: 50%; margin-left: -25px; background: linear-gradient(135deg,#1d4ed8,#3b82f6); }
.tv-cycle-b { bottom: -6px; left: 50%; margin-left: -25px; background: linear-gradient(135deg,#059669,#34d399); }

.tv-kpi { flex-direction: column; gap: 14px; }
.tv-chart { display: flex; align-items: flex-end; gap: 10px; height: 130px; }
.tv-chart span { width: 20px; border-radius: 6px 6px 0 0; height: var(--h); background: linear-gradient(180deg,#60a5fa,#7c3aed); transform-origin: bottom; animation: tvGrow .8s cubic-bezier(.2,.7,.2,1) both; }
.tv-chart span:nth-child(2){animation-delay:.08s} .tv-chart span:nth-child(3){animation-delay:.16s} .tv-chart span:nth-child(4){animation-delay:.24s} .tv-chart span:nth-child(5){animation-delay:.32s} .tv-chart span:nth-child(6){animation-delay:.4s}
@keyframes tvGrow { from{transform:scaleY(0);} to{transform:scaleY(1);} }
.tv-kpi-badge { display: inline-flex; align-items: center; gap: 7px; font-size: .84rem; font-weight: 700; color: #34d399; padding: 6px 14px; border-radius: 999px; background: rgba(52,211,153,.12); border: 1px solid rgba(52,211,153,.3); }

/* CTA */
.tour-cta-btns { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin-top: 26px; }
.tour-cta-primary { display: inline-flex; align-items: center; gap: 9px; background: linear-gradient(90deg,#2563eb,#7c3aed); color: #fff; border: none; padding: 14px 30px; border-radius: 999px; font-size: 1rem; font-weight: 700; cursor: pointer; transition: transform .15s, box-shadow .15s; box-shadow: 0 10px 30px rgba(37,99,235,.4); }
.tour-cta-primary:hover { transform: translateY(-2px); box-shadow: 0 14px 38px rgba(37,99,235,.55); }
.tour-cta-ghost { display: inline-flex; align-items: center; padding: 14px 30px; border-radius: 999px; border: 1px solid rgba(255,255,255,.28); color: #fff; text-decoration: none; font-weight: 600; transition: background .15s; }
.tour-cta-ghost:hover { background: rgba(255,255,255,.1); }

/* Controles inferiores */
.tour-controls { position: fixed; left: 0; right: 0; bottom: 54px; z-index: 12002; display: flex; align-items: center; justify-content: space-between; max-width: 720px; margin: 0 auto; padding: 0 28px; }
.tour-skip { background: transparent; border: none; color: #93a0b6; font-size: .9rem; font-weight: 600; cursor: pointer; transition: color .15s; }
.tour-skip:hover { color: #e8edf6; }
.tour-dots { display: flex; gap: 9px; }
.tour-dots button { width: 9px; height: 9px; border-radius: 50%; border: none; padding: 0; background: rgba(255,255,255,.22); cursor: pointer; transition: width .25s, background .25s; }
.tour-dots button.on { width: 26px; border-radius: 6px; background: linear-gradient(90deg,#60a5fa,#a78bfa); }
.tour-nav-btns { display: flex; gap: 10px; }
.tour-nav-btn { display: inline-flex; align-items: center; gap: 8px; height: 42px; padding: 0 16px; border-radius: 999px; border: 1px solid rgba(255,255,255,.2); background: rgba(255,255,255,.06); color: #fff; font-size: .9rem; font-weight: 600; cursor: pointer; transition: background .15s, transform .12s, opacity .15s; }
.tour-nav-btn:hover { background: rgba(255,255,255,.14); transform: translateY(-1px); }
.tour-nav-btn:disabled { opacity: .3; cursor: default; transform: none; }
.tour-nav-btn.tour-next { background: linear-gradient(90deg,#2563eb,#7c3aed); border: none; box-shadow: 0 8px 22px rgba(37,99,235,.4); }
#tour-prev { width: 42px; padding: 0; justify-content: center; }
.tour-foot { position: fixed; left: 0; right: 0; bottom: 18px; z-index: 12002; display: flex; align-items: center; justify-content: center; gap: 8px; font-size: .78rem; color: #8b98af; }
.tour-foot img { margin: 0 !important; vertical-align: middle; }
.tour-foot a { color: #93c5fd; text-decoration: none; }

@media (max-width: 560px) {
    .tour-slide { padding: 56px 22px 170px; }
    .tour-nav-btn.tour-next { padding: 0 14px; }
    .tour-controls { bottom: 60px; }
}


/* ============================================================
   RESPONSIVE GLOBAL + MENÚ HAMBURGUESA
   (todo dentro de media queries: la vista de PC no se toca)
   ============================================================ */

/* Botón hamburguesa: oculto en escritorio */
.hamburger-btn { display: none; background: transparent; border: 1px solid var(--border-color); color: var(--text-primary); width: 40px; height: 40px; border-radius: 10px; font-size: 1.1rem; cursor: pointer; align-items: center; justify-content: center; flex-shrink: 0; transition: background .15s; }
.hamburger-btn:hover { background: var(--bg-main); }
.topbar-left { display: flex; align-items: center; gap: 14px; min-width: 0; }
.topbar-left h2 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Backdrop del drawer: oculto salvo en móvil con menú abierto */
.sidebar-backdrop { display: none; position: fixed; inset: 0; background: rgba(15,23,42,.5); backdrop-filter: blur(2px); z-index: 900; opacity: 0; transition: opacity .25s; }

/* ---------- TABLET / MÓVIL: ≤ 980px ---------- */
@media (max-width: 980px) {
    .hamburger-btn { display: inline-flex; }

    /* Sidebar como drawer deslizante */
    .sidebar {
        position: fixed; top: 0; left: 0; height: 100vh; width: 270px;
        z-index: 1000; transform: translateX(-100%);
        transition: transform .3s cubic-bezier(.4,0,.2,1);
        box-shadow: 4px 0 24px rgba(0,0,0,.18);
    }
    .app-container.nav-open .sidebar { transform: translateX(0); }
    .app-container.nav-open .sidebar-backdrop { display: block; opacity: 1; }

    /* El contenido ocupa todo el ancho */
    .main-content { padding: 0; }
    .topbar { padding: 14px 18px; position: sticky; top: 0; z-index: 50; background: #fff; }
    .topbar h2 { font-size: 1.1rem; padding-left: 12px; }
    .content-area { padding: 18px 16px; }
    /* Asistente: altura con dvh para no desbordar bajo la barra del navegador móvil */
    .ai-screen { height: calc(100dvh - 130px); }

    /* KPIs y rejillas a una columna */
    .kpi-dashboard .dashboard-grid,
    .dashboard-grid { grid-template-columns: 1fr !important; }
    .iacfg-grid { grid-template-columns: 1fr !important; }
    .kpi-cards, .kpi-row, .kpi-grid { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)) !important; }

    /* Tablas anchas: scroll horizontal en su contenedor */
    .table-container, .table-wrap, .kpi-hist-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    table { min-width: 520px; }

    /* Modales / popups adaptados */
    .modal-content, .modal-box, .popup-card, .of-detail-card { max-width: 94vw !important; width: 94vw !important; }

    /* Cabeceras de KPI que envuelvan */
    .kpi-header { flex-direction: column; align-items: flex-start !important; }

    /* Asistente IA ocupa alto disponible */
    .ai-screen { height: calc(100vh - 120px); }
}

/* ---------- MÓVIL: ≤ 600px ---------- */
@media (max-width: 600px) {
    .topbar { padding: 12px 14px; }
    .topbar-actions { gap: 8px; }
    .topbar-actions .btn span, .topbar-actions .btn-label { display: none; }
    .content-area { padding: 14px 12px; }
    .card, .glass-card, .kpi-card { padding: 16px !important; }
    .kpi-cards, .kpi-row, .kpi-grid { grid-template-columns: 1fr 1fr !important; }

    /* Formularios y filtros en columna */
    .form-row, .filter-row, .toolbar { flex-direction: column; align-items: stretch; }
    .form-row > *, .filter-row > * { width: 100%; }

    /* Botón hamburguesa un poco más compacto */
    .hamburger-btn { width: 38px; height: 38px; }
}

/* Evitar overflow horizontal global en móvil */
@media (max-width: 980px) {
    html, body { max-width: 100%; overflow-x: hidden; }
    img, canvas, svg { max-width: 100%; }
}


/* ============================================================
   AUDITORÍA RESPONSIVE — que ningún elemento se corte
   ============================================================ */
@media (max-width: 980px) {
    /* Tablas: cada una scrolleable en horizontal (no se cortan) */
    .view-panel table { display: block; width: 100%; max-width: 100%; overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; }
    table { min-width: 0; }

    /* Filas flex con varias columnas -> envuelven (p.ej. Terminal MES: form + preview) */
    .view-panel [style*="display: flex"],
    .view-panel [style*="display:flex"] { flex-wrap: wrap; }

    /* Rejillas KPI (histórico y de 3-4 columnas) -> 2 columnas en tablet/móvil */
    div:has(> .kpi-hist-card) { grid-template-columns: repeat(2, 1fr) !important; }
    .kpi-dashboard [style*="repeat(4"],
    .kpi-dashboard [style*="repeat(3"] { grid-template-columns: repeat(2, 1fr) !important; }

    /* Código / bloques pre -> envuelven, no desbordan */
    pre, code, .api-doc-section code, .api-doc-section pre { white-space: pre-wrap !important; word-break: break-word; max-width: 100%; box-sizing: border-box; }

    /* Formularios en grid de 2 columnas -> 1 columna */
    [style*="1fr 1fr"] { grid-template-columns: 1fr !important; }

    /* Ningún contenedor ni control supera el ancho de su caja */
    .content-area, .view-panel, .card, .glass-card, .form-section, .kpi-card, .kpi-hist-card { max-width: 100%; box-sizing: border-box; }
    input, select, textarea, .form-control, .tom-select, .ts-wrapper { max-width: 100%; box-sizing: border-box; }
    img, canvas, svg, video { max-width: 100%; height: auto; }
}

@media (max-width: 600px) {
    /* En móvil estrecho, KPIs y rejillas de 3-4 columnas -> 1 columna */
    div:has(> .kpi-hist-card) { grid-template-columns: 1fr !important; }
    .kpi-dashboard [style*="repeat(4"],
    .kpi-dashboard [style*="repeat(3"] { grid-template-columns: 1fr !important; }
}


/* ===== Auditoría responsive (2ª pasada): tiles, box-sizing y vistas huérfanas ===== */
@media (max-width: 980px) {
    /* Vistas fuera de .content-area (Config IA, Soporte, API) necesitan su propio padding */
    #ia-config-view, #soporte-view, #api-view { padding: 18px 14px; box-sizing: border-box; }

    /* box-sizing en tarjetas/tiles para que su padding no desborde el ancho */
    .iacfg-card, .iacfg-head, .dav-tile, .dav-card, .sop-card, .maq-card, .kpi-hist-card,
    .kpi-card, .glass-card, .card, .form-section { box-sizing: border-box; max-width: 100%; }

    /* Rejillas con muchas columnas fijas -> responsivas */
    :has(> .dav-tile) { grid-template-columns: repeat(3, 1fr) !important; }
    :has(> .dav-card) { grid-template-columns: 1fr !important; }

    /* Proveedores: filas/rejillas anchas -> apilan */
    #proveedores-view [style*="display: flex"],
    #proveedores-view [style*="display:flex"] { flex-wrap: wrap; }
    #proveedores-view [style*="grid-template-columns"] { grid-template-columns: 1fr !important; }
}

@media (max-width: 600px) {
    :has(> .dav-tile) { grid-template-columns: repeat(2, 1fr) !important; }
}


/* ===== Auditoría responsive (3ª pasada): que el contenido intrínseco no fuerce desbordes ===== */
@media (max-width: 980px) {
    /* Permite que ítems de flex/grid encojan por debajo de su min-content (evita desbordes) */
    .view-panel *, .ai-screen *, #ia-config-view *, #soporte-view *, #api-view * { min-width: 0; }

    /* Rejillas 1fr que puedan encoger de verdad */
    .iacfg-grid { grid-template-columns: minmax(0, 1fr) !important; }

    /* Campos de formulario a ancho completo */
    .view-panel input:not([type="checkbox"]):not([type="radio"]),
    .view-panel select, .view-panel textarea, .view-panel .form-control,
    #ia-config-view input:not([type="checkbox"]), #ia-config-view select, #ia-config-view textarea {
        width: 100%; max-width: 100%; box-sizing: border-box;
    }

    /* Botones nunca superan el ancho disponible */
    .view-panel .btn, .view-panel button, #ia-config-view button { max-width: 100%; }

    /* PNC formulario y otras rejillas inline -> 1 columna */
    #pnc-form-view [style*="grid-template-columns"] { grid-template-columns: 1fr !important; }
}

@media (max-width: 600px) {
    .iacfg-head { flex-direction: column; align-items: flex-start; gap: 12px; }
    .iacfg-switch { margin-left: 0; }
    .sop-hero { flex-direction: column; }
}

/* Indicador "Pensando…" del asistente */
.ai-typing { display: inline-flex; align-items: center; gap: 6px; color: var(--text-secondary,#64748b); font-size: .92rem; }
.ai-typing b { font-weight: 600; }
.ai-typing span { width: 6px; height: 6px; border-radius: 50%; background: #94a3b8; display: inline-block; animation: aiTyping 1.2s infinite ease-in-out; }
.ai-typing span:nth-child(3){ animation-delay: .15s; } .ai-typing span:nth-child(4){ animation-delay: .3s; }
@keyframes aiTyping { 0%,60%,100%{ transform: translateY(0); opacity:.4; } 30%{ transform: translateY(-4px); opacity:1; } }

/* Tablas y listas dentro de las respuestas del chat */
.ai-msg .ai-tbl { border-collapse: collapse; width: 100%; margin: 6px 0; font-size: .88rem; }
.ai-msg .ai-tbl th, .ai-msg .ai-tbl td { border: 1px solid var(--border-color,#e2e8f0); padding: 6px 10px; text-align: left; }
.ai-msg .ai-tbl th { background: #f1f5f9; font-weight: 700; }
.ai-msg .ai-ul { margin: 6px 0; padding-left: 20px; }
.ai-msg .ai-ul li { margin: 2px 0; }
.ai-msg code { background: rgba(15,23,42,.06); padding: 1px 5px; border-radius: 5px; font-size: .86em; }

/* ===== Scrollbars limpios ===== */
/* Ocultar la barra de scroll del menu lateral (sigue desplazandose con rueda/tactil) */
.sidebar .menu { scrollbar-width: none; -ms-overflow-style: none; }
.sidebar .menu::-webkit-scrollbar { width: 0; height: 0; display: none; }
/* Scrollbar principal fino y sutil */
.main-content::-webkit-scrollbar, .ai-msgs::-webkit-scrollbar { width: 9px; }
.main-content::-webkit-scrollbar-thumb, .ai-msgs::-webkit-scrollbar-thumb { background: rgba(15,23,42,.16); border-radius: 8px; border: 2px solid transparent; background-clip: content-box; }
.main-content::-webkit-scrollbar-thumb:hover, .ai-msgs::-webkit-scrollbar-thumb:hover { background: rgba(15,23,42,.3); background-clip: content-box; }
.main-content, .ai-msgs { scrollbar-width: thin; scrollbar-color: rgba(15,23,42,.2) transparent; }

/* ===== Chatbot: aspecto premium ===== */
#asistente-view { position: relative; }
.ai-screen { position: relative; }
/* Fondo sutil del area de chat */
.ai-msgs { padding: 14px 6px 20px; scroll-behavior: smooth; }
/* Entrada suave de cada mensaje */
.ai-row { animation: aiRowIn .32s cubic-bezier(.2,.7,.2,1) both; }
@keyframes aiRowIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
/* Burbujas mas premium */
.ai-msg { box-shadow: 0 6px 20px rgba(15,23,42,.07); }
.ai-msg.bot { background: #fff; border: 1px solid #eef1f6; }
.ai-msg.user { background: linear-gradient(135deg,#1d4ed8,#4f46e5); box-shadow: 0 8px 22px rgba(37,99,235,.28); }
/* Composer mas moderno (glass, mas alto, foco con halo) */
.ai-form { border-radius: 18px; padding: 8px 8px 8px 18px; border: 1.5px solid #e6e9f0; box-shadow: 0 8px 30px rgba(15,23,42,.08); backdrop-filter: blur(8px); background: rgba(255,255,255,.92); }
.ai-form:focus-within { border-color: #4f46e5; box-shadow: 0 0 0 4px rgba(79,70,229,.12), 0 8px 30px rgba(15,23,42,.1); }
.ai-form input { font-size: 1rem; padding: 10px 0; }
.ai-form button { width: 46px; height: 46px; border-radius: 14px; background: linear-gradient(135deg,#1d4ed8,#7c3aed); box-shadow: 0 6px 16px rgba(37,99,235,.35); }
.ai-form button:hover { transform: scale(1.06) rotate(-4deg); }
/* Chips de sugerencia mas vivos */
.ai-chip { background: #fff; border: 1px solid #dbe1ea; color: #334155; box-shadow: 0 2px 8px rgba(15,23,42,.05); transition: transform .12s, box-shadow .15s, border-color .15s; }
.ai-chip:hover { transform: translateY(-2px); border-color: #4f46e5; box-shadow: 0 6px 16px rgba(79,70,229,.16); background:#fff; }
/* Hero mas grande y con gradiente */
.ai-hero-ic { width: 84px; height: 84px; border-radius: 24px; }
.ai-hero h2 { background: linear-gradient(90deg,#1d4ed8,#7c3aed); -webkit-background-clip: text; background-clip: text; color: transparent; }
.ai-foot { letter-spacing: .2px; }

/* ===== Voz del asistente (micro, altavoz, auto-voz, avatar hablando) ===== */
/* Micrófono en el composer */
.ai-mic { width: 42px; height: 42px; flex-shrink: 0; border: none; border-radius: 12px; background: #eef2ff; color: #4f46e5; cursor: pointer; font-size: 1rem; transition: background .15s, transform .12s; }
.ai-mic:hover { background: #e0e7ff; transform: scale(1.05); }
.ai-mic.listening { background: #ef4444; color: #fff; animation: aiMicPulse 1.1s infinite; }
@keyframes aiMicPulse { 0%,100%{ box-shadow: 0 0 0 0 rgba(239,68,68,.5);} 60%{ box-shadow: 0 0 0 10px rgba(239,68,68,0);} }

/* Botón de leer en voz alta junto a la burbuja del bot */
.ai-msg-wrap { display: flex; align-items: flex-end; gap: 8px; max-width: 78%; }
.ai-row.user .ai-msg-wrap { max-width: 78%; }
.ai-msg-wrap .ai-msg { max-width: 100%; }
.ai-speak { flex-shrink: 0; width: 30px; height: 30px; border: 1px solid #e2e8f0; background: #fff; color: #64748b; border-radius: 50%; cursor: pointer; font-size: .78rem; opacity: 0; transition: opacity .15s, color .15s, border-color .15s, transform .12s; }
.ai-row.bot:hover .ai-speak { opacity: 1; }
.ai-speak:hover { color: #4f46e5; border-color: #c7d2fe; transform: scale(1.08); }
.ai-speak.on { opacity: 1; color: #4f46e5; border-color: #4f46e5; }

/* Check "leer respuestas en voz alta" */
.ai-foot-bar { display: flex; align-items: center; justify-content: center; gap: 14px; flex-wrap: wrap; margin-top: 10px; }
.ai-autospeak { display: inline-flex; align-items: center; gap: 7px; font-size: .78rem; color: var(--text-secondary,#64748b); cursor: pointer; user-select: none; }
.ai-autospeak input { display: none; }
.ai-autospeak span { width: 34px; height: 18px; border-radius: 999px; background: #cbd5e1; position: relative; transition: background .2s; flex-shrink: 0; }
.ai-autospeak span::after { content: ''; position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; transition: transform .2s; box-shadow: 0 1px 2px rgba(0,0,0,.3); }
.ai-autospeak input:checked + span { background: #4f46e5; }
.ai-autospeak input:checked + span::after { transform: translateX(16px); }

/* Avatar hablando: se amplía, brilla y la boca se mueve */
.ai-ava.speaking { animation: aiAvaSpeak 1.6s ease-in-out infinite; box-shadow: 0 0 0 4px rgba(79,70,229,.25), 0 10px 26px rgba(79,70,229,.4) !important; }
@keyframes aiAvaSpeak { 0%,100%{ transform: scale(1.12); } 50%{ transform: scale(1.2); } }
.ai-ava.speaking .ai-bot-mouth { animation: aiMouthTalk .28s ease-in-out infinite !important; }
@keyframes aiMouthTalk { 0%,100%{ height: 3px; width: 8px; } 50%{ height: 9px; width: 12px; border-radius: 0 0 9px 9px; } }
.ai-ava.speaking .ai-bot-eye { animation: none; }

/* ===== Cabeza parlante del asistente (overlay al hablar) ===== */
.ai-spk-overlay { position: fixed; inset: 0; z-index: 13000; display: flex; align-items: center; justify-content: center;
    background: radial-gradient(120% 120% at 50% 30%, rgba(11,18,32,.78), rgba(6,9,19,.92)); backdrop-filter: blur(10px); animation: aiSpkFade .3s ease; }
.ai-spk-overlay.hidden { display: none; }
@keyframes aiSpkFade { from { opacity: 0; } to { opacity: 1; } }
.ai-spk-close { position: fixed; top: 22px; right: 26px; width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,.2); background: rgba(255,255,255,.08); color: #fff; font-size: 1.15rem; cursor: pointer; transition: background .15s, transform .15s; }
.ai-spk-close:hover { background: rgba(255,255,255,.18); transform: rotate(90deg); }
.ai-spk-stage { position: relative; display: flex; flex-direction: column; align-items: center; gap: 26px; }

/* Halo y ondas de sonido */
.ai-spk-halo { position: absolute; top: -30px; left: 50%; transform: translateX(-50%); width: 340px; height: 340px; border-radius: 50%;
    background: radial-gradient(circle, rgba(99,102,241,.35), rgba(99,102,241,0) 60%); animation: aiSpkHalo 2.4s ease-in-out infinite; }
@keyframes aiSpkHalo { 0%,100% { transform: translateX(-50%) scale(1); opacity: .7; } 50% { transform: translateX(-50%) scale(1.15); opacity: 1; } }
.ai-spk-waves { position: absolute; top: 90px; left: 50%; transform: translateX(-50%); width: 260px; height: 120px; pointer-events: none; }
.ai-spk-waves span { position: absolute; top: 0; left: 50%; width: 220px; height: 220px; margin-left: -110px; border-radius: 50%; border: 2px solid rgba(129,140,248,.5); opacity: 0; animation: aiSpkWave 2.2s ease-out infinite; }
.ai-spk-waves span:nth-child(2) { animation-delay: .7s; } .ai-spk-waves span:nth-child(3) { animation-delay: 1.4s; }
@keyframes aiSpkWave { 0% { transform: scale(.5); opacity: .6; } 100% { transform: scale(1.5); opacity: 0; } }

/* Cabeza que se ladea */
.ai-spk-head { position: relative; width: 220px; height: 190px; border-radius: 46px;
    background: linear-gradient(145deg, #4f46e5, #1d4ed8); box-shadow: 0 30px 70px rgba(37,99,235,.5), inset 0 -10px 30px rgba(0,0,0,.18);
    transform-origin: 50% 90%; animation: aiSpkTilt 3s ease-in-out infinite; }
@keyframes aiSpkTilt { 0%,100% { transform: rotate(-5deg) translateY(0); } 50% { transform: rotate(5deg) translateY(-6px); } }
.ai-spk-antenna { position: absolute; top: -26px; left: 50%; transform: translateX(-50%); width: 5px; height: 26px; background: rgba(255,255,255,.85); border-radius: 3px; }
.ai-spk-antenna::after { content: ''; position: absolute; top: -14px; left: 50%; transform: translateX(-50%); width: 16px; height: 16px; border-radius: 50%; background: #7dd3fc; box-shadow: 0 0 16px #38bdf8; animation: aiSpkLed 1.6s ease-in-out infinite; }
@keyframes aiSpkLed { 0%,100% { opacity: 1; transform: translateX(-50%) scale(1); } 50% { opacity: .5; transform: translateX(-50%) scale(.8); } }
.ai-spk-ear { position: absolute; top: 68px; width: 22px; height: 54px; border-radius: 8px; background: linear-gradient(180deg,#6366f1,#4338ca); }
.ai-spk-ear-l { left: -16px; } .ai-spk-ear-r { right: -16px; }
.ai-spk-face { position: absolute; inset: 22px; border-radius: 34px; background: rgba(255,255,255,.1); box-shadow: inset 0 0 0 3px rgba(255,255,255,.4); overflow: hidden; }
.ai-spk-eyes { position: absolute; top: 40px; left: 0; right: 0; display: flex; justify-content: center; gap: 46px; }
.ai-spk-eye { width: 30px; height: 30px; border-radius: 50%; background: #fff; position: relative; animation: aiSpkBlink 4.5s infinite; }
.ai-spk-eye::after { content: ''; position: absolute; top: 8px; left: 8px; width: 14px; height: 14px; border-radius: 50%; background: #1e3a8a; animation: aiSpkLook 6s ease-in-out infinite; }
@keyframes aiSpkBlink { 0%,93%,100% { transform: scaleY(1); } 96% { transform: scaleY(.1); } }
@keyframes aiSpkLook { 0%,40%,100% { transform: translateX(0); } 55%,75% { transform: translateX(5px); } }
.ai-spk-cheek { position: absolute; bottom: 42px; width: 20px; height: 12px; border-radius: 50%; background: rgba(253,164,175,.7); filter: blur(1px); }
.ai-spk-cheek-l { left: 24px; } .ai-spk-cheek-r { right: 24px; }
/* Boca: por defecto sonrisa; al hablar se abre/cierra rápido y varía */
.ai-spk-mouth { position: absolute; bottom: 26px; left: 50%; transform: translateX(-50%); width: 54px; height: 10px; background: #0f172a; border-radius: 6px; transition: height .06s ease, width .06s ease, border-radius .06s; }
.ai-spk-overlay.talking .ai-spk-mouth { animation: aiSpkTalk .26s ease-in-out infinite; }
@keyframes aiSpkTalk { 0%,100% { height: 8px; width: 40px; border-radius: 6px; } 50% { height: 34px; width: 52px; border-radius: 26px; } }

.ai-spk-caption { max-width: 620px; text-align: center; color: #e8edf6; font-size: 1.05rem; line-height: 1.5; min-height: 1.5em; padding: 0 20px; }
.ai-spk-stopbtn { display: inline-flex; align-items: center; gap: 9px; padding: 12px 26px; border-radius: 999px; border: none; cursor: pointer;
    background: linear-gradient(90deg,#ef4444,#dc2626); color: #fff; font-weight: 700; font-size: .95rem; box-shadow: 0 10px 26px rgba(239,68,68,.4); transition: transform .15s; }
.ai-spk-stopbtn:hover { transform: translateY(-2px); }

@media (max-width: 600px) {
    .ai-spk-head { width: 170px; height: 150px; }
    .ai-spk-halo { width: 250px; height: 250px; }
    .ai-spk-caption { font-size: .95rem; }
}

/* Selector de voz del asistente */
.ai-voice-pick { display: inline-flex; align-items: center; gap: 6px; font-size: .78rem; color: var(--text-secondary,#64748b); }
.ai-voice-pick i { color: #4f46e5; }
.ai-voice-pick select { max-width: 200px; font-size: .78rem; padding: 4px 8px; border: 1px solid #e2e8f0; border-radius: 8px; background: #fff; color: #334155; cursor: pointer; }
.ai-voice-pick select:focus { outline: none; border-color: #4f46e5; }

/* ===== Chatbot de SOPORTE (flotante, abajo-izquierda) ===== */
.sopw { position: fixed; right: 20px; bottom: 20px; z-index: 11500; }
.sopw.hidden { display: none; }
/* El botón INICIO del MES va a pantalla completa al fondo; si el asistente flotante
   (.sopw, z 11500) coincide encima, capturaba el clic ("no me deja pincharlo"). Lo
   ponemos por ENCIMA para que el operario siempre pueda arrancar la tarea, y dejamos
   hueco inferior para que no queden pisados visualmente. */
#section-start { position: relative; z-index: 11600; scroll-margin-bottom: 90px; }
.sopw-fab { width: 56px; height: 56px; border-radius: 50%; border: none; cursor: pointer; color: #fff;
    background: linear-gradient(135deg,#0B3C73,#1d4ed8); box-shadow: 0 10px 26px rgba(11,60,115,.42); font-size: 1.3rem;
    transition: transform .15s, box-shadow .15s; }
.sopw-fab:hover { transform: translateY(-2px) scale(1.05); box-shadow: 0 14px 32px rgba(11,60,115,.55); }
.sopw-panel { position: absolute; right: 0; bottom: 70px; width: 340px; max-width: calc(100vw - 40px); height: 460px; max-height: calc(100vh - 120px);
    background: #fff; border-radius: 18px; box-shadow: 0 24px 60px rgba(15,23,42,.28); display: flex; flex-direction: column; overflow: hidden;
    border: 1px solid var(--border-color,#e6e9f0); animation: sopwIn .2s ease; }
.sopw-panel.hidden { display: none; }
@keyframes sopwIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
.sopw-head { display: flex; align-items: center; gap: 10px; padding: 12px 14px; color: #fff; background: linear-gradient(135deg,#0B3C73,#1d4ed8); }
.sopw-head-ic { width: 34px; height: 34px; border-radius: 10px; background: rgba(255,255,255,.18); display: flex; align-items: center; justify-content: center; font-size: 1rem; }
.sopw-head-txt { display: flex; flex-direction: column; line-height: 1.15; flex: 1; }
.sopw-head-txt b { font-size: .92rem; } .sopw-head-txt span { font-size: .72rem; opacity: .85; }
.sopw-close { background: none; border: none; color: #fff; font-size: 1.05rem; cursor: pointer; opacity: .9; }
.sopw-close:hover { opacity: 1; }
.sopw-msgs { flex: 1; overflow-y: auto; padding: 14px; display: flex; flex-direction: column; gap: 10px; background: #f8fafc; }
.sopw-msg { padding: 9px 12px; border-radius: 13px; font-size: .88rem; line-height: 1.45; max-width: 88%; }
.sopw-msg.bot { background: #fff; border: 1px solid #eef1f6; color: #1e293b; align-self: flex-start; border-top-left-radius: 4px; box-shadow: 0 2px 8px rgba(15,23,42,.05); }
.sopw-msg.user { background: linear-gradient(135deg,#0B3C73,#1d4ed8); color: #fff; align-self: flex-end; border-top-right-radius: 4px; }
.sopw-msg b { font-weight: 700; }
.sopw-quick { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 12px 8px; background: #f8fafc; }
.sopw-quick button { font-size: .74rem; border: 1px solid #dbe1ea; background: #fff; color: #334155; border-radius: 999px; padding: 5px 10px; cursor: pointer; transition: background .12s, border-color .12s; }
.sopw-quick button:hover { border-color: #1d4ed8; background: #eef2ff; }
.sopw-form { display: flex; gap: 8px; padding: 10px; border-top: 1px solid var(--border-color,#eef1f6); background: #fff; }
.sopw-form input { flex: 1; border: 1.5px solid #e2e8f0; border-radius: 12px; padding: 9px 12px; font-size: .9rem; outline: none; }
.sopw-form input:focus { border-color: #1d4ed8; }
.sopw-form button { width: 40px; border: none; border-radius: 12px; background: linear-gradient(135deg,#0B3C73,#1d4ed8); color: #fff; cursor: pointer; }
@media (max-width: 980px) {
    .sopw { right: 14px; bottom: 76px; }   /* subir para no chocar con barras inferiores */
    .sopw-panel { width: calc(100vw - 28px); }
}

/* Badge de jornada/turno en Supervisión */
.sup-jornada { display: inline-block; font-size: 0.68rem; font-weight: 700; padding: 1px 7px; border-radius: 999px; margin-top: 2px; }
.sup-jornada.rotativo { background: #dbeafe; color: #1d4ed8; }
.sup-jornada.partido { background: #fef3c7; color: #92610a; }

/* ===== Autocontrol por plano interactivo (#28) ===== */
.autoc-mark {
    position: absolute;
    transform: translate(-50%, -50%);
    min-width: 26px; height: 26px; padding: 0 6px;
    display: flex; align-items: center; justify-content: center;
    background: #003a68; color: #fff;
    border: 2px solid #fff; border-radius: 999px;
    font-size: 0.72rem; font-weight: 800; line-height: 1;
    box-shadow: 0 2px 6px rgba(0,0,0,.35);
    cursor: pointer; transition: transform .12s ease, background .12s ease;
    z-index: 2;
}
.autoc-mark:hover { background: #00305a; transform: translate(-50%, -50%) scale(1.18); z-index: 3; }
.autoc-mark.editable { cursor: grab; background: #1d4ed8; }
.autoc-mark.editable:active { cursor: grabbing; }
.autoc-pop {
    position: fixed; z-index: 9999;
    min-width: 210px; max-width: 280px;
    background: var(--card-bg, #fff); color: var(--text, #0f172a);
    border: 1px solid var(--border, #e2e8f0); border-radius: 12px;
    box-shadow: 0 12px 34px rgba(0,0,0,.22); padding: 12px 14px;
}
.autoc-pop.hidden { display: none; }
.autoc-pop-x {
    position: absolute; top: 6px; right: 6px;
    background: transparent; border: none; color: var(--text-muted, #64748b);
    cursor: pointer; font-size: .95rem; padding: 4px;
}
.autoc-pop-n { font-size: .72rem; font-weight: 800; color: #003a68; letter-spacing: .04em; text-transform: uppercase; }
.autoc-pop-par { font-size: .95rem; font-weight: 700; margin: 2px 0 8px; }
.autoc-pop-tbl { width: 100%; border-collapse: collapse; font-size: .82rem; }
.autoc-pop-tbl td { padding: 3px 0; border-top: 1px solid var(--border, #eef2f7); }
.autoc-pop-tbl td:first-child { color: var(--text-muted, #64748b); }
.autoc-pop-tbl td:last-child { text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; }

/* Badge de operación en máquina gemela (autocontrol/MES) */
.op-gemela { display:inline-block; margin-left:6px; font-size:0.66rem; font-weight:800;
    padding:1px 7px; border-radius:999px; background:#e0f2fe; color:#0369a1; vertical-align:middle; }

/* ===== MES multi-tarea: tira de tareas activas del operario ===== */
.mes-strip { background:#f0fdf4; border:1px solid #bbf7d0; border-radius:10px; padding:8px 10px; margin-bottom:12px; }
.mes-strip.hidden { display:none; }
.mes-strip-tit { font-size:0.72rem; font-weight:800; color:#15803d; text-transform:uppercase; letter-spacing:.03em; margin-bottom:6px; }
.mes-strip-chips { display:flex; flex-wrap:wrap; gap:8px; }
.mes-chip { display:flex; flex-direction:column; align-items:flex-start; gap:1px; background:#fff; border:1.5px solid #d1fae5;
    border-radius:9px; padding:6px 12px; cursor:pointer; min-width:120px; transition:border-color .12s, box-shadow .12s; }
.mes-chip:hover { border-color:#16a34a; }
.mes-chip.on { border-color:#16a34a; box-shadow:0 0 0 3px rgba(22,163,74,.15); background:#f0fdf4; }
.mes-chip-maq { font-weight:800; font-size:0.82rem; color:#0B3C73; }
.mes-chip-of { font-size:0.72rem; color:#475569; }
.mes-chip-t { font-size:0.72rem; font-weight:700; color:#16a34a; font-variant-numeric:tabular-nums; }
.mes-chip.add { flex-direction:row; align-items:center; gap:6px; justify-content:center; background:#eff6ff; border-color:#bfdbfe; color:#1d4ed8; font-weight:700; font-size:0.8rem; }
.mes-chip.add:hover { border-color:#1d4ed8; }

/* #14 Nuevo vs Afilado: en pantallas estrechas, donut y evolución apilados */
@media (max-width: 760px) {
    .afi-charts { grid-template-columns: 1fr !important; }
}

/* ================= CRM Comercial ================= */
.crm-nav-badge { background:#dc2626; color:#fff; font-size:0.62rem; font-weight:800; border-radius:10px; padding:1px 6px; margin-left:6px; }
.crm-tab { background:none; border:none; border-bottom:2px solid transparent; padding:8px 14px; font-size:0.86rem; font-weight:600; color:var(--text-secondary); cursor:pointer; display:flex; align-items:center; gap:6px; }
.crm-tab.active { color:var(--primary-blue,#0B3C73); border-bottom-color:var(--primary-blue,#0B3C73); }
.crm-kpi-row { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; }
.crm-kpi { background:var(--bg-card,#fff); border:1px solid var(--border-color,#e2e8f0); border-radius:12px; padding:14px 16px; }
.crm-kpi .k-val { font-size:1.5rem; font-weight:800; color:var(--primary-blue,#0B3C73); line-height:1.1; }
.crm-kpi .k-lbl { font-size:0.72rem; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.02em; margin-top:2px; }
.crm-kpi .k-sub { font-size:0.72rem; color:var(--text-secondary); margin-top:4px; }
/* Kanban */
.crm-kanban { display:flex; gap:12px; overflow-x:auto; padding-bottom:8px; align-items:flex-start; }
.crm-col { flex:0 0 260px; background:var(--bg-main,#f1f5f9); border-radius:12px; padding:8px; min-height:120px; }
.crm-col.dragover { outline:2px dashed var(--primary-blue,#0B3C73); outline-offset:-2px; }
.crm-col-head { display:flex; align-items:center; justify-content:space-between; padding:4px 6px 8px; font-size:0.78rem; font-weight:800; text-transform:uppercase; color:var(--text-secondary); }
.crm-col-head .c-val { font-weight:700; color:var(--primary-blue,#0B3C73); }
.crm-op-card { background:var(--bg-card,#fff); border:1px solid var(--border-color,#e2e8f0); border-left:4px solid #0B3C73; border-radius:9px; padding:10px; margin-bottom:8px; cursor:grab; box-shadow:0 1px 3px rgba(0,0,0,.06); }
.crm-op-card:hover { box-shadow:0 3px 10px rgba(0,0,0,.12); }
.crm-op-card.dragging { opacity:.5; }
.crm-op-card .o-tit { font-weight:700; font-size:0.85rem; }
.crm-op-card .o-cli { font-size:0.75rem; color:var(--text-secondary); }
.crm-op-card .o-val { font-weight:800; color:#16a34a; font-size:0.82rem; }
/* Agenda */
.crm-ag-item { display:flex; align-items:center; gap:10px; padding:8px 6px; border-top:1px solid var(--border-color,#eef2f7); }
.crm-ag-item:first-child { border-top:none; }
.crm-ag-ic { width:30px; height:30px; border-radius:8px; display:flex; align-items:center; justify-content:center; color:#fff; font-size:0.8rem; flex-shrink:0; }
.crm-ag-tit { font-size:0.83rem; font-weight:600; }
.crm-ag-sub { font-size:0.72rem; color:var(--text-secondary); }
.crm-badge { font-size:0.66rem; font-weight:700; padding:2px 8px; border-radius:10px; }
.crm-table tbody tr { border-top:1px solid var(--border-color,#eef2f7); cursor:pointer; }
.crm-table tbody tr:hover { background:var(--bg-main,#f8fafc); }
.crm-field { margin-bottom:12px; }
.crm-field label { display:block; font-size:0.76rem; font-weight:700; color:var(--text-secondary); margin-bottom:4px; }
.crm-field input, .crm-field select, .crm-field textarea { width:100%; padding:8px 10px; border:1px solid var(--border-color,#e2e8f0); border-radius:8px; font-size:0.88rem; background:var(--bg-main,#fff); color:var(--text-primary,#0f172a); }
.crm-timeline-item { border-left:2px solid var(--border-color,#e2e8f0); padding:0 0 14px 14px; position:relative; }
.crm-timeline-item::before { content:''; position:absolute; left:-6px; top:2px; width:10px; height:10px; border-radius:50%; background:var(--primary-blue,#0B3C73); }
@media (max-width:820px){ .crm-panel-grid{ grid-template-columns:1fr !important; } }

/* ===== CRM premium ===== */
.crm-hero { position:relative; border-radius:16px; overflow:hidden; color:#fff; padding:22px 24px; box-shadow:0 10px 30px rgba(11,60,115,.25); }
.crm-hero-bg { position:absolute; inset:0; background:linear-gradient(120deg,#0B3C73 0%,#1e5aa8 45%,#0891b2 100%); z-index:0; }
.crm-hero-bg::after { content:''; position:absolute; inset:0; background:radial-gradient(circle at 85% 20%, rgba(255,255,255,.18), transparent 40%), radial-gradient(circle at 20% 90%, rgba(255,255,255,.10), transparent 35%); }
.crm-hero-content { position:relative; z-index:1; display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:14px; }
/* Fondo claro y texto OSCURO: el valor seleccionado se ve siempre (antes salía blanco/invisible). */
.crm-hero-select { background:#fff; color:#0f172a; border:1px solid rgba(255,255,255,.5); border-radius:9px; padding:8px 12px; font-size:0.82rem; cursor:pointer; flex:0 0 auto; min-width:170px; max-width:240px; }
.crm-hero-select option { color:#0f172a; background:#fff; }
/* Acordeón del editor de Familias / Referencias: plegado por defecto, se despliega al pinchar. */
.cfg-collapsed .cfg-body { display:none; }
.cfg-toggle:hover { color:var(--primary-blue,#0B3C73); }
/* Feed de imputaciones: en pantallas estrechas (barra lateral colapsada) vuelve a la esquina. */
@media (max-width: 900px) { #imput-feed { left: 16px !important; } }
.crm-hero-btn { background:rgba(255,255,255,.15); color:#fff; border:1px solid rgba(255,255,255,.3); border-radius:9px; padding:8px 14px; font-size:0.82rem; font-weight:600; cursor:pointer; transition:background .15s, transform .15s; display:inline-flex; align-items:center; gap:6px; }
.crm-hero-btn:hover { background:rgba(255,255,255,.28); transform:translateY(-1px); }
.crm-hero-btn.primary { background:#fff; color:#0B3C73; }
.crm-hero-btn.icon { padding:8px 11px; }
.crm-card-title { font-weight:700; margin-bottom:10px; font-size:0.9rem; display:flex; align-items:center; gap:7px; }
.crm-kpi { position:relative; overflow:hidden; transition:transform .15s, box-shadow .15s; }
.crm-kpi:hover { transform:translateY(-2px); box-shadow:0 8px 22px rgba(0,0,0,.10); }
.crm-kpi::before { content:''; position:absolute; left:0; top:0; bottom:0; width:4px; background:var(--primary-blue,#0B3C73); }
/* Kanban premium */
.crm-op-card { transition:transform .12s, box-shadow .12s; position:relative; }
.crm-op-card:hover { transform:translateY(-2px); }
.crm-tag-chip { display:inline-block; font-size:0.62rem; font-weight:700; padding:1px 7px; border-radius:10px; margin:2px 3px 0 0; }
.crm-prio { color:#f59e0b; font-size:0.7rem; letter-spacing:-1px; }
.crm-avatar { width:22px; height:22px; border-radius:50%; background:linear-gradient(135deg,#0B3C73,#0891b2); color:#fff; font-size:0.62rem; font-weight:800; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; }
.crm-lista-row:hover { background:var(--bg-main,#f8fafc); cursor:pointer; }
/* Colores de etiqueta de Odoo (paleta índice) */
.otag-0{background:#f1f5f9;color:#475569}.otag-1{background:#fee2e2;color:#b91c1c}.otag-2{background:#ffedd5;color:#c2410c}.otag-3{background:#fef9c3;color:#a16207}.otag-4{background:#dcfce7;color:#15803d}.otag-5{background:#cffafe;color:#0e7490}.otag-6{background:#dbeafe;color:#1d4ed8}.otag-7{background:#ede9fe;color:#6d28d9}.otag-8{background:#fce7f3;color:#be185d}.otag-9{background:#f3e8ff;color:#7e22ce}.otag-10{background:#e0e7ff;color:#4338ca}.otag-11{background:#d1fae5;color:#047857}

/* ===== CRM calendario + IA + avisos ===== */
.crm-calendar { display:grid; grid-template-columns:repeat(7,1fr); gap:6px; }
.crm-cal-dow { font-size:0.7rem; font-weight:700; text-transform:uppercase; color:var(--text-secondary); text-align:center; padding:4px 0; }
.crm-cal-day { min-height:82px; border:1px solid var(--border-color,#e2e8f0); border-radius:8px; padding:5px; background:var(--bg-card,#fff); overflow:hidden; }
.crm-cal-day.otro { opacity:.45; }
.crm-cal-day.hoy { border:2px solid #0B3C73; }
.crm-cal-num { font-size:0.72rem; font-weight:700; color:var(--text-secondary); }
.crm-cal-ev { font-size:0.66rem; padding:2px 5px; border-radius:5px; margin-top:3px; cursor:pointer; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:#fff; }
.crm-ia-box { background:linear-gradient(135deg,#0B3C73,#0891b2); color:#fff; border-radius:10px; padding:12px 14px; margin-top:10px; font-size:0.85rem; line-height:1.5; white-space:pre-wrap; }
.crm-rec-dot { display:inline-block; width:9px; height:9px; border-radius:50%; background:#dc2626; animation:crmpulse 1s infinite; }
@keyframes crmpulse { 0%,100%{opacity:1} 50%{opacity:.3} }
.crm-reminder { position:fixed; right:20px; bottom:20px; z-index:12050; width:340px; max-width:calc(100vw - 40px); background:var(--bg-card,#fff); border-radius:14px; box-shadow:0 18px 50px rgba(0,0,0,.28); border:1px solid var(--border-color,#e2e8f0); overflow:hidden; animation:crmslide .3s ease; }
@keyframes crmslide { from{transform:translateY(20px);opacity:0} to{transform:translateY(0);opacity:1} }
.crm-reminder-head { background:linear-gradient(120deg,#b45309,#f59e0b); color:#fff; padding:10px 14px; font-weight:700; display:flex; align-items:center; justify-content:space-between; }

/* ===== CRM Copilot IA (futurista) ===== */
.crm-tab-ai { position:relative; }
.crm-tab-ai::after { content:'IA'; font-size:0.55rem; font-weight:800; background:linear-gradient(90deg,#8b5cf6,#0891b2); color:#fff; padding:1px 5px; border-radius:8px; margin-left:5px; vertical-align:middle; }
.crm-ai-hero { position:relative; overflow:hidden; border-radius:18px; padding:20px 22px; color:#e8f0ff; background:radial-gradient(120% 140% at 10% 10%, #10204a 0%, #0a0f24 55%, #060814 100%); box-shadow:0 14px 40px rgba(6,8,20,.5); border:1px solid rgba(139,92,246,.25); }
.crm-ai-orbs { position:absolute; inset:0; z-index:0; background:radial-gradient(circle at 85% 15%, rgba(139,92,246,.35), transparent 30%), radial-gradient(circle at 15% 90%, rgba(8,145,178,.30), transparent 32%); animation:crmorbs 8s ease-in-out infinite alternate; }
@keyframes crmorbs { from{transform:translateY(0) scale(1)} to{transform:translateY(-8px) scale(1.05)} }
.crm-ai-cta { background:linear-gradient(90deg,#8b5cf6,#0891b2); color:#fff; border:none; border-radius:10px; padding:10px 18px; font-weight:700; font-size:0.86rem; cursor:pointer; box-shadow:0 6px 18px rgba(139,92,246,.4); transition:transform .15s, box-shadow .15s; }
.crm-ai-cta:hover { transform:translateY(-2px); box-shadow:0 10px 26px rgba(139,92,246,.55); }
.crm-ai-cta:disabled { opacity:.6; cursor:wait; }
.crm-ai-briefing { margin-top:14px; font-size:0.9rem; line-height:1.6; white-space:pre-wrap; min-height:8px; }
.crm-ai-briefing.empty { opacity:.6; font-style:italic; }
.crm-ai-cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:16px; margin-top:16px; }
.crm-ai-card { border-radius:16px; padding:16px; background:var(--bg-card,#fff); border:1px solid var(--border-color,#e2e8f0); position:relative; overflow:hidden; transition:transform .15s, box-shadow .15s; }
.crm-ai-card:hover { transform:translateY(-3px); box-shadow:0 12px 30px rgba(0,0,0,.12); }
.crm-ai-card::before { content:''; position:absolute; left:0; top:0; right:0; height:4px; background:var(--ac,#8b5cf6); }
.crm-ai-card h4 { margin:0 0 4px; font-size:0.98rem; display:flex; align-items:center; gap:8px; }
.crm-ai-card .cnt { font-size:0.72rem; color:var(--text-secondary); margin-bottom:10px; }
.crm-ai-item { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:7px 0; border-top:1px solid var(--border-color,#eef2f7); font-size:0.83rem; }
.crm-ai-item:first-of-type { border-top:none; }
.crm-ai-item .ai-b { background:var(--ac,#8b5cf6); color:#fff; border:none; border-radius:7px; padding:4px 9px; font-size:0.72rem; font-weight:600; cursor:pointer; white-space:nowrap; }
.crm-ai-item .ai-b:hover { filter:brightness(1.1); }
.crm-ai-money { font-weight:800; color:#16a34a; }
.crm-ai-typing::after { content:'▋'; animation:crmblink 1s steps(2) infinite; }
@keyframes crmblink { 50%{opacity:0} }

/* CRM filtros clientes + stats ficha */
.crm-cli-f { padding:8px 10px; border:1px solid var(--border-color,#e2e8f0); border-radius:8px; font-size:0.82rem; background:var(--bg-main,#fff); color:var(--text-primary,#0f172a); cursor:pointer; }
.crm-stat { background:var(--bg-main,#f8fafc); border-radius:10px; padding:8px 10px; text-align:center; }
.crm-stat .v { font-size:1.05rem; font-weight:800; color:var(--primary-blue,#0B3C73); }
.crm-stat .l { font-size:0.66rem; color:var(--text-secondary); text-transform:uppercase; }
.crm-cal-day.clickable { cursor:pointer; transition:background .12s; }
.crm-cal-day.clickable:hover { background:var(--bg-main,#eef4ff); }
.crm-cal-add { float:right; font-size:0.7rem; color:#2563eb; opacity:0; transition:opacity .12s; }
.crm-cal-day.clickable:hover .crm-cal-add { opacity:1; }

/* CRM planning / mapa / resúmenes */
.crm-plan-r,.crm-mapa-r { padding:6px 14px; border:none; background:transparent; color:var(--text-secondary); font-size:0.82rem; font-weight:600; cursor:pointer; border-right:1px solid var(--border-color,#e2e8f0); }
.crm-plan-r:last-child,.crm-mapa-r:last-child { border-right:none; }
.crm-plan-r.active,.crm-mapa-r.active { background:var(--primary-blue,#0B3C73); color:#fff; }
.crm-plan-grid { display:grid; gap:6px; min-width:640px; }
.crm-plan-cell { border:1px solid var(--border-color,#eef2f7); border-radius:8px; padding:6px; min-height:60px; background:var(--bg-card,#fff); }
.crm-plan-head { font-size:0.72rem; font-weight:800; text-transform:uppercase; color:var(--text-secondary); padding:4px; text-align:center; }
.crm-plan-com { font-weight:700; font-size:0.82rem; padding:8px 6px; display:flex; align-items:center; gap:6px; }
.crm-plan-ev { font-size:0.66rem; padding:3px 6px; border-radius:5px; margin-bottom:3px; color:#fff; cursor:pointer; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.crm-res-feed { display:grid; grid-template-columns:repeat(auto-fill,minmax(340px,1fr)); gap:12px; }
.crm-res-card { display:flex; gap:12px; background:var(--bg-card,#fff); border:1px solid var(--border-color,#e2e8f0); border-radius:14px; padding:14px; cursor:pointer; transition:box-shadow .12s, transform .12s; box-shadow:0 1px 3px rgba(0,0,0,.05); }
.crm-res-card:hover { box-shadow:0 8px 24px rgba(0,0,0,.12); transform:translateY(-2px); }
.crm-res-avatar { width:40px; height:40px; border-radius:50%; color:#fff; font-size:0.85rem; font-weight:800; display:flex; align-items:center; justify-content:center; flex-shrink:0; box-shadow:0 2px 6px rgba(0,0,0,.15); }
.crm-res-head { display:flex; justify-content:space-between; align-items:center; gap:8px; margin-bottom:2px; }
.crm-res-autor { font-weight:700; font-size:0.9rem; }
.crm-res-badge { font-size:0.64rem; font-weight:700; padding:1px 7px; border-radius:10px; white-space:nowrap; }
.crm-res-cli2 { font-size:0.75rem; color:var(--primary-blue,#0B3C73); font-weight:600; margin-bottom:6px; }
.crm-res-meta { font-size:0.72rem; color:var(--text-secondary); white-space:nowrap; }
.crm-res-txt { font-size:0.84rem; line-height:1.5; white-space:pre-wrap; color:var(--text-primary,#0f172a); }
.leaflet-popup-content { font-size:0.82rem; }
.alert-item { transition:background .12s; }
.alert-item:hover { background:var(--bg-main,#f1f5f9); }
.alert-x { background:none; border:none; color:#94a3b8; cursor:pointer; font-size:0.95rem; padding:2px 6px; border-radius:6px; }
.alert-x:hover { color:#dc2626; background:#fee2e2; }

/* Mejora Continua (3C/8D) */
.mc-sec { font-size:.95rem; font-weight:700; color:var(--text-primary,#1e293b); margin:16px 0 8px; padding-bottom:5px; border-bottom:2px solid var(--border,#e5e7eb); }
.mc-sec i { color:#7c3aed; margin-right:4px; }
#mc-modal .form-group { margin-bottom:8px; }
#mc-modal .form-group label { font-size:.78rem; font-weight:600; color:var(--text-secondary,#64748b); display:block; margin-bottom:2px; }
#mc-acciones-tbody td { padding:3px; vertical-align:top; }

/* OEE en tiempo real: selector de periodo */
.oee-per { font-size:.72rem; font-weight:700; padding:3px 9px; border:1px solid var(--border-color,#e2e8f0); background:#fff; color:#475569; border-radius:7px; cursor:pointer; }
.oee-per.active { background:#0B3C73; color:#fff; border-color:#0B3C73; }
.oee-per:hover { border-color:#0B3C73; }

/* Ficha de cliente: presets de periodo */
.fcli-preset { font-size:.72rem; font-weight:700; padding:3px 9px; border:1px solid var(--border-color,#e2e8f0); background:#fff; color:#475569; border-radius:7px; cursor:pointer; }
.fcli-preset.active { background:#0B3C73; color:#fff; border-color:#0B3C73; }
.fcli-preset:hover { border-color:#0B3C73; }

/* Botón verde (fichaje entrada) */
.btn-success { background:#16a34a; color:#fff; border:none; }
.btn-success:hover { background:#15803d; }

/* Scorecard proveedores: pestañas del detalle */
.sc-tab { font-size:.8rem; font-weight:700; padding:6px 14px; border:1px solid var(--border-color,#e2e8f0); background:#fff; color:#475569; border-radius:8px; cursor:pointer; }
.sc-tab.active { background:#0B3C73; color:#fff; border-color:#0B3C73; }

/* ===== Fichaje PRO ===== */
.fich-hero { position:relative; overflow:hidden; border-radius:22px; padding:30px 20px 26px; text-align:center; margin:18px 0; color:#fff !important;
    background:linear-gradient(135deg,#0B3C73 0%,#155ba0 55%,#1d6fb8 100%); box-shadow:0 14px 40px rgba(11,60,115,.28); }
.fich-hero.working { background:linear-gradient(135deg,#0f7a3d 0%,#16a34a 55%,#22c55e 100%); box-shadow:0 14px 40px rgba(22,163,74,.30); }
.fich-hero-bg { display:none; }
.fich-hero .fich-nombre, .fich-hero .fich-estado, .fich-hero .fich-timer, .fich-hero .fich-sync, .fich-hero .fich-ring i, .fich-hero .fich-geo { color:#fff; }
.fich-sync { position:absolute; top:12px; right:14px; font-size:.66rem; font-weight:700; opacity:.85; background:rgba(255,255,255,.16); padding:3px 9px; border-radius:999px; }
.fich-ring { width:118px; height:118px; margin:0 auto 14px; border-radius:50%; display:flex; align-items:center; justify-content:center; flex-direction:column;
    background:rgba(255,255,255,.12); border:3px solid rgba(255,255,255,.5); }
.fich-hero.working .fich-ring { border-color:#fff; animation:fichPulse 2s ease-in-out infinite; }
@keyframes fichPulse { 0%,100%{ box-shadow:0 0 0 0 rgba(255,255,255,.5);} 50%{ box-shadow:0 0 0 14px rgba(255,255,255,0);} }
.fich-ring i { font-size:2.8rem; opacity:.92; }
.fich-timer { font-size:1.7rem; font-weight:800; letter-spacing:1px; font-variant-numeric:tabular-nums; }
.fich-nombre { font-size:1.25rem; font-weight:800; letter-spacing:.3px; }
.fich-estado { font-size:.9rem; opacity:.92; margin-top:2px; margin-bottom:16px; }
.fich-btn { font-size:1.12rem; font-weight:800; padding:14px 32px; border-radius:14px; min-width:230px; border:none; cursor:pointer;
    background:#fff; color:#0B3C73; box-shadow:0 6px 18px rgba(0,0,0,.18); transition:transform .12s ease, box-shadow .12s ease; }
.fich-btn:hover { transform:translateY(-2px); box-shadow:0 10px 24px rgba(0,0,0,.24); }
.fich-btn:active { transform:translateY(0); }
.fich-btn.entrada { background:#fff; color:#16a34a; }
.fich-btn.salida { background:#fff; color:#dc2626; }
.fich-btn:disabled { opacity:.6; cursor:default; }
.fich-geo { font-size:.72rem; opacity:.8; margin-top:12px; min-height:14px; }
.fich-stat { display:flex; align-items:center; gap:12px; padding:14px 16px; background:var(--card-bg,#fff); border:1px solid var(--border-color,#eef2f7); border-radius:14px; }
.fich-stat-ic { width:42px; height:42px; border-radius:11px; display:flex; align-items:center; justify-content:center; font-size:1.1rem; flex:0 0 auto; }
.fich-stat-v { font-size:1.5rem; font-weight:800; color:var(--text-primary,#1e293b); line-height:1; }
.fich-stat-l { font-size:.72rem; color:var(--text-secondary,#64748b); text-transform:uppercase; letter-spacing:.3px; margin-top:3px; }
