/* Illustrations on the Projects page (_includes/project_art/*.html): one inline SVG per project,
   animated with CSS only. Each block is scoped by its .pa-<key> prefix, and each one falls back
   to its labelled final frame under prefers-reduced-motion, in print and without animation support. */
.pa { display: block; width: 100%; height: auto; }

/* ---- Audit-Prune ---- */
/* pa-jbtc, "judging by the cover". Base styles are the final frame; the loop starts from hidden states. */
.pa-jbtc{display:block;width:100%;height:auto;font-family:var(--font-sans,"Source Sans 3",Arial,sans-serif);font-variant-numeric:tabular-nums}
.pa-jbtc text{fill:#1f2328}
.pa-jbtc .pa-jbtc-lab{font-size:11.5px;font-weight:600;fill:#5b616b}
.pa-jbtc .pa-jbtc-sm{font-size:11.5px;fill:#5b616b}
.pa-jbtc-cap{font-size:12px;font-weight:600}
.pa-jbtc-big{font-size:23px;font-weight:700}
.pa-jbtc-no{font-size:10.5px;font-weight:700}
.pa-jbtc-qm{font-size:15px;font-weight:700}
.pa-jbtc .pa-jbtc-b{font-weight:700;fill:#1f2328}
.pa-jbtc path,.pa-jbtc-ring,.pa-jbtc-rim{fill:none;stroke-linecap:round;stroke-linejoin:round}
.pa-jbtc-redact{fill:#1f2328}
.pa-jbtc-cover{fill:#fbfaf8;stroke:#898781;stroke-width:1.5}
.pa-jbtc-spine{stroke:#898781;stroke-width:3.5;opacity:.4}
.pa-jbtc-lines{stroke:#898781;stroke-width:2;opacity:.55}
.pa-jbtc-kept,.pa-jbtc-tick{stroke:#0a8a3a;stroke-width:2.5}
.pa-jbtc-tick{stroke-dasharray:15}
.pa-jbtc-box{fill:none;stroke:#898781;stroke-width:1.5}
.pa-jbtc-hl{fill:#d03b3b;fill-opacity:.18}
.pa-jbtc-ring{stroke:#d03b3b;stroke-width:1.5}
.pa-jbtc-x circle{fill:#d03b3b}
.pa-jbtc-x path{stroke:#fff;stroke-width:1.8}
.pa-jbtc-glass{fill:#3b5bdb;opacity:.1}
.pa-jbtc-disc{fill:#fff}
.pa-jbtc-rim{stroke:#3b5bdb;stroke-width:2.5}
.pa-jbtc-handle{stroke:#3b5bdb;stroke-width:4}
.pa-jbtc-rule,.pa-jbtc-axis{stroke:#d9d6cf;stroke-width:1.5}
.pa-jbtc-chance{stroke:#5b616b;stroke-width:1.5}
.pa-jbtc-was{stroke:#898781;stroke-width:1.5;stroke-dasharray:1 4}
.pa-jbtc-leak{fill:#d03b3b}
.pa-jbtc-total{fill:#d9d6cf}
.pa-jbtc-keptbar{fill:#0a8a3a}
.pa-jbtc-out{transform:translateY(6px) rotate(-3deg)}
.pa-jbtc-fade{opacity:.4}
.pa-jbtc-lens{transform:translateY(-16px)}
.pa-jbtc-cap1,.pa-jbtc-cap2,.pa-jbtc-old,.pa-jbtc-ex,.pa-jbtc-unring{opacity:0}
.pa-jbtc-out,.pa-jbtc-lens-in,.pa-jbtc-leak,.pa-jbtc-keptbar{transform-box:fill-box;transform-origin:50% 50%}
.pa-jbtc-lens-in{transform-origin:12px 12px}
.pa-jbtc-leak,.pa-jbtc-keptbar{transform-origin:0 50%}
.pa-jbtc-rank,.pa-jbtc-tick,.pa-jbtc-all,.pa-jbtc-lens,.pa-jbtc-lens-in,.pa-jbtc-ex,.pa-jbtc-disc,.pa-jbtc-end,.pa-jbtc-flag1,.pa-jbtc-flag2,.pa-jbtc-out,.pa-jbtc-fade,.pa-jbtc-unring,.pa-jbtc-x,.pa-jbtc-cap1,.pa-jbtc-cap2,.pa-jbtc-old,.pa-jbtc-new,.pa-jbtc-keptbar,.pa-jbtc-leak{animation:16s ease-in-out infinite both}
.pa-jbtc-rank{animation-name:pa-jbtc-rank}
.pa-jbtc-tick{animation-name:pa-jbtc-tick}
.pa-jbtc-all{animation-name:pa-jbtc-all}
.pa-jbtc-lens{animation-name:pa-jbtc-lens}
.pa-jbtc-lens-in{animation-name:pa-jbtc-lens-in}
.pa-jbtc-ex{animation-name:pa-jbtc-ex}
.pa-jbtc-disc{animation-name:pa-jbtc-disc}
.pa-jbtc-end{animation-name:pa-jbtc-end}
.pa-jbtc-flag1{animation-name:pa-jbtc-flag1}
.pa-jbtc-flag2{animation-name:pa-jbtc-flag2}
.pa-jbtc-out{animation-name:pa-jbtc-out}
.pa-jbtc-fade{animation-name:pa-jbtc-fade}
.pa-jbtc-unring{animation-name:pa-jbtc-unring}
.pa-jbtc-x{animation-name:pa-jbtc-x}
.pa-jbtc-cap1{animation-name:pa-jbtc-cap1}
.pa-jbtc-cap2{animation-name:pa-jbtc-cap2}
.pa-jbtc-old{animation-name:pa-jbtc-old}
.pa-jbtc-new{animation-name:pa-jbtc-new}
.pa-jbtc-keptbar{animation-name:pa-jbtc-keptbar}
.pa-jbtc-leak{animation-name:pa-jbtc-leak}
.pa-jbtc-d1{animation-delay:-.4s}
@keyframes pa-jbtc-all{0%,96.25%,100%{opacity:0}2.81%,93.75%{opacity:1}}
@keyframes pa-jbtc-lens{0%,3.13%{transform:translateX(-123px);opacity:0}5.63%,8.75%{transform:translateX(-123px);opacity:1}11.88%,21.25%{transform:translateX(-61.5px)}24.38%,26.25%{transform:none}29.38%,38.75%{transform:translateX(61.5px)}41.88%,59.38%{transform:translateX(123px)}64.38%{transform:none}66.88%,100%{transform:translateY(-16px);opacity:1}}
@keyframes pa-jbtc-lens-in{0%,12.19%,20.94%,29.69%,38.44%,68.13%,76.88%,100%{transform:none}14.37%,18.75%,31.87%,36.25%{transform:scale(1.2)}70.31%{transform:rotate(-12deg)}72.5%{transform:rotate(10deg)}74.69%{transform:rotate(-5deg)}}
@keyframes pa-jbtc-ex{0%,12.5%,20.63%,30%,38.13%,100%{opacity:0}14.06%,19.06%{opacity:1}31.56%,36.56%{opacity:1}}
@keyframes pa-jbtc-disc{0%,12.5%,20.63%,30%,38.13%,65%{opacity:0}14.06%,19.06%{opacity:1}31.56%,36.56%{opacity:1}67.5%,100%{opacity:1}}
@keyframes pa-jbtc-end{0%,65%{opacity:0}67.5%,100%{opacity:1}}
@keyframes pa-jbtc-rank{0%,67.5%{opacity:.45}70%,100%{opacity:1}}
@keyframes pa-jbtc-tick{0%,68.75%{stroke-dashoffset:15}72.5%,100%{stroke-dashoffset:0}}
@keyframes pa-jbtc-flag1{0%,13.75%{opacity:0}16.25%,100%{opacity:1}}
@keyframes pa-jbtc-flag2{0%,31.25%{opacity:0}33.75%,100%{opacity:1}}
@keyframes pa-jbtc-out{0%,45%{transform:none}48.75%,100%{transform:translateY(6px) rotate(-3deg)}}
@keyframes pa-jbtc-fade{0%,45%{opacity:1}48.75%,100%{opacity:.4}}
@keyframes pa-jbtc-unring{0%,45%{opacity:1}48.13%,100%{opacity:0}}
@keyframes pa-jbtc-x{0%,48.13%{opacity:0}50%,100%{opacity:1}}
@keyframes pa-jbtc-cap1{0%,39.38%{opacity:1}41.25%,100%{opacity:0}}
@keyframes pa-jbtc-cap2{0%,41.88%,62.5%,100%{opacity:0}43.75%,60.62%{opacity:1}}
@keyframes pa-jbtc-old{0%,50%{opacity:1}51.88%,100%{opacity:0}}
@keyframes pa-jbtc-new{0%,52.5%{opacity:0}54.37%,100%{opacity:1}}
@keyframes pa-jbtc-keptbar{0%,47.5%{transform:scaleX(1.66)}56.25%,100%{transform:none}}
@keyframes pa-jbtc-leak{0%,47.5%{transform:scaleX(7.68)}57.5%,100%{transform:none}}
@media (prefers-reduced-motion:reduce){.pa-jbtc *{animation:none!important}}

/* ---- dKS ---- */
.pa-dks{display:block;width:100%;height:auto;overflow:hidden;font-family:var(--font-sans,"Source Sans 3",Arial,sans-serif);font-variant-numeric:tabular-nums}
.pa-dks text{fill:#1f2328;font-size:12px;font-weight:400}
.pa-dks .pa-dks-t2{fill:#5b616b;font-size:11.5px}
.pa-dks .pa-dks-tb{font-weight:600;font-size:11.5px;text-anchor:middle}
.pa-dks .pa-dks-tk{font-weight:700;font-size:13px}
.pa-dks-s{transform-origin:22px 0}
.pa-dks-u{transform-box:fill-box;transform-origin:center}
.pa-dks-z,.pa-dks-zx,.pa-dks-zy,.pa-dks-a,.pa-dks-b,.pa-dks-gl,.pa-dks-gt,.pa-dks-s,.pa-dks-u,.pa-dks-da,.pa-dks-db,.pa-dks-h,.pa-dks-c0,.pa-dks-c1,.pa-dks-c2,.pa-dks-c3,.pa-dks-lg,.pa-dks-lk,.pa-dks-rg,.pa-dks-u1,.pa-dks-u2{animation:16s ease-in-out infinite}
.pa-dks-z{animation-name:pa-dks-z}
.pa-dks-zx{animation-name:pa-dks-zx}
.pa-dks-zy{animation-name:pa-dks-zy}
.pa-dks-a{animation-name:pa-dks-a}
.pa-dks-b{animation-name:pa-dks-b}
.pa-dks-gl{animation-name:pa-dks-gl}
.pa-dks-gt{animation-name:pa-dks-gt}
.pa-dks-s{animation-name:pa-dks-s}
.pa-dks-u{animation-name:pa-dks-u}
.pa-dks-da{animation-name:pa-dks-da}
.pa-dks-db{animation-name:pa-dks-db}
.pa-dks-h{animation-name:pa-dks-h}
.pa-dks-c0{animation-name:pa-dks-c0}
.pa-dks-c1{animation-name:pa-dks-c1}
.pa-dks-c2{animation-name:pa-dks-c2}
.pa-dks-c3{animation-name:pa-dks-c3}
.pa-dks-lg{animation-name:pa-dks-c1}
.pa-dks-lk{animation-name:pa-dks-c2}
.pa-dks-rg{animation-name:pa-dks-rg}
.pa-dks-u1{animation-name:pa-dks-u1}
.pa-dks-u2{animation-name:pa-dks-u2}
.pa-dks-z,.pa-dks-zx,.pa-dks-zy{animation-timing-function:cubic-bezier(.34,1.3,.64,1)}
.pa-dks-a,.pa-dks-b,.pa-dks-gl,.pa-dks-gt{animation-timing-function:cubic-bezier(.34,1.12,.64,1)}
@keyframes pa-dks-z{0%,23.44%{transform:translate(80px,114px)}25.63%,31.25%{transform:translate(196px,33px)}33.44%,36.88%{transform:translate(109px,33px)}39.06%,42.5%{transform:translate(196px,114px)}44.69%,48.13%{transform:translate(138px,60px)}50.63%,100%{transform:translate(138px,87px)}}
@keyframes pa-dks-zx{0%,23.44%{transform:translateX(80px)}25.63%,31.25%{transform:translateX(196px)}33.44%,36.88%{transform:translateX(109px)}39.06%,42.5%{transform:translateX(196px)}44.69%,48.13%{transform:translateX(138px)}50.63%,100%{transform:translateX(138px)}}
@keyframes pa-dks-zy{0%,23.44%{transform:translateY(114px)}25.63%,31.25%{transform:translateY(33px)}33.44%,36.88%{transform:translateY(33px)}39.06%,42.5%{transform:translateY(114px)}44.69%,48.13%{transform:translateY(60px)}50.63%,100%{transform:translateY(87px)}}
@keyframes pa-dks-a{0%,17.5%{transform:translateY(135px)}20.31%,23.44%{transform:translateY(86.8px)}25.63%,31.25%{transform:translateY(0)}33.44%,36.88%{transform:translateY(19.3px)}39.06%,42.5%{transform:translateY(48.2px)}44.69%,48.13%{transform:translateY(0)}50.63%,100%{transform:translateY(9.6px)}}
@keyframes pa-dks-b{0%,17.5%{transform:translateY(135px)}20.31%,23.44%{transform:translateY(135px)}25.63%,31.25%{transform:translateY(0)}33.44%,36.88%{transform:translateY(96.4px)}39.06%,42.5%{transform:translateY(115.7px)}44.69%,48.13%{transform:translateY(96.4px)}50.63%,100%{transform:translateY(125.4px)}}
@keyframes pa-dks-gl{0%,17.5%{transform:translateY(168px) scaleY(0)}20.31%,23.44%{transform:translateY(119.8px) scaleY(.357)}25.63%,31.25%{transform:translateY(33px) scaleY(0)}33.44%,36.88%{transform:translateY(52.3px) scaleY(.571)}39.06%,42.5%{transform:translateY(81.2px) scaleY(.5)}44.69%,48.13%{transform:translateY(33px) scaleY(.714)}50.63%,100%{transform:translateY(42.6px) scaleY(.857)}}
@keyframes pa-dks-gt{0%,17.5%{transform:translateY(135px)}20.31%,23.44%{transform:translateY(110.9px)}25.63%,31.25%{transform:translateY(0)}33.44%,36.88%{transform:translateY(57.9px)}39.06%,42.5%{transform:translateY(82px)}44.69%,48.13%{transform:translateY(48.2px)}50.63%,100%{transform:translateY(67.5px)}}
@keyframes pa-dks-s{0%,63.13%{transform:scaleX(1)}66.25%{transform:scaleX(.58)}67.5%,76.25%{transform:scaleX(.62)}79.06%{transform:scaleX(1.03)}80.63%,100%{transform:scaleX(1)}}
@keyframes pa-dks-u{0%,63.13%{transform:scaleX(1)}66.25%{transform:scaleX(1.724)}67.5%,76.25%{transform:scaleX(1.613)}79.06%{transform:scaleX(.971)}80.63%,100%{transform:scaleX(1)}}
@keyframes pa-dks-da{0%,1.88%{opacity:0}6.25%,97.5%{opacity:1}99.69%,100%{opacity:0}}
@keyframes pa-dks-db{0%,5.63%{opacity:0}10%,97.5%{opacity:1}99.69%,100%{opacity:0}}
@keyframes pa-dks-c0{0%,.63%{opacity:0}2.5%,15.63%{opacity:1}17.19%,100%{opacity:0}}
@keyframes pa-dks-h{0%,17.5%{opacity:0}19.69%,97.5%{opacity:1}99.69%,100%{opacity:0}}
@keyframes pa-dks-c1{0%,17.5%{opacity:0}20%,49.38%{opacity:1}51.25%,100%{opacity:0}}
@keyframes pa-dks-c2{0%,52.19%{opacity:0}55%,97.5%{opacity:1}99.69%,100%{opacity:0}}
@keyframes pa-dks-c3{0%,65%{opacity:0}68.75%,97.5%{opacity:1}99.69%,100%{opacity:0}}
@keyframes pa-dks-u1{0%,63.13%{opacity:1}65%,79.06%{opacity:0}81.25%,100%{opacity:1}}
@keyframes pa-dks-u2{0%,65.31%{opacity:0}67.5%,76.25%{opacity:1}78.13%,100%{opacity:0}}
@keyframes pa-dks-rg{0%,50.63%{opacity:0;transform:scale(2.8)}54.38%,100%{opacity:1;transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.pa-dks *{animation:none!important}}

/* ---- Public LLM datasets ---- */
/* pa-datasets: base styles are the final frame; animations start hidden. One 16 s loop. */
.pa-datasets{display:block;width:100%;height:auto}
.pa-datasets text{font-family:var(--font-sans,"Source Sans 3",Arial,sans-serif);font-size:11px;font-weight:400;fill:#1f2328;font-variant-numeric:tabular-nums}
.pa-datasets-mid{text-anchor:middle}
.pa-datasets .pa-datasets-say{font-size:11.5px}
.pa-datasets .pa-datasets-strong{font-size:12px;font-weight:700}
.pa-datasets .pa-datasets-quiet{font-size:10.5px;fill:#5b616b}
.pa-datasets .pa-datasets-lname{font-size:10.5px;font-weight:600;fill:#5b616b}
.pa-datasets .pa-datasets-hub{fill:#5b616b}
.pa-datasets .pa-datasets-hubname{font-weight:600;fill:#1f2328}
.pa-datasets .pa-datasets-hf{font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif;font-size:22px}
.pa-datasets-o{fill:#eb6834}
.pa-datasets-b{fill:#3b5bdb}
.pa-datasets-dots{fill-opacity:.62}
.pa-datasets-obox{fill:#fdf1eb;stroke:#eb6834;stroke-width:1.5;stroke-linejoin:round}
.pa-datasets-bbox{fill:#edf0fc;stroke:#3b5bdb;stroke-width:1.5;stroke-linejoin:round}
.pa-datasets-stack{opacity:.5}
.pa-datasets-link{fill:none;stroke:#898781;stroke-width:1.5;stroke-linecap:round;stroke-dasharray:1}
.pa-datasets-vec{fill:none;stroke:#1f2328;stroke-width:2;stroke-linecap:round}
.pa-datasets-draw{stroke-dasharray:1}
.pa-datasets-head{fill:#1f2328;stroke:#1f2328;stroke-width:1.5;stroke-linejoin:round}
.pa-datasets-out-a{opacity:0}

.pa-datasets-scene,.pa-datasets-scene *,.pa-datasets-hug{animation:16s ease-in-out infinite both}
.pa-datasets-prompt,.pa-datasets-ans-l,.pa-datasets-ans-r,.pa-datasets-dots circle,.pa-datasets-means,.pa-datasets-wheel,.pa-datasets-hug{transform-box:fill-box;transform-origin:center}
.pa-datasets-scene{animation-name:pa-datasets-scene}
.pa-datasets-prompt{animation-name:pa-datasets-prompt}
.pa-datasets-same{animation-name:pa-datasets-same}
.pa-datasets-link{animation-name:pa-datasets-link}
.pa-datasets-ans-l{animation-name:pa-datasets-ans-l}
.pa-datasets-ans-r{animation-name:pa-datasets-ans-r}
.pa-datasets-stack{animation-name:pa-datasets-stack}
.pa-datasets-seed-l{animation-name:pa-datasets-seed-l}
.pa-datasets-seed-r{animation-name:pa-datasets-seed-r}
.pa-datasets-g1{animation-name:pa-datasets-g1}
.pa-datasets-g2{animation-name:pa-datasets-g2}
.pa-datasets-g3{animation-name:pa-datasets-g3}
.pa-datasets-g4{animation-name:pa-datasets-g4}
.pa-datasets-means{animation-name:pa-datasets-means}
.pa-datasets-draw{animation-name:pa-datasets-draw}
.pa-datasets-tip{animation-name:pa-datasets-tip}
.pa-datasets-vlabel{animation-name:pa-datasets-vlabel}
.pa-datasets-copy{animation-name:pa-datasets-copy}
.pa-datasets-ghost{animation-name:pa-datasets-ghost}
.pa-datasets-rider{animation-name:pa-datasets-rider}
.pa-datasets-wheel{animation-name:pa-datasets-wheel}
.pa-datasets-out-a{animation-name:pa-datasets-out-a}
.pa-datasets-out-b{animation-name:pa-datasets-out-b}
.pa-datasets-note{animation-name:pa-datasets-note}
.pa-datasets-hug{animation-name:pa-datasets-hug}

@keyframes pa-datasets-scene{0%{opacity:0}1.5%,95.6%{opacity:1}98.1%,100%{opacity:0}}
@keyframes pa-datasets-prompt{0%,1.9%{opacity:0;transform:scale(.85)}4.4%{opacity:1;transform:none}}
@keyframes pa-datasets-link{0%,5%{opacity:0;stroke-dashoffset:1}5.1%{opacity:1;stroke-dashoffset:1}7.5%{stroke-dashoffset:0}}
@keyframes pa-datasets-ans-l{0%,7.5%{opacity:0;transform:scale(.85)}10%{opacity:1;transform:none}}
@keyframes pa-datasets-ans-r{0%,9%{opacity:0;transform:scale(.85)}11.5%{opacity:1;transform:none}}
@keyframes pa-datasets-same{0%,12.5%{opacity:0}15%{opacity:1}}
@keyframes pa-datasets-stack{0%,19.4%{opacity:0}21.9%{opacity:.5}}
@keyframes pa-datasets-seed-l{0%,21.9%{opacity:0;transform:translateY(-52px) scale(2)}23.1%{opacity:1}26.3%{transform:none}}
@keyframes pa-datasets-seed-r{0%,21.9%{opacity:0;transform:translate(2px,-53px) scale(2)}23.1%{opacity:1}26.3%{transform:none}}
@keyframes pa-datasets-g1{0%,26.3%{opacity:0;transform:translateY(-8px)}27.8%{opacity:1;transform:none}}
@keyframes pa-datasets-g2{0%,27.8%{opacity:0;transform:translateY(-8px)}29.4%{opacity:1;transform:none}}
@keyframes pa-datasets-g3{0%,29.4%{opacity:0;transform:translateY(-8px)}30.9%{opacity:1;transform:none}}
@keyframes pa-datasets-g4{0%,30.9%{opacity:0;transform:translateY(-8px)}32.5%{opacity:1;transform:none}}
@keyframes pa-datasets-means{0%,33.1%{opacity:0;transform:scale(.3)}35.6%{opacity:1;transform:none}}
@keyframes pa-datasets-draw{0%,36.9%{opacity:0;stroke-dashoffset:1}37%{opacity:1;stroke-dashoffset:1}42.5%{stroke-dashoffset:0}}
@keyframes pa-datasets-tip{0%,41.9%{opacity:0}43.8%{opacity:1}}
@keyframes pa-datasets-vlabel{0%,43.8%{opacity:0}46.9%{opacity:1}}
@keyframes pa-datasets-copy{0%,51.9%{opacity:0;transform:translateY(-73px)}53.1%{opacity:1;transform:translateY(-73px)}58.1%{transform:none}}
@keyframes pa-datasets-rider{0%,58.8%{opacity:0;transform:translateX(-180px)}61.3%,62.5%{opacity:1;transform:translateX(-180px)}75%{transform:none}}
@keyframes pa-datasets-ghost{0%,62.6%{opacity:0}64.5%{opacity:1}}
@keyframes pa-datasets-wheel{0%,62.5%{transform:rotate(-360deg)}75%{transform:rotate(0deg)}}
@keyframes pa-datasets-out-a{0%,67.5%{opacity:1}69%,100%{opacity:0}}
@keyframes pa-datasets-out-b{0%,69%{opacity:0}70.5%{opacity:1}}
@keyframes pa-datasets-note{0%,75.6%{opacity:0}78.1%{opacity:1}}
@keyframes pa-datasets-hug{0%,96%{transform:none}97.2%{transform:scale(1.08) rotate(-10deg)}98.4%{transform:scale(1.08) rotate(9deg)}99.6%,100%{transform:none}}

@media (prefers-reduced-motion:reduce){.pa-datasets *{animation:none!important}}

/* ---- MotionPI ---- */
.pa-motionpi{font-family:var(--font-sans,"Source Sans 3",Arial,sans-serif);font-variant-numeric:tabular-nums}
.pa-motionpi *{transform-box:fill-box;transform-origin:50% 50%;animation:16s linear infinite both}
.pa-motionpi .pa-motionpi-mir{transform-box:view-box;transform-origin:0 0}
.pa-motionpi-tx{font-size:11.5px;fill:#5b616b}
.pa-motionpi-big{font-size:22px;font-weight:700;fill:#1f2328}
.pa-motionpi-link path{fill:none;stroke:#898781;stroke-width:1.5;stroke-linecap:round}
.pa-motionpi-link .pa-motionpi-red{stroke:#d03b3b;stroke-width:2;opacity:0;animation-name:pa-motionpi-off}
.pa-motionpi-pk rect,.pa-motionpi-q rect{fill:#3b5bdb}
.pa-motionpi-trig rect,.pa-motionpi-late rect{fill:#eb6834}
.pa-motionpi-ico *{fill:#fff;stroke:#1f2328;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.pa-motionpi-ico .pa-motionpi-hair{stroke:#d9d6cf}
.pa-motionpi .pa-motionpi-tb{font-size:11.5px;font-weight:700;fill:#1f2328;stroke:none}
.pa-motionpi-slots rect{fill:none;stroke:#d9d6cf;stroke-width:1.25}
.pa-motionpi-cardbg{fill:#fff;stroke:#eb6834;stroke-width:1.5}
.pa-motionpi-face *{fill:none;stroke:#5b616b;stroke-width:1.4;stroke-linecap:round}
.pa-motionpi-face .pa-motionpi-pick{fill:#3b5bdb;fill-opacity:.16;stroke:#3b5bdb;stroke-width:2;animation-name:pa-motionpi-pick}
.pa-motionpi-check circle{fill:#0a8a3a;stroke:#fff;stroke-width:1.5}
.pa-motionpi-check path,.pa-motionpi-late path{fill:none;stroke:#fff;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.pa-motionpi-late path{stroke:#5b616b;stroke-width:1.5}
.pa-motionpi-late circle{fill:#3b5bdb;stroke:#fff;stroke-width:1.5}
.pa-motionpi-axis{stroke:#d9d6cf;stroke-width:1.5}
.pa-motionpi-th{stroke:#898781;stroke-width:1.5;stroke-dasharray:4 4}
.pa-motionpi-shade{fill:#eb6834;fill-opacity:.24;animation-name:pa-motionpi-late}
.pa-motionpi-tr{fill:none;stroke:#3b5bdb;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1}
.pa-motionpi-burst,.pa-motionpi-trig,.pa-motionpi-off,.pa-motionpi-q rect{opacity:0}
.pa-motionpi .pa-motionpi-p1{animation-duration:1.6s;animation-name:pa-motionpi-f1}
.pa-motionpi .pa-motionpi-p2{animation-duration:1.6s;animation-name:pa-motionpi-f2}
.pa-motionpi-p1b{animation-delay:-.8s}
.pa-motionpi-p2a{animation-delay:-.6s}
.pa-motionpi-p2b{animation-delay:-1.4s}
.pa-motionpi-gate{animation-name:pa-motionpi-gate}
.pa-motionpi-leaf{transform-origin:0 50%;animation-name:pa-motionpi-leaf;animation-timing-function:ease-in-out}
.pa-motionpi-off{animation-name:pa-motionpi-off}
.pa-motionpi-scr{animation-name:pa-motionpi-scr}
.pa-motionpi-shut{animation:pa-motionpi-shut 16s step-end infinite}
.pa-motionpi-open{opacity:0;animation:pa-motionpi-open 16s step-end infinite}
.pa-motionpi-s1{animation-name:pa-motionpi-s1}
.pa-motionpi-s2{animation-name:pa-motionpi-s2}
.pa-motionpi-s3{animation-name:pa-motionpi-s3}
.pa-motionpi-s4{animation-name:pa-motionpi-s4}
.pa-motionpi-burst{animation-name:pa-motionpi-burst}
.pa-motionpi-b2{animation-delay:.3s}
.pa-motionpi-b3{animation-delay:.6s}
.pa-motionpi-b4{animation-delay:.9s}
.pa-motionpi-check{animation-name:pa-motionpi-check}
.pa-motionpi-zero{animation-name:pa-motionpi-zero}
.pa-motionpi-trlo{animation-name:pa-motionpi-lo}
.pa-motionpi-trhi{animation-name:pa-motionpi-hi}
.pa-motionpi-band{animation-name:pa-motionpi-shake;animation-timing-function:ease-in-out}
.pa-motionpi-bandr{animation-delay:-.06s}
.pa-motionpi-late{animation-name:pa-motionpi-late}
.pa-motionpi-trig{animation-name:pa-motionpi-trig}
.pa-motionpi-card{transform-origin:50% 100%;animation-name:pa-motionpi-card}
@keyframes pa-motionpi-f1{0%{transform:translateX(-30px);opacity:0}8%,54%{opacity:1}62.5%,100%{transform:translateX(30px);opacity:0}}
@keyframes pa-motionpi-f2{0%{transform:translateX(-38px);opacity:0}8%,54%{opacity:1}62.5%,100%{transform:translateX(38px);opacity:0}}
@keyframes pa-motionpi-gate{0%,10%,49.5%,100%{opacity:1}12%,47.5%{opacity:0}}
@keyframes pa-motionpi-leaf{0%,11.25%,35%,100%{transform:none}14%,32.5%{transform:rotate(-52deg)}}
@keyframes pa-motionpi-shut{11.25%{opacity:0}35%{opacity:1}}
@keyframes pa-motionpi-open{11.25%{opacity:1}35%{opacity:0}}
@keyframes pa-motionpi-off{0%,11.25%,35%,100%{opacity:0}14%,32.5%{opacity:1}}
@keyframes pa-motionpi-s1{0%,16%,37.5%,100%{opacity:0}17.5%,36.25%{opacity:1}}
@keyframes pa-motionpi-s2{0%,21%,39.4%,100%{opacity:0}22.5%,38.1%{opacity:1}}
@keyframes pa-motionpi-s3{0%,26%,41.3%,100%{opacity:0}27.5%,40%{opacity:1}}
@keyframes pa-motionpi-s4{0%,31%,43.1%,100%{opacity:0}32.5%,41.9%{opacity:1}}
@keyframes pa-motionpi-burst{0%,36.25%{transform:none;opacity:0}37%,40.5%{opacity:1}41.25%,100%{transform:translateX(76px);opacity:0}}
@keyframes pa-motionpi-check{0%,47%{opacity:0;transform:scale(.3)}49%{opacity:1;transform:scale(1.2)}50.5%,97.5%{opacity:1;transform:none}100%{opacity:0}}
@keyframes pa-motionpi-zero{0%,47%,100%{opacity:0}50%,97.5%{opacity:1}}
@keyframes pa-motionpi-lo{0%,2.5%{stroke-dashoffset:1;opacity:0}3%{opacity:1}46.25%{stroke-dashoffset:0}97.5%{opacity:1}100%{opacity:0}}
@keyframes pa-motionpi-hi{0%,46.25%{stroke-dashoffset:1;opacity:0}46.6%{opacity:1}63.75%{stroke-dashoffset:0}97.5%{opacity:1}100%{opacity:0}}
@keyframes pa-motionpi-shake{0%,48.5%,64.6%,100%{transform:none}50.2%,54%,57.8%,61.6%{transform:rotate(-6.5deg)}52.1%,55.9%,59.7%,63.2%{transform:rotate(6.5deg)}}
@keyframes pa-motionpi-scr{0%,73.5%,100%{opacity:0}2.5%,72%{opacity:1}}
@keyframes pa-motionpi-late{0%,64%,100%{opacity:0}66.5%,97.5%{opacity:1}}
@keyframes pa-motionpi-trig{0%,67.5%{transform:none;opacity:0}68.2%,73%{opacity:1}73.75%,100%{transform:translateX(58px);opacity:0}}
@keyframes pa-motionpi-card{0%,73.5%{opacity:0;transform:scale(.5)}75.5%{opacity:1;transform:scale(1.06)}76.5%,97.5%{opacity:1;transform:none}100%{opacity:0}}
@keyframes pa-motionpi-pick{0%,78.5%{opacity:0;transform:scale(.4)}80%{opacity:1;transform:scale(1.25)}81%,100%{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.pa-motionpi *{animation:none!important}}

/* ---- Hotspot detection ---- */
/* pyscan project art: centroids vs sampled points. Base styles are the final (static) frame. */
.pa-pyscan { display: block; width: 100%; height: auto; font-family: var(--font-sans, "Source Sans 3", Arial, sans-serif); font-variant-numeric: tabular-nums; }
.pa-pyscan text { fill: #5b616b; font-size: 11px; font-weight: 400; }
.pa-pyscan path, .pa-pyscan circle { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.pa-pyscan-reg { stroke: #d9d6cf; stroke-width: 1.5; }
.pa-pyscan .pa-pyscan-hot { fill: #d03b3b; fill-opacity: .13; }
.pa-pyscan-edge { stroke: #898781; stroke-width: 1.5; }
.pa-pyscan-pts { stroke: #3b5bdb; stroke-width: 2.5; }
.pa-pyscan .pa-pyscan-hp { stroke-width: 3.4; }
.pa-pyscan-held { stroke: #3b5bdb; stroke-width: 4.2; }
.pa-pyscan-cen { stroke: #eb6834; stroke-width: 6; }
.pa-pyscan .pa-pyscan-true { stroke: #d03b3b; stroke-width: 1.5; stroke-dasharray: 3.5 3.5; }
.pa-pyscan-ring { stroke: #1f2328; stroke-width: 2.5; }
.pa-pyscan .pa-pyscan-lock { stroke: #0a8a3a; stroke-width: 3; }
.pa-pyscan-handle { stroke: #1f2328; stroke-width: 5; }
.pa-pyscan .pa-pyscan-badge { fill: #fff; stroke: #1f2328; stroke-width: 1.5; }
.pa-pyscan .pa-pyscan-okb { fill: #0a8a3a; stroke: #fff; }
.pa-pyscan-tick { stroke: #fff; stroke-width: 2.2; }
.pa-pyscan .pa-pyscan-qt { fill: #1f2328; font-size: 13px; font-weight: 700; }
.pa-pyscan-key { stroke-width: 7; }
.pa-pyscan-kc { stroke: #eb6834; }
.pa-pyscan-kp { stroke: #3b5bdb; }
.pa-pyscan .pa-pyscan-sw { fill: #d03b3b; fill-opacity: .16; stroke: #d9d6cf; stroke-width: 1; }
.pa-pyscan .pa-pyscan-cap text { fill: #1f2328; font-size: 12.5px; }
.pa-pyscan-b { font-weight: 700; }
.pa-pyscan .pa-pyscan-st { fill: #1f2328; font-size: 12px; font-weight: 700; }
.pa-pyscan-cap1, .pa-pyscan-st1, .pa-pyscan-q { opacity: 0; }
.pa-pyscan-pulse, .pa-pyscan-ok { transform-box: fill-box; transform-origin: center; }
.pa-pyscan-shrug { transform-origin: 0 0; }

.pa-pyscan-cap1 { animation: pa-pyscan-cap1 16s linear infinite; }
.pa-pyscan-cap2 { animation: pa-pyscan-cap2 16s linear infinite; }
.pa-pyscan-st1 { animation: pa-pyscan-st1 16s linear infinite; }
.pa-pyscan-st2, .pa-pyscan-held { animation: pa-pyscan-st2 16s linear infinite; }
.pa-pyscan-lens { animation: pa-pyscan-move 16s ease-in-out infinite, pa-pyscan-show 16s linear infinite; }
.pa-pyscan-shrug { animation: pa-pyscan-shrug 16s ease-in-out infinite; }
.pa-pyscan-q { animation: pa-pyscan-q 16s linear infinite; }
.pa-pyscan-lock { animation: pa-pyscan-lock 16s linear infinite; }
.pa-pyscan-ok { animation: pa-pyscan-ok 16s ease-out infinite; }
.pa-pyscan-pulse { animation: pa-pyscan-pulse 16s ease-in-out infinite; }
.pa-pyscan-cloud { animation: pa-pyscan-cloud 16s linear infinite; }
.pa-pyscan-drop { animation: pa-pyscan-drop 16s ease-in infinite; }
.pa-pyscan-w1 { animation-delay: .3s; }
.pa-pyscan-w2 { animation-delay: .6s; }
.pa-pyscan-w3 { animation-delay: .9s; }
.pa-pyscan-w4 { animation-delay: 1.2s; }
.pa-pyscan-w5 { animation-delay: 1.5s; }
@media (prefers-reduced-motion: reduce) {
  .pa-pyscan, .pa-pyscan * { animation: none !important; }
}

/* 16 s: 0-7.1 centroid sweep and miss, 7.1-9.9 points drop in, 9.4-12.6 second sweep and lock, hold to 15.5, fade */
@keyframes pa-pyscan-cap1 { 0% { opacity: 0 } 3%, 41.25% { opacity: 1 } 44.4%, 100% { opacity: 0 } }
@keyframes pa-pyscan-cap2 { 0%, 44.4% { opacity: 0 } 47.5%, 96.9% { opacity: 1 } 100% { opacity: 0 } }
@keyframes pa-pyscan-st1 { 0%, 30% { opacity: 0 } 32.5%, 41.25% { opacity: 1 } 44.4%, 100% { opacity: 0 } }
@keyframes pa-pyscan-st2 { 0%, 74.5% { opacity: 0 } 77.5%, 96.9% { opacity: 1 } 100% { opacity: 0 } }
@keyframes pa-pyscan-show { 0%, 2.5% { opacity: 0 } 5.6%, 41.25% { opacity: 1 } 44.4%, 58.75% { opacity: 0 } 61.9%, 96.9% { opacity: 1 } 100% { opacity: 0 } }
@keyframes pa-pyscan-move {
  0%, 6.25% { transform: translate(-152px, 23px) }
  11.9%, 13.75% { transform: translate(-83px, 12px) }
  18.75%, 25% { transform: translate(0, 0) }
  29.4%, 45% { transform: translate(57px, -30px) }
  46%, 61.9% { transform: translate(-152px, 23px) }
  67.5%, 68.75% { transform: translate(-76px, 36px) }
  73.75%, 100% { transform: translate(0, 0) }
}
@keyframes pa-pyscan-shrug { 0%, 31.25% { transform: rotate(0) } 33.4% { transform: rotate(-9deg) } 35.9% { transform: rotate(7deg) } 38.1% { transform: rotate(-3deg) } 40%, 100% { transform: rotate(0) } }
@keyframes pa-pyscan-q { 0%, 29.4% { opacity: 0 } 31.25%, 41.25% { opacity: 1 } 44.4%, 100% { opacity: 0 } }
@keyframes pa-pyscan-lock { 0%, 73.75% { opacity: 0 } 76%, 100% { opacity: 1 } }
@keyframes pa-pyscan-ok { 0%, 74.5% { opacity: 0; transform: scale(.3) } 76.5% { opacity: 1; transform: scale(1.2) } 78.5%, 100% { opacity: 1; transform: scale(1) } }
@keyframes pa-pyscan-pulse { 0%, 73.75% { transform: scale(1) } 75.6% { transform: scale(1.14) } 78%, 100% { transform: scale(1) } }
/* the cloud is hidden as a whole at the loop seam, so the staggered drops can run on delays */
@keyframes pa-pyscan-cloud { 0%, 46.9% { opacity: 0 } 47.1%, 96.9% { opacity: 1 } 100% { opacity: 0 } }
@keyframes pa-pyscan-drop { 0%, 47.5% { opacity: 0; transform: translateY(-16px) } 49% { opacity: 1 } 50.6% { transform: translateY(0); animation-timing-function: ease-out } 51.6% { transform: translateY(-3px); animation-timing-function: ease-in } 52.6%, 100% { opacity: 1; transform: translateY(0) } }
