@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&display=swap'); @tailwind base; @tailwind components; @tailwind utilities; * { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; } body { background-color: #0a0a0f; color: #e8e8f5; font-family: 'Space Grotesk', system-ui, sans-serif; overflow-x: hidden; } ::selection { background: rgba(0, 240, 255, 0.3); color: #ffffff; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #0a0a0f; } ::-webkit-scrollbar-thumb { background: #3d3d5c; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #5a5a8a; } /* Grid background pattern */ .grid-pattern { background-image: linear-gradient(rgba(0, 240, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 240, 255, 0.03) 1px, transparent 1px); background-size: 50px 50px; } /* Noise texture */ .noise-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; opacity: 0.03; z-index: 1000; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E"); } /* Glitch effect */ .glitch { position: relative; } .glitch::before, .glitch::after { content: attr(data-text); position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .glitch::before { animation: glitch-1 2s infinite linear alternate-reverse; clip-path: polygon(0 0, 100% 0, 100% 35%, 0 35%); transform: translate(-2px, -2px); color: #ff3366; } .glitch::after { animation: glitch-2 2s infinite linear alternate-reverse; clip-path: polygon(0 65%, 100% 65%, 100% 100%, 0 100%); transform: translate(2px, 2px); color: #00f0ff; } @keyframes glitch-1 { 0%, 100% { transform: translate(0); } 20% { transform: translate(-3px, 3px); } 40% { transform: translate(-3px, -3px); } 60% { transform: translate(3px, 3px); } 80% { transform: translate(3px, -3px); } } @keyframes glitch-2 { 0%, 100% { transform: translate(0); } 20% { transform: translate(3px, -3px); } 40% { transform: translate(3px, 3px); } 60% { transform: translate(-3px, -3px); } 80% { transform: translate(-3px, 3px); } } /* Terminal cursor */ .terminal-cursor::after { content: '▋'; animation: blink 1s step-end infinite; color: #00f0ff; } @keyframes blink { 50% { opacity: 0; } } /* Magnetic button effect */ .magnetic-btn { transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); } /* Card hover glow */ .card-glow { transition: all 0.3s ease; } .card-glow:hover { box-shadow: 0 0 30px rgba(0, 240, 255, 0.15); } /* Text gradient */ .text-gradient { background: linear-gradient(135deg, #00f0ff 0%, #ff3366 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Binary rain canvas */ #binary-canvas { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; opacity: 0.05; z-index: 1; }