mirror of
https://github.com/ferdzo/iotDashboard.git
synced 2026-04-05 09:06:26 +00:00
166 lines
2.9 KiB
CSS
166 lines
2.9 KiB
CSS
/* Custom styles for the IoT Dashboard */
|
|
|
|
#root {
|
|
width: 100%;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
/* Custom scrollbar for the drawer */
|
|
.drawer-side::-webkit-scrollbar {
|
|
width: 8px;
|
|
}
|
|
|
|
.drawer-side::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
.drawer-side::-webkit-scrollbar-thumb {
|
|
background: hsl(var(--bc) / 0.2);
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.drawer-side::-webkit-scrollbar-thumb:hover {
|
|
background: hsl(var(--bc) / 0.3);
|
|
}
|
|
|
|
/* Smooth transitions for interactive elements */
|
|
.btn,
|
|
.card {
|
|
transition: all 0.2s ease-in-out;
|
|
}
|
|
|
|
.card:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
/* Badge animations */
|
|
.badge {
|
|
transition: all 0.2s ease-in-out;
|
|
}
|
|
|
|
/* Stats animation on load */
|
|
@keyframes fadeInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
.stats {
|
|
animation: fadeInUp 0.5s ease-out;
|
|
}
|
|
|
|
/* Responsive table scrolling */
|
|
.overflow-x-auto {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: hsl(var(--bc) / 0.2) transparent;
|
|
}
|
|
|
|
.overflow-x-auto::-webkit-scrollbar {
|
|
height: 8px;
|
|
}
|
|
|
|
.overflow-x-auto::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
.overflow-x-auto::-webkit-scrollbar-thumb {
|
|
background: hsl(var(--bc) / 0.2);
|
|
border-radius: 4px;
|
|
}
|
|
|
|
/* Loading spinner custom styles */
|
|
.loading {
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
@keyframes spin {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
/* React Grid Layout Overrides */
|
|
.react-grid-layout {
|
|
position: relative;
|
|
}
|
|
|
|
.react-grid-item {
|
|
transition: all 200ms ease;
|
|
transition-property: left, top, width, height;
|
|
}
|
|
|
|
.react-grid-item img {
|
|
pointer-events: none;
|
|
user-select: none;
|
|
}
|
|
|
|
.react-grid-item > .react-resizable-handle {
|
|
position: absolute;
|
|
width: 20px;
|
|
height: 20px;
|
|
}
|
|
|
|
.react-grid-item > .react-resizable-handle::after {
|
|
content: "";
|
|
position: absolute;
|
|
right: 3px;
|
|
bottom: 3px;
|
|
width: 5px;
|
|
height: 5px;
|
|
border-right: 2px solid hsl(var(--bc) / 0.4);
|
|
border-bottom: 2px solid hsl(var(--bc) / 0.4);
|
|
}
|
|
|
|
.react-resizable-hide > .react-resizable-handle {
|
|
display: none;
|
|
}
|
|
|
|
.react-grid-item > .react-resizable-handle.react-resizable-handle-se {
|
|
bottom: 0;
|
|
right: 0;
|
|
cursor: se-resize;
|
|
}
|
|
|
|
.react-grid-item.resizing {
|
|
transition: none;
|
|
z-index: 100;
|
|
will-change: width, height;
|
|
}
|
|
|
|
.react-grid-item.react-draggable-dragging {
|
|
transition: none;
|
|
z-index: 100;
|
|
will-change: transform;
|
|
}
|
|
|
|
.react-grid-item.dropping {
|
|
visibility: hidden;
|
|
}
|
|
|
|
.react-grid-item.react-grid-placeholder {
|
|
background: hsl(var(--p) / 0.2);
|
|
opacity: 0.2;
|
|
transition-duration: 100ms;
|
|
z-index: 2;
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
-o-user-select: none;
|
|
user-select: none;
|
|
border-radius: 0.5rem;
|
|
}
|
|
|
|
.react-grid-item > .react-resizable-handle::after {
|
|
border-right: 2px solid hsl(var(--p));
|
|
border-bottom: 2px solid hsl(var(--p));
|
|
}
|