* { box-sizing: border-box; margin: 0; padding: 0; } body { width: 100%; background: #0f1117; background-image: radial-gradient(rgba(255,255,255,0.028) 1px, transparent 1px); background-size: 28px 28px; color: #f0eeff; font-family: 'Inter', system-ui, -apple-system, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-x: hidden; } /* ── Animations ────────────────────────────────────────── */ @keyframes viewEnter { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px rgba(29,78,216,0.3); } 50% { box-shadow: 0 0 40px rgba(29,78,216,0.6); } } @keyframes shimmer { from { background-position: -200% center; } to { background-position: 200% center; } } @keyframes blobDrift1 { 0% { transform: translate(0, 0) scale(1); } 30% { transform: translate(40px, -30px) scale(1.06); } 65% { transform: translate(-20px, 25px) scale(0.96); } 100% { transform: translate(25px, 15px) scale(1.03); } } @keyframes blobDrift2 { 0% { transform: translate(0, 0) scale(1); } 30% { transform: translate(-35px, 40px) scale(1.04); } 65% { transform: translate(25px, -20px) scale(0.97); } 100% { transform: translate(-15px, 30px) scale(1.05); } } /* ── View transitions ──────────────────────────────────── */ .view-enter { animation: viewEnter 0.35s cubic-bezier(0.16, 1, 0.3, 1) both; } .fade-in { animation: fadeIn 0.2s ease forwards; } /* ── Cards ─────────────────────────────────────────────── */ .card { transition: transform 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease; will-change: transform; } .card:hover { transform: translateY(-4px); border-color: #2e3464 !important; box-shadow: 0 16px 48px rgba(0,0,0,0.6), 0 0 0 1px rgba(29,78,216,0.15) !important; } /* ── Buttons ────────────────────────────────────────────── */ .btn-grad { transition: transform 0.15s ease, box-shadow 0.2s ease; cursor: pointer; } .btn-grad:hover { transform: translateY(-2px); box-shadow: 0 10px 32px rgba(29,78,216,0.45) !important; } .btn-grad:active { transform: scale(0.97) !important; } .btn-ghost { transition: color 0.15s ease, background 0.15s ease; } .btn-ghost:hover { color: #c4c2d8 !important; } /* ── Inputs ─────────────────────────────────────────────── */ input, textarea, select { font-family: inherit; background: #0e1320; color: #f0eeff; border: 1px solid #1e2438; border-radius: 8px; outline: none; transition: border-color 0.18s, box-shadow 0.18s; } input:focus, textarea:focus, select:focus { border-color: #1d4ed8; box-shadow: 0 0 0 3px rgba(29,78,216,0.15); } input::placeholder, textarea::placeholder { color: #2e3a52; } button { font-family: inherit; } /* ── Nav tab indicator ──────────────────────────────────── */ .nav-tab { position: relative; transition: color 0.18s ease; } .nav-tab::after { content: ''; position: absolute; bottom: -1px; left: 0; right: 0; height: 2px; border-radius: 2px 2px 0 0; background: linear-gradient(90deg, #1d4ed8, #0891b2); transform: scaleX(0); transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1); } .nav-tab.active::after { transform: scaleX(1); } /* ── Scrollbar ──────────────────────────────────────────── */ ::-webkit-scrollbar { width: 5px; height: 5px; } ::-webkit-scrollbar-track { background: #0f1117; } ::-webkit-scrollbar-thumb { background: #1e2438; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #2e3464; }