Files
smom-dbis-138/frontend-dapp/src/index.css
2026-03-02 12:14:09 -08:00

434 lines
7.9 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
body {
margin: 0;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
background: #1a1d24;
min-height: 100vh;
}
@keyframes gradientShift {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
/* ThirdWeb-inspired animations and styles */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes shimmer {
0% {
background-position: -1000px 0;
}
100% {
background-position: 1000px 0;
}
}
@keyframes pulse-glow {
0%, 100% {
box-shadow: 0 0 5px rgba(59, 130, 246, 0.5);
}
50% {
box-shadow: 0 0 20px rgba(59, 130, 246, 0.8), 0 0 30px rgba(147, 51, 234, 0.6);
}
}
.animate-fadeIn {
animation: fadeIn 0.5s ease-out;
}
.animate-shimmer {
animation: shimmer 2s infinite linear;
background: linear-gradient(
to right,
#f6f7f8 0%,
#edeef1 20%,
#f6f7f8 40%,
#f6f7f8 100%
);
background-size: 1000px 100%;
}
.animate-pulse-glow {
animation: pulse-glow 2s ease-in-out infinite;
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(to bottom, #3b82f6, #8b5cf6);
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: linear-gradient(to bottom, #2563eb, #7c3aed);
}
/* Glass morphism effect */
.glass {
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.18);
}
/* Gradient text */
.gradient-text {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Button hover effects */
.btn-gradient {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
transition: all 0.3s ease;
}
.btn-gradient:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px rgba(102, 126, 234, 0.4);
}
/* Card hover effect */
.card-hover {
transition: all 0.3s ease;
}
.card-hover:hover {
transform: translateY(-5px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
}
/* Additional animations */
@keyframes slideIn {
from {
opacity: 0;
transform: translateX(-20px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-10px);
}
}
@keyframes spin-slow {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.animate-slideIn {
animation: slideIn 0.3s ease-out;
}
.animate-scaleIn {
animation: scaleIn 0.2s ease-out;
}
.animate-bounce {
animation: bounce 1s infinite;
}
.animate-spin-slow {
animation: spin-slow 3s linear infinite;
}
/* Focus styles for accessibility */
*:focus-visible {
outline: 2px solid #3b82f6;
outline-offset: 2px;
border-radius: 4px;
}
/* Input focus styles */
input:focus,
select:focus,
textarea:focus {
outline: none;
ring: 2px;
ring-color: rgba(59, 130, 246, 0.5);
}
/* Smooth transitions */
* {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
/* Responsive text sizing */
@media (max-width: 640px) {
html {
font-size: 14px;
}
}
/* Loading spinner */
.spinner {
border: 3px solid rgba(59, 130, 246, 0.1);
border-top-color: #3b82f6;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
/* Success checkmark animation */
@keyframes checkmark {
0% {
stroke-dashoffset: 100;
}
100% {
stroke-dashoffset: 0;
}
}
.checkmark {
stroke-dasharray: 100;
stroke-dashoffset: 100;
animation: checkmark 0.5s ease-out forwards;
}
/* Gradient backgrounds */
.bg-gradient-primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.bg-gradient-secondary {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
}
.bg-gradient-success {
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
}
/* Text selection */
::selection {
background-color: rgba(59, 130, 246, 0.3);
color: inherit;
}
/* Portal Styling Enhancements */
/* Animated grid pattern for portal effect */
@keyframes gridMove {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(60px, 60px);
}
}
.portal-grid {
background-image:
linear-gradient(rgba(34, 211, 238, 0.1) 1px, transparent 1px),
linear-gradient(90deg, rgba(34, 211, 238, 0.1) 1px, transparent 1px);
background-size: 60px 60px;
animation: gridMove 20s linear infinite;
}
/* Portal entrance animation */
@keyframes portalOpen {
0% {
opacity: 0;
transform: scale(0.8) rotateY(90deg);
filter: blur(10px);
}
100% {
opacity: 1;
transform: scale(1) rotateY(0deg);
filter: blur(0px);
}
}
.portal-entrance {
animation: portalOpen 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
}
/* Holographic shimmer effect */
@keyframes holographic {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
.holographic-text {
background: linear-gradient(
90deg,
#06b6d4 0%,
#8b5cf6 25%,
#ec4899 50%,
#8b5cf6 75%,
#06b6d4 100%
);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: holographic 3s linear infinite;
}
/* Energy flow animation */
@keyframes energyFlow {
0% {
transform: translateX(-200%) translateY(-50%);
}
100% {
transform: translateX(200%) translateY(-50%);
}
}
.energy-flow::before {
content: '';
position: absolute;
top: 50%;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(
90deg,
transparent,
rgba(34, 211, 238, 0.8),
rgba(168, 85, 247, 0.8),
rgba(236, 72, 153, 0.8),
transparent
);
animation: energyFlow 2s ease-in-out infinite;
}
/* Portal glow pulse */
@keyframes portalGlow {
0%, 100% {
box-shadow:
0 0 20px rgba(34, 211, 238, 0.4),
0 0 40px rgba(168, 85, 247, 0.3),
inset 0 0 20px rgba(34, 211, 238, 0.1);
}
50% {
box-shadow:
0 0 40px rgba(34, 211, 238, 0.6),
0 0 80px rgba(168, 85, 247, 0.5),
inset 0 0 30px rgba(34, 211, 238, 0.2);
}
}
.portal-glow {
animation: portalGlow 3s ease-in-out infinite;
}
/* Floating particles */
@keyframes float {
0%, 100% {
transform: translateY(0) translateX(0);
opacity: 0.3;
}
50% {
transform: translateY(-20px) translateX(10px);
opacity: 0.8;
}
}
.floating-particle {
animation: float 4s ease-in-out infinite;
}
/* Neon border effect */
.neon-border {
border: 2px solid;
border-image: linear-gradient(
45deg,
rgba(34, 211, 238, 0.5),
rgba(168, 85, 247, 0.5),
rgba(236, 72, 153, 0.5),
rgba(34, 211, 238, 0.5)
) 1;
box-shadow:
0 0 10px rgba(34, 211, 238, 0.3),
inset 0 0 10px rgba(34, 211, 238, 0.1);
}
/* Portal ring effect */
@keyframes portalRing {
0%, 100% {
opacity: 0.3;
transform: scale(1);
}
50% {
opacity: 0.6;
transform: scale(1.05);
}
}
.portal-ring {
animation: portalRing 2s ease-in-out infinite;
}