:root{--jabalia-primary:#198754;--jabalia-accent:#0d6efd;--jabalia-surface:#fff;--jabalia-bg:#f5f7f9;--jabalia-radius:.65rem}body{background:var(--jabalia-bg)}.brand-mark{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#198754,#75b798);color:#fff;font-weight:800}.brand-mark-lg{width:64px;height:64px;font-size:2rem}.card{border-radius:var(--jabalia-radius)}.login-bg{background:radial-gradient(circle at 15% 20%,#d1e7dd 0,transparent 35%),linear-gradient(135deg,#f8f9fa,#e9ecef)}.media-thumb{height:160px;object-fit:cover}.timeline{border-left:2px solid #dee2e6;padding-left:1rem}.timeline-item{position:relative;padding:0 0 1rem .5rem}.timeline-item:before{content:"";position:absolute;left:-1.4rem;top:.35rem;width:.65rem;height:.65rem;border-radius:50%;background:var(--jabalia-primary)}.field-shell{max-width:920px;margin:auto}.field-shell .form-control-lg,.field-shell .form-select-lg,.field-shell .btn-lg{min-height:56px}@media (max-width:767px){.container-fluid{padding-left:.75rem!important;padding-right:.75rem!important}.field-shell h2{font-size:1.5rem}.sb-topnav .navbar-brand{width:auto}.sb-sidenav .nav-link{padding-top:.85rem;padding-bottom:.85rem}}@media(min-width:992px){body.jabalia-sidebar-mini #layoutSidenav #layoutSidenav_nav{width:72px}body.jabalia-sidebar-mini #layoutSidenav #layoutSidenav_content{margin-left:-153px}body.jabalia-sidebar-mini .sb-sidenav .menu-text,body.jabalia-sidebar-mini .sb-sidenav .sb-sidenav-collapse-arrow,body.jabalia-sidebar-mini .sb-sidenav-menu-heading,body.jabalia-sidebar-mini .sb-sidenav-footer{display:none}body.jabalia-sidebar-mini .sb-sidenav .nav-link{justify-content:center}body.jabalia-sidebar-mini .sb-sidenav .sb-nav-link-icon{margin-right:0}.sb-sidenav{transition:width .2s}.sb-nav-fixed #layoutSidenav #layoutSidenav_nav{transition:width .2s}}

/* Theme tokens and accessibility */
.btn-success{--bs-btn-bg:var(--jabalia-primary);--bs-btn-border-color:var(--jabalia-primary);--bs-btn-hover-bg:color-mix(in srgb,var(--jabalia-primary) 86%,black);--bs-btn-hover-border-color:color-mix(in srgb,var(--jabalia-primary) 82%,black)}
.text-success{color:var(--jabalia-primary)!important}.border-success{border-color:var(--jabalia-primary)!important}.registry-table{min-width:760px}.registry-table td{max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.registry-editor{top:72px}.theme-high-contrast{--jabalia-bg:#fff}.theme-high-contrast .card,.theme-high-contrast .form-control,.theme-high-contrast .form-select{border-color:#111}.theme-high-contrast .text-muted{color:#343a40!important}.theme-high-contrast .sb-sidenav-dark{background:#000}.theme-high-contrast .sb-topnav{background:#000!important}
@media(min-width:992px){body.jabalia-sidebar-mini .navbar-brand{width:72px!important;justify-content:center;padding-left:0!important;padding-right:0!important}body.jabalia-sidebar-mini .navbar-brand .brand-text{display:none}body.jabalia-sidebar-mini #layoutSidenav_nav .collapse.show{display:none}}
@media(max-width:991.98px){.registry-editor{position:static!important}}

/* Dashboard productivo por etapas */
.dashboard-brand-card{background:linear-gradient(100deg,#ffffff 0%,#f5fbf7 70%,#e7f6ec 100%)}
.dashboard-logo{width:150px;max-height:112px;object-fit:contain;flex:0 0 auto}
.dashboard-kpis>.col-xl{min-width:180px}
.kpi-card .kpi-icon{width:42px;height:42px;border-radius:12px;display:inline-grid;place-items:center;font-size:1.15rem;flex:0 0 42px}
.chart-wrap{position:relative;height:300px}.chart-wrap.chart-lg{height:340px}
.gdp-formula{display:flex;align-items:center;justify-content:center;gap:12px;background:#eaf7ef;border:1px solid #ccebd8;border-radius:.65rem;padding:1rem;font-weight:700}.gdp-formula>span{font-size:1.25rem;color:var(--jabalia-primary)}.gdp-formula hr{margin:.2rem 0;border-color:#3f6850;opacity:.7}.gdp-formula div{text-align:center;font-size:.9rem}
.mini-stat{border:1px solid #e6e9ec;border-radius:.6rem;padding:.75rem;background:#fafbfc;height:100%}.mini-stat span{display:block;font-size:.78rem;color:#6c757d}.mini-stat strong{font-size:1.35rem}
.dashboard-stage-table th{white-space:nowrap;font-size:.8rem}.dashboard-stage-table td{font-size:.86rem}
@media(max-width:767.98px){.dashboard-logo{width:110px;max-height:84px}.chart-wrap,.chart-wrap.chart-lg{height:280px}.dashboard-brand-card .text-end{text-align:left!important}.dashboard-stage-table{min-width:980px}}

/* Panel RFID operativo */
.rfid-kpi-card .rfid-kpi-icon{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;font-size:1.15rem}
.rfid-live-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.rfid-pen{position:relative;border:2px solid #d9dee3;border-radius:.6rem;background:#fff;min-height:135px;padding:.75rem;overflow:hidden}.rfid-pen.has-reader{border-color:#9ec5fe}.rfid-pen .pen-code{font-weight:800;font-size:1rem}.rfid-pen .pen-stage{font-size:.76rem;color:#6c757d}.rfid-pen .pen-count{font-size:1.6rem;font-weight:800;color:#198754}.rfid-pen .reader-badge{position:absolute;right:.5rem;top:.5rem}.rfid-reader-dot{width:12px;height:12px;display:inline-block;border-radius:2px;background:#0d6efd;border:1px solid #084298}.rfid-animal-dots{display:flex;flex-wrap:wrap;gap:5px;margin-top:.45rem;min-height:18px}.rfid-animal-dot{width:10px;height:10px;border-radius:50%;background:#2fb344;display:inline-block}.rfid-animal-more{font-size:.72rem;color:#6c757d;line-height:10px}.rfid-reader-status{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:.3rem}.rfid-reader-status.online{background:#198754}.rfid-reader-status.delayed{background:#ffc107}.rfid-reader-status.offline{background:#dc3545}.rfid-reader-status.never{background:#adb5bd}
.rfid-legend{display:flex;flex-wrap:wrap;gap:1rem;font-size:.78rem;color:#6c757d}.rfid-access-placeholder{border:1px dashed #adb5bd;border-radius:.5rem;padding:.6rem;background:#f8f9fa;color:#6c757d;font-size:.78rem}

/* ===== Jabal-IA v4: navegación móvil, logo, módulos y notificaciones ===== */
.brand-logo-img{width:42px;height:42px;object-fit:contain;display:block;filter:drop-shadow(0 1px 1px rgba(255,255,255,.08))}
.sb-topnav .navbar-brand{overflow:hidden}
.sidebar-toggle-btn{position:relative;z-index:1060;color:#fff!important;font-size:1.05rem}
.module-disabled-link{width:100%;border:0;background:transparent;text-align:left;cursor:pointer;opacity:.92}
.module-disabled-link:hover{color:#fff;background:rgba(255,255,255,.06)}
.module-help-mark{margin-left:auto;color:#ffc107;font-size:1rem;display:inline-flex;align-items:center}
.module-disabled-big-icon,.settings-lock-icon{width:74px;height:74px;border-radius:50%;display:inline-grid;place-items:center;background:#fff3cd;color:#997404;font-size:2rem}
.settings-lock-icon{background:#eaf7ef;color:var(--jabalia-primary)}
.module-master-icon{width:38px;height:38px;border-radius:10px;display:inline-grid;place-items:center;background:#eaf7ef;color:var(--jabalia-primary);flex:0 0 38px}
.module-master-table .module-description-cell{min-width:280px;max-width:520px;color:#6c757d;font-size:.88rem}
.module-switch{width:2.7rem;height:1.35rem;cursor:pointer}
.notification-admin-message{max-width:420px}
.notification-offcanvas{width:min(440px,100vw)!important}
.notification-drawer-card,.notification-card{border-left:4px solid #0dcaf0!important;border-radius:.7rem;background:#fff;padding:1rem;box-shadow:0 .125rem .35rem rgba(0,0,0,.06)}
.notification-card{padding:0}
.notification-info{border-left-color:#0dcaf0!important}.notification-success{border-left-color:#198754!important}.notification-warning{border-left-color:#ffc107!important}.notification-danger{border-left-color:#dc3545!important}
.notification-icon{width:36px;height:36px;display:grid;place-items:center;border-radius:10px;background:#eef2f5;color:var(--jabalia-primary);flex:0 0 36px}
.notification-message{white-space:normal;overflow-wrap:anywhere}
.notification-period{font-size:.75rem;color:#6c757d}
.notification-mobile-strip{display:flex;align-items:center;gap:.65rem;border:1px solid #d7eadf;background:#f1fbf5;border-radius:.7rem;padding:.7rem .8rem;color:#153b27;box-shadow:0 .125rem .3rem rgba(0,0,0,.04)}
.notification-mobile-strip .notification-mobile-icon{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--jabalia-primary);color:#fff;flex:0 0 34px}
.notification-count-badge{font-size:.62rem}
.min-w-0{min-width:0}

/* El logo completo vive en la zona izquierda; no se presenta como bloque central del dashboard. */
.dashboard-brand-card{display:none!important}

@media(min-width:992px){
  body.jabalia-sidebar-mini .navbar-brand .brand-logo-img{width:40px;height:40px}
  body.jabalia-sidebar-mini .navbar-brand .brand-text{display:none}
}

@media(max-width:991.98px){
  /* StartBootstrap mantiene el sidenav fuera de pantalla por defecto; la clase toggled debe traerlo a 0. */
  body.sb-sidenav-toggled #layoutSidenav #layoutSidenav_nav{transform:translateX(0)!important}
  #layoutSidenav #layoutSidenav_nav{z-index:1040}
  .sb-topnav{z-index:1050}
  .sb-topnav .navbar-brand{width:120px!important;min-width:120px;padding-right:.35rem!important}
  .brand-logo-img{width:38px;height:38px}
  .sb-topnav .brand-text{font-size:.92rem;white-space:nowrap}
  .sidebar-toggle-btn{margin-right:.15rem!important}
  .field-top-button,.notification-top-button{min-width:36px;height:34px;padding:.25rem .45rem}
  .notification-offcanvas{width:100vw!important;max-width:100vw!important}
  .notification-drawer-card{padding:.85rem}
  .module-master-table{min-width:820px}
  .notification-admin-table{min-width:900px}
}

@media(max-width:420px){
  .sb-topnav .navbar-brand{width:86px!important;min-width:86px}
  .sb-topnav .brand-text{display:none}
  .brand-logo-img{width:40px;height:40px}
  .sb-topnav .dropdown{margin-right:.25rem!important}
  .sidebar-toggle-btn{padding-left:.4rem!important;padding-right:.4rem!important}
  .notification-mobile-strip{font-size:.9rem}
}

/* ===== Jabal-IA v5: hardening móvil, logo y acceso root ===== */
.brand-logo-img{
  width:46px!important;height:40px!important;max-width:46px!important;max-height:40px!important;
  object-fit:contain!important;display:block!important;flex:0 0 46px!important;pointer-events:none!important;
}
.sb-topnav .navbar-brand{width:170px;max-width:170px;min-width:0;flex:0 0 auto;position:relative;z-index:1101}
.sidebar-toggle-btn{flex:0 0 42px;min-width:42px;min-height:42px;display:inline-grid;place-items:center;position:relative;z-index:1110!important}
.footer-logo{object-fit:contain;flex:0 0 36px}
.login-card{overflow:hidden}.login-logo{object-fit:contain;display:inline-block}.login-credits{font-size:.82rem;line-height:1.55}
.mobile-sidenav-backdrop{display:none}

@media(max-width:991.98px){
  .sb-topnav{height:56px!important;min-height:56px;display:flex!important;align-items:center;flex-wrap:nowrap!important;overflow:visible!important;padding-left:.25rem;padding-right:.25rem;z-index:1120!important}
  .sb-topnav .navbar-brand{width:94px!important;max-width:94px!important;min-width:94px!important;height:52px;overflow:hidden!important;margin-right:auto!important;padding-top:0!important;padding-bottom:0!important}
  .brand-logo-img{width:44px!important;height:38px!important;max-width:44px!important;max-height:38px!important;flex-basis:44px!important}
  .sb-topnav .brand-text{display:none!important}
  .sidebar-toggle-btn{order:-2!important;margin:0 .15rem 0 0!important;padding:.35rem!important}
  .field-top-button,.notification-top-button{flex:0 0 36px!important;min-width:36px!important;width:36px!important;height:34px!important;margin-right:.35rem!important;padding:.25rem!important;display:inline-grid;place-items:center}
  .sb-topnav .dropdown{flex:0 0 auto;margin-right:.15rem!important}

  #layoutSidenav{display:block!important}
  #layoutSidenav #layoutSidenav_nav{
    position:fixed!important;left:0!important;top:56px!important;bottom:0!important;width:250px!important;height:calc(100vh - 56px)!important;
    transform:translateX(-102%)!important;transition:transform .2s ease!important;z-index:1100!important;visibility:visible!important;
  }
  #layoutSidenav #layoutSidenav_nav .sb-sidenav{height:100%!important;overflow-y:auto!important;overflow-x:hidden!important}
  body.sb-sidenav-toggled #layoutSidenav #layoutSidenav_nav{transform:translateX(0)!important}
  #layoutSidenav #layoutSidenav_content{margin-left:0!important;min-width:0!important;width:100%!important;position:relative!important;padding-top:56px!important}

  .mobile-sidenav-backdrop{position:fixed;left:0;right:0;top:56px;bottom:0;background:rgba(0,0,0,.42);z-index:1090;display:none}
  body.sb-sidenav-toggled .mobile-sidenav-backdrop{display:block}
  body.sb-sidenav-toggled{overflow:hidden}

  .jabalia-footer .container-fluid{padding-left:.75rem!important;padding-right:.75rem!important}
  .jabalia-footer .small{font-size:.72rem;line-height:1.45}
}

@media(max-width:420px){
  .sb-topnav .navbar-brand{width:54px!important;min-width:54px!important;max-width:54px!important}
  .brand-logo-img{width:42px!important;height:36px!important;max-width:42px!important;max-height:36px!important;flex-basis:42px!important}
  .sidebar-toggle-btn{min-width:40px!important;flex-basis:40px!important}
}

/* ===== Jabal-IA v6: corrección definitiva del layout móvil + PWA ===== */
html,body{max-width:100%;overflow-x:hidden}
.pwa-install-btn{display:none;position:fixed;right:1rem;bottom:calc(1rem + env(safe-area-inset-bottom));z-index:1140;border-radius:999px;box-shadow:0 .45rem 1.1rem rgba(0,0,0,.22);font-weight:700;align-items:center;gap:.5rem;padding:.7rem 1rem}
.pwa-install-btn.is-visible{display:inline-flex}
.pwa-install-btn i{font-size:1rem}
.pwa-help-icon{width:58px;height:58px;border-radius:50%;display:grid;place-items:center;background:#eaf7ef;color:var(--jabalia-primary);font-size:1.6rem;margin:0 auto 1rem}

@media(max-width:991.98px){
  /*
   * SB Admin aplica padding-left al contenido cuando body tiene sb-nav-fixed.
   * En V5 se neutralizó margin-left pero no ese padding; por eso el Dashboard
   * aparecía desplazado ~225 px. V6 resetea ambos y evita doble offset vertical.
   */
  body.sb-nav-fixed #layoutSidenav #layoutSidenav_content,
  #layoutSidenav #layoutSidenav_content{
    margin-left:0!important;
    padding-left:0!important;
    padding-top:0!important;
    left:0!important;
    width:100%!important;
    max-width:100vw!important;
    min-width:0!important;
    flex:1 1 100%!important;
    position:relative!important;
    top:56px!important;
  }
  #layoutSidenav{display:block!important;width:100%!important;max-width:100vw!important;min-width:0!important}
  #layoutSidenav_content main{width:100%!important;max-width:100vw!important;min-width:0!important}
  #layoutSidenav_content .container-fluid{width:100%!important;max-width:100vw!important;margin-left:0!important;margin-right:0!important}

  body.sb-nav-fixed #layoutSidenav #layoutSidenav_nav,
  #layoutSidenav #layoutSidenav_nav{
    position:fixed!important;
    left:0!important;
    top:56px!important;
    bottom:0!important;
    width:250px!important;
    height:calc(100dvh - 56px)!important;
    transform:translate3d(-252px,0,0)!important;
    transition:transform .2s ease!important;
    z-index:1130!important;
    visibility:visible!important;
    flex-basis:auto!important;
  }
  body.sb-nav-fixed #layoutSidenav #layoutSidenav_nav .sb-sidenav,
  #layoutSidenav #layoutSidenav_nav .sb-sidenav{
    padding-top:0!important;
    height:100%!important;
    max-height:calc(100dvh - 56px)!important;
    overflow-y:auto!important;
    overflow-x:hidden!important;
    overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
  }
  body.sb-sidenav-toggled #layoutSidenav #layoutSidenav_nav{transform:translate3d(0,0,0)!important}
  body.sb-sidenav-toggled #layoutSidenav #layoutSidenav_content:before{display:none!important;content:none!important}

  .mobile-sidenav-backdrop{top:56px!important;z-index:1125!important}
  body.sb-sidenav-toggled .mobile-sidenav-backdrop{display:block!important}
  body.sb-sidenav-toggled{overflow:hidden!important;touch-action:none}
  body.sb-sidenav-toggled #layoutSidenav_nav{touch-action:auto}

  .sb-topnav{z-index:1145!important}
  .sidebar-toggle-btn{z-index:1150!important;pointer-events:auto!important}

  .pwa-install-btn{max-width:calc(100vw - 2rem)}
}

@media(min-width:992px){
  .pwa-install-btn{display:none!important}
}

@media(max-width:420px){
  .pwa-install-btn{right:.75rem;bottom:calc(.75rem + env(safe-area-inset-bottom));padding:.65rem .9rem;font-size:.9rem}
}

/* V7 - dashboards por módulo / consultas CRUD */
.module-kpi-card{border:0}.module-kpi-icon{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;background:rgba(25,135,84,.12);color:var(--jabalia-primary);font-size:1.2rem;flex:0 0 auto}.demo-module-photo img{width:100%;height:150px;object-fit:cover}.farm-switch-menu{min-width:310px;max-height:65vh;overflow:auto}.farm-switch-menu .dropdown-item{white-space:normal}.registry-table td{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.registry-editor{scroll-margin-top:90px}@media(max-width:1199.98px){.registry-editor{position:static!important}.demo-module-photo img{height:120px}}@media(max-width:767.98px){.registry-table{font-size:.78rem}.registry-table td,.registry-table th{min-width:105px}.registry-table td:first-child,.registry-table th:first-child{min-width:55px}.module-kpi-card .card-body{padding:.85rem}.module-kpi-card .fs-4{font-size:1.15rem!important}.module-kpi-icon{width:38px;height:38px}.farm-switcher .dropdown-menu{position:fixed!important;left:8px!important;right:8px!important;top:62px!important;width:auto!important;transform:none!important;max-height:70vh}.demo-module-photo img{height:110px}}
.animal-profile-photo{height:260px;object-fit:cover}.animal-gallery-photo{width:100%;height:150px;object-fit:cover}@media(max-width:767.98px){.animal-profile-photo{height:220px}.animal-gallery-photo{height:120px}}
/* V7 - dashboards por módulo */
.module-volume-bars{max-height:390px;overflow:auto}
.module-volume-progress{height:.55rem;background:#eef2f1}
.module-volume-progress .progress-bar{background:linear-gradient(90deg,#198754,#20c997)}
@media(max-width:767.98px){.module-volume-bars{max-height:none}.module-kpi-card .fs-4{font-size:1.2rem!important}}

/* Jabal-IA 1.0.1 - publicidad opcional por cada opción del sistema */
/* Publicidad HTML5 aislada. Solo existe en DOM cuando el modo publicitario está activo. */
.option-ad-banner{width:100%;overflow:hidden;border-radius:.65rem;background:#fff;border:1px solid rgba(0,0,0,.08);box-shadow:0 .125rem .35rem rgba(0,0,0,.06);line-height:0}
.option-ad-banner-html5{container-type:inline-size;min-height:0}
.option-ad-banner-html5 .html5-ad-clickthrough{display:block;width:100%;text-decoration:none;line-height:0;cursor:pointer}
.jabalia-html5-ad-frame{display:block;width:100%;height:180px;min-height:50px;max-height:650px;border:0;background:transparent;overflow:hidden;transition:height .18s ease}
.jabalia-html5-ad-frame.is-clickthrough{pointer-events:none}
.html5-banner-editor{min-height:260px;resize:vertical;font-size:.82rem;line-height:1.45;tab-size:2}
.html5-ad-admin-preview{border:1px dashed #adb5bd;border-radius:.6rem;padding:.75rem;background:#f8f9fa}
.html5-ad-admin-preview iframe{display:block;width:100%;height:280px;border:1px solid #dee2e6;border-radius:.45rem;background:#fff}
.advertising-admin-table td{vertical-align:middle}
.advertising-settings-card{scroll-margin-top:72px}
@media(max-width:767.98px){
  .option-ad-banner{border-radius:.5rem;margin-left:0!important;margin-right:0!important}
  .jabalia-html5-ad-frame{height:140px;max-height:55vh}
  .html5-banner-editor{min-height:220px;font-size:.76rem}
  .html5-ad-admin-preview iframe{height:220px}
  .advertising-admin-table{font-size:.78rem}
}
