/* ============================================================================
   AutoParts — SISTEMA DE APP (shell nativo + estados + componentes)
   Carga DESPUÉS de tokens.css y de los estilos base de index.html: sobreescribe
   solo apariencia, nunca estructura ni contratos (los data-action y los ids se
   conservan tal cual).
   ========================================================================== */

/* ---------------------------------------------------------------------------
   1) APP SHELL: header que colapsa, contenido con safe areas y tab bar inferior
   --------------------------------------------------------------------------- */
body {
  padding-left: var(--safe-left);
  padding-right: var(--safe-right);
  overscroll-behavior-y: contain;
  -webkit-tap-highlight-color: transparent;
}

.nativeHeader {
  /* El título grande COLAPSA al hacer scroll (patrón iOS). No se fija: la barra
     que queda pegada arriba es la de búsqueda, que es lo que el mostrador usa. */
  position: relative;
  z-index: 20;
  padding: calc(var(--safe-top) + var(--s5)) var(--s4) var(--s3);
  background: var(--surface);
  border-bottom: 1px solid var(--line);
  transition: padding var(--dur) var(--ease);
}
.nativeHeader h2, .nativeHeader .hTitle {
  margin: 0;
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: -.02em;
  color: var(--text);
  transition: font-size var(--dur) var(--ease);
}
.nativeHeader.small { padding-top: calc(var(--safe-top) + var(--s2)); padding-bottom: var(--s2); }
.nativeHeader.small h2, .nativeHeader.small .hTitle { font-size: var(--fs-lg); }

/* la app del cliente lleva tab bar: el contenido no queda debajo */
#appView { padding-bottom: calc(var(--tabbar-h) + var(--safe-bottom) + var(--s6)); }

/* ---------------------------------------------------------------------------
   2) TAB BAR inferior (Buscar · Reponer · Órdenes · Tienda)
   --------------------------------------------------------------------------- */
.tabBar {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 50;
  display: flex;
  align-items: stretch;
  gap: 2px;
  padding: var(--s1) calc(var(--s2) + var(--safe-right)) calc(var(--s1) + var(--safe-bottom)) calc(var(--s2) + var(--safe-left));
  background: color-mix(in srgb, var(--surface) 92%, transparent);
  backdrop-filter: saturate(180%) blur(20px);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  border-top: 1px solid var(--line);
}
.tabItem {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  min-height: 48px;
  padding: var(--s1) 2px;
  border: 0;
  background: transparent;
  color: var(--text-3);
  font: var(--fw-medium) var(--fs-xs)/1.2 var(--font);
  border-radius: var(--r-md);
  transition: color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
  touch-action: manipulation;
}
.tabItem svg { width: 24px; height: 24px; display: block; }
.tabItem.on { color: var(--brand-primary); background: color-mix(in srgb, var(--brand-primary) 12%, transparent); }
.tabItem:active { transform: scale(.96); }
body.sin-tabbar .tabBar { display: none; }

/* ---------------------------------------------------------------------------
   3) BOTTOM SHEETS (nunca alert()/confirm(): todo es una hoja deslizante)
   --------------------------------------------------------------------------- */
.sheetBackdrop {
  position: fixed;
  inset: 0;
  z-index: 60;
  background: var(--overlay);
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--dur) var(--ease), visibility var(--dur) var(--ease);
}
.sheetBackdrop.open { opacity: 1; visibility: visible; }

.sheet {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 61;
  max-height: 88vh;
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border-radius: var(--r-xl) var(--r-xl) 0 0;
  box-shadow: var(--e3);
  transform: translateY(102%);
  transition: transform var(--dur-slow) var(--ease);
  padding-bottom: calc(var(--s4) + var(--safe-bottom));
  will-change: transform;
}
.sheet.open { transform: translateY(0); }
.sheetHandle {
  width: 44px; height: 5px; border-radius: var(--r-full);
  background: var(--line);
  margin: var(--s3) auto var(--s2);
  flex: 0 0 auto;
}
.sheetHead {
  display: flex; align-items: center; justify-content: space-between; gap: var(--s3);
  padding: var(--s2) var(--s4) var(--s3);
  border-bottom: 1px solid var(--line);
}
.sheetHead h3 { margin: 0; font-size: var(--fs-lg); font-weight: var(--fw-semibold); }
.sheetBody { overflow-y: auto; -webkit-overflow-scrolling: touch; padding: var(--s4); }
.sheetFoot {
  padding: var(--s3) var(--s4);
  border-top: 1px solid var(--line);
  display: flex; gap: var(--s2); justify-content: flex-end;
}
@media (min-width: 720px) {
  .sheet { left: auto; right: var(--s6); bottom: var(--s6); width: 520px; border-radius: var(--r-xl); }
}

/* ---------------------------------------------------------------------------
   4) TOASTS con DESHACER
   --------------------------------------------------------------------------- */
.toastHost {
  position: fixed;
  left: 0; right: 0;
  bottom: calc(var(--tabbar-h) + var(--safe-bottom) + var(--s3));
  z-index: 70;
  display: flex; flex-direction: column; align-items: center; gap: var(--s2);
  pointer-events: none;
  padding: 0 var(--s4);
}
body.sin-tabbar .toastHost { bottom: calc(var(--safe-bottom) + var(--s4)); }
.toast {
  pointer-events: auto;
  width: 100%; max-width: 520px;
  display: flex; align-items: center; gap: var(--s3);
  padding: var(--s3) var(--s4);
  border-radius: var(--r-lg);
  background: var(--surface-3);
  color: var(--text);
  box-shadow: var(--e3);
  font-size: var(--fs-sm);
  transform: translateY(8px);
  opacity: 0;
  animation: toastIn var(--dur) var(--ease) forwards;
}
.toast.saliendo { animation: toastOut var(--dur) var(--ease) forwards; }
.toast.ok { background: var(--ok); color: #fff; }
.toast.error { background: var(--danger); color: #fff; }
.toast .toastMsg { flex: 1 1 auto; }
.toast button {
  min-height: 36px;
  border: 1px solid currentColor;
  background: transparent; color: inherit;
  border-radius: var(--r-full);
  padding: 0 var(--s3);
  font-weight: var(--fw-semibold);
}
@keyframes toastIn { to { transform: translateY(0); opacity: 1; } }
@keyframes toastOut { to { transform: translateY(8px); opacity: 0; } }

/* ---------------------------------------------------------------------------
   5) ESTADOS: skeletons, vacíos con acción, errores humanos
   --------------------------------------------------------------------------- */
.skeleton {
  position: relative;
  overflow: hidden;
  background: var(--surface-2);
  border-radius: var(--r-md);
  color: transparent !important;
  min-height: 16px;
}
.skeleton::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--surface) 70%, transparent), transparent);
  animation: shimmer 1.2s infinite;
}
@keyframes shimmer { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
.skCard { height: 96px; margin-bottom: var(--s3); }
.skLine { height: 14px; margin: 8px 0; }
.skLine.corto { width: 45%; }

.emptyState {
  display: flex; flex-direction: column; align-items: center; gap: var(--s3);
  padding: var(--s10) var(--s6);
  text-align: center;
  color: var(--text-2);
}
.emptyState .esIcon {
  width: 56px; height: 56px; border-radius: var(--r-full);
  display: grid; place-items: center;
  background: var(--info-soft); color: var(--brand-primary);
}
.emptyState h3 { margin: 0; font-size: var(--fs-lg); color: var(--text); }
.emptyState p { margin: 0; font-size: var(--fs-md); max-width: 34ch; }

/* ---------------------------------------------------------------------------
   6) TARJETAS del mostrador (vista móvil) — jerarquía clara y tacto grande
   --------------------------------------------------------------------------- */
.tarjeta {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  box-shadow: var(--e1);
  padding: var(--s4);
  margin-bottom: var(--s3);
  min-height: 96px;
  transition: transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);
  cursor: pointer;
}
.tarjeta:active { transform: scale(.985); box-shadow: var(--e2); }
.tarjetaFila { display: flex; align-items: baseline; justify-content: space-between; gap: var(--s3); }
.tarjetaCod {
  font: var(--fw-semibold) var(--fs-sm)/1.2 var(--font);
  color: var(--text-2); letter-spacing: .02em;
}
.tarjetaPrecio { font-size: var(--fs-xl); font-weight: var(--fw-bold); color: var(--brand-primary); }
.tarjetaPrecio.apagado { color: var(--text-3); }
.tarjetaDesc { margin: var(--s2) 0 0; font-size: var(--fs-md); font-weight: var(--fw-medium); color: var(--text); }
.tarjetaProv { margin: var(--s2) 0 0; font-size: var(--fs-sm); color: var(--text-2); }
.tarjetaMotivo { margin: var(--s1) 0 0; font-size: var(--fs-xs); color: var(--text-2); }
.tarjetaSinStock { opacity: .82; }
.stockOk { color: var(--ok); }
.stockNo { color: var(--danger); }

/* ---------------------------------------------------------------------------
   7) CABECERAS de la app: píldoras de estado (frescura, copia, órdenes)
   --------------------------------------------------------------------------- */
.frescuraBar, .copiaBar, .ordenBar {
  border-radius: var(--r-lg);
  border: 1px solid var(--line);
  background: var(--surface);
  box-shadow: var(--e1);
  padding: var(--s3) var(--s4);
  margin: 0 var(--s3) var(--s3);
  display: flex; align-items: center; gap: var(--s3); flex-wrap: wrap;
  font-size: var(--fs-sm);
}
.frescuraBar .punto { color: var(--ok); }
.frescuraBar.desactualizado .punto { color: var(--warn); }
.copiaBar { background: var(--info-soft); }
.ordenBar { background: var(--warn-soft); }

.searchBar {
  position: sticky;
  top: 0;
  z-index: 30;
  padding: var(--s3) var(--s3) var(--s2);
  background: color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}
#buscador {
  min-height: 48px;
  border-radius: var(--r-full);
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--text);
  padding: 0 var(--s8) 0 var(--s4);
  font-size: var(--fs-md);
  width: 100%;
  box-shadow: var(--e1);
}
.sbRow { position: relative; }
.sbBtn, .sbClear {
  border-radius: var(--r-full);
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--text-2);
}

/* Sugerencias de búsqueda (camino de 3 toques: toque 1 elige la pieza) */
.sugerencias {
  list-style: none; margin: var(--s2) 0 0; padding: var(--s1);
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-lg); box-shadow: var(--e2);
  max-height: 46vh; overflow-y: auto;
}
.sugerencias li { margin: 0; }
.sugerencias button {
  width: 100%; text-align: left; min-height: 52px;
  display: flex; align-items: center; justify-content: space-between; gap: var(--s3);
  background: transparent; border: 0; color: var(--text);
  padding: var(--s2) var(--s3); border-radius: var(--r-md); font-size: var(--fs-md);
}
.sugerencias button:active { background: var(--surface-2); }
.sugerencias .sgCod { font-weight: var(--fw-semibold); }
.sugerencias .sgPrecio { color: var(--brand-primary); font-weight: var(--fw-bold); }

/* ---------------------------------------------------------------------------
   8) BOTONES y formularios (mínimo 44x44, radio consistente)
   --------------------------------------------------------------------------- */
button, .btnNew, .btnSec, .princ, .ok, .cancel, .danger {
  border-radius: var(--r-md);
  font-family: var(--font);
  font-weight: var(--fw-semibold);
  transition: transform var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
}
.princ { background: var(--brand-primary); color: var(--brand-on-primary); border: 0; }
.btnNew { background: var(--brand-primary); color: var(--brand-on-primary); }
button:active { transform: scale(.98); }
input, select, textarea {
  background: var(--surface);
  color: var(--text);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  min-height: 44px;
  font-family: var(--font);
}

/* ---------------------------------------------------------------------------
   9) ICONOS de un set único (SVG inline, nunca emojis sueltos en acciones)
   --------------------------------------------------------------------------- */
.ico { width: 20px; height: 20px; flex: 0 0 auto; vertical-align: -3px; }
.icoBtn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--s2);
}

/* ---------------------------------------------------------------------------
   10) PANEL DE OPERADOR (reusa el sistema; se inyecta en la vista admin)
   --------------------------------------------------------------------------- */
.opWrap { padding: var(--s4); display: grid; gap: var(--s4); }
.opCard {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg);
  box-shadow: var(--e1); padding: var(--s4);
}
.opCard h3 { margin: 0 0 var(--s2); font-size: var(--fs-lg); }
.opRow {
  display: flex; align-items: center; gap: var(--s3); flex-wrap: wrap;
  padding: var(--s3) 0; border-bottom: 1px solid var(--line);
}
.opRow:last-child { border-bottom: 0; }
.opProv { font-weight: var(--fw-semibold); }
.badge {
  display: inline-flex; align-items: center; gap: 4px;
  border-radius: var(--r-full); padding: 2px var(--s2);
  font-size: var(--fs-xs); font-weight: var(--fw-semibold);
}
.badge.ok { background: var(--ok-soft); color: var(--ok); }
.badge.warn { background: var(--warn-soft); color: var(--warn); }
.badge.err { background: var(--danger-soft); color: var(--danger); }
.badge.info { background: var(--info-soft); color: var(--brand-primary); }

/* ---------------------------------------------------------------------------
   11) ESCRITORIO: la tabla sigue siendo el patrón del panel del dueño
   --------------------------------------------------------------------------- */
@media (min-width: 720px) {
  .tabBar { display: none; }
  #appView { padding-bottom: var(--s8); }
  .tarjeta { border-radius: var(--r-md); }
}

/* ---------------------------------------------------------------------------
   13) TEMA AUTORITATIVO
   ---------------------------------------------------------------------------
   El CSS base de index.html trae colores fijos (blanco #fff, gris #f4f6fb) y
   selectores más específicos que los de una hoja nueva. Para que el MODO OSCURO
   sea real (y no "parece"), el sistema de diseño manda acá con !important SOLO
   sobre superficies y texto: no cambia layout ni contratos.
   --------------------------------------------------------------------------- */
html body {
  background: var(--bg) !important;
  color: var(--text) !important;
}
body.offline, body.sinRed { background: var(--bg) !important; }

.appHeader, .nativeHeader {
  background: var(--surface) !important;
  color: var(--text) !important;
  border-bottom: 1px solid var(--line);
}
.appHeader h1, .appHeader h2, .appHeader h3, .appHeader .hTitle,
.appHeader p, .appHeader .userInfo { color: var(--text) !important; }
.appHeader .userInfo, .appHeader .muted { color: var(--text-2) !important; }

.searchBar { background: var(--bg) !important; }
#buscador {
  background: var(--surface) !important;
  color: var(--text) !important;
  border-color: var(--line) !important;
}
/* Las tarjetas del mostrador: index.html las pinta con white fijo. */
.tarjeta, #tarjetas .tarjeta, #tarjetas article {
  background: var(--surface) !important;
  color: var(--text) !important;
  border: 1px solid var(--line) !important;
}
.tarjetaDesc, #tarjetas .tarjetaDesc { color: var(--text) !important; }
.tarjetaProv, #tarjetas .tarjetaProv, .tarjetaMotivo { color: var(--text-2) !important; }
.tarjetaCod { color: var(--text-2) !important; }
.tarjetaPrecio { color: var(--brand-primary) !important; }

.frescuraBar, .copiaBar, .ordenBar, .statsPV, .sbTip {
  background: var(--surface) !important;
  color: var(--text-2) !important;
  border-color: var(--line) !important;
}
.copiaBar { background: var(--info-soft) !important; }
.ordenBar { background: var(--warn-soft) !important; }

/* Tabla (escritorio) y sus encabezados */
.tablaWrap { background: var(--surface) !important; }
table { background: var(--surface) !important; color: var(--text) !important; }
thead th, th {
  background: var(--surface-2) !important;
  color: var(--text) !important;
  border-color: var(--line) !important;
}
tbody td, td { color: var(--text) !important; border-color: var(--line) !important; }
tbody tr { background: var(--surface) !important; }
tbody tr:nth-child(even) { background: var(--surface-2) !important; }
.paginacion { background: var(--surface) !important; color: var(--text-2) !important; }
.paginacion input, .paginacion button { background: var(--surface-2) !important; color: var(--text) !important; }

/* Panel del cliente y modal del dueño */
#modal, #panelProv { background: var(--overlay) !important; }
.modalCard, .panelProvCard {
  background: var(--surface) !important;
  color: var(--text) !important;
}
.modalCard h3, .panelProvCard h3, .modalCard p, .panelProvCard p,
.modalCard td, .panelProvCard td, .modalCard li, .panelProvCard li,
.modalCard b, .panelProvCard b { color: var(--text) !important; }
.modalCard label, .panelProvCard label,
.modalCard .muted, .panelProvCard .muted { color: var(--text-2) !important; }
.modalCard input, .modalCard select,
.panelProvCard input, .panelProvCard select {
  background: var(--surface-2) !important;
  color: var(--text) !important;
  border-color: var(--line) !important;
}
.cardLogin, .cardLogin label { background: transparent !important; color: var(--text) !important; }
.cardLogin { background: var(--surface) !important; }
.cardLogin input { background: var(--surface-2) !important; color: var(--text) !important; }

/* Tarjetas del panel del dueño */
.cards .card, .cards > div, .adminWrap .card, #listaTiendas .card,
#kpis > div { background: var(--surface) !important; color: var(--text) !important; }

/* Formularios y filtros */
input, select, textarea, .filtros, .filtrosGrid {
  background: var(--surface) !important;
  color: var(--text) !important;
  border-color: var(--line) !important;
}
details.filtros, details.filtros summary { background: var(--surface) !important; color: var(--text) !important; }

#modal { background: var(--overlay); z-index: 80; }
#panelProv { background: var(--overlay); z-index: 81; }
.modalCard, .panelProvCard {
  background: var(--surface);
  color: var(--text);
  box-shadow: var(--e3);
}
.modalCard h3, .panelProvCard h3, #panelTitulo { color: var(--text); }
.modalCard label, .modalCard .muted { color: var(--text-2); }
.modalCard input, .modalCard select,
.panelProvCard input, .panelProvCard select {
  background: var(--surface-2);
  color: var(--text);
  border-color: var(--line);
}
.modalCard button, .panelProvCard button { min-height: 44px; }
.panelProvCard { padding-bottom: calc(var(--s5) + var(--safe-bottom)); }
@media (max-width: 719px) {
  #panelProv { align-items: flex-end; }
  .panelProvCard { border-radius: var(--r-xl) var(--r-xl) 0 0; }
  #modal { align-items: flex-end; padding: 0; }
  .modalCard {
    border-radius: var(--r-xl) var(--r-xl) 0 0;
    max-width: none;
    max-height: 92vh;
    padding-bottom: calc(var(--s6) + var(--safe-bottom));
  }
}

/* ===========================================================================
   FASE 1 — UX MÓVIL DE LA BÚSQUEDA
   Formato obligatorio del resultado, stepper de cantidad y PRONTO PAGO.
   =========================================================================== */
.tarjetaSec {
  margin-top: 4px;
  font-size: 12.5px;
  color: var(--text-2);
}
.tarjetaTotal {
  margin-top: 4px;
  font-size: 14px;
  font-weight: var(--fw-bold);
  color: var(--text);
}
.tarjetaPP { margin-top: 6px; font-size: 12.5px; }
.badgePP {
  display: inline-block;
  background: #E8F5E9;
  color: #1B5E20;
  border: 1px solid #A5D6A7;
  font-size: 11px;
  font-weight: var(--fw-bold);
  padding: 3px 8px;
  border-radius: 999px;
  letter-spacing: .3px;
}
.totalLinea { font-weight: var(--fw-semibold); color: var(--text); }
.panelPP { margin-top: 8px; font-size: 13px; color: var(--text-2); }
.tablaDesglose td:first-child { color: var(--text-2); }
.tablaDesglose b { color: var(--text); }

/* 1.3 Cantidad por resultado: botones GRANDES (>=44 px) que no recargan nada */
.stepper {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
  background: var(--surface-2);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 3px;
}
.stepper .stBtn {
  width: 44px;
  height: 44px;
  min-height: 44px;
  border-radius: 50%;
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--brand-primary);
  font-size: 22px;
  font-weight: var(--fw-bold);
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.stepper .stBtn:active { background: var(--surface-2); }
.stepper .stInp {
  width: 58px;
  height: 44px;
  min-height: 44px;
  text-align: center;
  font-size: 16px;
  font-weight: var(--fw-bold);
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--surface);
  color: var(--text);
  -moz-appearance: textfield;
}
.stepper .stInp::-webkit-outer-spin-button,
.stepper .stInp::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
td .stepper { margin-top: 8px; }

/* 1.2 Autocompletado: cada sugerencia con código, nombre, proveedor y precio */
.sugerencias .sgFila { display: block; min-width: 0; }
.sugerencias .sgProv { font-size: 12px; color: var(--text-2); }
.sugerencias button[aria-selected="true"],
.sugerencias button:hover { background: var(--surface-2); }
.sugerencias .sgSinStock { color: var(--text-2); }

/* ===========================================================================
   FASE 3.3 — Etiqueta de ahorro del pronto pago
   =========================================================================== */
.tarjetaPP .muted { color: var(--text-2); }
.escAhorro,
.escCambio {
  display: inline-block;
  margin: 6px 0 0 8px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 12.5px;
  background: #E8F5E9;
  color: #1B5E20;
  border: 1px solid #A5D6A7;
}
.escCambio { background: #FFF8E1; color: #8a6d3b; border-color: #f0d9a0; }

/* ===========================================================================
   FASE 3.3 / 4.3 — Barra de escenarios de pago y "ver más" (scroll virtual)
   =========================================================================== */
.escenariosBar {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
  justify-content: space-between;
  margin: 10px 18px 0;
  padding: 10px 14px;
  border-radius: 12px;
  background: var(--surface-2);
  border: 1px solid var(--line);
  font-size: 13px;
  color: var(--text-2);
}
.escenariosBar[hidden] { display: none; }
.escSwitch { display: flex; align-items: center; gap: 8px; min-height: 44px; font-weight: var(--fw-semibold); }
.escSwitch input { width: 22px; height: 22px; }
.escenariosTexto { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.escChip {
  display: inline-block;
  padding: 6px 12px;
  border-radius: 999px;
  border: 1px solid var(--line);
  background: var(--surface);
  font-size: 12.5px;
}
.escChip.escActivo { border-color: var(--brand-primary); box-shadow: inset 0 0 0 1px var(--brand-primary); }
.masResultados { display: flex; justify-content: center; padding: 12px; }
.masResultados[hidden] { display: none; }
@media (max-width: 719px) {
  .escenariosBar { margin: 10px 12px 0; }
}
