/* =========================================================
   Agenda y Directorio Electrónico — Estilos
   Diseño responsive: smartphone + computadora (requisito 3)
   ========================================================= */

:root {
  --primario: #0f766e;
  --primario-osc: #115e59;
  --primario-suave: #ccfbf1;
  --acento: #f59e0b;
  --fondo: #eef2f7;
  --tarjeta: #ffffff;
  --texto: #0f172a;
  --texto-suave: #64748b;
  --borde: #e2e8f0;
  --peligro: #dc2626;
  --ok: #16a34a;
  --info: #2563eb;
  --ambar: #d97706;
  --radio: 12px;
  --sombra: 0 1px 3px rgba(15, 23, 42, .08), 0 4px 14px rgba(15, 23, 42, .05);
}

* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  background: var(--fondo);
  color: var(--texto);
  font-size: 15px;
  line-height: 1.45;
}

a { color: var(--primario); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ================= Encabezado ================= */

.app-header {
  background: linear-gradient(135deg, #0f172a 0%, #134e4a 70%, #0f766e 100%);
  color: #fff;
  box-shadow: var(--sombra);
  position: sticky;
  top: 0;
  z-index: 50;
}

.barra-superior {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 16px;
  max-width: 1200px;
  margin: 0 auto;
}

.marca {
  display: flex;
  align-items: center;
  gap: 10px;
  color: #fff;
  font-weight: 700;
  text-decoration: none;
  min-width: 0;
}

.logo-marca {
  width: 40px;
  height: 40px;
  border-radius: 10px;
  background: #fff;
  object-fit: contain;
  padding: 3px;
  flex: none;
}

.marca-texto {
  font-size: 1.05rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.zona-usuario { display: flex; align-items: center; gap: 10px; }

.usuario-chip {
  display: flex;
  align-items: center;
  gap: 8px;
  background: rgba(255, 255, 255, .12);
  border-radius: 999px;
  padding: 4px 12px 4px 4px;
  min-width: 0;
}

.avatar-mini {
  width: 30px; height: 30px;
  border-radius: 50%;
  background: var(--acento);
  color: #1f2937;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  flex: none;
}

.usuario-datos { display: flex; flex-direction: column; line-height: 1.15; min-width: 0; }
.usuario-datos strong { font-size: .85rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.usuario-datos small { font-size: .7rem; opacity: .75; }

/* Pestañas de navegación (modo TAB) */
.tabs {
  display: flex;
  gap: 4px;
  overflow-x: auto;
  scrollbar-width: thin;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 12px;
}

.tab {
  color: rgba(255, 255, 255, .78);
  padding: 9px 14px;
  font-weight: 600;
  font-size: .88rem;
  white-space: nowrap;
  border-bottom: 3px solid transparent;
  text-decoration: none;
  cursor: pointer;
}

.tab:hover { color: #fff; text-decoration: none; background: rgba(255, 255, 255, .07); }

.tab.activo {
  color: #fff;
  border-bottom-color: var(--acento);
  background: rgba(255, 255, 255, .08);
}

/* ================= Contenedor / tarjetas ================= */

.contenedor {
  max-width: 1200px;
  margin: 18px auto 30px;
  padding: 0 16px;
}

.tarjeta {
  background: var(--tarjeta);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  box-shadow: var(--sombra);
  padding: 16px;
  margin-bottom: 16px;
}

.tarjeta h2, .tarjeta h3 { margin-top: 0; }

.tarjeta-cab {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 12px;
}

.tarjeta-cab h2 { margin: 0; font-size: 1.15rem; }

/* ================= Botones ================= */

.btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: none;
  border-radius: 9px;
  padding: 9px 15px;
  font-size: .9rem;
  font-weight: 600;
  cursor: pointer;
  text-decoration: none;
  line-height: 1.2;
  transition: filter .15s, transform .05s;
}

.btn:hover { filter: brightness(1.06); text-decoration: none; }
.btn:active { transform: translateY(1px); }

.btn-prim { background: var(--primario); color: #fff; }
.btn-sec  { background: #e2e8f0; color: #1e293b; }
.btn-ok   { background: var(--ok); color: #fff; }
.btn-peligro { background: var(--peligro); color: #fff; }
.btn-ambar{ background: var(--acento); color: #292524; }
.btn-mini  { padding: 5px 10px; font-size: .8rem; border-radius: 7px; }
.btn-icono { padding: 7px 9px; font-size: .95rem; }

.btn-accion {
  background: #fff;
  border: 1px solid var(--borde);
  border-radius: 9px;
  padding: 8px 12px;
  font-size: .85rem;
  color: var(--texto);
  cursor: pointer;
}

.grupo-btn { display: flex; flex-wrap: wrap; gap: 8px; }

/* ================= Formularios (modo TAB habilitado — requisito 6) ================= */

.form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 14px;
}

.campo { display: flex; flex-direction: column; gap: 5px; }

.campo label { font-size: .82rem; font-weight: 600; color: #334155; }

.campo input, .campo select, .campo textarea {
  font: inherit;
  padding: 9px 11px;
  border: 1.5px solid #cbd5e1;
  border-radius: 9px;
  background: #fff;
  color: var(--texto);
  min-width: 0;
}

.campo input:focus, .campo select:focus, .campo textarea:focus {
  outline: 2px solid var(--primario);
  outline-offset: 1px;
  border-color: var(--primario);
}

.campo textarea { resize: vertical; min-height: 74px; }

.campo .ayuda { font-size: .75rem; color: var(--texto-suave); }

.campo-completo { grid-column: 1 / -1; }

.acciones-form {
  grid-column: 1 / -1;
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin-top: 6px;
}

/* CAPTCHA */
.cap-caja {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: repeating-linear-gradient(45deg, #f1f5f9, #f1f5f9 6px, #e2e8f0 6px, #e2e8f0 12px);
  border: 1.5px dashed #94a3b8;
  border-radius: 9px;
  padding: 8px 14px;
  font-size: 1.15rem;
  font-weight: 700;
  user-select: none;
}

.cap-num { display: inline-block; font-style: italic; font-size: 1.25rem; }
.cap-op  { color: #475569; font-size: 1rem; }

/* ================= Tablas ================= */

.tabla-wrap { overflow-x: auto; border-radius: 10px; border: 1px solid var(--borde); }

table.tabla {
  width: 100%;
  border-collapse: collapse;
  font-size: .87rem;
  background: #fff;
  min-width: 640px;
}

.tabla th {
  background: #f1f5f9;
  color: #334155;
  text-align: left;
  padding: 9px 10px;
  border-bottom: 2px solid var(--borde);
  font-size: .76rem;
  text-transform: uppercase;
  letter-spacing: .03em;
  white-space: nowrap;
}

.tabla td { padding: 8px 10px; border-bottom: 1px solid var(--borde); vertical-align: middle; }

.tabla tr:last-child td { border-bottom: none; }
.tabla tr:hover td { background: #f8fafc; }

/* ================= Badges / chips ================= */

.chip {
  display: inline-block;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: .74rem;
  font-weight: 700;
  white-space: nowrap;
}

.chip-verde   { background: #dcfce7; color: #166534; }
.chip-gris    { background: #f1f5f9; color: #475569; }
.chip-azul    { background: #dbeafe; color: #1e40af; }
.chip-ambar   { background: #fef3c7; color: #92400e; }
.chip-rojo    { background: #fee2e2; color: #991b1b; }
.chip-teal    { background: var(--primario-suave); color: var(--primario-osc); }

/* ================= Directorio compacto (adenda 3) ================= */

.directorio-lista { display: flex; flex-direction: column; }

.fila-contacto {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 10px;
  border-bottom: 1px solid var(--borde);
  min-height: 54px;
}

.fila-contacto:last-child { border-bottom: none; }
.fila-contacto:hover { background: #f8fafc; }

.avatar-caja {
  width: 40px; height: 40px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--primario-suave), #99f6e4);
  color: var(--primario-osc);
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
  font-size: .9rem;
}

.fc-datos { flex: 1; min-width: 0; }

.fc-nombre { font-weight: 700; font-size: .92rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.fc-sub { font-size: .78rem; color: var(--texto-suave); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.fc-acciones { display: flex; gap: 6px; flex: none; align-items: center; }

.ico-accion {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px; height: 36px;
  border-radius: 9px;
  border: 1px solid var(--borde);
  background: #fff;
  font-size: 1rem;
  cursor: pointer;
  color: #334155;
  text-decoration: none;
}

.ico-accion:hover { background: #f1f5f9; text-decoration: none; }
.ico-wa { border-color: #25d366; color: #128c7e; }
.ico-wa:hover { background: #e7f9ee; }

/* Detalle de contacto (modal) */
.det-lista { display: grid; grid-template-columns: 125px 1fr; gap: 7px 12px; font-size: .9rem; }
.det-lista dt { color: var(--texto-suave); font-weight: 600; }
.det-lista dd { margin: 0; word-break: break-word; }

/* ================= Agenda / eventos (adenda 7) ================= */

.ev {
  border-left: 5px solid #94a3b8;
  border-radius: 10px;
  background: #fff;
  border-top: 1px solid var(--borde);
  border-right: 1px solid var(--borde);
  border-bottom: 1px solid var(--borde);
  padding: 12px 14px;
  margin-bottom: 10px;
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.ev-cab { display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; align-items: center; }

.ev-fecha {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  background: #f1f5f9;
  border-radius: 9px;
  padding: 3px 10px;
  font-weight: 700;
  line-height: 1.15;
  flex: none;
}

.ev-fecha small { font-size: .66rem; text-transform: uppercase; color: var(--texto-suave); font-weight: 700; }
.ev-fecha span  { font-size: .95rem; }

.ev-titulo { font-weight: 700; font-size: 1rem; flex: 1; min-width: 150px; }
.ev-meta { display: flex; flex-wrap: wrap; gap: 8px 16px; font-size: .8rem; color: var(--texto-suave); }
.ev-meta b { color: #334155; }
.ev-acciones { display: flex; flex-wrap: wrap; gap: 6px; border-top: 1px dashed var(--borde); padding-top: 8px; }

/* Estado: evento pasado → azul (adenda 7) */
.ev.pasado { border-left-color: var(--info); background: #eff6ff; }
.ev.pasado .ev-titulo { color: #1d4ed8; }

/* Estado: próximo dentro de la ventana (2 h) → parpadea (adenda 7) */
@keyframes parpadeo {
  0%, 100% { background-color: #fef9c3; box-shadow: 0 0 0 0 rgba(217, 119, 6, 0); }
  50%      { background-color: #fde047; box-shadow: 0 0 14px 0 rgba(217, 119, 6, .55); }
}

.ev.inminente {
  border-left-color: var(--ambar);
  animation: parpadeo 1.2s ease-in-out infinite;
}

.ev.completado { border-left-color: var(--ok); background: #f0fdf4; }
.ev.completado .ev-titulo { text-decoration: line-through; color: #15803d; }
.ev.cancelado { border-left-color: #94a3b8; background: #f8fafc; opacity: .72; }
.ev.cancelado .ev-titulo { text-decoration: line-through; }

/* ================= Panel / métricas ================= */

.metricas { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin-bottom: 16px; }

.metrica {
  background: var(--tarjeta);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: 14px;
  box-shadow: var(--sombra);
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.metrica .m-valor { font-size: 1.45rem; font-weight: 800; color: var(--primario-osc); }
.metrica .m-etiqueta { font-size: .78rem; color: var(--texto-suave); font-weight: 600; }
.metrica .m-detalle { font-size: .72rem; color: var(--texto-suave); }

.aviso {
  border-radius: 10px;
  padding: 12px 14px;
  margin-bottom: 14px;
  font-size: .9rem;
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.aviso-info { background: #e0f2fe; color: #075985; border: 1px solid #bae6fd; }
.aviso-ok   { background: #dcfce7; color: #166534; border: 1px solid #bbf7d0; }
.aviso-alerta { background: #fef3c7; color: #92400e; border: 1px solid #fde68a; }
.aviso-error  { background: #fee2e2; color: #991b1b; border: 1px solid #fecaca; }

/* ================= Paginación ================= */

.paginacion { display: flex; gap: 6px; justify-content: center; margin-top: 14px; flex-wrap: wrap; }

.paginacion a, .paginacion span {
  padding: 6px 11px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid var(--borde);
  font-size: .85rem;
}

.paginacion .pg-actual { background: var(--primario); color: #fff; border-color: var(--primario); font-weight: 700; }
.paginacion a:hover { background: #f1f5f9; text-decoration: none; }

/* ================= Login ================= */

.login-fondo {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
  background: linear-gradient(140deg, #0f172a 0%, #134e4a 55%, #0f766e 100%);
}

.login-caja {
  width: 100%;
  max-width: 400px;
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 22px 60px rgba(0, 0, 0, .35);
  padding: 28px 26px;
  text-align: center;
}

.login-logo { width: 76px; height: 76px; border-radius: 18px; background: #f1f5f9; padding: 8px; margin: 0 auto 8px; display: block; object-fit: contain; }

.login-caja h1 { font-size: 1.25rem; margin: 4px 0 2px; }
.login-caja .login-sub { color: var(--texto-suave); font-size: .85rem; margin-bottom: 18px; }

.login-caja .campo { text-align: left; margin-bottom: 12px; }

.login-caja .btn { width: 100%; justify-content: center; font-size: 1rem; padding: 11px; }

.login-error { background: #fee2e2; color: #991b1b; border: 1px solid #fecaca; padding: 10px; border-radius: 9px; font-size: .85rem; margin-bottom: 12px; }

.login-pie { margin-top: 16px; font-size: .75rem; color: var(--texto-suave); }

/* ================= Modal ================= */

.modal-fondo {
  position: fixed; inset: 0;
  background: rgba(15, 23, 42, .55);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  z-index: 200;
}

.modal-fondo.oculto { display: none; }

.modal-caja {
  background: #fff;
  border-radius: 14px;
  width: 100%;
  max-width: 640px;
  max-height: 88vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  box-shadow: 0 25px 60px rgba(0, 0, 0, .3);
}

.modal-cab {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 13px 18px;
  border-bottom: 1px solid var(--borde);
}

.modal-cab h3 { margin: 0; font-size: 1.02rem; }

.modal-x {
  border: none;
  background: #f1f5f9;
  width: 32px; height: 32px;
  border-radius: 8px;
  font-size: 1rem;
  cursor: pointer;
}

.modal-x:hover { background: #e2e8f0; }

.modal-cuerpo { padding: 16px 18px; overflow-y: auto; }

/* Observaciones */
.obs-item { border: 1px solid var(--borde); border-left: 4px solid var(--primario); border-radius: 8px; padding: 8px 10px; margin-bottom: 8px; background: #f8fafc; }
.obs-item .obs-meta { font-size: .74rem; color: var(--texto-suave); margin-bottom: 3px; }
.obs-item .obs-texto { font-size: .88rem; white-space: pre-wrap; }

/* Alerta sonora emergente */
.alerta-item {
  border: 1px solid #fde68a;
  background: #fffbeb;
  border-radius: 10px;
  padding: 10px 12px;
  margin-bottom: 8px;
}

.alerta-item .a-titulo { font-weight: 700; font-size: .95rem; }
.alerta-item .a-meta  { font-size: .8rem; color: var(--texto-suave); }

/* ================= Toast ================= */

.toast {
  position: fixed;
  left: 50%;
  bottom: 26px;
  transform: translateX(-50%);
  background: #0f172a;
  color: #fff;
  padding: 11px 20px;
  border-radius: 10px;
  font-size: .9rem;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .3);
  z-index: 300;
  max-width: min(92vw, 480px);
  text-align: center;
}

.toast.error { background: var(--peligro); }
.toast.oculto { display: none; }

/* ================= Mapa (requisito 7 / adenda 2) ================= */

.pagina-mapa { max-width: none; padding: 0; margin: 0; }

#mapa { width: 100%; height: calc(100vh - 118px); min-height: 420px; z-index: 1; }

.mapa-controles {
  position: absolute;
  top: 14px; right: 14px;
  z-index: 500;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.mapa-btn {
  background: #fff;
  border: 1px solid var(--borde);
  box-shadow: var(--sombra);
  border-radius: 9px;
  padding: 8px 12px;
  font-size: .85rem;
  font-weight: 600;
  cursor: pointer;
}

.mapa-btn:hover { background: #f8fafc; }

.leyenda {
  position: absolute;
  bottom: 20px; left: 12px;
  z-index: 500;
  background: rgba(255, 255, 255, .93);
  border-radius: 9px;
  padding: 9px 12px;
  font-size: .78rem;
  box-shadow: var(--sombra);
}

.leyenda div { display: flex; align-items: center; gap: 7px; margin: 2px 0; }

.punto { width: 11px; height: 11px; border-radius: 50%; display: inline-block; flex: none; }

/* ================= Filtros ================= */

.filtros-caja {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: flex-end;
}

.filtros-caja .campo { min-width: 140px; flex: 1; }
.filtros-caja .campo-buscar { flex: 2; }

/* ================= Utilidades ================= */

.texto-suave { color: var(--texto-suave); }
.texto-mini { font-size: .78rem; }
.mono { font-variant-numeric: tabular-nums; }
.derecha { text-align: right; }
.oculto { display: none; }
.mt-0 { margin-top: 0; }
.mb-0 { margin-bottom: 0; }
.margen-auto { margin: 12px auto; }

.leyenda-medida {
  background: #f8fafc;
  border: 1px dashed var(--borde);
  border-radius: 8px;
  padding: 8px 10px;
  font-size: .78rem;
  color: var(--texto-suave);
  display: inline-block;
}

/* Logs */
.nivel-badge { font-weight: 700; font-size: .72rem; padding: 3px 9px; border-radius: 999px; text-transform: uppercase; }
.nivel-info   { background: #dbeafe; color: #1e40af; }
.nivel-alerta { background: #fef3c7; color: #92400e; }
.nivel-error  { background: #fee2e2; color: #991b1b; }

.mensaje-log { max-width: 620px; word-break: break-word; white-space: pre-wrap; font-size: .84rem; }

/* ================= Responsive (smartphone — requisito 3) ================= */

@media (max-width: 720px) {
  .contenedor { padding: 0 10px; margin-top: 12px; }

  .barra-superior { padding: 8px 10px; }
  .usuario-datos { display: none; }
  .usuario-chip { padding: 3px; }

  .tab { padding: 8px 11px; font-size: .82rem; }

  .ev { padding: 10px; }
  .ev-meta { gap: 5px 12px; }

  .fc-acciones .ico-accion { width: 32px; height: 32px; font-size: .88rem; }

  .det-lista { grid-template-columns: 1fr; gap: 2px; }
  .det-lista dt { margin-top: 8px; }

  .form-grid { grid-template-columns: 1fr; }

  #mapa { height: calc(100vh - 128px); }
  .leyenda { display: none; }

  table.tabla { min-width: 540px; }
}

/* ============ Módulo Ingresos y Egresos (v2) ============ */

.encabezado-pagina { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.encabezado-pagina h1 { margin: 0; font-size: 1.3rem; }

.tabla-resumen tfoot th { border-top: 2px solid var(--texto); font-size: .88rem; }
.fila-actual { background: var(--primario-suave) !important; }
.fila-muteada { opacity: .55; }
.celda-barras { width: 22%; min-width: 120px; }
.barra { height: 7px; border-radius: 4px; margin: 2px 0; min-width: 0; }
.barra-ingreso { background: linear-gradient(90deg, #16a34a, #4ade80); }
.barra-egreso { background: linear-gradient(90deg, #dc2626, #f87171); }
.txt-ingreso { color: var(--ok); font-weight: 600; }
.txt-egreso { color: var(--peligro); font-weight: 600; }
.mov-tipo { display: inline-block; width: 20px; text-align: center; font-weight: 800; }
.mov-tipo.t-ingreso { color: var(--ok); }
.mov-tipo.t-egreso { color: var(--peligro); }
.badge.b-ingreso { background: #dcfce7; color: #166534; }
.badge.b-egreso { background: #fee2e2; color: #991b1b; }

.fila-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 10px 0; }
.stat-mini { background: var(--fondo); border: 1px solid var(--borde); border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; gap: 2px; }
.stat-mini.stat-ingreso { background: #f0fdf4; border-color: #bbf7d0; }
.stat-mini.stat-egreso { background: #fef2f2; border-color: #fecaca; }
.stat-rotulo { font-size: .78rem; color: var(--texto-suave); font-weight: 600; }
.stat-valor { font-size: 1.12rem; font-weight: 800; }

.detalle-resumen summary { cursor: pointer; color: var(--primario); font-weight: 600; padding: 6px 0; }
.filtros-linea { margin-bottom: 8px; }
.filtros-linea select { padding: 6px 10px; border: 1px solid var(--borde); border-radius: 8px; }
.grupo-radio { display: flex; gap: 18px; }
.grupo-radio label { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; cursor: pointer; }
.grupo-radio input { width: auto; }
.radio-ingreso { color: var(--ok); }
.radio-egreso { color: var(--peligro); }
.sin-salto { display: inline-flex; align-items: center; gap: 6px; font-weight: 500; cursor: pointer; }
.sin-salto input { width: auto; }
.pequeno { font-size: .82rem; }

@media (max-width: 720px) {
  .fila-stats { grid-template-columns: 1fr; }
  .celda-barras { min-width: 80px; }
}

/* ================= Impresión ================= */

@media print {
  .app-header, .app-pie, .ev-acciones, .filtros-caja, .paginacion, .fc-acciones, .grupo-btn { display: none !important; }
  body { background: #fff; }
  .tarjeta, .ev { box-shadow: none; border: 1px solid #cbd5e1; page-break-inside: avoid; }
}
