/* ── Russell's mark: a core with two moons on tilted orbits ──
   One file for the one mark: loaded from base.html, so the header button, the
   chat widget and the Ask Russell page all draw it from here. Self-sufficient
   outside soft.css (base.html has no --label / --accent, hence the fallbacks).
   Every loop is a full turn or a there-and-back, so nothing snaps or
   restarts. While he works, setOrbitPace eases playbackRate on the running
   animations, which keeps their position, so the speed-up is seamless.
   Each moon is a sideways swing plus an up-down swing a quarter-period
   apart; the two sine-eased swings trace the ellipse. */
.orbit { display: block; overflow: visible; color: var(--label, currentColor); --orbit-accent: var(--accent, var(--garnet)); }
html[data-theme="dark"] .orbit { --orbit-accent: #E0607D; }
.orbit .mx { animation: orbit-x 3s cubic-bezier(.37,0,.63,1) infinite alternate; }
.orbit .my { animation: orbit-y 3s cubic-bezier(.37,0,.63,1) -1.5s infinite alternate; }
.orbit .o2 .mx { animation-duration: 4.5s; }
.orbit .o2 .my { animation-duration: 4.5s; animation-delay: -2.25s; animation-direction: alternate-reverse; }
.orbit .core { transform-origin: 12px 12px; animation: orbit-core 3s ease-in-out infinite alternate; }
@keyframes orbit-x { from { transform: translateX(-9.5px); } to { transform: translateX(9.5px); } }
@keyframes orbit-y { from { transform: translateY(-3.6px); } to { transform: translateY(3.6px); } }
@keyframes orbit-core { from { transform: scale(1); } to { transform: scale(0.82); } }
/* Every mark on screen keeps moving (the welcome one too); only the pace changes. */
@media (prefers-reduced-motion: reduce) { .orbit * { animation: none !important; } }
