:root{
  --ds-primary:#087f78;--ds-primary-dark:#05645f;--ds-slate:#263642;--ds-bg:#f2f6f7;--ds-border:#dce5e7;--ds-muted:#687b83;--ds-shadow:10px 10px 24px #d9e0e2,-10px -10px 24px #fff;
  --sidebar-width:248px;
  --sidebar-pad-y:24px;
  --sidebar-pad-x:18px;
  --sidebar-nav-size:.95rem;
  --sidebar-sub-size:.88rem;
  --sidebar-pad-item-y:12px;
  --sidebar-pad-item-x:14px;
  --sidebar-gap:13px;
  --sidebar-item-margin:4px;
  --sidebar-brand-pad-bottom:26px;
  --sidebar-brand-product:.95rem;
  --sidebar-brand-company:.62rem;
  --sidebar-logo:42px;
  --content-pad-y:36px;
  --content-pad-x:36px;
  --topbar-height:68px;
  --heading-size:1.8rem;
  --heading-sub-size:.95rem;
  --heading-mb:28px;
  --card-pad:24px;
  --card-radius:18px;
  --toolbar-mb:18px;
  --table-font:.9rem;
  --table-th-size:.75rem;
  --table-cell-y:.65rem;
  --table-cell-x:.75rem;
}
html{font-size:clamp(12.5px,.22vw + 11px,15.5px)}
*{box-sizing:border-box}body{margin:0;background:var(--ds-bg);color:var(--ds-slate);font-family:Inter,system-ui,-apple-system,"Segoe UI",sans-serif}.btn-primary{--bs-btn-bg:var(--ds-primary);--bs-btn-border-color:var(--ds-primary);--bs-btn-hover-bg:var(--ds-primary-dark);--bs-btn-hover-border-color:var(--ds-primary-dark)}.app-shell{min-height:100vh;display:grid;grid-template-columns:var(--sidebar-width) 1fr}.sidebar{position:sticky;top:0;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;background:#1f303a;color:#dce7ea;padding:var(--sidebar-pad-y) var(--sidebar-pad-x);display:flex;flex-direction:column;overflow:hidden;font-size:var(--sidebar-nav-size)}.sidebar .brand{flex-shrink:0}.sidebar nav{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding-right:2px;scrollbar-width:thin;scrollbar-color:#4a6570 transparent;display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch}.sidebar nav::-webkit-scrollbar{width:6px}.sidebar nav::-webkit-scrollbar-thumb{background:#4a6570;border-radius:8px}.sidebar nav>a,.sidebar nav>.nav-group{width:100%;flex:0 0 auto;min-width:0}.brand{display:flex;gap:12px;align-items:center;padding:10px 12px var(--sidebar-brand-pad-bottom);color:#fff;text-decoration:none;font-weight:800;letter-spacing:.12em}.brand-mark{display:flex;align-items:center;justify-content:center;flex-shrink:0}.brand-icon{color:#35b8ae;font-size:1.5rem}.brand-logo{width:var(--sidebar-logo);height:var(--sidebar-logo);object-fit:contain;border-radius:10px;background:#fff;padding:4px}.brand-text{display:flex;flex-direction:column;line-height:1.15;min-width:0}.brand-product{font-size:var(--sidebar-brand-product);letter-spacing:.14em}.brand-company{font-size:var(--sidebar-brand-company);font-weight:600;letter-spacing:.04em;color:#9eb4ba;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px}.sidebar nav a{display:flex;align-items:center;gap:var(--sidebar-gap);color:#b9c9cd;text-decoration:none;padding:var(--sidebar-pad-item-y) var(--sidebar-pad-item-x);border-radius:10px;margin:var(--sidebar-item-margin) 0;font-size:var(--sidebar-nav-size)}.sidebar nav a:hover{background:#2a414d;color:#fff}.main{min-width:0}.topbar{height:var(--topbar-height);display:flex;align-items:center;padding:0 var(--content-pad-x);border-bottom:1px solid var(--ds-border);background:rgba(255,255,255,.72);backdrop-filter:blur(12px)}.content{padding:var(--content-pad-y) var(--content-pad-x);max-width:1600px;margin:auto}.page-heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:var(--heading-mb)}.page-heading h1,.form-card h1{font-size:var(--heading-size);margin:.2rem 0}.page-heading p{color:var(--ds-muted);margin:0;font-size:var(--heading-sub-size)}.eyebrow{color:var(--ds-primary);font-size:.72rem;font-weight:800;letter-spacing:.14em}.surface-card,.kpi-card{background:#f7fafb;border:1px solid rgba(255,255,255,.8);border-radius:var(--card-radius);box-shadow:var(--ds-shadow)}.surface-card{padding:var(--card-pad)}.kpi-card{display:flex;align-items:center;gap:18px;padding:24px}.kpi-card>i{font-size:1.6rem;color:var(--ds-primary);background:#dcf1ef;padding:13px;border-radius:14px}.kpi-card strong{display:block;font-size:1.7rem}.kpi-card span{color:var(--ds-muted)}.toolbar{display:flex;margin-bottom:var(--toolbar-mb)}.search-box{max-width:430px}.table{font-size:var(--table-font)}.table>:not(caption)>*>*{padding:var(--table-cell-y) var(--table-cell-x)}.table thead th{color:var(--ds-muted);font-size:var(--table-th-size);text-transform:uppercase;letter-spacing:.06em;border-bottom-color:var(--ds-border)}.table tbody tr{cursor:pointer}.table .cell-clip{max-width:11rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table .cell-clip-lg{max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state{text-align:center;color:var(--ds-muted);padding:48px}.drawer-wide{width:min(460px,100vw)!important}.form-card{max-width:960px;margin:auto}.form-card-header,.form-actions{display:flex;justify-content:space-between;align-items:center}.form-card-header{margin-bottom:24px}.form-actions{border-top:1px solid var(--ds-border);margin:28px -24px -24px;padding:20px 24px}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at top,#e3f4f2,var(--ds-bg) 52%)}.login-card{width:min(430px,100%);padding:42px;background:#f7fafb;border-radius:24px;box-shadow:var(--ds-shadow)}.login-card h1{font-size:1.55rem;margin-top:20px}.login-mark{display:grid;place-items:center;width:58px;height:58px;border-radius:17px;background:var(--ds-primary);color:#fff;font-size:1.7rem}.login-brand{display:flex;align-items:center;gap:16px;margin-bottom:8px}.login-logo{width:58px;height:58px;object-fit:contain;border-radius:14px;background:#fff;padding:6px;box-shadow:var(--ds-shadow)}.login-brand-text h1{margin:0;font-size:1.45rem}.login-company{margin:.25rem 0 0;color:var(--ds-muted);font-size:.92rem}.logo-panel{min-height:260px}.logo-preview{display:grid;place-items:center;min-height:140px}.logo-preview-img{max-width:180px;max-height:120px;object-fit:contain}.logo-placeholder{width:120px;height:120px;border-radius:18px;background:#eef4f5;color:var(--ds-muted);display:grid;place-items:center;font-size:2.4rem}.entity-search{position:relative}.entity-search-results{position:absolute;z-index:20;left:0;right:0;max-height:240px;overflow:auto;margin-top:4px;border-radius:12px;box-shadow:var(--ds-shadow)}.entity-search-selected .badge{display:inline-flex;align-items:center;gap:6px;padding:.55rem .75rem;font-weight:500}
.nav-group{margin-top:8px;width:100%}.nav-group-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;background:transparent;border:0;color:#b9c9cd;padding:var(--sidebar-pad-item-y) var(--sidebar-pad-item-x);border-radius:10px;text-align:left;font:inherit;font-size:var(--sidebar-nav-size);cursor:pointer}.nav-group-toggle:hover,.nav-group.open .nav-group-toggle{background:#2a414d;color:#fff}.nav-group-toggle span{display:flex;align-items:center;gap:var(--sidebar-gap);min-width:0}.nav-chevron{font-size:.75rem;transition:transform .2s;flex-shrink:0}.nav-group.open .nav-chevron{transform:rotate(180deg)}.nav-submenu{display:none;padding-left:12px;margin-bottom:4px}.nav-group.open .nav-submenu{display:block}.nav-submenu a{font-size:var(--sidebar-sub-size);padding:calc(var(--sidebar-pad-item-y) - 2px) var(--sidebar-pad-item-x) calc(var(--sidebar-pad-item-y) - 2px) 28px}.catalog-card .catalog-icon{font-size:1.4rem;color:var(--ds-primary);background:#dcf1ef;padding:12px;border-radius:12px;flex-shrink:0}.catalog-card:hover .surface-card{transform:translateY(-2px);transition:transform .15s}
/* Densidad compacta en notebooks / 1366×768 */
@media (max-width:1400px),(max-height:820px){
  :root{
    --sidebar-width:228px;
    --sidebar-pad-y:16px;
    --sidebar-pad-x:14px;
    --sidebar-nav-size:.88rem;
    --sidebar-sub-size:.82rem;
    --sidebar-pad-item-y:9px;
    --sidebar-pad-item-x:12px;
    --sidebar-gap:10px;
    --sidebar-item-margin:2px;
    --sidebar-brand-pad-bottom:16px;
    --sidebar-brand-product:.88rem;
    --sidebar-brand-company:.58rem;
    --sidebar-logo:36px;
    --content-pad-y:18px;
    --content-pad-x:20px;
    --topbar-height:52px;
    --heading-size:1.35rem;
    --heading-sub-size:.85rem;
    --heading-mb:14px;
    --card-pad:14px 16px;
    --card-radius:14px;
    --toolbar-mb:10px;
    --table-font:.8rem;
    --table-th-size:.65rem;
    --table-cell-y:.38rem;
    --table-cell-x:.45rem;
  }
  .form-control,.form-select,.input-group-text{
    font-size:.82rem;
    min-height:calc(1.4em + .55rem + 2px);
    padding:.28rem .55rem;
  }
  .btn{font-size:.82rem;padding:.35rem .7rem}
  .estado-badge{font-size:.72rem;padding:.28em .5em}
  .table .cell-clip{max-width:8.5rem}
  .table .cell-clip-lg{max-width:11rem}
  .empty-state{padding:28px}
}
@media (max-width:1200px){
  :root{
    --sidebar-width:212px;
    --sidebar-pad-y:12px;
    --sidebar-pad-x:12px;
    --sidebar-nav-size:.82rem;
    --sidebar-sub-size:.78rem;
    --sidebar-pad-item-y:8px;
    --sidebar-pad-item-x:10px;
    --sidebar-gap:8px;
    --sidebar-brand-pad-bottom:12px;
    --sidebar-logo:32px;
    --content-pad-y:14px;
    --content-pad-x:14px;
    --heading-size:1.25rem;
    --table-font:.76rem;
    --table-cell-y:.32rem;
    --table-cell-x:.4rem;
  }
  .brand{gap:8px;padding:6px 8px var(--sidebar-brand-pad-bottom)}
  .brand-company{max-width:140px}
  .table .cell-clip{max-width:7rem}
  .table .cell-clip-lg{max-width:9rem}
}
@media(max-width:991px){.app-shell{grid-template-columns:1fr}.sidebar{display:none}.content{padding:24px}.topbar{padding:0 20px}.page-heading{align-items:flex-start;flex-direction:column}}
/* Estados operativos — paleta operativa (legacy Viaris) */
:root{
  --estado-pendiente-bg:#f7c6d0;--estado-pendiente-fg:#5c2a3a;
  --estado-coordinando-bg:#e8a8b8;--estado-coordinando-fg:#4a2030;
  --estado-por-confirmar-bg:#f0d5c4;--estado-por-confirmar-fg:#5a3a28;
  --estado-confirmado-bg:#ffffff;--estado-confirmado-fg:#263642;--estado-confirmado-border:#c5d0d4;
  --estado-realizado-bg:#d9e4e8;--estado-realizado-fg:#2f3f48;
  --estado-negativo-bg:#f5e06a;--estado-negativo-fg:#5c4a00;
  --estado-anulado-bg:#6b1e2e;--estado-anulado-fg:#fff;
  --estado-incidencia-bg:#2e8b57;--estado-incidencia-fg:#fff;
  --estado-neutro-bg:#eef2f4;--estado-neutro-fg:#3d4f58;--estado-neutro-border:#d0d8dc;
  --plataforma-bg:#87CEEB;--plataforma-fg:#0A4A6E
}
.estado-badge{font-weight:600;border:1px solid transparent;letter-spacing:.01em}
.estado-badge--pendiente{background:var(--estado-pendiente-bg)!important;color:var(--estado-pendiente-fg)!important}
.estado-badge--coordinando{background:var(--estado-coordinando-bg)!important;color:var(--estado-coordinando-fg)!important}
.estado-badge--por-confirmar{background:var(--estado-por-confirmar-bg)!important;color:var(--estado-por-confirmar-fg)!important}
.estado-badge--confirmado{background:var(--estado-confirmado-bg)!important;color:var(--estado-confirmado-fg)!important;border-color:var(--estado-confirmado-border)!important}
.estado-badge--realizado{background:var(--estado-realizado-bg)!important;color:var(--estado-realizado-fg)!important}
.estado-badge--negativo{background:var(--estado-negativo-bg)!important;color:var(--estado-negativo-fg)!important}
.estado-badge--anulado{background:var(--estado-anulado-bg)!important;color:var(--estado-anulado-fg)!important}
.estado-badge--incidencia{background:var(--estado-incidencia-bg)!important;color:var(--estado-incidencia-fg)!important}
.estado-badge--neutro{background:var(--estado-neutro-bg)!important;color:var(--estado-neutro-fg)!important;border-color:var(--estado-neutro-border,#d0d8dc)!important}
.badge-plataforma{display:inline-block;font-weight:600;letter-spacing:.01em;background:var(--plataforma-bg)!important;color:var(--plataforma-fg)!important;border:1px solid transparent}
.badge-plataforma-wrap{display:inline-flex;flex-wrap:wrap;gap:.35rem;align-items:center;vertical-align:middle}
.kpi-card.kpi-tone-pendiente{border-color:var(--estado-pendiente-bg)}.kpi-card.kpi-tone-pendiente>i{background:var(--estado-pendiente-bg);color:var(--estado-pendiente-fg)}
.kpi-card.kpi-tone-coordinando{border-color:var(--estado-coordinando-bg)}.kpi-card.kpi-tone-coordinando>i{background:var(--estado-coordinando-bg);color:var(--estado-coordinando-fg)}
.kpi-card.kpi-tone-confirmado{border-color:var(--estado-confirmado-border)}.kpi-card.kpi-tone-confirmado>i{background:#fff;color:var(--estado-confirmado-fg);border:1px solid var(--estado-confirmado-border)}
.kpi-card.kpi-tone-negativo{border-color:var(--estado-negativo-bg)}.kpi-card.kpi-tone-negativo>i{background:var(--estado-negativo-bg);color:var(--estado-negativo-fg)}
.kpi-card.kpi-tone-incidencia{border-color:var(--estado-incidencia-bg)}.kpi-card.kpi-tone-incidencia>i{background:var(--estado-incidencia-bg);color:var(--estado-incidencia-fg)}
#torreKpis .kpi-card{gap:10px;padding:10px 12px;border-radius:12px;cursor:pointer;transition:box-shadow .15s,transform .15s,background .15s;user-select:none}
#torreKpis .kpi-card>i{font-size:1rem;padding:8px;border-radius:10px}
#torreKpis .kpi-card strong{font-size:1.15rem;line-height:1.1}
#torreKpis .kpi-card span{font-size:.78rem;line-height:1.2}
#torreKpis .kpi-card:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(31,48,58,.08)}
#torreKpis .kpi-card.is-active{background:#fff;box-shadow:0 0 0 2px var(--ds-primary);border-color:var(--ds-primary)}
#torreKpis .kpi-card:focus-visible{outline:2px solid var(--ds-primary);outline-offset:2px}
#tablaTorre .torre-estado-cell{white-space:nowrap;vertical-align:middle}
#tablaTorre .torre-estado-cell .estado-badge{font-size:.78rem;padding:.45em .7em}

/* Versión del sistema (sutil, debajo de la empresa) */
.brand-version,
.login-version{
  display:block;
  margin-top:.15rem;
  font-size:.68rem;
  font-weight:500;
  letter-spacing:.04em;
  line-height:1.2;
  opacity:.45;
  color:inherit;
}
.login-version{
  margin:0;
  color:#6c7a80;
  opacity:.7;
}
body.login-page{
  min-height:100vh;
  min-height:100dvh;
  display:block;
  padding:0;
  background:#f2f6f7;
}
.login-shell{
  width:100%;
  min-height:100vh;
  min-height:100dvh;
  margin:0;
  display:grid;
  grid-template-columns:minmax(280px,420px) minmax(0,1fr);
}
.login-hero{
  position:relative;
  overflow:hidden;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  justify-content:flex-start;
  padding:clamp(22px,4vh,36px) clamp(20px,3vw,32px);
  color:#e8f3f2;
  background:linear-gradient(165deg,#1f303a 0%,#123f45 46%,#087f78 100%);
}
.login-hero-glow{
  position:absolute;
  width:460px;
  height:460px;
  right:-90px;
  bottom:-140px;
  border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.18),transparent 68%);
  pointer-events:none;
}
.login-hero-pattern{
  position:absolute;
  inset:0;
  pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 800 900'%3E%3Cg fill='none' stroke='%23ffffff' stroke-linecap='round'%3E%3Cpath d='M-20 640C140 590 210 470 360 450s250-40 470-150' stroke-opacity='.16' stroke-width='2'/%3E%3Cpath d='M-40 500C120 470 220 340 390 330s230 40 460-40' stroke-opacity='.12' stroke-width='1.5'/%3E%3Cpath d='M40 760H210l42-62 48 108 46-78H520' stroke-opacity='.22' stroke-width='2.2'/%3E%3C/g%3E%3Cg fill='%23ffffff'%3E%3Ccircle cx='360' cy='450' r='5' fill-opacity='.35'/%3E%3Ccircle cx='168' cy='612' r='4' fill-opacity='.22'/%3E%3Ccircle cx='520' cy='300' r='3.5' fill-opacity='.2'/%3E%3C/g%3E%3C/svg%3E");
  background-size:cover;
  background-position:center bottom;
}
.login-hero-content{position:relative;z-index:1;max-width:360px}
.login-hero .login-brand{margin-bottom:0;gap:12px}
.login-hero .login-mark,
.login-hero .login-logo{
  width:46px;
  height:46px;
  border-radius:14px;
  font-size:1.35rem;
}
.login-hero .login-mark{
  background:rgba(255,255,255,.14);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.28);
}
.login-hero .login-brand-text h1{
  color:#fff;
  font-size:1.35rem;
  letter-spacing:-.02em;
  line-height:1.15;
}
.login-hero .login-company{color:rgba(255,255,255,.74)}
.login-hero .login-version{color:rgba(255,255,255,.55);opacity:1}
.login-tagline{
  margin:14px 0 0;
  max-width:22rem;
  font-size:.95rem;
  line-height:1.4;
  color:rgba(255,255,255,.9);
}
.login-points{
  list-style:none;
  margin:18px 0 0;
  padding:0;
  display:grid;
  gap:10px;
}
.login-points li{
  display:flex;
  align-items:center;
  gap:10px;
  color:rgba(232,243,242,.9);
  font-size:.84rem;
  line-height:1.3;
}
.login-points i{
  width:28px;
  height:28px;
  flex:0 0 28px;
  font-size:.85rem;
  display:grid;
  place-items:center;
  border-radius:10px;
  background:rgba(255,255,255,.12);
  color:#fff;
}
.login-points strong{color:#fff;font-weight:650;margin-right:.25rem}
.login-stage{
  display:grid;
  place-items:center;
  padding:32px 24px;
  background:radial-gradient(circle at 18% 0%,#e4f3f1,transparent 46%),var(--ds-bg);
}
.login-stage .login-card{width:min(420px,100%)}
.login-card h2{margin:0 0 .35rem;font-size:1.5rem;letter-spacing:-.02em}
.login-lead{margin:0 0 1.25rem;color:var(--ds-muted)}
.studio-credit{
  position:relative;
  z-index:1;
  display:flex;
  align-items:center;
  gap:8px;
  margin:0;
  padding-top:16px;
  color:rgba(255,255,255,.62);
  font-size:.72rem;
  font-weight:500;
  letter-spacing:.01em;
  line-height:1.2;
}
.studio-credit strong{font-weight:650;color:rgba(255,255,255,.86)}
.studio-credit img{width:28px;height:28px;flex:0 0 28px;display:block}
.login-hero .studio-credit{margin-top:auto}
.sidebar .studio-credit{flex-shrink:0;margin-top:auto;padding:14px 2px 2px}
@media (max-width:900px){
  .login-shell{grid-template-columns:1fr}
  .login-hero{align-items:flex-start;padding:20px 18px 16px}
  .login-hero-content{max-width:none}
  .login-hero .login-brand-text h1{font-size:1.2rem}
  .login-tagline{margin-top:8px;font-size:.9rem}
  .login-points{display:none}
  .login-hero .studio-credit{margin-top:12px;padding-top:0}
  .login-stage{place-items:start center;padding:22px 16px 36px}
}
.bases-cercanas-list{margin:0;padding:0;list-style:none}
.bases-cercanas-item{display:flex;align-items:center;gap:.5rem;padding:.2rem 0;border-bottom:1px solid #e8eef0}
.bases-cercanas-item:last-child{border-bottom:0}
.bases-cercanas-loc{flex:1;min-width:0;overflow:visible;white-space:normal}
.bases-cercanas-km{white-space:nowrap;color:#6c7a80;font-variant-numeric:tabular-nums}
.bases-cercanas-item{cursor:pointer;border-radius:6px;padding:.25rem .4rem}
.bases-cercanas-item:hover{background:#f3f7f8}
.bases-cercanas-item.is-selected{background:#e4f1f4;box-shadow:inset 0 0 0 1px var(--ds-primary)}
.tarifa-row .tarifa-importe{flex:0 0 7.6rem;width:7.6rem;text-align:right;font-variant-numeric:tabular-nums}
.form-card,.surface-card{overflow:visible}
.form-card .row > [class*="col-"]{min-width:0}
.entity-search{position:relative;min-width:0;max-width:100%}
.entity-search-results{position:absolute;left:0;right:0;z-index:30;max-width:100%;max-height:240px;overflow-x:hidden;overflow-y:auto;word-break:break-word}
.entity-search-item{white-space:normal;overflow-wrap:anywhere}
.entity-search-selected{min-width:0;max-width:100%}
.entity-search-selected .badge{display:inline-flex;align-items:flex-start;gap:.35rem;max-width:100%;white-space:normal;text-align:left;overflow-wrap:anywhere;line-height:1.35}
