/* Layout CSS Optimizado - Solo estilos que no pueden expresarse con Tailwind */ /* Variables CSS globales */ :root { --navbar-height: 56px; --container-padding: 1.5rem; } /* Layout flexbox básico para sticky footer */ html, body { height: 100%; margin: 0; padding: 0; } body { display: flex; flex-direction: column; min-height: 100vh; } .main-content { flex: 1 0 auto; width: 100%; max-width: 1400px; margin: 0 auto; padding: 0 var(--container-padding); } .site-footer { flex-shrink: 0; } /* Mejoras para tablas responsive */ .table-responsive { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } /* Utilidades específicas no cubiertas por Tailwind */ .update-column { display: none; } /* Media Queries para responsividad */ @media (max-width: 576px) { :root { --container-padding: 0.75rem; } /* Ocultar columnas no esenciales en móviles para tablas legacy */ #lista-dispositivos table th:nth-child(3), #lista-dispositivos table td:nth-child(3), #lista-dispositivos table th:nth-child(4), #lista-dispositivos table td:nth-child(4), #lista-dispositivos table th:nth-child(5), #lista-dispositivos table td:nth-child(5), #lista-dispositivos table th:nth-child(6), #lista-dispositivos table td:nth-child(6) { display: none; } #lista-puertos table th:nth-child(2), #lista-puertos table td:nth-child(2), #lista-puertos table th:nth-child(5), #lista-puertos table td:nth-child(5) { display: none; } } /* Indicador de estado MQTT WebSocket */ .ws-indicator { position: fixed; bottom: 8px; right: 8px; z-index: 10; backdrop-filter: saturate(120%) blur(2px); } .ws-indicator .dot { box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.6); } .ws-indicator.connected .dot { box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.3); } .ws-indicator.disconnected .dot { box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.3); }