Featured Distributors
You can get local support and easy ordering from our official distributors. They can help with customs and imports and integrate into enterprise purchasing solutions. In fact, if your lab is part of a large organization, there is a good chance your purchasing team is already using Science Exchange or Scientist.com.

DBA Italia
If you are in Europe and prefer to purchase through DBA Italia, you can. Our products are listed there so you can request a quote and order through their procurement process.
- Website: dbacompare.it
- Email: info@dbaitalia.it
- Phone: +39 02 26922300

Scientist.com
If you prefer to purchase through Scientist.com, you can. Our products are listed there for easy purchasing through your existing procurement workflow.
- Website: scientist.com
- Email: support@scientist.com
- Phone: +1 (877) 644-3044

Science Exchange
If you prefer to purchase through Science Exchange, you can. Our products are listed there for streamlined ordering and procurement.
- Website: scienceexchange.com
- Email: info@scienceexchange.com
You can get local support and easy ordering from our official distributors. They can help with customs and imports and integrate into enterprise purchasing solutions. In fact, if your lab is part of a large organization, there is a good chance your purchasing team is already using Science Exchange or Scientist.com.
const orb = document.querySelector('.orb-background');
const cards = document.querySelectorAll('#first-card, #second-card, #third-card');
let rotation = 0;
let isPaused = false;
let animationFrame;
function updateRotation() {
if (!isPaused) {
rotation += 1; // degrees per frame
if (rotation >= 360) rotation -= 360;
orb.style.transform = `rotate(${rotation}deg) scale(1)`;
}
animationFrame = requestAnimationFrame(updateRotation);
}
function animateExtra90() {
if (isPaused) return;
isPaused = true;
cancelAnimationFrame(animationFrame);
const start = rotation;
const target = start + 90;
const duration = 500;
const startTime = performance.now();
function step(currentTime) {
const progress = Math.min((currentTime - startTime) / duration, 1);
const eased = easeOutCubic(progress);
const newRotation = start + eased * 90;
orb.style.transform = `rotate(${newRotation}deg) scale(1)`;
if (progress < 1) {
requestAnimationFrame(step);
} else {
rotation = target % 360;
isPaused = false;
animationFrame = requestAnimationFrame(updateRotation); // restart loop
}
}
requestAnimationFrame(step);
}
function easeOutCubic(t) {
return 1 - Math.pow(1 - t, 3);
}
// Initial rotation
animationFrame = requestAnimationFrame(updateRotation);
cards.forEach(card => {
card.addEventListener('mouseenter', animateExtra90);
card.addEventListener('focus', animateExtra90);
});



