mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-15 09:49:48 +00:00
481 lines
No EOL
9 KiB
CSS
481 lines
No EOL
9 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
/* Update banner animation */
|
|
@keyframes slideDown {
|
|
from {
|
|
transform: translateY(-100%);
|
|
opacity: 0;
|
|
}
|
|
|
|
to {
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
.animate-slideDown {
|
|
animation: slideDown 0.3s ease-out;
|
|
}
|
|
|
|
/* Notification animations */
|
|
@keyframes slide-in-glass {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(100%) scale(0.95);
|
|
filter: blur(4px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0) scale(1);
|
|
filter: blur(0);
|
|
}
|
|
}
|
|
|
|
.animate-slide-in-glass {
|
|
animation: slide-in-glass 0.5s cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
/* Support for backdrop blur in browsers */
|
|
@supports (backdrop-filter: blur(0px)) {
|
|
.backdrop-blur-xl {
|
|
backdrop-filter: blur(16px);
|
|
-webkit-backdrop-filter: blur(16px);
|
|
}
|
|
}
|
|
|
|
/* Custom styles */
|
|
@layer base {
|
|
body {
|
|
@apply bg-gray-100 dark:bg-gray-900 text-gray-900 dark:text-gray-100;
|
|
/* Ensure body scrollbar follows our styling */
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
/* Hide scrollbars during transitions to prevent flicker */
|
|
html {
|
|
overflow-y: scroll;
|
|
scroll-behavior: smooth;
|
|
}
|
|
|
|
/* Threshold slider styles */
|
|
.threshold-slider-container {
|
|
@apply relative w-full;
|
|
}
|
|
|
|
.threshold-slider {
|
|
@apply w-full h-3.5 appearance-none bg-transparent relative z-10;
|
|
}
|
|
|
|
/* Slider track styles - match progress bar height */
|
|
.threshold-slider::-webkit-slider-runnable-track {
|
|
@apply h-3.5 rounded bg-gray-200 dark:bg-gray-600;
|
|
}
|
|
|
|
.threshold-slider::-moz-range-track {
|
|
@apply h-3.5 rounded bg-gray-200 dark:bg-gray-600;
|
|
}
|
|
|
|
/* Slider thumb styles with value display */
|
|
.threshold-slider::-webkit-slider-thumb {
|
|
@apply appearance-none w-12 h-5 rounded-full cursor-pointer relative;
|
|
margin-top: -2.5px;
|
|
/* Center thumb on track */
|
|
background: white;
|
|
border: 2px solid currentColor;
|
|
box-shadow:
|
|
0 1px 3px 0 rgba(0, 0, 0, 0.1),
|
|
0 1px 2px 0 rgba(0, 0, 0, 0.06);
|
|
}
|
|
|
|
.threshold-slider::-moz-range-thumb {
|
|
@apply appearance-none w-12 h-5 rounded-full cursor-pointer relative border-0;
|
|
background: white;
|
|
border: 2px solid currentColor;
|
|
box-shadow:
|
|
0 1px 3px 0 rgba(0, 0, 0, 0.1),
|
|
0 1px 2px 0 rgba(0, 0, 0, 0.06);
|
|
}
|
|
|
|
/* Color coding for different metrics */
|
|
.threshold-slider.slider-cpu {
|
|
color: #3b82f6;
|
|
/* blue-500 */
|
|
}
|
|
|
|
.threshold-slider.slider-memory {
|
|
color: #10b981;
|
|
/* green-500 */
|
|
}
|
|
|
|
.threshold-slider.slider-disk {
|
|
color: #f59e0b;
|
|
/* amber-500 */
|
|
}
|
|
|
|
/* Value display inside thumb */
|
|
.threshold-value {
|
|
@apply absolute inset-0 flex items-center justify-center text-[10px] font-semibold pointer-events-none;
|
|
color: currentColor;
|
|
}
|
|
}
|
|
|
|
@layer components {
|
|
.pulse-shell {
|
|
width: 100%;
|
|
max-width: clamp(95rem, 92vw, 120rem);
|
|
margin-inline: auto;
|
|
padding-inline: clamp(1rem, 3vw, 3.25rem);
|
|
transition: padding-inline 0.3s ease;
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.pulse-shell {
|
|
padding-inline: clamp(0.75rem, 6vw, 1.25rem);
|
|
}
|
|
}
|
|
|
|
.pulse-panel {
|
|
padding: clamp(0.75rem, 1.8vw, 1.5rem);
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.pulse-panel {
|
|
padding: clamp(0.75rem, 5vw, 1.25rem);
|
|
}
|
|
}
|
|
|
|
/* Card styles */
|
|
.card {
|
|
@apply bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700;
|
|
}
|
|
|
|
/* Table styles */
|
|
.table-header {
|
|
@apply text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider;
|
|
}
|
|
|
|
.table-row {
|
|
@apply border-b border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-750;
|
|
}
|
|
|
|
/* Status indicators */
|
|
.status-running {
|
|
@apply text-green-600 dark:text-green-400;
|
|
}
|
|
|
|
.status-stopped {
|
|
@apply text-gray-600 dark:text-gray-400;
|
|
}
|
|
|
|
.status-error {
|
|
@apply text-red-600 dark:text-red-400;
|
|
}
|
|
|
|
/* Progress bars */
|
|
.progress-bar {
|
|
@apply bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden;
|
|
}
|
|
|
|
.progress-fill {
|
|
@apply h-full;
|
|
transition: width 300ms ease-out;
|
|
}
|
|
|
|
/* Stable chart containers */
|
|
.chart-stable-container {
|
|
contain: layout style;
|
|
will-change: contents;
|
|
}
|
|
|
|
/* Prevent chart SVG flicker */
|
|
.sparkline {
|
|
backface-visibility: hidden;
|
|
transform: translateZ(0);
|
|
}
|
|
|
|
/* Disable animations in charts mode to prevent blinking */
|
|
.charts-mode .sparkline path {
|
|
transition: none !important;
|
|
}
|
|
|
|
/* Custom scrollbar - subtle styling */
|
|
.custom-scrollbar {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: theme('colors.gray.300') theme('colors.gray.100');
|
|
}
|
|
|
|
.dark .custom-scrollbar {
|
|
scrollbar-color: theme('colors.gray.700') theme('colors.gray.800');
|
|
}
|
|
|
|
.custom-scrollbar::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
|
|
.custom-scrollbar::-webkit-scrollbar-track {
|
|
@apply bg-gray-100 dark:bg-gray-800;
|
|
}
|
|
|
|
.custom-scrollbar::-webkit-scrollbar-thumb {
|
|
@apply bg-gray-300 dark:bg-gray-700 rounded-full;
|
|
}
|
|
|
|
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
|
|
@apply bg-gray-400 dark:bg-gray-600;
|
|
}
|
|
}
|
|
|
|
/* Global scrollbar styling */
|
|
* {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: rgba(156, 163, 175, 0.5) transparent;
|
|
/* gray-400 with transparency */
|
|
}
|
|
|
|
.dark * {
|
|
scrollbar-color: rgba(55, 65, 81, 0.5) transparent;
|
|
/* gray-700 with transparency */
|
|
}
|
|
|
|
/* Make scrollbars even more subtle on hover */
|
|
*:hover {
|
|
scrollbar-color: rgba(156, 163, 175, 0.7) rgba(243, 244, 246, 0.5);
|
|
/* Slightly more visible on hover */
|
|
}
|
|
|
|
.dark *:hover {
|
|
scrollbar-color: rgba(75, 85, 99, 0.7) rgba(31, 41, 55, 0.3);
|
|
/* dark mode hover */
|
|
}
|
|
|
|
*::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
|
|
*::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
*::-webkit-scrollbar-thumb {
|
|
background-color: rgba(156, 163, 175, 0.5);
|
|
border-radius: 10px;
|
|
}
|
|
|
|
.dark *::-webkit-scrollbar-thumb {
|
|
background-color: rgba(55, 65, 81, 0.5);
|
|
}
|
|
|
|
*::-webkit-scrollbar-thumb:hover {
|
|
background-color: rgba(156, 163, 175, 0.8);
|
|
}
|
|
|
|
.dark *::-webkit-scrollbar-thumb:hover {
|
|
background-color: rgba(75, 85, 99, 0.8);
|
|
}
|
|
|
|
/* Dark mode transitions - Only apply to elements that actually change colors */
|
|
body,
|
|
.card,
|
|
.table-row,
|
|
.table-header,
|
|
.bg-white,
|
|
.bg-gray-50,
|
|
.bg-gray-100,
|
|
.bg-gray-200,
|
|
.bg-gray-300,
|
|
.bg-gray-700,
|
|
.bg-gray-800,
|
|
.bg-gray-900,
|
|
.text-gray-500,
|
|
.text-gray-600,
|
|
.text-gray-700,
|
|
.text-gray-800,
|
|
.text-gray-900,
|
|
.border-gray-200,
|
|
.border-gray-300,
|
|
.border-gray-600,
|
|
.border-gray-700,
|
|
.dark\:bg-gray-700,
|
|
.dark\:bg-gray-800,
|
|
.dark\:bg-gray-900,
|
|
.dark\:text-gray-100,
|
|
.dark\:text-gray-200,
|
|
.dark\:text-gray-300,
|
|
.dark\:text-gray-400,
|
|
.dark\:border-gray-600,
|
|
.dark\:border-gray-700 {
|
|
transition:
|
|
background-color 150ms ease-in-out,
|
|
color 150ms ease-in-out,
|
|
border-color 150ms ease-in-out;
|
|
}
|
|
|
|
/* Pulse logo animation - subtle ripple effect */
|
|
@keyframes pulse-logo {
|
|
0% {
|
|
transform: scale(1);
|
|
}
|
|
|
|
25% {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
50% {
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse-ring {
|
|
|
|
0%,
|
|
100% {
|
|
opacity: 0.92;
|
|
transform: scale(1);
|
|
}
|
|
|
|
50% {
|
|
opacity: 0.6;
|
|
transform: scale(1.1);
|
|
}
|
|
}
|
|
|
|
.animate-pulse-logo {
|
|
animation: pulse-logo 0.8s cubic-bezier(0.4, 0, 0.6, 1);
|
|
transform-origin: center;
|
|
}
|
|
|
|
.animate-pulse-logo .pulse-ring {
|
|
animation: pulse-ring 0.8s cubic-bezier(0.4, 0, 0.6, 1);
|
|
transform-origin: center;
|
|
transform-box: fill-box;
|
|
}
|
|
|
|
/* Stable table layout */
|
|
.table-fixed {
|
|
table-layout: fixed;
|
|
}
|
|
|
|
/* Prevent text from affecting column widths */
|
|
.table-fixed td,
|
|
.table-fixed th {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* Keep name column single line to avoid wrapping while giving it more space */
|
|
.table-fixed td:first-child {
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* Hide scrollbars but keep functionality */
|
|
.scrollbar-hide {
|
|
-ms-overflow-style: none;
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
.scrollbar-hide::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
/* Login page animations */
|
|
@keyframes fade-in {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-10px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slide-up {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse-slow {
|
|
|
|
0%,
|
|
100% {
|
|
opacity: 0.25;
|
|
}
|
|
|
|
50% {
|
|
opacity: 0.75;
|
|
}
|
|
}
|
|
|
|
.animate-fade-in {
|
|
animation: fade-in 0.6s ease-out forwards;
|
|
}
|
|
|
|
.animate-slide-up {
|
|
animation: slide-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.2s both;
|
|
}
|
|
|
|
.animate-pulse-slow {
|
|
animation: pulse-slow 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
}
|
|
|
|
/* New Premium Animations */
|
|
@keyframes float {
|
|
|
|
0%,
|
|
100% {
|
|
transform: translateY(0);
|
|
}
|
|
|
|
50% {
|
|
transform: translateY(-10px);
|
|
}
|
|
}
|
|
|
|
.animate-float {
|
|
animation: float 6s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes gradient-x {
|
|
|
|
0%,
|
|
100% {
|
|
background-size: 200% 200%;
|
|
background-position: left center;
|
|
}
|
|
|
|
50% {
|
|
background-size: 200% 200%;
|
|
background-position: right center;
|
|
}
|
|
}
|
|
|
|
.animate-gradient-x {
|
|
animation: gradient-x 3s ease infinite;
|
|
}
|
|
|
|
.delay-100 {
|
|
animation-delay: 100ms;
|
|
}
|
|
|
|
.delay-200 {
|
|
animation-delay: 200ms;
|
|
}
|
|
|
|
.delay-300 {
|
|
animation-delay: 300ms;
|
|
} |