A complete blockchain implementation featuring: - synord: Full node with GHOSTDAG consensus - explorer-web: Modern React blockchain explorer with 3D DAG visualization - CLI wallet and tools - Smart contract SDK and example contracts (DEX, NFT, token) - WASM crypto library for browser/mobile
306 lines
8.7 KiB
CSS
306 lines
8.7 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
/* Dark theme (default) */
|
|
:root,
|
|
:root.dark {
|
|
--color-bg-primary: #0d1117;
|
|
--color-bg-secondary: #161b22;
|
|
--color-bg-tertiary: #1f2937;
|
|
--color-bg-card: #111827;
|
|
--color-border: #374151;
|
|
--color-border-light: #4b5563;
|
|
--color-text-primary: #f9fafb;
|
|
--color-text-secondary: #9ca3af;
|
|
--color-text-muted: #6b7280;
|
|
color-scheme: dark;
|
|
}
|
|
|
|
/* Light theme */
|
|
:root.light {
|
|
--color-bg-primary: #ffffff;
|
|
--color-bg-secondary: #f9fafb;
|
|
--color-bg-tertiary: #f3f4f6;
|
|
--color-bg-card: #ffffff;
|
|
--color-border: #e5e7eb;
|
|
--color-border-light: #d1d5db;
|
|
--color-text-primary: #111827;
|
|
--color-text-secondary: #4b5563;
|
|
--color-text-muted: #6b7280;
|
|
color-scheme: light;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
|
background-color: var(--color-bg-primary);
|
|
color: var(--color-text-primary);
|
|
transition: background-color 0.3s ease, color 0.3s ease;
|
|
}
|
|
|
|
code, .font-mono {
|
|
font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
|
|
}
|
|
}
|
|
|
|
@layer components {
|
|
.card {
|
|
@apply bg-gray-900 border border-gray-800 rounded-lg;
|
|
}
|
|
|
|
.card-header {
|
|
@apply px-4 py-3 border-b border-gray-800;
|
|
}
|
|
|
|
.card-body {
|
|
@apply p-4;
|
|
}
|
|
|
|
.btn {
|
|
@apply px-4 py-2 rounded-lg font-medium transition-colors;
|
|
}
|
|
|
|
.btn-primary {
|
|
@apply bg-synor-600 hover:bg-synor-500 text-white;
|
|
}
|
|
|
|
.btn-secondary {
|
|
@apply bg-gray-800 hover:bg-gray-700 text-gray-100;
|
|
}
|
|
|
|
.link {
|
|
@apply text-synor-400 hover:text-synor-300 transition-colors;
|
|
}
|
|
|
|
.hash {
|
|
@apply font-mono text-sm break-all;
|
|
}
|
|
|
|
.stat-value {
|
|
@apply text-2xl font-semibold text-white;
|
|
}
|
|
|
|
.stat-label {
|
|
@apply text-sm text-gray-400;
|
|
}
|
|
|
|
.badge {
|
|
@apply inline-flex items-center px-2 py-0.5 rounded text-xs font-medium;
|
|
}
|
|
|
|
.badge-success {
|
|
@apply bg-green-900/50 text-green-400 border border-green-800;
|
|
}
|
|
|
|
.badge-warning {
|
|
@apply bg-yellow-900/50 text-yellow-400 border border-yellow-800;
|
|
}
|
|
|
|
.badge-info {
|
|
@apply bg-synor-900/50 text-synor-400 border border-synor-800;
|
|
}
|
|
|
|
.table-row {
|
|
@apply border-b border-gray-800 hover:bg-gray-800/50 transition-colors;
|
|
}
|
|
|
|
.input {
|
|
@apply w-full px-4 py-2 bg-gray-800 border border-gray-700 rounded-lg
|
|
text-gray-100 placeholder-gray-500 focus:outline-none
|
|
focus:border-synor-500 focus:ring-1 focus:ring-synor-500;
|
|
}
|
|
}
|
|
|
|
@layer utilities {
|
|
.scrollbar-thin {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: theme('colors.gray.700') transparent;
|
|
}
|
|
|
|
.scrollbar-thin::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
|
|
.scrollbar-thin::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
.scrollbar-thin::-webkit-scrollbar-thumb {
|
|
background-color: theme('colors.gray.700');
|
|
border-radius: 3px;
|
|
}
|
|
|
|
/* Animated gradient text */
|
|
.animate-gradient {
|
|
animation: gradient-shift 3s ease infinite;
|
|
}
|
|
|
|
@keyframes gradient-shift {
|
|
0%, 100% {
|
|
background-position: 0% 50%;
|
|
}
|
|
50% {
|
|
background-position: 100% 50%;
|
|
}
|
|
}
|
|
|
|
/* Staggered fade-in for cards */
|
|
.animate-fade-in-up {
|
|
animation: fade-in-up 0.5s ease-out forwards;
|
|
opacity: 0;
|
|
}
|
|
|
|
@keyframes fade-in-up {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
/* Glow pulse effect */
|
|
.animate-glow-pulse {
|
|
animation: glow-pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes glow-pulse {
|
|
0%, 100% {
|
|
box-shadow: 0 0 5px rgba(124, 58, 237, 0.3);
|
|
}
|
|
50% {
|
|
box-shadow: 0 0 20px rgba(124, 58, 237, 0.6);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* ============================================
|
|
Light Theme Overrides
|
|
These are placed outside @layer to override
|
|
Tailwind utilities when .light class is present
|
|
============================================ */
|
|
|
|
/* Background color overrides */
|
|
.light .bg-gray-900 { background-color: #ffffff !important; }
|
|
.light .bg-gray-800 { background-color: #f9fafb !important; }
|
|
.light .bg-gray-950 { background-color: #ffffff !important; }
|
|
.light .bg-gray-950\/95 { background-color: rgba(255, 255, 255, 0.95) !important; }
|
|
.light .bg-gray-900\/40 { background-color: rgba(249, 250, 251, 0.9) !important; }
|
|
.light .bg-gray-900\/50 { background-color: rgba(249, 250, 251, 0.9) !important; }
|
|
.light .bg-gray-800\/50 { background-color: rgba(243, 244, 246, 0.8) !important; }
|
|
.light .bg-gray-800\/80 { background-color: rgba(243, 244, 246, 0.9) !important; }
|
|
|
|
/* Text color overrides */
|
|
.light .text-gray-100 { color: #1f2937 !important; }
|
|
.light .text-gray-200 { color: #374151 !important; }
|
|
.light .text-gray-300 { color: #4b5563 !important; }
|
|
.light .text-gray-400 { color: #6b7280 !important; }
|
|
.light .text-gray-500 { color: #9ca3af !important; }
|
|
.light .text-white { color: #111827 !important; }
|
|
|
|
/* Border color overrides */
|
|
.light .border-gray-700 { border-color: #d1d5db !important; }
|
|
.light .border-gray-700\/50 { border-color: rgba(209, 213, 219, 0.5) !important; }
|
|
.light .border-gray-800 { border-color: #e5e7eb !important; }
|
|
.light .divide-gray-800 > :not([hidden]) ~ :not([hidden]) { border-color: #e5e7eb !important; }
|
|
|
|
/* Card component */
|
|
.light .card {
|
|
background-color: #ffffff !important;
|
|
border-color: #e5e7eb !important;
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;
|
|
}
|
|
|
|
/* Header */
|
|
.light header {
|
|
background-color: rgba(255, 255, 255, 0.95) !important;
|
|
border-bottom-color: #e5e7eb !important;
|
|
}
|
|
|
|
/* Footer */
|
|
.light footer {
|
|
background-color: #f9fafb !important;
|
|
border-top-color: #e5e7eb !important;
|
|
}
|
|
|
|
/* Input fields */
|
|
.light input,
|
|
.light .input {
|
|
background-color: #f9fafb !important;
|
|
border-color: #d1d5db !important;
|
|
color: #111827 !important;
|
|
}
|
|
|
|
.light input::placeholder {
|
|
color: #9ca3af !important;
|
|
}
|
|
|
|
/* Hover states */
|
|
.light .hover\:bg-gray-800:hover { background-color: #f3f4f6 !important; }
|
|
.light .hover\:bg-gray-700:hover { background-color: #e5e7eb !important; }
|
|
.light .hover\:bg-gray-800\/50:hover { background-color: rgba(243, 244, 246, 0.8) !important; }
|
|
.light .hover\:text-white:hover { color: #111827 !important; }
|
|
|
|
/* Glassmorphism adjustments */
|
|
.light .backdrop-blur-xl {
|
|
background-color: rgba(255, 255, 255, 0.8) !important;
|
|
}
|
|
|
|
/* Badge adjustments for light mode */
|
|
.light .badge-success {
|
|
background-color: rgba(220, 252, 231, 0.8) !important;
|
|
border-color: #86efac !important;
|
|
}
|
|
|
|
.light .badge-warning {
|
|
background-color: rgba(254, 249, 195, 0.8) !important;
|
|
border-color: #fde047 !important;
|
|
}
|
|
|
|
.light .badge-info {
|
|
background-color: rgba(237, 233, 254, 0.8) !important;
|
|
border-color: #c4b5fd !important;
|
|
}
|
|
|
|
/* Scrollbar for light mode */
|
|
.light .scrollbar-thin {
|
|
scrollbar-color: #d1d5db transparent;
|
|
}
|
|
|
|
.light .scrollbar-thin::-webkit-scrollbar-thumb {
|
|
background-color: #d1d5db;
|
|
}
|
|
|
|
/* Stats card glassmorphism adjustments */
|
|
.light .bg-gray-900\/90 { background-color: rgba(255, 255, 255, 0.95) !important; }
|
|
.light .bg-gray-900\/95 { background-color: rgba(255, 255, 255, 0.98) !important; }
|
|
.light .from-white\/5 { --tw-gradient-from: rgba(0, 0, 0, 0.03) !important; }
|
|
.light .to-white\/0 { --tw-gradient-to: rgba(0, 0, 0, 0) !important; }
|
|
.light .bg-white\/5 { background-color: rgba(0, 0, 0, 0.05) !important; }
|
|
.light .bg-white\/10 { background-color: rgba(0, 0, 0, 0.08) !important; }
|
|
.light .group:hover .group-hover\:bg-white\/10 { background-color: rgba(0, 0, 0, 0.1) !important; }
|
|
|
|
/* Stats card gradient border adjustments for light mode */
|
|
.light .from-synor-500\/20 { --tw-gradient-from: rgba(124, 58, 237, 0.15) !important; }
|
|
.light .to-blue-500\/20 { --tw-gradient-to: rgba(59, 130, 246, 0.15) !important; }
|
|
.light .from-green-500\/30 { --tw-gradient-from: rgba(34, 197, 94, 0.2) !important; }
|
|
.light .to-emerald-500\/20 { --tw-gradient-to: rgba(16, 185, 129, 0.15) !important; }
|
|
.light .from-synor-500\/30 { --tw-gradient-from: rgba(124, 58, 237, 0.2) !important; }
|
|
.light .to-violet-500\/20 { --tw-gradient-to: rgba(139, 92, 246, 0.15) !important; }
|
|
.light .from-blue-500\/30 { --tw-gradient-from: rgba(59, 130, 246, 0.2) !important; }
|
|
.light .to-cyan-500\/20 { --tw-gradient-to: rgba(6, 182, 212, 0.15) !important; }
|
|
.light .from-amber-500\/30 { --tw-gradient-from: rgba(245, 158, 11, 0.2) !important; }
|
|
.light .to-orange-500\/20 { --tw-gradient-to: rgba(249, 115, 22, 0.15) !important; }
|
|
|
|
/* Glow effect adjustments */
|
|
.light .from-synor-500\/10 { --tw-gradient-from: rgba(124, 58, 237, 0.08) !important; }
|
|
.light .to-blue-500\/10 { --tw-gradient-to: rgba(59, 130, 246, 0.08) !important; }
|
|
|
|
/* View toggle adjustments */
|
|
.light .bg-synor-600 { background-color: rgb(124, 58, 237) !important; }
|
|
.light .bg-synor-500\/20 { background-color: rgba(124, 58, 237, 0.15) !important; }
|
|
.light .bg-synor-900\/50 { background-color: rgba(237, 233, 254, 0.5) !important; }
|