/* ===== BASE GLOBAL ===== */ /* Fondo vive en html */ html { min-height: 100%; background: linear-gradient( 180deg, #667e8e 0%, #425870 25%, #24344d 65%, #0f172a 100% ); background-repeat: no-repeat; } /* Body solo contenido */ body { min-height: 100vh; background: transparent; overflow-y: auto; } .container { height: auto; max-height: none; overflow: visible; } /* Evita selección de imágenes */ img { user-select: none; } /* ===== NAVBAR ===== */ .navbar-dark { /* Sombra para separar del contenido */ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2); } /* ===== COMPONENTES (cards, headers, titulos ===== */ /* Cards */ .card-rounded { /* Bordes redondeados */ border-radius: 20px; } .card-shadow { /* Sombra mas profunda */ box-shadow: 0 8px 15px rgba(0, 0, 0, 0.438); } .card { /* Evita desbordes internos */ overflow: hidden; } /* Headers */ .header-dark { background-color: #212529; color: #fff; } .card-header { border-top-left-radius: 20px; border-top-right-radius: 20px; } /* Títulos */ .title-shadow { /* Sombra */ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6); } /* ===== BOTONES ===== */ .btn-soft-secondary { background-color: #6c757d; border: none; } .btn-soft-secondary:hover { background-color: #5a6268; } /* Animación global de botones */ .btn { /* Transiciones suaves para hover y click */ transition: background-color 0.25s ease, color 0.25s ease, transform 0.18s ease, box-shadow 0.18s ease; } .btn:hover { /* Efecto elevación */ transform: translateY(-2px); box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18); } .btn:active { transform: translateY(0); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15); } /* ===== FORMULARIOS – COMPACTO Y SIN NEGRITA ===== */ .form-control, .form-select { font-size: 13.5px; padding: 5px 8px; border: 1.5px solid #b6c2cf; border-radius: 10px; /* No usa negrita */ font-weight: 400; transition: border-color 0.2s ease, box-shadow 0.2s ease; } /* Labels sin negrita */ .form-label { font-size: 12.8px; font-weight: 400; margin-bottom: 4px; } /* Focus sutil */ .form-control:focus, .form-select:focus { outline: none; border-color: #b6c2cf; box-shadow: 0 0 0 2px rgba(0,0,0,0.06); } /* ===== HOME - INICIO ===== */ .title-presence { font-size: 2.5rem !important; font-weight: 700 !important; /* Sombra para destacar sobre fondo */ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6); margin-bottom: 0.5rem !important; /* Centrado manual */ display: block; width: fit-content; margin-left: auto; margin-right: auto; } .custom-margin-top { margin-top: 5rem !important; } /* CARDS */ .action-card { transition: transform 0.2s, box-shadow 0.2s; cursor: pointer; position: relative; border-radius: 20px; box-shadow: 0 8px 15px rgba(0, 0, 0, 0.45); border: none; } .action-card:hover { transform: translateY(-5px); box-shadow: 0 12px 20px rgba(0, 0, 0, 0.55); } /* Compacto */ .card-body-compact { padding: 1rem 0.9rem; } /* Tipografía */ .card-title { font-size: 1.1rem; margin-top: 8px; } .card-text { font-size: 0.9rem; margin-bottom: 0; } /* ICONO SOFT (solo vista principal) */ .icon-box-soft { width: 42px; height: 42px; border-radius: 5px; display: flex; align-items: center; justify-content: center; font-size: 15px; } /* colores suaves */ .bg-primary-soft { background-color: rgba(13,110,253,0.15); } .bg-success-soft { background-color: rgba(25,135,84,0.15); } .bg-warning-soft { background-color: rgba(255,193,7,0.2); } .bg-danger-soft { background-color: rgba(220,53,69,0.15); } .bg-info-soft { background-color: rgba(13,202,240,0.15); } .bg-secondary-soft { background-color: rgba(108,117,125,0.15); } /* ICONO SOLIDO (vista negocio) */ .icon-box { width: 42px; height: 42px; border-radius: 5px; display: flex; align-items: center; justify-content: center; font-size: 15px; } .icon-box i { color: #fff; } /* colores por modulo */ .bg-clientes { background: #0d6efd; } .bg-ventas { background: #198754; } .bg-servicios { background: #fd7e14; } .bg-presupuestos { background: #6f42c1; } .bg-productos { background: #20c997; } .bg-proveedores { background: #dc3545; } .bg-pedidos { background: #0dcaf0; } /* animacion */ .action-card:hover .icon-box { transform: scale(1.1); transition: transform 0.2s ease; } .action-card:hover .icon-box-soft { transform: scale(1.1); transition: transform 0.2s ease; } /* ===== LOGIN ===== */ .bytecenter-gradient { /* Gradiente lateral decorativo */ background: linear-gradient( 135deg, #0f172a, #1e3a5f, #3b82b8 ); border-radius: 16px 0 0 16px; height: 100%; } .login-box { /* Se achica en pantallas angostas */ max-width: min(1100px, 90vw); /* Se adapta a la altura disponible */ min-height: min(600px, 80vh); width: 100%; border-radius: 20px; box-shadow: 0 8px 25px rgba(0, 0, 0, 0.438); background: white; } .login-box h1 a.fw-semibold { text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6); } .shadow-heading { text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); } .input-lg { font-size: 1.0rem; height: 3.2rem; } .form-floating > label { font-size: 0.95rem; } /* ===== TOAST (mensajes) ===== */ .toast-flotante { position: fixed !important; bottom: 25px !important; left: 25px !important; z-index: 1055; min-width: 320px; max-width: 420px; background: #ffffff; border-radius: 12px; padding: 14px 18px; /* Sombra más fuerte */ box-shadow: 0 10px 25px rgba(0,0,0,.25), 0 20px 50px rgba(0,0,0,.35); animation: toastIn .35s ease forwards; } /* Animación de ENTRADA desde la izquierda */ @keyframes toastIn { from { opacity: 0; transform: translateX(-60px); } to { opacity: 1; transform: translateX(0); } } /* Animación de SALIDA hacia la izquierda */ .toast-out { animation: toastOut .3s ease forwards; } @keyframes toastOut { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(-60px); } } /* ===== FORMULARIO DE CREACIÓN DE VENTA ===== */ /* Labels más chicos */ .label-formventa { font-size: 12px; margin-bottom: 2px; line-height: 1.2; } /* Inputs más compactos */ .card-body-scroll .form-control { font-size: 0.85rem; padding: 4px 8px; } .card-body-scroll .form-control-sm { font-size: 0.8rem; padding: 2px 6px; } /* Input de precio con símbolo $ */ .input-precio .input-group-text, .input-precio .form-control { border-radius: 8px; } .input-precio .input-group-text { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-precio .form-control { border-top-left-radius: 0; border-bottom-left-radius: 0; } /* ===== CHECKBOX DE VENTA ===== */ .form-check-input { width: 18px; height: 18px; border: 1.5px solid #b6c2cf; border-radius: 6px; appearance: none; -webkit-appearance: none; background-color: #fff; cursor: pointer; transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease; } /* Estado hover */ .form-check-input:hover { border-color: #86b7fe; } /* Estado focus */ .form-check-input:focus { outline: none; box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25); } /* Estado checked */ .form-check-input:checked { background-color: #0d6efd; border-color: #0d6efd; } /* ===== LISTAS ===== */ /* Card */ .card-viewport > form { display: flex; flex-direction: column; flex: 1; min-height: 0; } .card-viewport { height: auto; max-height: none; } /* Body flexible */ .card-body-scroll { flex: 1; overflow-y: auto; min-height: 0; } /* Zona que scrollea solo si hace falta */ .table-scroll { max-height: clamp(100px, 14vh, 400px); overflow-y: auto; } .table-scroll-backup { max-height: clamp(120px, 40vh, 400px); overflow-y: auto; } .table-scroll-crear { max-height: clamp(120px, 21vh, 400px); overflow-y: auto; } /* ===== LOADER (pantalla de carga) ===== */ /* Overlay principal del loader */ #page-loader { /* Lo fija a toda la pantalla (top, right, bottom, left = 0) */ position: fixed; inset: 0; /* Fondo oscuro que bloquea interacción */ background: #0f172a; /* Centrado del contenido interno (spinner) */ display: flex; align-items: center; /* centra vertical */ justify-content: center; /* centra horizontal */ /* Se asegura de estar por encima de todo */ z-index: 9999; /* Estado inicial visible */ opacity: 1; /* Permite transición suave al ocultarse */ transition: opacity 0.3s ease; } /* Estado cuando el loader se está ocultando */ #page-loader.fade-out { /* Lo hace transparente (fade visual) */ opacity: 0; /* Permite interactuar con la UI aunque el loader aún exista */ pointer-events: none; } /* Spinner */ .spinner { /* Tamaño del loader */ width: 48px; height: 48px; /* Borde circular base (semi transparente) */ border: 4px solid rgba(255, 255, 255, 0.2); /* Borde circular base (semi transparente) */ border-top-color: #ffffff; /* Hace que sea un círculo perfecto */ border-radius: 50%; /* Animación continua de rotación */ animation: spin 0.8s linear infinite; } /* Animación de rotación */ @keyframes spin { /* Rota 360 grados constantemente */ to { transform: rotate(360deg); } } /* ===== DATATABLES ===== */ /* Quitar resaltado azul al hacer click en el paging */ .dataTables_wrapper .pagination .page-link:focus { box-shadow: none; outline: none; } /* Ajustar colores del item activo */ .dataTables_wrapper .pagination .page-item.active .page-link { background-color: #0d6efd; border-color: #0d6efd; color: #fff; } /* Hover más suave */ .dataTables_wrapper .pagination .page-link:hover { background-color: #e9ecef; color: #0d6efd; } .dataTables_info { font-size: 13px; color: #6c757d; padding-top: 0.5rem !important; } .dataTables_paginate { font-size: 13px; } /* ===== INPUT DE PRESUPUESTO ===== */ /* Input porcentaje (recargo / descuento) */ .input-porcentaje { display: flex; } .input-porcentaje .form-control { font-size: 0.85rem; padding: 4.5px 8px; border-radius: 10px 0 0 10px; } .input-porcentaje .input-group-text { font-size: 0.85rem; padding: 4.5px 8px; border-radius: 0 10px 10px 0; } /* ===== INPUT DE SERVICIO ===== */ .input-moneda .form-control { font-size: 0.85rem; padding: 2px 8px; border-radius: 0 10px 10px 0; } .input-moneda .input-group-text { font-size: 0.85rem; padding: 4px 8px; border-radius: 10px 0 0 10px; } /* SELECT INFORMES */ .form-select.custom-select.select-informe { font-size: 14px; padding: 6px 10px; padding-right: 1.6rem; border-radius: 8px; background-color: #f8f9fa; border: 1px solid #ced4da; background-position: right 0.5rem center; background-size: 12px 12px; min-width: 150px; transition: 0.2s ease; } .form-select.custom-select.select-informe:focus { outline: none; border-color: #2c2f48; box-shadow: 0 4px 8px rgba(0,0,0,0.08); } /* TABLAS */ table.dataTable { font-size: 14px; } table.dataTable thead th { font-size: 13px; font-weight: 600; letter-spacing: 0.3px; } table.dataTable tbody td { padding-top: 0.55rem; padding-bottom: 0.55rem; } table.dataTable tbody tr:hover { background-color: rgba(0,0,0,0.03); } /* Texto Buscar */ .dataTables_filter label { font-size: 13px; } /* Input de búsqueda */ .dataTables_filter input { font-size: 13px; padding: 4px 10px; } /* Select de columnas */ #columnFilter { font-size: 13px; padding: 4px 35px 4px 8px; } .dataTables_filter input:focus, #columnFilter:focus { outline: none; border-color: #2c2f48; box-shadow: 0 4px 8px rgba(0,0,0,0.08); } /* TABLA RESUMEN VENTA */ .table-resumen-venta { font-size: 14px; } .table-resumen-venta thead th { font-size: 14px; font-weight: 600; } .table-resumen-venta tbody td { padding-top: 0.35rem; padding-bottom: 0.35rem; } /* README */ .readme-scroll{ max-height: 70vh; overflow-y: auto; } /* Titulos dentro del readme */ .readme-container h1, .readme-container h2, .readme-container h3{ margin-top: 25px; margin-bottom: 10px; font-weight: 600; } /* Párrafos */ .readme-container p{ margin-bottom: 10px; } /* Listas */ .readme-container ul{ margin-bottom: 15px; } /* Scroll */ .readme-scroll::-webkit-scrollbar{ width: 8px; } .readme-scroll::-webkit-scrollbar-thumb{ background: #6c757d; border-radius: 4px; } /* CONTENIDO README */ .readme-scroll h1{ font-size: 22px; font-weight: 700; margin-top: 10px; margin-bottom: 15px; } .readme-scroll h2{ font-size: 18px; font-weight: 600; margin-top: 30px; margin-bottom: 10px; } /* Borde izquierdo en h3 para darle estructura */ .readme-scroll h3 { font-size: 16px; font-weight: 600; margin-top: 20px; margin-bottom: 8px; border-left: 3px solid #3b82b8; padding-left: 8px; } /* h4 con color para diferenciarlo del h3 */ .readme-scroll h4 { font-size: 14px; font-weight: 600; margin-top: 15px; color: #1e3a5f; } .readme-index { background: #f0f4ff; /* azulado suave */ padding: 15px; border-radius: 8px; border-left: 4px solid #3b82b8; /* borde izquierdo de color */ } .readme-index ul{ margin:0; padding-left:18px; } /* Más aire en el texto */ .readme-scroll p, .readme-scroll li { line-height: 1.75; color: #333; } .readme-index a{ color:#000; text-decoration:none; font-size:14px; } .readme-index a:hover{ text-decoration:underline; } .readme-scroll{ max-height:70vh; overflow-y:auto; scroll-behavior:smooth; } .readme-index h5{ color:#000; font-weight:700; } .readme-index > ul > li{ margin-bottom:8px; font-weight:600; } .readme-index ul ul{ margin-top:4px; } .readme-index ul ul li{ font-weight:400; } /* MODALES */ .modal-content{ border-radius:14px; } .modal-content{ box-shadow:0 10px 30px rgba(0,0,0,0.3); } .modal-body{ font-size:0.95rem; color:#4b5563; } /* Animación de apertura */ .modal.fade .modal-dialog{ transform:scale(0.95); transition:transform .2s ease; } .modal.show .modal-dialog{ transform:scale(1); } .modal-backdrop { position: fixed !important; inset: 0 !important; transform: scale(1.25); transform-origin: center; width: 100vw; height: 100vh; } /* Acomoda layout en pantallas con otras resoluciónes */ /* Pantallas chicas */ @media (max-height: 750px) { body { zoom: 0.9; } .modal-backdrop { position: fixed; top: -10vh; left: -10vw; width: 120vw; height: 120vh; } } /* Pantallas más chicas */ @media (max-height: 650px) { body { zoom: 0.8; } .modal-backdrop { position: fixed; top: -10vh; left: -10vw; width: 120vw; height: 120vh; } } /* INPUTS NO EDITABLES */ /* Campo no editable */ .campo-readonly { cursor: not-allowed; } /* Color input desactivado */ select:disabled { background-color: #fff !important; color: #212529; opacity: 1; cursor: not-allowed; } .campo-readonly:focus { outline: none; box-shadow: none; caret-color: transparent; } /* OJO DE CONTRASENIA */ .btn-toggle-password { position: absolute; top: 50%; right: 14px; transform: translateY(-50%); border: none; background: transparent; color: #6c757d; font-size: 15px; z-index: 10; cursor: pointer; transition: color 0.2s ease; } .btn-toggle-password:hover { color: #0d6efd; }