@import "tailwindcss"; @plugin "@tailwindcss/typography"; :root { --background: #0a0a0a; --surface: rgba(255, 255, 255, 0.03); --surface-hover: rgba(255, 255, 255, 0.06); --border: rgba(255, 255, 255, 0.08); --border-strong: rgba(255, 255, 255, 0.15); --text-primary: #ffffff; --text-secondary: #a1a1aa; --text-muted: #71717a; --accent-blue: #3b82f6; --accent-indigo: #6366f1; --accent-purple: #9333ea; --gradient-primary: linear-gradient(135deg, #3b82f6 0%, #6366f1 50%, #9333ea 100%); --gradient-subtle: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(147, 51, 234, 0.1) 100%); --shadow-glow: 0 0 40px rgba(59, 130, 246, 0.3); /* Shared Vectry design language aliases */ --surface-page: var(--background); --surface-card: var(--surface); --surface-card-hover: var(--surface-hover); --border-default: var(--border); --border-subtle: rgba(255, 255, 255, 0.04); --radius-card: 1rem; --radius-button: 0.5rem; --radius-icon: 0.75rem; } * { box-sizing: border-box; } :focus-visible { outline: none; box-shadow: 0 0 0 2px var(--accent-blue); border-radius: 0.25rem; } a:focus-visible, button:focus-visible, [role="button"]:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--accent-blue); } html { scroll-behavior: smooth; } body { background-color: var(--background); color: var(--text-primary); font-feature-settings: "rlig" 1, "calt" 1; } ::selection { background: rgba(59, 130, 246, 0.3); color: white; } .glass { background: var(--surface); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--border); } .glass-strong { background: rgba(255, 255, 255, 0.05); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border: 1px solid var(--border-strong); } .gradient-text { background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-border { position: relative; } .gradient-border::before { content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1px; background: var(--gradient-primary); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events: none; } .glow { box-shadow: var(--shadow-glow); } .glow-subtle { box-shadow: 0 0 60px rgba(59, 130, 246, 0.15); } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes slide-up { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } } @keyframes slide-down { from { opacity: 0; transform: translateY(-12px); } to { opacity: 1; transform: translateY(0); } } @keyframes scale-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px rgba(59, 130, 246, 0.4); } 50% { box-shadow: 0 0 40px rgba(59, 130, 246, 0.6), 0 0 60px rgba(147, 51, 234, 0.3); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes spin-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .animate-fade-in { animation: fade-in 0.6s ease-out forwards; } .animate-slide-up { animation: slide-up 0.6s ease-out forwards; } .animate-slide-down { animation: slide-down 0.4s ease-out forwards; } .animate-scale-in { animation: scale-in 0.4s ease-out forwards; } .animate-pulse-glow { animation: pulse-glow 2s ease-in-out infinite; } .animate-shimmer { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent); background-size: 200% 100%; animation: shimmer 2s infinite; } .animate-float { animation: float 6s ease-in-out infinite; } .animate-spin-slow { animation: spin-slow 20s linear infinite; } .stagger-1 { animation-delay: 0.1s; } .stagger-2 { animation-delay: 0.2s; } .stagger-3 { animation-delay: 0.3s; } .stagger-4 { animation-delay: 0.4s; } .stagger-5 { animation-delay: 0.5s; } .line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .bg-blue-500\/60 { background-color: rgba(59, 130, 246, 0.6); } .bg-purple-500\/60 { background-color: rgba(168, 85, 247, 0.6); } .bg-green-500\/60 { background-color: rgba(34, 197, 94, 0.6); } .bg-orange-500\/60 { background-color: rgba(249, 115, 22, 0.6); } .scrollbar-thin { scrollbar-width: thin; scrollbar-color: rgba(255, 255, 255, 0.2) transparent; } .scrollbar-thin::-webkit-scrollbar { width: 6px; height: 6px; } .scrollbar-thin::-webkit-scrollbar-track { background: transparent; } .scrollbar-thin::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); border-radius: 3px; } .scrollbar-thin::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.3); } .bg-grid { background-image: linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px); background-size: 60px 60px; } .bg-gradient-radial { background: radial-gradient(ellipse at top, rgba(59, 130, 246, 0.15) 0%, transparent 50%), radial-gradient(ellipse at bottom, rgba(147, 51, 234, 0.1) 0%, transparent 50%); } .noise { position: relative; } .noise::after { content: ""; position: absolute; inset: 0; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E"); opacity: 0.03; pointer-events: none; } .btn-primary { background: var(--gradient-primary); color: white; font-weight: 500; padding: 0.75rem 1.5rem; border-radius: 0.5rem; transition: all 0.2s ease; position: relative; overflow: hidden; } .btn-primary:hover { transform: translateY(-1px); box-shadow: 0 8px 30px rgba(59, 130, 246, 0.4); } .btn-primary:active { transform: translateY(0); } .btn-secondary { background: var(--surface); color: var(--text-primary); font-weight: 500; padding: 0.75rem 1.5rem; border-radius: 0.5rem; border: 1px solid var(--border); transition: all 0.2s ease; } .btn-secondary:hover { background: var(--surface-hover); border-color: var(--border-strong); } .input-field { background: rgba(0, 0, 0, 0.3); border: 1px solid var(--border); border-radius: 0.5rem; padding: 0.75rem 1rem; color: var(--text-primary); transition: all 0.2s ease; width: 100%; } .input-field:focus { outline: none; border-color: var(--accent-blue); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } .input-field::placeholder { color: var(--text-muted); } .card { background: var(--surface); border: 1px solid var(--border); border-radius: 1rem; padding: 1.5rem; transition: all 0.3s ease; } .card:hover { background: var(--surface-hover); border-color: var(--border-strong); transform: translateY(-2px); } .icon-box { width: 3rem; height: 3rem; border-radius: 0.75rem; background: var(--gradient-subtle); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; color: var(--accent-blue); } .badge { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.25rem 0.75rem; background: var(--surface); border: 1px solid var(--border); border-radius: 9999px; font-size: 0.75rem; font-weight: 500; color: var(--text-secondary); } .code-block { background: rgba(0, 0, 0, 0.5); border: 1px solid var(--border); border-radius: 0.75rem; padding: 1rem; font-family: var(--font-mono), ui-monospace, monospace; font-size: 0.875rem; overflow-x: auto; } .divider { height: 1px; background: linear-gradient(90deg, transparent, var(--border), transparent); } [data-animate] { opacity: 0; transform: translateY(32px); transition: opacity 0.7s ease-out, transform 0.7s ease-out; } [data-animate="visible"] { opacity: 1; transform: translateY(0); } [data-animate][data-animate-delay="1"] { transition-delay: 0.1s; } [data-animate][data-animate-delay="2"] { transition-delay: 0.2s; } [data-animate][data-animate-delay="3"] { transition-delay: 0.3s; } [data-animate][data-animate-delay="4"] { transition-delay: 0.4s; } @media (prefers-reduced-motion: reduce) { [data-animate] { opacity: 1; transform: none; transition: none; } }