/* GENERATED by dev/generate_spinner_frames.py — do not edit. Change the script
   and re-run it; tests/test_brand_spinner.py fails if this file and the script
   disagree.

   The constellation morph (design_system.md §10.1; brand owner, 2026-10-05).
   components.brand.spinner renders six line images and eight live dots
   inside `.vm-spinner`. Every dot moves by translate() and is sized by scale()
   from a 6px box, so no star is ever enlarged. Each figure's lines fade out
   before its stars leave and the next figure's fade in once they arrive:
   1.5 s a figure, 9 s a cycle. Every animation runs that one cycle
   with no delay, so assets/brand_mark_sync.js keeps them in step by giving
   them one start time.

   None of these elements carries a class the pack (verdemar-spinner.css)
   styles, so the pack, which stays byte-identical (§0.12) and loads after this
   file, has nothing here to override. Its `.vm-spinner` box rule still sizes
   and positions the mark.

   Without animation (a mark whose animation never applies) the dots rest on
   figure 1. Reduced motion rests on figure 2, Ursa Minor: Polaris, the one
   star that does not move. The reduced-motion rules come last and match the
   rules they replace on specificity, so they win by order. */
/* ── The dots ─────────────────────────────────────────────────────────── */
.vm-spinner > .vm-spinner__dot {
    position: absolute;
    left: -3px;
    top: -3px;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    transform-origin: 50% 50%;
}
.vm-spinner--light > .vm-spinner__dot { background-color: var(--vm-primary); }
.vm-spinner--dark > .vm-spinner__dot { background-color: var(--vm-canvas); }
/* Dot 0 is every figure's teal star: the LOGO teal, not UI positive (§0.8), on top. */
.vm-spinner > .vm-spinner__dot.vm-spinner__dot--0 { background-color: var(--vm-brand-teal); z-index: 1; }
/* At rest: figure 1. */
.vm-spinner > .vm-spinner__dot--0 { transform: translate(12.65px, 42.5px) scale(0.7667); }
.vm-spinner > .vm-spinner__dot--1 { transform: translate(5.79px, 35.34px) scale(0.63); }
.vm-spinner > .vm-spinner__dot--2 { transform: translate(14.09px, 23.4px) scale(0.63); }
.vm-spinner > .vm-spinner__dot--3 { transform: translate(21.85px, 26.12px) scale(0.5033); }
.vm-spinner > .vm-spinner__dot--4 { transform: translate(30.09px, 20.75px) scale(0.7133); }
.vm-spinner > .vm-spinner__dot--5 { transform: translate(37.13px, 16.95px) scale(0.66); }
.vm-spinner > .vm-spinner__dot--6 { transform: translate(42.21px, 5.5px) scale(0.7); }
.vm-spinner > .vm-spinner__dot--7 { transform: translate(12.65px, 42.5px) scale(0.7667); }

/* ── The lines ──────────────────────────────────────────────────────────── */
.vm-spinner > .vm-spinner__lines {
    position: absolute;
    inset: 0;
    opacity: 0;
}
.vm-spinner > .vm-spinner__lines > img {
    width: 100%;
    height: 100%;
    display: block;
}
.vm-spinner > .vm-spinner__lines--1 { opacity: 1; }

/* ── The motion ─────────────────────────────────────────────────────────── */
.vm-spinner > .vm-spinner__dot--0 { animation: vm-morph-dot-0 9s linear infinite; }
.vm-spinner > .vm-spinner__dot--1 { animation: vm-morph-dot-1 9s linear infinite; }
.vm-spinner > .vm-spinner__dot--2 { animation: vm-morph-dot-2 9s linear infinite; }
.vm-spinner > .vm-spinner__dot--3 { animation: vm-morph-dot-3 9s linear infinite; }
.vm-spinner > .vm-spinner__dot--4 { animation: vm-morph-dot-4 9s linear infinite; }
.vm-spinner > .vm-spinner__dot--5 { animation: vm-morph-dot-5 9s linear infinite; }
.vm-spinner > .vm-spinner__dot--6 { animation: vm-morph-dot-6 9s linear infinite; }
.vm-spinner > .vm-spinner__dot--7 { animation: vm-morph-dot-7 9s linear infinite; }
.vm-spinner > .vm-spinner__lines--1 { animation: vm-morph-lines-1 9s linear infinite; }
.vm-spinner > .vm-spinner__lines--2 { animation: vm-morph-lines-2 9s linear infinite; }
.vm-spinner > .vm-spinner__lines--3 { animation: vm-morph-lines-3 9s linear infinite; }
.vm-spinner > .vm-spinner__lines--4 { animation: vm-morph-lines-4 9s linear infinite; }
.vm-spinner > .vm-spinner__lines--5 { animation: vm-morph-lines-5 9s linear infinite; }
.vm-spinner > .vm-spinner__lines--6 { animation: vm-morph-lines-6 9s linear infinite; }
@keyframes vm-morph-dot-0 {
    0% { transform: translate(12.65px, 42.5px) scale(0.7667); }
    8.3333% { transform: translate(12.65px, 42.5px) scale(0.7667); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(42.28px, 42.5px) scale(0.7667); }
    25% { transform: translate(42.28px, 42.5px) scale(0.7667); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(22.41px, 5.5px) scale(0.7667); }
    41.6667% { transform: translate(22.41px, 5.5px) scale(0.7667); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(33.51px, 39.73px) scale(0.9533); }
    58.3333% { transform: translate(33.51px, 39.73px) scale(0.9533); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(10.47px, 5.5px) scale(0.7833); }
    75% { transform: translate(10.47px, 5.5px) scale(0.7833); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(27.47px, 42.5px) scale(0.8533); }
    91.6667% { transform: translate(27.47px, 42.5px) scale(0.8533); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(12.65px, 42.5px) scale(0.7667); }
    100% { transform: translate(12.65px, 42.5px) scale(0.7667); }
}
@keyframes vm-morph-dot-1 {
    0% { transform: translate(5.79px, 35.34px) scale(0.63); }
    8.3333% { transform: translate(5.79px, 35.34px) scale(0.63); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(6.42px, 14.27px) scale(0.6733); }
    25% { transform: translate(6.42px, 14.27px) scale(0.6733); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(5.55px, 11.44px) scale(0.6433); }
    41.6667% { transform: translate(5.55px, 11.44px) scale(0.6433); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(14.49px, 10.27px) scale(0.8967); }
    58.3333% { transform: translate(14.49px, 10.27px) scale(0.8967); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(10.47px, 5.5px) scale(0.7833); }
    75% { transform: translate(10.47px, 5.5px) scale(0.7833); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(23.9px, 5.5px) scale(0.7433); }
    91.6667% { transform: translate(23.9px, 5.5px) scale(0.7433); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(5.79px, 35.34px) scale(0.63); }
    100% { transform: translate(5.79px, 35.34px) scale(0.63); }
}
@keyframes vm-morph-dot-2 {
    0% { transform: translate(14.09px, 23.4px) scale(0.63); }
    8.3333% { transform: translate(14.09px, 23.4px) scale(0.63); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(5.72px, 5.5px) scale(0.5467); }
    25% { transform: translate(5.72px, 5.5px) scale(0.5467); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(5.55px, 11.44px) scale(0.6433); }
    41.6667% { transform: translate(5.55px, 11.44px) scale(0.6433); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(23.86px, 5.5px) scale(0.49); }
    58.3333% { transform: translate(23.86px, 5.5px) scale(0.49); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(31.88px, 5.88px) scale(0.56); }
    75% { transform: translate(31.88px, 5.88px) scale(0.56); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(36.84px, 15.87px) scale(0.5733); }
    91.6667% { transform: translate(36.84px, 15.87px) scale(0.5733); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(14.09px, 23.4px) scale(0.63); }
    100% { transform: translate(14.09px, 23.4px) scale(0.63); }
}
@keyframes vm-morph-dot-3 {
    0% { transform: translate(21.85px, 26.12px) scale(0.5033); }
    8.3333% { transform: translate(21.85px, 26.12px) scale(0.5033); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(19.69px, 15.05px) scale(0.3633); }
    25% { transform: translate(19.69px, 15.05px) scale(0.3633); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(25.09px, 22.26px) scale(0.63); }
    41.6667% { transform: translate(25.09px, 22.26px) scale(0.63); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(21.23px, 27.86px) scale(0.3533); }
    58.3333% { transform: translate(21.23px, 27.86px) scale(0.3533); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(6.38px, 29.64px) scale(0.6167); }
    75% { transform: translate(6.38px, 29.64px) scale(0.6167); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(11.16px, 21.96px) scale(0.7833); }
    91.6667% { transform: translate(11.16px, 21.96px) scale(0.7833); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(21.85px, 26.12px) scale(0.5033); }
    100% { transform: translate(21.85px, 26.12px) scale(0.5033); }
}
@keyframes vm-morph-dot-4 {
    0% { transform: translate(30.09px, 20.75px) scale(0.7133); }
    8.3333% { transform: translate(30.09px, 20.75px) scale(0.7133); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(31.9px, 21.13px) scale(0.38); }
    25% { transform: translate(31.9px, 21.13px) scale(0.38); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(37.75px, 25.63px) scale(0.59); }
    41.6667% { transform: translate(37.75px, 25.63px) scale(0.59); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(25.32px, 24.78px) scale(0.3667); }
    58.3333% { transform: translate(25.32px, 24.78px) scale(0.3667); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(17.47px, 16.74px) scale(0.66); }
    75% { transform: translate(17.47px, 16.74px) scale(0.66); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(11.16px, 21.96px) scale(0.7833); }
    91.6667% { transform: translate(11.16px, 21.96px) scale(0.7833); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(30.09px, 20.75px) scale(0.7133); }
    100% { transform: translate(30.09px, 20.75px) scale(0.7133); }
}
@keyframes vm-morph-dot-5 {
    0% { transform: translate(37.13px, 16.95px) scale(0.66); }
    8.3333% { transform: translate(37.13px, 16.95px) scale(0.66); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(31.9px, 21.13px) scale(0.38); }
    25% { transform: translate(31.9px, 21.13px) scale(0.38); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(25.09px, 22.26px) scale(0.63); }
    41.6667% { transform: translate(25.09px, 22.26px) scale(0.63); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(23.33px, 26.47px) scale(0.3533); }
    58.3333% { transform: translate(23.33px, 26.47px) scale(0.3533); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(17.47px, 16.74px) scale(0.66); }
    75% { transform: translate(17.47px, 16.74px) scale(0.66); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(11.16px, 21.96px) scale(0.7833); }
    91.6667% { transform: translate(11.16px, 21.96px) scale(0.7833); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(37.13px, 16.95px) scale(0.66); }
    100% { transform: translate(37.13px, 16.95px) scale(0.66); }
}
@keyframes vm-morph-dot-6 {
    0% { transform: translate(42.21px, 5.5px) scale(0.7); }
    8.3333% { transform: translate(42.21px, 5.5px) scale(0.7); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(20.87px, 7.5px) scale(0.35); }
    25% { transform: translate(20.87px, 7.5px) scale(0.35); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(22.41px, 5.5px) scale(0.7667); }
    41.6667% { transform: translate(22.41px, 5.5px) scale(0.7667); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(28.51px, 12.31px) scale(0.7433); }
    58.3333% { transform: translate(28.51px, 12.31px) scale(0.7433); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(31.88px, 5.88px) scale(0.56); }
    75% { transform: translate(31.88px, 5.88px) scale(0.56); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(23.9px, 5.5px) scale(0.7433); }
    91.6667% { transform: translate(23.9px, 5.5px) scale(0.7433); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(42.21px, 5.5px) scale(0.7); }
    100% { transform: translate(42.21px, 5.5px) scale(0.7); }
}
@keyframes vm-morph-dot-7 {
    0% { transform: translate(12.65px, 42.5px) scale(0.7667); }
    8.3333% { transform: translate(12.65px, 42.5px) scale(0.7667); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    15% { transform: translate(38.62px, 32.05px) scale(0.35); }
    25% { transform: translate(38.62px, 32.05px) scale(0.35); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    31.6667% { transform: translate(42.45px, 42.5px) scale(0.49); }
    41.6667% { transform: translate(42.45px, 42.5px) scale(0.49); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    48.3333% { transform: translate(17.94px, 42.5px) scale(0.6733); }
    58.3333% { transform: translate(17.94px, 42.5px) scale(0.6733); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    65% { transform: translate(41.62px, 42.5px) scale(0.5333); }
    75% { transform: translate(41.62px, 42.5px) scale(0.5333); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    81.6667% { transform: translate(31.57px, 25.88px) scale(0.4633); }
    91.6667% { transform: translate(31.57px, 25.88px) scale(0.4633); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
    98.3333% { transform: translate(12.65px, 42.5px) scale(0.7667); }
    100% { transform: translate(12.65px, 42.5px) scale(0.7667); }
}
@keyframes vm-morph-lines-1 {
    0% { opacity: 1; }
    6.6667% { opacity: 1; }
    8.3333% { opacity: 0; }
    98.3333% { opacity: 0; }
    100% { opacity: 1; }
}
@keyframes vm-morph-lines-2 {
    0% { opacity: 0; }
    15% { opacity: 0; }
    16.6667% { opacity: 1; }
    23.3333% { opacity: 1; }
    25% { opacity: 0; }
    100% { opacity: 0; }
}
@keyframes vm-morph-lines-3 {
    0% { opacity: 0; }
    31.6667% { opacity: 0; }
    33.3333% { opacity: 1; }
    40% { opacity: 1; }
    41.6667% { opacity: 0; }
    100% { opacity: 0; }
}
@keyframes vm-morph-lines-4 {
    0% { opacity: 0; }
    48.3333% { opacity: 0; }
    50% { opacity: 1; }
    56.6667% { opacity: 1; }
    58.3333% { opacity: 0; }
    100% { opacity: 0; }
}
@keyframes vm-morph-lines-5 {
    0% { opacity: 0; }
    65% { opacity: 0; }
    66.6667% { opacity: 1; }
    73.3333% { opacity: 1; }
    75% { opacity: 0; }
    100% { opacity: 0; }
}
@keyframes vm-morph-lines-6 {
    0% { opacity: 0; }
    81.6667% { opacity: 0; }
    83.3333% { opacity: 1; }
    90% { opacity: 1; }
    91.6667% { opacity: 0; }
    100% { opacity: 0; }
}

/* ── Reduced motion: no animation, figure 2 ── */
@media (prefers-reduced-motion: reduce) {
    .vm-spinner > .vm-spinner__dot,
    .vm-spinner > .vm-spinner__lines { animation: none; }
    .vm-spinner > .vm-spinner__dot--0 { transform: translate(42.28px, 42.5px) scale(0.7667); }
    .vm-spinner > .vm-spinner__dot--1 { transform: translate(6.42px, 14.27px) scale(0.6733); }
    .vm-spinner > .vm-spinner__dot--2 { transform: translate(5.72px, 5.5px) scale(0.5467); }
    .vm-spinner > .vm-spinner__dot--3 { transform: translate(19.69px, 15.05px) scale(0.3633); }
    .vm-spinner > .vm-spinner__dot--4 { transform: translate(31.9px, 21.13px) scale(0.38); }
    .vm-spinner > .vm-spinner__dot--5 { transform: translate(31.9px, 21.13px) scale(0.38); }
    .vm-spinner > .vm-spinner__dot--6 { transform: translate(20.87px, 7.5px) scale(0.35); }
    .vm-spinner > .vm-spinner__dot--7 { transform: translate(38.62px, 32.05px) scale(0.35); }
    .vm-spinner > .vm-spinner__lines--1 { opacity: 0; }
    .vm-spinner > .vm-spinner__lines--2 { opacity: 1; }
}
