.loader { position: fixed; inset: 0; background: var(--bg-primary); z-index: 9999; display: flex; justify-content: center; align-items: center; transition: opacity 0.5s; }
.spinner { width: 40px; height: 40px; border: 3px solid rgba(255,255,255,0.1); border-top-color: var(--accent-blue); border-radius: 50%; animation: spin 1s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.loader.hidden { opacity: 0; pointer-events: none; }
.reveal { opacity: 0; transform: translateY(30px); transition: all 0.8s ease; }
.reveal.active { opacity: 1; transform: translateY(0); }
.back-to-top { position: fixed; bottom: 30px; right: 30px; width: 45px; height: 45px; background: #fff; color: #000; border: none; border-radius: 50%; cursor: pointer; opacity: 0; transition: 0.3s; z-index: 99; }
.back-to-top.visible { opacity: 1; }
#particles-canvas { position: absolute; inset: 0; opacity: 0.6; pointer-events: none; }
