:root { --core-local-css-ready: 1; }

[hidden], .hidden { display: none !important; }

.modal-overlay,
.drawer-backdrop,
.sidebar-backdrop,
.core-sidebar-backdrop {
  position: fixed;
  inset: 0;
  z-index: 50;
}

.modal-overlay.active:not([hidden]),
.drawer-backdrop.active:not([hidden]),
.sidebar-backdrop.active:not([hidden]),
.core-sidebar-backdrop.active:not([hidden]),
.modal-overlay:not(.hidden):not([hidden]),
.drawer-backdrop:not(.hidden):not([hidden]),
.sidebar-backdrop:not(.hidden):not([hidden]),
.core-sidebar-backdrop:not(.hidden):not([hidden]) {
  display: flex !important;
}

@media (max-width: 768px) {
  .core-sidebar,
  #app-sidebar,
  aside[data-core-sidebar],
  aside[id*="sidebar"] {
    transform: translateX(-100%);
    opacity: 0;
    pointer-events: none;
  }

  .core-sidebar.translate-x-0,
  #app-sidebar.translate-x-0,
  #app-sidebar:not(.-translate-x-full),
  aside[data-core-sidebar].translate-x-0,
  aside[id*="sidebar"].translate-x-0 {
    transform: translateX(0);
    opacity: 1;
    pointer-events: auto;
  }
}

body {
  visibility: visible;
}

/* Shell de aplicacion con scroll interno: altura fija al viewport dinamico. */
.core-viewport-shell {
  height: 100vh;
  height: 100dvh;
  min-height: 0;
}

/* =========================================================================
   ZONA SEGURA GLOBAL (notch, isla dinamica, barra de gestos iOS/Android).
   Requiere <meta name="viewport" content="..., viewport-fit=cover">. En escritorio
   env() vale 0, por lo que el espaciado original de cada plantilla se conserva.
   ========================================================================= */
:root {
  --safe-top: env(safe-area-inset-top, 0px);
  --safe-right: env(safe-area-inset-right, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --safe-left: env(safe-area-inset-left, 0px);
  --header-padding-top: 8px;
}

/* Cabeceras: el padding original se expresa en variables y la zona segura se suma encima. */
.core-topbar,
[data-safe-header] {
  --header-padding-x: 1rem;
  padding-top: calc(env(safe-area-inset-top, 0px) + var(--header-padding-top, 8px));
  padding-left: max(var(--header-padding-x), env(safe-area-inset-left, 0px));
  padding-right: max(var(--header-padding-x), env(safe-area-inset-right, 0px));
}
.core-topbar.p-2, [data-safe-header].p-2 { --header-padding-top: 0.5rem; --header-padding-x: 0.5rem; }
.core-topbar.p-3, [data-safe-header].p-3 { --header-padding-top: 0.75rem; --header-padding-x: 0.75rem; }
.core-topbar.p-3\.5, [data-safe-header].p-3\.5 { --header-padding-top: 0.875rem; --header-padding-x: 0.875rem; }
.core-topbar.py-2\.5, [data-safe-header].py-2\.5 { --header-padding-top: 0.625rem; }
.core-topbar.py-3, [data-safe-header].py-3 { --header-padding-top: 0.75rem; }
.core-topbar.py-3\.5, [data-safe-header].py-3\.5 { --header-padding-top: 0.875rem; }
@media (min-width: 640px) {
  .core-topbar.sm\:p-3, [data-safe-header].sm\:p-3 { --header-padding-top: 0.75rem; --header-padding-x: 0.75rem; }
  .core-topbar.sm\:px-6, [data-safe-header].sm\:px-6 { --header-padding-x: 1.5rem; }
  .core-topbar.sm\:px-8, [data-safe-header].sm\:px-8 { --header-padding-x: 2rem; }
}

/* Overlays de modales: el contenido nunca queda bajo el notch ni bajo la barra de gestos. */
[data-ui-overlay] {
  --overlay-pad: 0px;
  padding:
    max(var(--overlay-pad), env(safe-area-inset-top, 0px))
    max(var(--overlay-pad), env(safe-area-inset-right, 0px))
    max(var(--overlay-pad), env(safe-area-inset-bottom, 0px))
    max(var(--overlay-pad), env(safe-area-inset-left, 0px));
}
[data-ui-overlay].p-3 { --overlay-pad: 0.75rem; }
[data-ui-overlay].p-4 { --overlay-pad: 1rem; }
@media (min-width: 640px) {
  [data-ui-overlay].sm\:p-4 { --overlay-pad: 1rem; }
  [data-ui-overlay].sm\:p-5 { --overlay-pad: 1.25rem; }
  [data-ui-overlay].sm\:p-6 { --overlay-pad: 1.5rem; }
}

/* Barras inferiores fijas y acciones criticas pegadas al borde inferior. */
[data-safe-bottom] {
  padding-bottom: calc(env(safe-area-inset-bottom, 0px) + var(--bottom-padding, 0.5rem));
}

/* =========================================================================
   COBRO MULTIPAIS: fuera de Venezuela no hay conversion dual (Bs / tasa BCV).
   region_cobro.js fija html[data-region-dual] segun /api/caja/configuracion-cobro.
   ========================================================================= */
html[data-region-dual="false"] [data-solo-dual],
html[data-region-dual="false"] .core-pos-product-bs {
  display: none !important;
}
html[data-region-dual="false"] .core-cobro-resumen {
  grid-template-columns: minmax(0, 1fr);
}
