import { e as createComponent, m as maybeRenderHead, g as addAttribute, r as renderTemplate, n as renderScript, h as createAstro, l as renderHead, k as renderComponent, o as renderSlot } from './astro/server_CNSJbOTP.mjs';
import 'piccolore';
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
import { useState, useRef, useEffect } from 'react';
import 'clsx';
/* empty css                          */

const TOKEN_KEY = "crew_token";
const USUARIO_KEY = "crew_usuario";
function obtenerToken() {
  return localStorage.getItem(TOKEN_KEY);
}
function obtenerUsuario() {
  const datos = localStorage.getItem(USUARIO_KEY);
  if (!datos) return null;
  try {
    return JSON.parse(datos);
  } catch {
    return null;
  }
}
function cerrarSesion() {
  localStorage.removeItem(TOKEN_KEY);
  localStorage.removeItem(USUARIO_KEY);
}
async function verificarPassword(contrasena) {
  const usuario = obtenerUsuario();
  if (!usuario) return false;
  try {
    const res = await fetch("/api/auth/login", {
      method: "POST",
      headers: {
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        identificador: usuario.correo,
        contrasena
      })
    });
    return res.ok;
  } catch {
    return false;
  }
}

const API_BASE = "/api";
async function solicitud(ruta, opciones = {}) {
  const token = obtenerToken();
  const cabeceras = {
    "Content-Type": "application/json",
    ...token ? { Authorization: `Bearer ${token}` } : {},
    ...opciones.headers || {}
  };
  const respuesta = await fetch(`${API_BASE}${ruta}`, {
    ...opciones,
    headers: cabeceras,
    credentials: "include"
  });
  if (respuesta.status === 401) {
    if (!ruta.includes("/auth/login") && !ruta.includes("/auth/refresh")) {
      try {
        const refreshRes = await fetch(`${API_BASE}/auth/refresh`, {
          method: "POST",
          credentials: "include"
        });
        if (refreshRes.ok) {
          const data = await refreshRes.json();
          localStorage.setItem("crew_token", data.access_token);
          const cabecerasRetry = {
            ...cabeceras,
            Authorization: `Bearer ${data.access_token}`
          };
          const respuestaRetry = await fetch(`${API_BASE}${ruta}`, {
            ...opciones,
            headers: cabecerasRetry,
            credentials: "include"
          });
          if (respuestaRetry.ok) {
            if (respuestaRetry.status === 204) return void 0;
            return respuestaRetry.json();
          }
        }
      } catch (e) {
      }
    }
    cerrarSesion();
    window.location.href = "/login";
    throw new Error("Sesión expirada");
  }
  if (!respuesta.ok) {
    const error = await respuesta.json().catch(() => ({ error: "Error desconocido" }));
    throw new Error(error.error || `Error ${respuesta.status}`);
  }
  if (respuesta.status === 204) {
    return void 0;
  }
  return respuesta.json();
}
const api = {
  get: (ruta) => solicitud(ruta),
  post: (ruta, cuerpo) => solicitud(ruta, {
    method: "POST",
    body: cuerpo ? JSON.stringify(cuerpo) : void 0
  }),
  put: (ruta, cuerpo) => solicitud(ruta, {
    method: "PUT",
    body: cuerpo ? JSON.stringify(cuerpo) : void 0
  }),
  patch: (ruta, cuerpo) => solicitud(ruta, {
    method: "PATCH",
    body: cuerpo ? JSON.stringify(cuerpo) : void 0
  }),
  delete: (ruta) => solicitud(ruta, { method: "DELETE" })
};

const ROL_ETIQUETAS$1 = {
  admin: "Administrador",
  lider: "Líder",
  colaborador: "Colaborador",
  consultor: "Consultor"
};
const EXPOSICION_ETIQUETAS = {
  trabajo_en_altura: "Trabajo en Altura",
  espacios_confinados: "Trabajo en Espacios Confinados",
  equipo_de_levante: "Trabajo con Equipo de Levante",
  equipo_energizado: "Trabajo con Equipo Energizado",
  excavaciones: "Trabajo en Excavaciones",
  trabajo_en_caliente: "Trabajo en Caliente",
  equipo_radioactivo: "Trabajo con Equipo Radioactivo",
  sustancias_peligrosas: "Manipulación de Sustancias Peligrosas",
  tareas_no_rutinarias: "Tareas no rutinarias (estructuras sobredimensionadas, o no habituales)"
};
const OTRO_RIESGO_ETIQUETAS = {
  caida_mismo_nivel: "Caída al mismo nivel",
  caida_distinto_nivel: "Caída a distinto nivel",
  caida_objetos: "Caída de objetos / materiales",
  golpeado_choque: "Golpeado / choque contra objetos",
  golpeado_corte: "Golpeado / corte por objetos o herramientas",
  cogido_atrapado: "Cogido o atrapado / aplastado por o entre objetos",
  proyeccion_fragmentos: "Proyección de fragmentos o partículas de materiales fundidos y/o corte de otros materiales",
  contacto_termico: "Contacto térmico",
  contacto_electrico: "Contacto eléctrico",
  sobreesfuerzo_fisico: "Sobreesfuerzo físico",
  sustancias_causticas: "Contacto con sustancias cáusticas y/o corrosivas",
  radiaciones_ionizantes: "Exposición a radiaciones ionizantes",
  radiaciones_no_ionizantes: "Exposición a radiaciones no ionizantes",
  deficiencia_oxigeno: "Deficiencia de oxígeno",
  incendio_explosion: "Incendio / explosión",
  polvo_suspension: "Exposición a polvo en suspensión sobre la norma",
  gases_vapores: "Exposición a gases / vapores",
  humos_metalicos: "Exposición a humos metálicos",
  liquidos_peligrosos: "Exposición a líquidos peligrosos, aceites, solventes",
  ruido_auditiva: "Exposición a ruido. Pérdida auditiva",
  agentes_biologicos: "Exposición a agentes biológicos",
  contaminacion: "Contaminación",
  temperaturas_extremas: "Exposición a temperaturas extremas",
  sustancias_peligrosas: "Exposición a sustancias peligrosas",
  atropellamiento: "Atropellamiento",
  colision_choque: "Colisión / Choque",
  vibraciones: "Exposición a vibraciones",
  presiones_anormales: "Presiones anormales",
  sobrecarga: "Sobrecarga",
  otro: "Otro (especificar)"
};
const EPP_ETIQUETAS = {
  casco_barbiquejo: "Casco (barbiquejo)",
  careta_facial: "Careta Facial",
  careta_soldador: "Careta soldador",
  guantes_soldador: "Guantes soldador",
  calzado_seguridad: "Calzado Seg.",
  chaleco_reflectante: "Chaleco Reflect.",
  proteccion_respiratoria: "Prot. Respiratoria",
  guantes_cabritilla: "Guantes cabritilla",
  lentes: "Lentes",
  proteccion_auditiva: "Prot. auditiva",
  coleto_cuero: "Coleto de cuero",
  chaqueta_cuero: "Chaqueta de cuero",
  arnes: "Arnés",
  cuerda_vida: "Cuerda de vida",
  proteccion_solar: "Prot. Solar (UV)",
  otros: "Otros"
};
function crearAprobacionVacia(nombre = "") {
  return { aprobado: null, nombre, firma: null, fecha: null, hora: null };
}
const AISLAMIENTO_ETIQUETAS = {
  electrico: "Eléctricos",
  mecanico: "Mecánicos",
  ducto: "Ductos",
  otro: "Otros (especificar)"
};
function crearAislamientoVacio() {
  return ["electrico", "mecanico", "ducto", "otro"].map((tipo) => ({
    tipo,
    seleccionado: false,
    otro_detalle: null,
    aislamiento_fecha: null,
    aislamiento_hora: null,
    aislamiento_nombre: null,
    aislamiento_firma: null,
    fin_fecha: null,
    fin_hora: null,
    fin_nombre: null,
    fin_firma: null
  }));
}
const ESTADO_PROCESO_ETIQUETAS = {
  no_iniciado: "No iniciado",
  en_proceso: "En proceso",
  en_revision: "En revisión",
  pendiente_aprobacion: "Pend. aprobación",
  completa: "Completa",
  anulada: "Anulada"
};
const ESTADO_PROCESO_BADGE = {
  no_iniciado: "badge-gray",
  en_proceso: "badge-info",
  en_revision: "badge-warning",
  pendiente_aprobacion: "badge-warning",
  completa: "badge-success",
  anulada: "badge-danger"
};
const ESTADOS_MANUALES = [
  "no_iniciado",
  "en_proceso",
  "en_revision",
  "pendiente_aprobacion",
  "completa",
  "anulada"
];

const BADGES_ROL = {
  admin: "badge badge-info",
  lider: "badge badge-warning",
  colaborador: "badge badge-success",
  consultor: "badge badge-gray"
};
function SelectorPerfil({ perfiles, onSeleccionado, onCerrar }) {
  const [cargando, setCargando] = useState(null);
  const [error, setError] = useState("");
  async function seleccionar(perfil) {
    setCargando(perfil.id);
    setError("");
    try {
      const data = await api.post("/auth/seleccionar-perfil", { perfil_id: perfil.id });
      localStorage.setItem("crew_token", data.access_token);
      const sesionActual = JSON.parse(localStorage.getItem("crew_usuario") || "{}");
      localStorage.setItem("crew_usuario", JSON.stringify({
        ...sesionActual,
        rol: data.perfil.rol,
        empresa_id: data.perfil.empresa_id,
        perfil_id: data.perfil.id,
        empresa_nombre: data.perfil.empresa_nombre
      }));
      onSeleccionado?.();
      window.location.href = "/dashboard";
    } catch (e) {
      setError(e instanceof Error ? e.message : "Error al seleccionar perfil");
      setCargando(null);
    }
  }
  return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 bg-black/60 z-50 flex items-center justify-center p-4", children: /* @__PURE__ */ jsxs("div", { className: "bg-white rounded-xl shadow-2xl w-full max-w-md", children: [
    /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between p-6 border-b border-gray-100", children: [
      /* @__PURE__ */ jsxs("div", { children: [
        /* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold text-gray-900", children: "Selecciona tu perfil" }),
        /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-500 mt-1", children: "Tienes acceso a múltiples empresas. ¿Con cuál deseas continuar?" })
      ] }),
      onCerrar && /* @__PURE__ */ jsx("button", { onClick: onCerrar, className: "p-2 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg transition-colors -mt-1 -mr-1", children: /* @__PURE__ */ jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })
    ] }),
    error && /* @__PURE__ */ jsx("div", { className: "mx-6 mt-4 p-3 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700", children: error }),
    /* @__PURE__ */ jsx("div", { className: "p-4 space-y-2", children: perfiles.map((perfil) => /* @__PURE__ */ jsxs(
      "button",
      {
        onClick: () => seleccionar(perfil),
        disabled: cargando !== null,
        className: "w-full flex items-center justify-between p-4 rounded-xl border border-gray-200 hover:border-navy hover:bg-navy/5 transition-all text-left disabled:opacity-60 disabled:cursor-not-allowed group",
        children: [
          /* @__PURE__ */ jsxs("div", { children: [
            /* @__PURE__ */ jsx("div", { className: "font-medium text-gray-900 group-hover:text-navy", children: perfil.empresa_nombre }),
            /* @__PURE__ */ jsx("span", { className: `${BADGES_ROL[perfil.rol]} mt-1 inline-block`, children: ROL_ETIQUETAS$1[perfil.rol] })
          ] }),
          cargando === perfil.id ? /* @__PURE__ */ jsxs("svg", { className: "w-5 h-5 text-navy animate-spin", fill: "none", viewBox: "0 0 24 24", children: [
            /* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
            /* @__PURE__ */ jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })
          ] }) : /* @__PURE__ */ jsx("svg", { className: "w-5 h-5 text-gray-300 group-hover:text-navy transition-colors", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
        ]
      },
      perfil.id
    )) })
  ] }) });
}

const ROL_ETIQUETAS = {
  admin: "Administrador",
  lider: "Líder",
  colaborador: "Colaborador",
  consultor: "Consultor"
};
function MenuUsuario() {
  const [usuario, setUsuario] = useState(null);
  const [menuAbierto, setMenuAbierto] = useState(false);
  const [modalClave, setModalClave] = useState(false);
  const [selectorAbierto, setSelectorAbierto] = useState(false);
  const [perfilesList, setPerfilesList] = useState([]);
  const [form, setForm] = useState({ actual: "", nueva: "", confirmar: "" });
  const [guardando, setGuardando] = useState(false);
  const [error, setError] = useState("");
  const [exito, setExito] = useState("");
  const menuRef = useRef(null);
  useEffect(() => {
    const u = JSON.parse(localStorage.getItem("crew_usuario") || "null");
    if (u) setUsuario(u);
    function cerrarAlClickFuera(e) {
      if (menuRef.current && !menuRef.current.contains(e.target)) {
        setMenuAbierto(false);
      }
    }
    document.addEventListener("mousedown", cerrarAlClickFuera);
    return () => document.removeEventListener("mousedown", cerrarAlClickFuera);
  }, []);
  async function abrirCambiarPerfil() {
    setMenuAbierto(false);
    try {
      const datos = await api.get("/auth/perfil");
      setPerfilesList(datos.perfiles ?? []);
      setSelectorAbierto(true);
    } catch {
    }
  }
  function abrirModalClave() {
    setMenuAbierto(false);
    setForm({ actual: "", nueva: "", confirmar: "" });
    setError("");
    setExito("");
    setModalClave(true);
  }
  async function guardar(e) {
    e.preventDefault();
    setError("");
    setExito("");
    if (form.nueva.length < 8) {
      setError("La nueva contraseña debe tener al menos 8 caracteres");
      return;
    }
    if (form.nueva !== form.confirmar) {
      setError("Las contraseñas no coinciden");
      return;
    }
    setGuardando(true);
    try {
      await api.post("/auth/cambiar-contrasena", {
        contrasena_actual: form.actual,
        nueva_contrasena: form.nueva
      });
      setExito("Contraseña actualizada. Por seguridad, vuelve a iniciar sesión.");
      setForm({ actual: "", nueva: "", confirmar: "" });
      setTimeout(() => {
        localStorage.removeItem("crew_token");
        localStorage.removeItem("crew_usuario");
        window.location.replace("/login");
      }, 2500);
    } catch (e2) {
      setError(e2 instanceof Error ? e2.message : "Error al cambiar la contraseña");
    } finally {
      setGuardando(false);
    }
  }
  async function logout() {
    try {
      await fetch("/api/auth/logout", {
        method: "POST",
        credentials: "include",
        headers: { Authorization: `Bearer ${localStorage.getItem("crew_token")}` }
      });
    } catch {
    }
    localStorage.removeItem("crew_token");
    localStorage.removeItem("crew_usuario");
    window.location.replace("/login");
  }
  if (!usuario) return null;
  const inicial = usuario.nombre[0]?.toUpperCase() || "?";
  const rolEtiqueta = ROL_ETIQUETAS[usuario.rol] || usuario.rol;
  const empresaNombre = usuario.empresa_nombre || "";
  return /* @__PURE__ */ jsxs(Fragment, { children: [
    /* @__PURE__ */ jsxs("div", { className: "relative", ref: menuRef, children: [
      /* @__PURE__ */ jsxs(
        "button",
        {
          onClick: () => setMenuAbierto((v) => !v),
          className: "flex items-center gap-3 rounded-lg p-1 hover:bg-gray-100 transition-colors",
          children: [
            /* @__PURE__ */ jsxs("div", { className: "hidden sm:block text-right", children: [
              /* @__PURE__ */ jsxs("div", { className: "text-sm font-medium text-gray-900 leading-tight", children: [
                usuario.nombre,
                " ",
                usuario.apellido
              ] }),
              /* @__PURE__ */ jsxs("div", { className: "text-xs leading-tight", children: [
                empresaNombre && /* @__PURE__ */ jsx("span", { className: "text-red-500 font-medium", children: empresaNombre }),
                empresaNombre && /* @__PURE__ */ jsx("span", { className: "text-gray-400", children: " · " }),
                /* @__PURE__ */ jsx("span", { className: "text-gray-500", children: rolEtiqueta })
              ] })
            ] }),
            /* @__PURE__ */ jsx("div", { className: "w-9 h-9 bg-[#1B2B4B] rounded-full flex items-center justify-center text-white text-sm font-semibold flex-shrink-0", children: inicial })
          ]
        }
      ),
      menuAbierto && /* @__PURE__ */ jsxs("div", { className: "absolute right-0 mt-2 w-56 bg-white rounded-xl shadow-lg border border-gray-100 py-1 z-50", children: [
        /* @__PURE__ */ jsxs("div", { className: "px-4 py-2.5 border-b border-gray-100", children: [
          /* @__PURE__ */ jsxs("div", { className: "text-sm font-medium text-gray-900 truncate", children: [
            usuario.nombre,
            " ",
            usuario.apellido
          ] }),
          /* @__PURE__ */ jsxs("div", { className: "text-xs mt-0.5", children: [
            empresaNombre && /* @__PURE__ */ jsx("span", { className: "text-red-500 font-medium", children: empresaNombre }),
            empresaNombre && /* @__PURE__ */ jsx("span", { className: "text-gray-400", children: " · " }),
            /* @__PURE__ */ jsx("span", { className: "text-gray-500", children: rolEtiqueta })
          ] })
        ] }),
        /* @__PURE__ */ jsxs(
          "button",
          {
            onClick: abrirCambiarPerfil,
            className: "flex items-center gap-3 w-full px-4 py-2.5 text-sm text-gray-700 hover:bg-gray-50 transition-colors",
            children: [
              /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4" }) }),
              "Cambiar perfil"
            ]
          }
        ),
        /* @__PURE__ */ jsxs(
          "button",
          {
            onClick: abrirModalClave,
            className: "flex items-center gap-3 w-full px-4 py-2.5 text-sm text-gray-700 hover:bg-gray-50 transition-colors",
            children: [
              /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z" }) }),
              "Cambiar contraseña"
            ]
          }
        ),
        /* @__PURE__ */ jsx("div", { className: "border-t border-gray-100 mt-1 pt-1", children: /* @__PURE__ */ jsxs(
          "button",
          {
            onClick: logout,
            className: "flex items-center gap-3 w-full px-4 py-2.5 text-sm text-red-600 hover:bg-red-50 transition-colors",
            children: [
              /* @__PURE__ */ jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }),
              "Cerrar sesión"
            ]
          }
        ) })
      ] })
    ] }),
    selectorAbierto && perfilesList.length > 0 && /* @__PURE__ */ jsx(
      SelectorPerfil,
      {
        perfiles: perfilesList,
        onSeleccionado: () => setSelectorAbierto(false),
        onCerrar: perfilesList.length > 1 ? () => setSelectorAbierto(false) : void 0
      }
    ),
    modalClave && /* @__PURE__ */ jsx("div", { className: "fixed inset-0 bg-black/50 z-50 flex items-center justify-center p-4", children: /* @__PURE__ */ jsxs("div", { className: "bg-white rounded-xl shadow-xl w-full max-w-sm", children: [
      /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-6 border-b border-gray-100", children: [
        /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-gray-900", children: "Cambiar contraseña" }),
        /* @__PURE__ */ jsx(
          "button",
          {
            onClick: () => setModalClave(false),
            className: "p-2 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg transition-colors",
            children: /* @__PURE__ */ jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
          }
        )
      ] }),
      /* @__PURE__ */ jsxs("form", { onSubmit: guardar, className: "p-6 space-y-4", children: [
        error && /* @__PURE__ */ jsx("div", { className: "p-3 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700", children: error }),
        exito && /* @__PURE__ */ jsx("div", { className: "p-3 bg-green-50 border border-green-200 rounded-lg text-sm text-green-700", children: exito }),
        /* @__PURE__ */ jsxs("div", { children: [
          /* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1.5", children: "Contraseña actual" }),
          /* @__PURE__ */ jsx(
            "input",
            {
              type: "password",
              value: form.actual,
              onChange: (e) => {
                const v = e.target.value;
                setForm((f) => ({ ...f, actual: v }));
              },
              className: "input",
              placeholder: "••••••••",
              required: true,
              autoComplete: "current-password"
            }
          )
        ] }),
        /* @__PURE__ */ jsxs("div", { children: [
          /* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1.5", children: "Nueva contraseña" }),
          /* @__PURE__ */ jsx(
            "input",
            {
              type: "password",
              value: form.nueva,
              onChange: (e) => {
                const v = e.target.value;
                setForm((f) => ({ ...f, nueva: v }));
              },
              className: "input",
              placeholder: "Mínimo 8 caracteres",
              required: true,
              autoComplete: "new-password"
            }
          )
        ] }),
        /* @__PURE__ */ jsxs("div", { children: [
          /* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 mb-1.5", children: "Confirmar nueva contraseña" }),
          /* @__PURE__ */ jsx(
            "input",
            {
              type: "password",
              value: form.confirmar,
              onChange: (e) => {
                const v = e.target.value;
                setForm((f) => ({ ...f, confirmar: v }));
              },
              className: "input",
              placeholder: "Repite la nueva contraseña",
              required: true,
              autoComplete: "new-password"
            }
          )
        ] }),
        /* @__PURE__ */ jsxs("div", { className: "flex gap-3 justify-end pt-2", children: [
          /* @__PURE__ */ jsx("button", { type: "button", onClick: () => setModalClave(false), className: "btn-secondary text-sm", disabled: guardando, children: "Cancelar" }),
          /* @__PURE__ */ jsx("button", { type: "submit", className: "btn-primary text-sm", disabled: guardando || !!exito, children: guardando ? "Guardando..." : "Cambiar contraseña" })
        ] })
      ] })
    ] }) })
  ] });
}

const $$Astro$1 = createAstro();
const $$Sidebar = createComponent(($$result, $$props, $$slots) => {
  const Astro2 = $$result.createAstro($$Astro$1, $$props, $$slots);
  Astro2.self = $$Sidebar;
  const { seccionActiva = "" } = Astro2.props;
  const itemsNav = [
    {
      grupo: "General",
      items: [
        { href: "/dashboard", label: "Dashboard", seccion: "dashboard", icono: "grid" }
      ]
    },
    {
      grupo: "Operaciones",
      rolMin: "colaborador",
      items: [
        { href: "/actividades", label: "Actividades", seccion: "actividades", icono: "clipboard" },
        { href: "/repositorio", label: "Repositorio Documental", seccion: "repositorio", icono: "folder" }
      ]
    },
    {
      grupo: "Administraci\xF3n",
      rolMin: "admin",
      items: [
        { href: "/admin/usuarios", label: "Usuarios", seccion: "usuarios", icono: "users" },
        { href: "/admin/empresas", label: "Empresas", seccion: "empresas", icono: "building" },
        { href: "/admin/auditoria", label: "Auditor\xEDa", seccion: "auditoria", icono: "shield" }
      ]
    }
  ];
  const iconos = {
    grid: "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm10 0a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zm10 0a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z",
    users: "M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",
    building: "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4",
    shield: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z",
    clipboard: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01",
    folder: "M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"
  };
  return renderTemplate`${itemsNav.map((grupo) => renderTemplate`${maybeRenderHead()}<div class="mb-4"${addAttribute(grupo.grupo === "Administraci\xF3n" ? "administracion" : grupo.grupo === "Operaciones" ? "operaciones" : "", "data-grupo")}><div class="px-3 mb-1"><span class="text-[10px] font-semibold uppercase tracking-widest text-blue-300/70">${grupo.grupo}</span></div>${grupo.items.map((item) => {
    const activo = seccionActiva === item.seccion;
    return renderTemplate`<a${addAttribute(item.href, "href")}${addAttribute(`flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm mb-0.5 transition-colors ${activo ? "bg-white/15 text-white font-medium" : "text-gray-300 hover:bg-white/10 hover:text-white"}`, "class")}><svg class="w-5 h-5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"${addAttribute(iconos[item.icono], "d")}></path></svg><span>${item.label}</span>${activo && renderTemplate`<span class="ml-auto w-1.5 h-1.5 rounded-full bg-blue-400"></span>`}</a>`;
  })}</div>`)}${renderScript($$result, "C:/Proyectos IA/Sistema de Control y Gesti\xF3n Crew Consultores/frontend/src/components/layout/Sidebar.astro?astro&type=script&index=0&lang.ts")}`;
}, "C:/Proyectos IA/Sistema de Control y Gesti\xF3n Crew Consultores/frontend/src/components/layout/Sidebar.astro", void 0);

const $$Astro = createAstro();
const $$AppLayout = createComponent(async ($$result, $$props, $$slots) => {
  const Astro2 = $$result.createAstro($$Astro, $$props, $$slots);
  Astro2.self = $$AppLayout;
  const { titulo, seccionActiva = "" } = Astro2.props;
  return renderTemplate`<html lang="es"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>${titulo} — CREW</title><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">${renderHead()}</head> <body class="font-sans bg-gray-50"> <!-- Overlay móvil --> <div id="sidebar-overlay" class="fixed inset-0 bg-black/50 z-30 hidden lg:hidden" onclick="cerrarSidebar()"></div> <!-- Sidebar --> <nav id="sidebar" class="fixed top-0 left-0 h-full bg-[#1B2B4B] text-white flex flex-col transition-transform duration-300 z-40 w-64 -translate-x-full lg:translate-x-0"> <!-- Logo --> <div class="flex items-center gap-3 px-5 py-5 border-b border-white/10"> <div class="w-9 h-9 bg-blue-500 rounded-lg flex items-center justify-center font-bold text-sm flex-shrink-0">
CR
</div> <div> <div class="font-bold text-sm leading-tight">CREW</div> <div class="text-[10px] text-blue-300 leading-tight">Control y Gestión</div> </div> </div> <!-- Navegación --> <div class="flex-1 overflow-y-auto py-4 px-3"> ${renderComponent($$result, "Sidebar", $$Sidebar, { "seccionActiva": seccionActiva })} </div> <!-- Footer --> <div class="px-3 py-3 border-t border-white/10"> <button onclick="logout()" class="flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm text-gray-300 hover:bg-white/10 hover:text-white transition-colors"> <svg class="w-5 h-5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"></path> </svg> <span class="sidebar-label">Cerrar sesión</span> </button> </div> </nav> <!-- Contenido principal --> <div class="lg:pl-64 min-h-screen flex flex-col"> <!-- Header --> <header class="sticky top-0 z-20 bg-white border-b border-gray-200 shadow-sm"> <div class="flex items-center justify-between px-4 lg:px-6 h-16"> <!-- Hamburger (móvil) --> <button onclick="toggleSidebar()" class="lg:hidden p-2 rounded-lg text-gray-500 hover:bg-gray-100"> <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path> </svg> </button> <h1 class="text-lg font-semibold text-gray-900">${titulo}</h1> <!-- Usuario --> ${renderComponent($$result, "MenuUsuario", MenuUsuario, { "client:load": true, "client:component-hydration": "load", "client:component-path": "C:/Proyectos IA/Sistema de Control y Gesti\xF3n Crew Consultores/frontend/src/components/layout/MenuUsuario", "client:component-export": "default" })} </div> </header> <!-- Área de contenido --> <main class="flex-1 p-4 lg:p-6"> ${renderSlot($$result, $$slots["default"])} </main> </div> ${renderScript($$result, "C:/Proyectos IA/Sistema de Control y Gesti\xF3n Crew Consultores/frontend/src/components/layout/AppLayout.astro?astro&type=script&index=0&lang.ts")} </body> </html>`;
}, "C:/Proyectos IA/Sistema de Control y Gesti\xF3n Crew Consultores/frontend/src/components/layout/AppLayout.astro", void 0);

export { $$AppLayout as $, AISLAMIENTO_ETIQUETAS as A, ESTADOS_MANUALES as E, OTRO_RIESGO_ETIQUETAS as O, ROL_ETIQUETAS$1 as R, api as a, ESTADO_PROCESO_ETIQUETAS as b, EXPOSICION_ETIQUETAS as c, EPP_ETIQUETAS as d, ESTADO_PROCESO_BADGE as e, crearAprobacionVacia as f, crearAislamientoVacio as g, obtenerToken as h, cerrarSesion as i, obtenerUsuario as o, verificarPassword as v };
