/* Appointsly Web — estilos globales */
/* Bootstrap eliminado. El sistema de diseño usa Tailwind CSS (CDN) con el tema Luminous Azure. */

html, body {
    margin: 0;
    padding: 0;
}

/* ── Sidebar de la app (_LayoutApp) ──────────────────────────────────────────
   En móvil (<1024px) el sidebar es un drawer off-canvas (Tailwind:
   -translate-x-full + lg:translate-x-0) que se abre con la hamburguesa.
   En escritorio se puede minimizar: el JS del layout pone la clase
   "sidebar-collapsed" en <html> (persistida en localStorage) y estas reglas
   ocultan el aside y devuelven el margen al contenido.
   ─────────────────────────────────────────────────────────────────────────── */

#sidebar-expand { display: none; }

@media (min-width: 1024px) {
    html.sidebar-collapsed #app-sidebar { transform: translateX(-100%); }
    html.sidebar-collapsed #app-main    { margin-left: 0; }
    html.sidebar-collapsed #sidebar-expand { display: flex; }
}

/* ── Custom Select (cs-group) ────────────────────────────────────────────────
   Dropdowns accesibles que reemplazan los <select> nativos del navegador.
   Usados en las páginas de Reservar, Panel y filtros de negocio/trabajador.

   Dos formas de usarlos:
   1. Markup escrito a mano (cs-group + cs-trigger + cs-dropdown), como en
      Panel/Reservas, cuando la opción lleva avatar, icono o subtítulo.
   2. Clase "cs-select" sobre un <select> normal: wwwroot/js/select-enhance.js
      construye el markup anterior al cargar la página. Es la opción por
      defecto para selects de solo texto.

   Los colores salen de la gama de marca de tailwind.config.js (azul del logo):
   primary #011B2A, primary-container #0E4A6B, outline-variant #CBD5DD.
   ─────────────────────────────────────────────────────────────────────────── */

.cs-native { position: absolute; opacity: 0; pointer-events: none; width: 1px; height: 1px; }
.cs-group  { position: relative; display: flex; flex-direction: column; gap: 6px; }
.cs-label  { font-size: 11px; font-weight: 700; color: #4B5563; text-transform: uppercase; letter-spacing: .06em; }

.cs-trigger {
    width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 10px;
    background: #F4F7F9; border: 1.5px solid #CBD5DD; border-radius: 14px;
    padding: 10px 12px; font-family: inherit; cursor: pointer; text-align: left;
    transition: border-color .2s, box-shadow .2s, background .15s;
}
.cs-trigger:hover  { border-color: #0E4A6B; background: white; }
.cs-trigger:focus  { outline: none; border-color: #011B2A; background: white; box-shadow: 0 0 0 3px rgba(14,74,107,.14); }
.cs-trigger.open   { border-color: #011B2A; background: white; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; }
.cs-chevron { flex-shrink: 0; color: #4B5563; font-size: 20px !important; transition: transform .2s; }
.cs-trigger.open .cs-chevron { transform: rotate(180deg); }

/* Estado deshabilitado: el enhancer copia el disabled del <select> nativo. */
.cs-trigger:disabled { cursor: not-allowed; opacity: .55; background: #EDF1F4; }
.cs-trigger:disabled:hover { border-color: #CBD5DD; background: #EDF1F4; }

.cs-dropdown {
    position: absolute; top: calc(100% - 2px); left: 0; right: 0;
    background: white; border: 1.5px solid #011B2A; border-top: none;
    border-bottom-left-radius: 14px; border-bottom-right-radius: 14px;
    padding: 4px 6px 8px; box-shadow: 0 12px 32px rgba(1,27,42,.16);
    z-index: 100; max-height: 260px; overflow-y: auto;
}

/* Cuando no hay sitio debajo, el JS abre hacia arriba (clase en trigger y lista). */
.cs-trigger.open-up { border-bottom-left-radius: 14px; border-bottom-right-radius: 14px; border-top-left-radius: 4px; border-top-right-radius: 4px; }
.cs-dropdown--up {
    top: auto; bottom: calc(100% - 2px);
    border-top: 1.5px solid #011B2A; border-bottom: none;
    border-radius: 14px 14px 0 0;
    box-shadow: 0 -12px 32px rgba(1,27,42,.16);
}

.cs-option { display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: 10px; cursor: pointer; transition: background .1s; }
.cs-option:hover, .cs-option--focus { background: #EDF1F4; }
.cs-option--active { background: rgba(14,74,107,.10); }
.cs-option--active .cs-name { font-weight: 700; color: #0E4A6B; }
.cs-option--disabled { opacity: .45; cursor: not-allowed; }
.cs-option--disabled:hover { background: transparent; }

.cs-avatar { width: 34px; height: 34px; border-radius: 50%; object-fit: cover; flex-shrink: 0; border: 2px solid rgba(14,74,107,.25); }
.cs-avatar-fallback { width: 34px; height: 34px; border-radius: 50%; background: linear-gradient(135deg, #A3CCE2, #8ABBD6); display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-weight: 700; font-size: 14px; color: #011B2A; }
.cs-avatar--muted { background: #E6EBEF; color: #4B5563; }

.cs-icon { width: 30px; height: 30px; border-radius: 9px; background: rgba(14,74,107,.10); display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: #0E4A6B; }
.cs-icon .material-symbols-outlined { font-size: 17px !important; }
.cs-icon--muted { background: #E6EBEF; color: #4B5563; }

.cs-row  { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
.cs-info { display: flex; flex-direction: column; gap: 1px; line-height: 1.25; min-width: 0; }
.cs-name { font-size: 13px; font-weight: 600; color: #111827; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cs-name--muted { color: #4B5563; font-weight: 400; }
.cs-sub  { font-size: 11px; color: #4B5563; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* El <select class="cs-select"> original sigue en el DOM tras la mejora visual:
   es el que viaja en el formulario. Se vuelve invisible con opacity, NO con
   display:none ni reduciéndolo a 1px, porque un <select required> sin caja de
   layout hace que el navegador aborte el envío con "An invalid form control is
   not focusable" y sin mostrar mensaje. Ocupando el mismo hueco que el trigger,
   la validación nativa funciona y su globo aparece donde toca.
   Si el JS no llegara a ejecutarse, el atributo data-cs-ready no se pone y el
   select se ve y funciona como uno normal. */
.cs-select[data-cs-ready] {
    position: absolute; inset: 0; width: 100%; height: 100%;
    opacity: 0; pointer-events: none; appearance: none; border: none; background: none;
}
