Files
ByteCenter/public/css/styles.css
T
2026-08-04 19:45:02 -03:00

975 lines
16 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ===== 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;
}