/* Generated by tools/bridge.py — do not edit by hand.
   One 24.0s pass: four webhooks reach the gate — one of them a repeat,
   turned away — and three become rows in PostgreSQL; each change goes
   out over its bridges; the catalogue goes out as one package; and
   reconciliation finds one row that drifted and sends the fix. Change
   tools/bridge.py and rebuild. */

.fj { --fj-cycle: 24.00s; --fj-ratio: 1440 / 440; }
.fj-name--src { --x: 1.389%; --y: 21.136%; --w: 12.500%; --h: 10.909%; }
.fj-name--d0 { --x: 4.583%; --y: 34.318%; --w: 6.111%; --h: 9.091%; }
.fj-name--d1 { --x: 4.583%; --y: 45.227%; --w: 6.111%; --h: 9.091%; }
.fj-name--hook { --x: 16.667%; --y: 26.364%; --w: 8.333%; --h: 10.909%; }
.fj-name--gate { --x: 27.778%; --y: 26.364%; --w: 8.333%; --h: 10.909%; }
.fj-name--db { --x: 38.889%; --y: 9.091%; --w: 22.222%; --h: 10.909%; }
.fj-name--ctl { --x: 38.889%; --y: 71.818%; --w: 22.222%; --h: 5.455%; }
.fj-name--t0 { --x: 39.583%; --y: 22.273%; --w: 10.417%; --h: 10.000%; }
.fj-name--t1 { --x: 39.583%; --y: 36.818%; --w: 10.417%; --h: 10.000%; }
.fj-name--t2 { --x: 39.583%; --y: 51.364%; --w: 10.417%; --h: 10.000%; }
.fj-name--l0 { --x: 65.556%; --y: 23.409%; --w: 13.056%; --h: 10.000%; }
.fj-name--l1 { --x: 65.556%; --y: 39.318%; --w: 13.056%; --h: 10.000%; }
.fj-name--l2 { --x: 65.556%; --y: 55.227%; --w: 13.056%; --h: 10.000%; }
.fj-name--wb { --x: 83.611%; --y: 20.682%; --w: 14.444%; --h: 8.182%; }
.fj-name--ym { --x: 83.611%; --y: 44.545%; --w: 14.444%; --h: 8.182%; }

/* Four events. A change leaves the shop by its door and goes into
   the webhooks station; a webhook comes out of it to the gate and
   waits for its verdict; three go on to their row and become it,
   one is a repeat and stops there. */
@keyframes fj-chg-0 {
  0% { transform: translate(50.0px, 171.0px); opacity: 0; }
  1.208% { transform: translate(50.0px, 171.0px); opacity: 0; }
  1.250% { transform: translate(50.0px, 171.0px); opacity: 1; }
  1.358% { transform: translate(59.6px, 171.0px); opacity: 1; }
  1.466% { transform: translate(69.2px, 171.0px); opacity: 1; }
  1.574% { transform: translate(78.8px, 171.0px); opacity: 1; }
  1.682% { transform: translate(88.4px, 171.0px); opacity: 1; }
  1.790% { transform: translate(98.0px, 171.0px); opacity: 1; }
  1.898% { transform: translate(107.6px, 171.0px); opacity: 1; }
  2.006% { transform: translate(117.2px, 171.0px); opacity: 1; }
  2.114% { transform: translate(126.8px, 171.0px); opacity: 1; }
  2.222% { transform: translate(136.4px, 171.0px); opacity: 1; }
  2.330% { transform: translate(146.0px, 171.0px); opacity: 1; }
  2.438% { transform: translate(155.6px, 171.0px); opacity: 1; }
  2.546% { transform: translate(165.2px, 171.4px); opacity: 1; }
  2.654% { transform: translate(173.8px, 175.4px); opacity: 1; }
  2.762% { transform: translate(179.9px, 182.8px); opacity: 1; }
  2.870% { transform: translate(185.9px, 190.3px); opacity: 1; }
  2.978% { transform: translate(194.4px, 194.5px); opacity: 1; }
  3.086% { transform: translate(204.0px, 195.0px); opacity: 1; }
  3.194% { transform: translate(213.6px, 195.0px); opacity: 1; }
  3.302% { transform: translate(223.2px, 195.0px); opacity: 1; }
  3.410% { transform: translate(232.8px, 195.0px); opacity: 1; }
  3.519% { transform: translate(242.4px, 195.0px); opacity: 1; }
  3.627% { transform: translate(252.0px, 195.0px); opacity: 1; }
  3.735% { transform: translate(261.6px, 195.0px); opacity: 1; }
  3.843% { transform: translate(271.2px, 195.0px); opacity: 1; }
  3.951% { transform: translate(280.8px, 195.0px); opacity: 1; }
  4.059% { transform: translate(290.4px, 195.0px); opacity: 1; }
  4.167% { transform: translate(300.0px, 195.0px); opacity: 0; }
  100% { transform: translate(300.0px, 195.0px); opacity: 0; }
}
.fj-chg--0 { animation-name: fj-chg-0; }
@keyframes fj-ev-0 {
  0% { transform: translate(300.0px, 195.0px); opacity: 0; }
  4.750% { transform: translate(300.0px, 195.0px); opacity: 0; }
  4.792% { transform: translate(300.0px, 195.0px); opacity: 1; }
  4.900% { transform: translate(305.9px, 195.0px); opacity: 1; }
  5.008% { transform: translate(311.9px, 195.0px); opacity: 1; }
  5.116% { transform: translate(317.8px, 195.0px); opacity: 1; }
  5.224% { transform: translate(323.7px, 195.0px); opacity: 1; }
  5.332% { transform: translate(329.6px, 195.0px); opacity: 1; }
  5.440% { transform: translate(335.6px, 195.0px); opacity: 1; }
  5.548% { transform: translate(341.5px, 195.0px); opacity: 1; }
  5.656% { transform: translate(347.4px, 195.0px); opacity: 1; }
  5.764% { transform: translate(353.3px, 195.0px); opacity: 1; }
  5.872% { transform: translate(359.3px, 195.0px); opacity: 1; }
  5.980% { transform: translate(365.2px, 195.0px); opacity: 1; }
  6.088% { transform: translate(371.1px, 195.0px); opacity: 1; }
  6.196% { transform: translate(377.0px, 195.0px); opacity: 1; }
  6.304% { transform: translate(383.0px, 195.0px); opacity: 1; }
  6.412% { transform: translate(388.9px, 195.0px); opacity: 1; }
  6.520% { transform: translate(394.8px, 195.0px); opacity: 1; }
  6.628% { transform: translate(400.7px, 195.0px); opacity: 1; }
  6.736% { transform: translate(406.7px, 195.0px); opacity: 1; }
  6.844% { transform: translate(412.6px, 195.0px); opacity: 1; }
  6.952% { transform: translate(418.5px, 195.0px); opacity: 1; }
  7.060% { transform: translate(424.4px, 195.0px); opacity: 1; }
  7.168% { transform: translate(430.4px, 195.0px); opacity: 1; }
  7.276% { transform: translate(436.3px, 195.0px); opacity: 1; }
  7.384% { transform: translate(442.2px, 195.0px); opacity: 1; }
  7.492% { transform: translate(448.1px, 195.0px); opacity: 1; }
  7.600% { transform: translate(454.1px, 195.0px); opacity: 1; }
  7.708% { transform: translate(460.0px, 195.0px); opacity: 1; }
  9.333% { transform: translate(460.0px, 195.0px); opacity: 1; }
  9.375% { transform: translate(460.0px, 195.0px); opacity: 1; }
  9.514% { transform: translate(473.4px, 195.0px); opacity: 1; }
  9.653% { transform: translate(486.7px, 195.0px); opacity: 1; }
  9.792% { transform: translate(500.1px, 195.0px); opacity: 1; }
  9.931% { transform: translate(513.5px, 195.0px); opacity: 1; }
  10.069% { transform: translate(526.2px, 192.4px); opacity: 1; }
  10.208% { transform: translate(533.2px, 181.2px); opacity: 1; }
  10.347% { transform: translate(537.6px, 168.6px); opacity: 1; }
  10.486% { transform: translate(541.4px, 155.7px); opacity: 1; }
  10.625% { transform: translate(545.5px, 143.0px); opacity: 1; }
  10.764% { transform: translate(551.5px, 131.1px); opacity: 1; }
  10.903% { transform: translate(563.1px, 126.0px); opacity: 1; }
  11.042% { transform: translate(576.4px, 126.0px); opacity: 1; }
  11.181% { transform: translate(589.8px, 126.0px); opacity: 1; }
  11.319% { transform: translate(603.2px, 126.0px); opacity: 1; }
  11.458% { transform: translate(616.5px, 126.0px); opacity: 1; }
  11.597% { transform: translate(629.9px, 126.0px); opacity: 1; }
  11.736% { transform: translate(643.3px, 126.0px); opacity: 1; }
  11.875% { transform: translate(656.7px, 126.0px); opacity: 1; }
  12.014% { transform: translate(670.0px, 126.0px); opacity: 1; }
  12.153% { transform: translate(683.4px, 126.0px); opacity: 1; }
  12.292% { transform: translate(696.8px, 126.0px); opacity: 1; }
  12.431% { transform: translate(710.1px, 126.0px); opacity: 1; }
  12.569% { transform: translate(723.5px, 126.0px); opacity: 1; }
  12.708% { transform: translate(736.9px, 126.0px); opacity: 1; }
  12.847% { transform: translate(750.3px, 126.0px); opacity: 1; }
  12.986% { transform: translate(763.6px, 126.0px); opacity: 1; }
  13.125% { transform: translate(777.0px, 126.0px); opacity: 0; }
  100% { transform: translate(777.0px, 126.0px); opacity: 0; }
}
.fj-ev--0 { animation-name: fj-ev-0; }
@keyframes fj-land-0 {
  0%, 12.812% { opacity: 0; }
  13.333%, 96.875% { opacity: 1; }
  98.125%, 100% { opacity: 0; }
}
.fj-land--t0 { animation-name: fj-land-0; }
@keyframes fj-chg-1 {
  0% { transform: translate(50.0px, 171.0px); opacity: 0; }
  9.542% { transform: translate(50.0px, 171.0px); opacity: 0; }
  9.583% { transform: translate(50.0px, 171.0px); opacity: 1; }
  9.691% { transform: translate(59.6px, 171.0px); opacity: 1; }
  9.799% { transform: translate(69.2px, 171.0px); opacity: 1; }
  9.907% { transform: translate(78.8px, 171.0px); opacity: 1; }
  10.015% { transform: translate(88.4px, 171.0px); opacity: 1; }
  10.123% { transform: translate(98.0px, 171.0px); opacity: 1; }
  10.231% { transform: translate(107.6px, 171.0px); opacity: 1; }
  10.340% { transform: translate(117.2px, 171.0px); opacity: 1; }
  10.448% { transform: translate(126.8px, 171.0px); opacity: 1; }
  10.556% { transform: translate(136.4px, 171.0px); opacity: 1; }
  10.664% { transform: translate(146.0px, 171.0px); opacity: 1; }
  10.772% { transform: translate(155.6px, 171.0px); opacity: 1; }
  10.880% { transform: translate(165.2px, 171.4px); opacity: 1; }
  10.988% { transform: translate(173.8px, 175.4px); opacity: 1; }
  11.096% { transform: translate(179.9px, 182.8px); opacity: 1; }
  11.204% { transform: translate(185.9px, 190.3px); opacity: 1; }
  11.312% { transform: translate(194.4px, 194.5px); opacity: 1; }
  11.420% { transform: translate(204.0px, 195.0px); opacity: 1; }
  11.528% { transform: translate(213.6px, 195.0px); opacity: 1; }
  11.636% { transform: translate(223.2px, 195.0px); opacity: 1; }
  11.744% { transform: translate(232.8px, 195.0px); opacity: 1; }
  11.852% { transform: translate(242.4px, 195.0px); opacity: 1; }
  11.960% { transform: translate(252.0px, 195.0px); opacity: 1; }
  12.068% { transform: translate(261.6px, 195.0px); opacity: 1; }
  12.176% { transform: translate(271.2px, 195.0px); opacity: 1; }
  12.284% { transform: translate(280.8px, 195.0px); opacity: 1; }
  12.392% { transform: translate(290.4px, 195.0px); opacity: 1; }
  12.500% { transform: translate(300.0px, 195.0px); opacity: 0; }
  100% { transform: translate(300.0px, 195.0px); opacity: 0; }
}
.fj-chg--1 { animation-name: fj-chg-1; }
@keyframes fj-ev-1 {
  0% { transform: translate(300.0px, 195.0px); opacity: 0; }
  13.083% { transform: translate(300.0px, 195.0px); opacity: 0; }
  13.125% { transform: translate(300.0px, 195.0px); opacity: 1; }
  13.233% { transform: translate(305.9px, 195.0px); opacity: 1; }
  13.341% { transform: translate(311.9px, 195.0px); opacity: 1; }
  13.449% { transform: translate(317.8px, 195.0px); opacity: 1; }
  13.557% { transform: translate(323.7px, 195.0px); opacity: 1; }
  13.665% { transform: translate(329.6px, 195.0px); opacity: 1; }
  13.773% { transform: translate(335.6px, 195.0px); opacity: 1; }
  13.881% { transform: translate(341.5px, 195.0px); opacity: 1; }
  13.989% { transform: translate(347.4px, 195.0px); opacity: 1; }
  14.097% { transform: translate(353.3px, 195.0px); opacity: 1; }
  14.205% { transform: translate(359.3px, 195.0px); opacity: 1; }
  14.313% { transform: translate(365.2px, 195.0px); opacity: 1; }
  14.421% { transform: translate(371.1px, 195.0px); opacity: 1; }
  14.529% { transform: translate(377.0px, 195.0px); opacity: 1; }
  14.637% { transform: translate(383.0px, 195.0px); opacity: 1; }
  14.745% { transform: translate(388.9px, 195.0px); opacity: 1; }
  14.853% { transform: translate(394.8px, 195.0px); opacity: 1; }
  14.961% { transform: translate(400.7px, 195.0px); opacity: 1; }
  15.069% { transform: translate(406.7px, 195.0px); opacity: 1; }
  15.177% { transform: translate(412.6px, 195.0px); opacity: 1; }
  15.285% { transform: translate(418.5px, 195.0px); opacity: 1; }
  15.394% { transform: translate(424.4px, 195.0px); opacity: 1; }
  15.502% { transform: translate(430.4px, 195.0px); opacity: 1; }
  15.610% { transform: translate(436.3px, 195.0px); opacity: 1; }
  15.718% { transform: translate(442.2px, 195.0px); opacity: 1; }
  15.826% { transform: translate(448.1px, 195.0px); opacity: 1; }
  15.934% { transform: translate(454.1px, 195.0px); opacity: 1; }
  16.042% { transform: translate(460.0px, 195.0px); opacity: 1; }
  17.667% { transform: translate(460.0px, 195.0px); opacity: 1; }
  17.708% { transform: translate(460.0px, 195.0px); opacity: 1; }
  17.847% { transform: translate(471.8px, 195.0px); opacity: 1; }
  17.986% { transform: translate(483.5px, 195.0px); opacity: 1; }
  18.125% { transform: translate(495.3px, 195.0px); opacity: 1; }
  18.264% { transform: translate(507.0px, 195.0px); opacity: 1; }
  18.403% { transform: translate(518.8px, 195.0px); opacity: 1; }
  18.542% { transform: translate(530.5px, 194.4px); opacity: 1; }
  18.681% { transform: translate(542.0px, 192.0px); opacity: 1; }
  18.819% { transform: translate(553.6px, 190.2px); opacity: 1; }
  18.958% { transform: translate(565.4px, 190.0px); opacity: 1; }
  19.097% { transform: translate(577.1px, 190.0px); opacity: 1; }
  19.236% { transform: translate(588.9px, 190.0px); opacity: 1; }
  19.375% { transform: translate(600.6px, 190.0px); opacity: 1; }
  19.514% { transform: translate(612.4px, 190.0px); opacity: 1; }
  19.653% { transform: translate(624.2px, 190.0px); opacity: 1; }
  19.792% { transform: translate(635.9px, 190.0px); opacity: 1; }
  19.931% { transform: translate(647.7px, 190.0px); opacity: 1; }
  20.069% { transform: translate(659.4px, 190.0px); opacity: 1; }
  20.208% { transform: translate(671.2px, 190.0px); opacity: 1; }
  20.347% { transform: translate(682.9px, 190.0px); opacity: 1; }
  20.486% { transform: translate(694.7px, 190.0px); opacity: 1; }
  20.625% { transform: translate(706.5px, 190.0px); opacity: 1; }
  20.764% { transform: translate(718.2px, 190.0px); opacity: 1; }
  20.903% { transform: translate(730.0px, 190.0px); opacity: 1; }
  21.042% { transform: translate(741.7px, 190.0px); opacity: 1; }
  21.181% { transform: translate(753.5px, 190.0px); opacity: 1; }
  21.319% { transform: translate(765.2px, 190.0px); opacity: 1; }
  21.458% { transform: translate(777.0px, 190.0px); opacity: 0; }
  100% { transform: translate(777.0px, 190.0px); opacity: 0; }
}
.fj-ev--1 { animation-name: fj-ev-1; }
@keyframes fj-land-1 {
  0%, 21.146% { opacity: 0; }
  21.667%, 96.875% { opacity: 1; }
  98.125%, 100% { opacity: 0; }
}
.fj-land--t1 { animation-name: fj-land-1; }
@keyframes fj-ev-2 {
  0% { transform: translate(300.0px, 195.0px); opacity: 0; }
  17.875% { transform: translate(300.0px, 195.0px); opacity: 0; }
  17.917% { transform: translate(300.0px, 195.0px); opacity: 1; }
  18.025% { transform: translate(305.9px, 195.0px); opacity: 1; }
  18.133% { transform: translate(311.9px, 195.0px); opacity: 1; }
  18.241% { transform: translate(317.8px, 195.0px); opacity: 1; }
  18.349% { transform: translate(323.7px, 195.0px); opacity: 1; }
  18.457% { transform: translate(329.6px, 195.0px); opacity: 1; }
  18.565% { transform: translate(335.6px, 195.0px); opacity: 1; }
  18.673% { transform: translate(341.5px, 195.0px); opacity: 1; }
  18.781% { transform: translate(347.4px, 195.0px); opacity: 1; }
  18.889% { transform: translate(353.3px, 195.0px); opacity: 1; }
  18.997% { transform: translate(359.3px, 195.0px); opacity: 1; }
  19.105% { transform: translate(365.2px, 195.0px); opacity: 1; }
  19.213% { transform: translate(371.1px, 195.0px); opacity: 1; }
  19.321% { transform: translate(377.0px, 195.0px); opacity: 1; }
  19.429% { transform: translate(383.0px, 195.0px); opacity: 1; }
  19.537% { transform: translate(388.9px, 195.0px); opacity: 1; }
  19.645% { transform: translate(394.8px, 195.0px); opacity: 1; }
  19.753% { transform: translate(400.7px, 195.0px); opacity: 1; }
  19.861% { transform: translate(406.7px, 195.0px); opacity: 1; }
  19.969% { transform: translate(412.6px, 195.0px); opacity: 1; }
  20.077% { transform: translate(418.5px, 195.0px); opacity: 1; }
  20.185% { transform: translate(424.4px, 195.0px); opacity: 1; }
  20.293% { transform: translate(430.4px, 195.0px); opacity: 1; }
  20.401% { transform: translate(436.3px, 195.0px); opacity: 1; }
  20.509% { transform: translate(442.2px, 195.0px); opacity: 1; }
  20.617% { transform: translate(448.1px, 195.0px); opacity: 1; }
  20.725% { transform: translate(454.1px, 195.0px); opacity: 1; }
  20.833% { transform: translate(460.0px, 195.0px); opacity: 1; }
  24.167% { transform: translate(460.0px, 195.0px); opacity: 1; }
  25.417%, 100% { transform: translate(460.0px, 195.0px); opacity: 0; }
}
.fj-ev--2 { animation-name: fj-ev-2; }
@keyframes fj-badge-2 {
  0%, 21.562% { opacity: 0; }
  22.083%, 24.167% { opacity: 1; }
  24.792%, 100% { opacity: 0; }
}
.fj-ev--2 .fj-badge { animation-name: fj-badge-2; }
@keyframes fj-chg-3 {
  0% { transform: translate(50.0px, 219.0px); opacity: 0; }
  24.125% { transform: translate(50.0px, 219.0px); opacity: 0; }
  24.167% { transform: translate(50.0px, 219.0px); opacity: 1; }
  24.275% { transform: translate(59.6px, 219.0px); opacity: 1; }
  24.383% { transform: translate(69.2px, 219.0px); opacity: 1; }
  24.491% { transform: translate(78.8px, 219.0px); opacity: 1; }
  24.599% { transform: translate(88.4px, 219.0px); opacity: 1; }
  24.707% { transform: translate(98.0px, 219.0px); opacity: 1; }
  24.815% { transform: translate(107.6px, 219.0px); opacity: 1; }
  24.923% { transform: translate(117.2px, 219.0px); opacity: 1; }
  25.031% { transform: translate(126.8px, 219.0px); opacity: 1; }
  25.139% { transform: translate(136.4px, 219.0px); opacity: 1; }
  25.247% { transform: translate(146.0px, 219.0px); opacity: 1; }
  25.355% { transform: translate(155.6px, 219.0px); opacity: 1; }
  25.463% { transform: translate(165.2px, 218.6px); opacity: 1; }
  25.571% { transform: translate(173.8px, 214.6px); opacity: 1; }
  25.679% { transform: translate(179.9px, 207.2px); opacity: 1; }
  25.787% { transform: translate(185.9px, 199.7px); opacity: 1; }
  25.895% { transform: translate(194.4px, 195.5px); opacity: 1; }
  26.003% { transform: translate(204.0px, 195.0px); opacity: 1; }
  26.111% { transform: translate(213.6px, 195.0px); opacity: 1; }
  26.219% { transform: translate(223.2px, 195.0px); opacity: 1; }
  26.327% { transform: translate(232.8px, 195.0px); opacity: 1; }
  26.435% { transform: translate(242.4px, 195.0px); opacity: 1; }
  26.543% { transform: translate(252.0px, 195.0px); opacity: 1; }
  26.651% { transform: translate(261.6px, 195.0px); opacity: 1; }
  26.759% { transform: translate(271.2px, 195.0px); opacity: 1; }
  26.867% { transform: translate(280.8px, 195.0px); opacity: 1; }
  26.975% { transform: translate(290.4px, 195.0px); opacity: 1; }
  27.083% { transform: translate(300.0px, 195.0px); opacity: 0; }
  100% { transform: translate(300.0px, 195.0px); opacity: 0; }
}
.fj-chg--3 { animation-name: fj-chg-3; }
@keyframes fj-ev-3 {
  0% { transform: translate(300.0px, 195.0px); opacity: 0; }
  27.667% { transform: translate(300.0px, 195.0px); opacity: 0; }
  27.708% { transform: translate(300.0px, 195.0px); opacity: 1; }
  27.816% { transform: translate(305.9px, 195.0px); opacity: 1; }
  27.924% { transform: translate(311.9px, 195.0px); opacity: 1; }
  28.032% { transform: translate(317.8px, 195.0px); opacity: 1; }
  28.140% { transform: translate(323.7px, 195.0px); opacity: 1; }
  28.248% { transform: translate(329.6px, 195.0px); opacity: 1; }
  28.356% { transform: translate(335.6px, 195.0px); opacity: 1; }
  28.465% { transform: translate(341.5px, 195.0px); opacity: 1; }
  28.573% { transform: translate(347.4px, 195.0px); opacity: 1; }
  28.681% { transform: translate(353.3px, 195.0px); opacity: 1; }
  28.789% { transform: translate(359.3px, 195.0px); opacity: 1; }
  28.897% { transform: translate(365.2px, 195.0px); opacity: 1; }
  29.005% { transform: translate(371.1px, 195.0px); opacity: 1; }
  29.113% { transform: translate(377.0px, 195.0px); opacity: 1; }
  29.221% { transform: translate(383.0px, 195.0px); opacity: 1; }
  29.329% { transform: translate(388.9px, 195.0px); opacity: 1; }
  29.437% { transform: translate(394.8px, 195.0px); opacity: 1; }
  29.545% { transform: translate(400.7px, 195.0px); opacity: 1; }
  29.653% { transform: translate(406.7px, 195.0px); opacity: 1; }
  29.761% { transform: translate(412.6px, 195.0px); opacity: 1; }
  29.869% { transform: translate(418.5px, 195.0px); opacity: 1; }
  29.977% { transform: translate(424.4px, 195.0px); opacity: 1; }
  30.085% { transform: translate(430.4px, 195.0px); opacity: 1; }
  30.193% { transform: translate(436.3px, 195.0px); opacity: 1; }
  30.301% { transform: translate(442.2px, 195.0px); opacity: 1; }
  30.409% { transform: translate(448.1px, 195.0px); opacity: 1; }
  30.517% { transform: translate(454.1px, 195.0px); opacity: 1; }
  30.625% { transform: translate(460.0px, 195.0px); opacity: 1; }
  32.250% { transform: translate(460.0px, 195.0px); opacity: 1; }
  32.292% { transform: translate(460.0px, 195.0px); opacity: 1; }
  32.431% { transform: translate(473.0px, 195.0px); opacity: 1; }
  32.569% { transform: translate(486.1px, 195.0px); opacity: 1; }
  32.708% { transform: translate(499.1px, 195.0px); opacity: 1; }
  32.847% { transform: translate(512.2px, 195.0px); opacity: 1; }
  32.986% { transform: translate(525.0px, 196.4px); opacity: 1; }
  33.125% { transform: translate(533.0px, 206.4px); opacity: 1; }
  33.264% { transform: translate(537.9px, 218.5px); opacity: 1; }
  33.403% { transform: translate(542.2px, 230.9px); opacity: 1; }
  33.542% { transform: translate(547.1px, 242.9px); opacity: 1; }
  33.681% { transform: translate(555.4px, 252.8px); opacity: 1; }
  33.819% { transform: translate(568.2px, 254.0px); opacity: 1; }
  33.958% { transform: translate(581.3px, 254.0px); opacity: 1; }
  34.097% { transform: translate(594.3px, 254.0px); opacity: 1; }
  34.236% { transform: translate(607.4px, 254.0px); opacity: 1; }
  34.375% { transform: translate(620.4px, 254.0px); opacity: 1; }
  34.514% { transform: translate(633.5px, 254.0px); opacity: 1; }
  34.653% { transform: translate(646.5px, 254.0px); opacity: 1; }
  34.792% { transform: translate(659.6px, 254.0px); opacity: 1; }
  34.931% { transform: translate(672.6px, 254.0px); opacity: 1; }
  35.069% { transform: translate(685.7px, 254.0px); opacity: 1; }
  35.208% { transform: translate(698.7px, 254.0px); opacity: 1; }
  35.347% { transform: translate(711.8px, 254.0px); opacity: 1; }
  35.486% { transform: translate(724.8px, 254.0px); opacity: 1; }
  35.625% { transform: translate(737.9px, 254.0px); opacity: 1; }
  35.764% { transform: translate(750.9px, 254.0px); opacity: 1; }
  35.903% { transform: translate(764.0px, 254.0px); opacity: 1; }
  36.042% { transform: translate(777.0px, 254.0px); opacity: 0; }
  100% { transform: translate(777.0px, 254.0px); opacity: 0; }
}
.fj-ev--3 { animation-name: fj-ev-3; }
@keyframes fj-land-3 {
  0%, 35.729% { opacity: 0; }
  36.250%, 96.875% { opacity: 1; }
  98.125%, 100% { opacity: 0; }
}
.fj-land--t2 { animation-name: fj-land-3; }

@keyframes fj-door-db {
  0%% { opacity: .55; }
  0.625% { opacity: .55; }
  1.250%, 2.917% { opacity: 1; }
  4.167% { opacity: .55; }
  8.958% { opacity: .55; }
  9.583%, 11.250% { opacity: 1; }
  12.500% { opacity: .55; }
  100% { opacity: .55; }
}
.fj-tile--db { animation-name: fj-door-db; }
@keyframes fj-door-csv {
  0%% { opacity: .55; }
  23.542% { opacity: .55; }
  24.167%, 25.833% { opacity: 1; }
  27.083% { opacity: .55; }
  100% { opacity: .55; }
}
.fj-tile--csv { animation-name: fj-door-csv; }

@keyframes fj-check {
  0%% { opacity: 0; }
  7.604% { opacity: 0; }
  8.375% { opacity: .55; }
  9.792% { opacity: 0; }
  15.938% { opacity: 0; }
  16.708% { opacity: .55; }
  18.125% { opacity: 0; }
  20.729% { opacity: 0; }
  21.500% { opacity: .55; }
  22.917% { opacity: 0; }
  30.521% { opacity: 0; }
  31.292% { opacity: .55; }
  32.708% { opacity: 0; }
  100% { opacity: 0; }
}
.fj-gate__glow { animation-name: fj-check; }

/* A dot of prices and stock down each lane, every time a row lands
   that the lane carries; the fix rides the same lane. */
@keyframes fj-dot-0 {
  0% { transform: translate(868.0px, 125.0px); opacity: 0; }
  13.917% { transform: translate(868.0px, 125.0px); opacity: 0; }
  13.958% { transform: translate(868.0px, 125.0px); opacity: 1; }
  14.113% { transform: translate(880.1px, 125.0px); opacity: 1; }
  14.267% { transform: translate(892.1px, 125.0px); opacity: 1; }
  14.421% { transform: translate(904.2px, 125.0px); opacity: 1; }
  14.576% { transform: translate(916.3px, 125.0px); opacity: 1; }
  14.730% { transform: translate(928.4px, 125.0px); opacity: 1; }
  14.884% { transform: translate(940.4px, 125.0px); opacity: 1; }
  15.039% { transform: translate(952.5px, 125.0px); opacity: 1; }
  15.193% { transform: translate(964.6px, 125.0px); opacity: 1; }
  15.347% { transform: translate(976.7px, 125.0px); opacity: 1; }
  15.502% { transform: translate(988.7px, 125.0px); opacity: 1; }
  15.656% { transform: translate(1000.8px, 125.0px); opacity: 1; }
  15.810% { transform: translate(1012.9px, 125.0px); opacity: 1; }
  15.965% { transform: translate(1025.0px, 125.0px); opacity: 1; }
  16.119% { transform: translate(1037.0px, 125.0px); opacity: 1; }
  16.273% { transform: translate(1049.1px, 125.0px); opacity: 1; }
  16.427% { transform: translate(1061.2px, 125.0px); opacity: 1; }
  16.582% { transform: translate(1073.3px, 125.0px); opacity: 1; }
  16.736% { transform: translate(1085.3px, 125.0px); opacity: 1; }
  16.890% { transform: translate(1097.4px, 125.0px); opacity: 1; }
  17.045% { transform: translate(1109.5px, 125.0px); opacity: 1; }
  17.199% { transform: translate(1121.6px, 125.0px); opacity: 1; }
  17.353% { transform: translate(1133.6px, 125.0px); opacity: 1; }
  17.508% { transform: translate(1145.7px, 125.0px); opacity: 1; }
  17.662% { transform: translate(1157.8px, 125.0px); opacity: 1; }
  17.816% { transform: translate(1169.9px, 125.0px); opacity: 1; }
  17.971% { transform: translate(1181.9px, 125.0px); opacity: 1; }
  18.125% { transform: translate(1194.0px, 125.0px); opacity: 0; }
  36.833% { transform: translate(868.0px, 125.0px); opacity: 0; }
  36.875% { transform: translate(868.0px, 125.0px); opacity: 1; }
  37.029% { transform: translate(880.1px, 125.0px); opacity: 1; }
  37.184% { transform: translate(892.1px, 125.0px); opacity: 1; }
  37.338% { transform: translate(904.2px, 125.0px); opacity: 1; }
  37.492% { transform: translate(916.3px, 125.0px); opacity: 1; }
  37.647% { transform: translate(928.4px, 125.0px); opacity: 1; }
  37.801% { transform: translate(940.4px, 125.0px); opacity: 1; }
  37.955% { transform: translate(952.5px, 125.0px); opacity: 1; }
  38.110% { transform: translate(964.6px, 125.0px); opacity: 1; }
  38.264% { transform: translate(976.7px, 125.0px); opacity: 1; }
  38.418% { transform: translate(988.7px, 125.0px); opacity: 1; }
  38.573% { transform: translate(1000.8px, 125.0px); opacity: 1; }
  38.727% { transform: translate(1012.9px, 125.0px); opacity: 1; }
  38.881% { transform: translate(1025.0px, 125.0px); opacity: 1; }
  39.035% { transform: translate(1037.0px, 125.0px); opacity: 1; }
  39.190% { transform: translate(1049.1px, 125.0px); opacity: 1; }
  39.344% { transform: translate(1061.2px, 125.0px); opacity: 1; }
  39.498% { transform: translate(1073.3px, 125.0px); opacity: 1; }
  39.653% { transform: translate(1085.3px, 125.0px); opacity: 1; }
  39.807% { transform: translate(1097.4px, 125.0px); opacity: 1; }
  39.961% { transform: translate(1109.5px, 125.0px); opacity: 1; }
  40.116% { transform: translate(1121.6px, 125.0px); opacity: 1; }
  40.270% { transform: translate(1133.6px, 125.0px); opacity: 1; }
  40.424% { transform: translate(1145.7px, 125.0px); opacity: 1; }
  40.579% { transform: translate(1157.8px, 125.0px); opacity: 1; }
  40.733% { transform: translate(1169.9px, 125.0px); opacity: 1; }
  40.887% { transform: translate(1181.9px, 125.0px); opacity: 1; }
  41.042% { transform: translate(1194.0px, 125.0px); opacity: 0; }
  100% { transform: translate(1194.0px, 125.0px); opacity: 0; }
}
.fj-dot--0 { animation-name: fj-dot-0; }
@keyframes fj-led-l0 {
  0%% { opacity: .15; }
  15.104% { opacity: .15; }
  15.417% { opacity: 1; }
  15.833% { opacity: .25; }
  16.250% { opacity: 1; }
  16.667% { opacity: .25; }
  17.083% { opacity: .15; }
  38.021% { opacity: .15; }
  38.333% { opacity: 1; }
  38.750% { opacity: .25; }
  39.167% { opacity: 1; }
  39.583% { opacity: .25; }
  40.000% { opacity: .15; }
  100% { opacity: .15; }
}
.fj-box--l0 .fj-led { animation-name: fj-led-l0; }
@keyframes fj-dot-1 {
  0% { transform: translate(868.0px, 195.0px); opacity: 0; }
  22.250% { transform: translate(868.0px, 195.0px); opacity: 0; }
  22.292% { transform: translate(868.0px, 195.0px); opacity: 1; }
  22.446% { transform: translate(881.0px, 195.0px); opacity: 1; }
  22.600% { transform: translate(893.9px, 195.0px); opacity: 1; }
  22.755% { transform: translate(906.9px, 195.0px); opacity: 1; }
  22.909% { transform: translate(919.8px, 195.0px); opacity: 1; }
  23.063% { transform: translate(932.8px, 195.0px); opacity: 1; }
  23.218% { transform: translate(945.7px, 195.0px); opacity: 1; }
  23.372% { transform: translate(958.7px, 195.0px); opacity: 1; }
  23.526% { transform: translate(971.6px, 195.0px); opacity: 1; }
  23.681% { transform: translate(984.6px, 195.0px); opacity: 1; }
  23.835% { transform: translate(997.5px, 195.0px); opacity: 1; }
  23.989% { transform: translate(1010.5px, 195.0px); opacity: 1; }
  24.144% { transform: translate(1023.4px, 195.0px); opacity: 1; }
  24.298% { transform: translate(1036.4px, 195.0px); opacity: 1; }
  24.452% { transform: translate(1049.3px, 195.0px); opacity: 1; }
  24.606% { transform: translate(1062.3px, 195.0px); opacity: 1; }
  24.761% { transform: translate(1075.2px, 195.0px); opacity: 1; }
  24.915% { transform: translate(1088.2px, 195.0px); opacity: 1; }
  25.069% { transform: translate(1101.1px, 195.0px); opacity: 1; }
  25.224% { transform: translate(1114.1px, 195.0px); opacity: 1; }
  25.378% { transform: translate(1127.0px, 195.0px); opacity: 1; }
  25.532% { transform: translate(1140.0px, 195.0px); opacity: 1; }
  25.687% { transform: translate(1152.9px, 195.0px); opacity: 1; }
  25.841% { transform: translate(1165.9px, 195.0px); opacity: 1; }
  25.995% { transform: translate(1178.8px, 195.0px); opacity: 1; }
  26.150% { transform: translate(1184.4px, 205.9px); opacity: 1; }
  26.304% { transform: translate(1189.2px, 218.0px); opacity: 1; }
  26.458% { transform: translate(1194.0px, 230.0px); opacity: 0; }
  36.833% { transform: translate(868.0px, 195.0px); opacity: 0; }
  36.875% { transform: translate(868.0px, 195.0px); opacity: 1; }
  37.029% { transform: translate(881.0px, 195.0px); opacity: 1; }
  37.184% { transform: translate(893.9px, 195.0px); opacity: 1; }
  37.338% { transform: translate(906.9px, 195.0px); opacity: 1; }
  37.492% { transform: translate(919.8px, 195.0px); opacity: 1; }
  37.647% { transform: translate(932.8px, 195.0px); opacity: 1; }
  37.801% { transform: translate(945.7px, 195.0px); opacity: 1; }
  37.955% { transform: translate(958.7px, 195.0px); opacity: 1; }
  38.110% { transform: translate(971.6px, 195.0px); opacity: 1; }
  38.264% { transform: translate(984.6px, 195.0px); opacity: 1; }
  38.418% { transform: translate(997.5px, 195.0px); opacity: 1; }
  38.573% { transform: translate(1010.5px, 195.0px); opacity: 1; }
  38.727% { transform: translate(1023.4px, 195.0px); opacity: 1; }
  38.881% { transform: translate(1036.4px, 195.0px); opacity: 1; }
  39.035% { transform: translate(1049.3px, 195.0px); opacity: 1; }
  39.190% { transform: translate(1062.3px, 195.0px); opacity: 1; }
  39.344% { transform: translate(1075.2px, 195.0px); opacity: 1; }
  39.498% { transform: translate(1088.2px, 195.0px); opacity: 1; }
  39.653% { transform: translate(1101.1px, 195.0px); opacity: 1; }
  39.807% { transform: translate(1114.1px, 195.0px); opacity: 1; }
  39.961% { transform: translate(1127.0px, 195.0px); opacity: 1; }
  40.116% { transform: translate(1140.0px, 195.0px); opacity: 1; }
  40.270% { transform: translate(1152.9px, 195.0px); opacity: 1; }
  40.424% { transform: translate(1165.9px, 195.0px); opacity: 1; }
  40.579% { transform: translate(1178.8px, 195.0px); opacity: 1; }
  40.733% { transform: translate(1184.4px, 205.9px); opacity: 1; }
  40.887% { transform: translate(1189.2px, 218.0px); opacity: 1; }
  41.042% { transform: translate(1194.0px, 230.0px); opacity: 0; }
  100% { transform: translate(1194.0px, 230.0px); opacity: 0; }
}
.fj-dot--1 { animation-name: fj-dot-1; }
@keyframes fj-led-l1 {
  0%% { opacity: .15; }
  23.438% { opacity: .15; }
  23.750% { opacity: 1; }
  24.167% { opacity: .25; }
  24.583% { opacity: 1; }
  25.000% { opacity: .25; }
  25.417% { opacity: .15; }
  38.021% { opacity: .15; }
  38.333% { opacity: 1; }
  38.750% { opacity: .25; }
  39.167% { opacity: 1; }
  39.583% { opacity: .25; }
  40.000% { opacity: .15; }
  100% { opacity: .15; }
}
.fj-box--l1 .fj-led { animation-name: fj-led-l1; }
@keyframes fj-dot-2 {
  0% { transform: translate(868.0px, 265.0px); opacity: 0; }
  36.833% { transform: translate(868.0px, 265.0px); opacity: 0; }
  36.875% { transform: translate(868.0px, 265.0px); opacity: 1; }
  37.029% { transform: translate(881.0px, 265.0px); opacity: 1; }
  37.184% { transform: translate(893.9px, 265.0px); opacity: 1; }
  37.338% { transform: translate(906.9px, 265.0px); opacity: 1; }
  37.492% { transform: translate(919.8px, 265.0px); opacity: 1; }
  37.647% { transform: translate(932.8px, 265.0px); opacity: 1; }
  37.801% { transform: translate(945.7px, 265.0px); opacity: 1; }
  37.955% { transform: translate(958.7px, 265.0px); opacity: 1; }
  38.110% { transform: translate(971.6px, 265.0px); opacity: 1; }
  38.264% { transform: translate(984.6px, 265.0px); opacity: 1; }
  38.418% { transform: translate(997.5px, 265.0px); opacity: 1; }
  38.573% { transform: translate(1010.5px, 265.0px); opacity: 1; }
  38.727% { transform: translate(1023.4px, 265.0px); opacity: 1; }
  38.881% { transform: translate(1036.4px, 265.0px); opacity: 1; }
  39.035% { transform: translate(1049.3px, 265.0px); opacity: 1; }
  39.190% { transform: translate(1062.3px, 265.0px); opacity: 1; }
  39.344% { transform: translate(1075.2px, 265.0px); opacity: 1; }
  39.498% { transform: translate(1088.2px, 265.0px); opacity: 1; }
  39.653% { transform: translate(1101.1px, 265.0px); opacity: 1; }
  39.807% { transform: translate(1114.1px, 265.0px); opacity: 1; }
  39.961% { transform: translate(1127.0px, 265.0px); opacity: 1; }
  40.116% { transform: translate(1140.0px, 265.0px); opacity: 1; }
  40.270% { transform: translate(1152.9px, 265.0px); opacity: 1; }
  40.424% { transform: translate(1165.9px, 265.0px); opacity: 1; }
  40.579% { transform: translate(1178.8px, 265.0px); opacity: 1; }
  40.733% { transform: translate(1184.4px, 254.1px); opacity: 1; }
  40.887% { transform: translate(1189.2px, 242.0px); opacity: 1; }
  41.042% { transform: translate(1194.0px, 230.0px); opacity: 0; }
  68.708% { transform: translate(868.0px, 265.0px); opacity: 0; }
  68.750% { transform: translate(868.0px, 265.0px); opacity: 1; }
  68.904% { transform: translate(881.0px, 265.0px); opacity: 1; }
  69.059% { transform: translate(893.9px, 265.0px); opacity: 1; }
  69.213% { transform: translate(906.9px, 265.0px); opacity: 1; }
  69.367% { transform: translate(919.8px, 265.0px); opacity: 1; }
  69.522% { transform: translate(932.8px, 265.0px); opacity: 1; }
  69.676% { transform: translate(945.7px, 265.0px); opacity: 1; }
  69.830% { transform: translate(958.7px, 265.0px); opacity: 1; }
  69.985% { transform: translate(971.6px, 265.0px); opacity: 1; }
  70.139% { transform: translate(984.6px, 265.0px); opacity: 1; }
  70.293% { transform: translate(997.5px, 265.0px); opacity: 1; }
  70.448% { transform: translate(1010.5px, 265.0px); opacity: 1; }
  70.602% { transform: translate(1023.4px, 265.0px); opacity: 1; }
  70.756% { transform: translate(1036.4px, 265.0px); opacity: 1; }
  70.910% { transform: translate(1049.3px, 265.0px); opacity: 1; }
  71.065% { transform: translate(1062.3px, 265.0px); opacity: 1; }
  71.219% { transform: translate(1075.2px, 265.0px); opacity: 1; }
  71.373% { transform: translate(1088.2px, 265.0px); opacity: 1; }
  71.528% { transform: translate(1101.1px, 265.0px); opacity: 1; }
  71.682% { transform: translate(1114.1px, 265.0px); opacity: 1; }
  71.836% { transform: translate(1127.0px, 265.0px); opacity: 1; }
  71.991% { transform: translate(1140.0px, 265.0px); opacity: 1; }
  72.145% { transform: translate(1152.9px, 265.0px); opacity: 1; }
  72.299% { transform: translate(1165.9px, 265.0px); opacity: 1; }
  72.454% { transform: translate(1178.8px, 265.0px); opacity: 1; }
  72.608% { transform: translate(1184.4px, 254.1px); opacity: 1; }
  72.762% { transform: translate(1189.2px, 242.0px); opacity: 1; }
  72.917% { transform: translate(1194.0px, 230.0px); opacity: 0; }
  100% { transform: translate(1194.0px, 230.0px); opacity: 0; }
}
.fj-dot--2 { animation-name: fj-dot-2; }
@keyframes fj-led-l2 {
  0%% { opacity: .15; }
  38.021% { opacity: .15; }
  38.333% { opacity: 1; }
  38.750% { opacity: .25; }
  39.167% { opacity: 1; }
  39.583% { opacity: .25; }
  40.000% { opacity: .15; }
  69.896% { opacity: .15; }
  70.208% { opacity: 1; }
  70.625% { opacity: .25; }
  71.042% { opacity: 1; }
  71.458% { opacity: .25; }
  71.875% { opacity: .15; }
  100% { opacity: .15; }
}
.fj-box--l2 .fj-led { animation-name: fj-led-l2; }
@keyframes fj-led-wb {
  0%% { opacity: .15; }
  18.021% { opacity: .15; }
  18.333% { opacity: 1; }
  19.583% { opacity: .15; }
  40.937% { opacity: .15; }
  41.250% { opacity: 1; }
  42.500% { opacity: .15; }
  100% { opacity: .15; }
}
.fj-box--wb .fj-led { animation-name: fj-led-wb; }
@keyframes fj-led-ym {
  0%% { opacity: .15; }
  26.354% { opacity: .15; }
  26.667% { opacity: 1; }
  27.917% { opacity: .15; }
  40.937% { opacity: .15; }
  41.250% { opacity: 1; }
  42.500% { opacity: .15; }
  40.937% { opacity: .15; }
  41.250% { opacity: 1; }
  42.500% { opacity: .15; }
  72.813% { opacity: .15; }
  73.125% { opacity: 1; }
  74.375% { opacity: .15; }
  100% { opacity: .15; }
}
.fj-box--ym .fj-led { animation-name: fj-led-ym; }

/* The catalogue: one package to each marketplace, at once. It lands
   on the three empty slots and stays as their content. */
@keyframes fj-pkg-0 {
  0% { transform: translate(868.0px, 125.0px); opacity: 0; }
  41.625% { transform: translate(868.0px, 125.0px); opacity: 0; }
  41.667% { transform: translate(868.0px, 125.0px); opacity: 1; }
  41.867% { transform: translate(884.1px, 125.0px); opacity: 1; }
  42.068% { transform: translate(900.2px, 125.0px); opacity: 1; }
  42.269% { transform: translate(916.3px, 125.0px); opacity: 1; }
  42.469% { transform: translate(932.4px, 125.0px); opacity: 1; }
  42.670% { transform: translate(948.4px, 125.0px); opacity: 1; }
  42.870% { transform: translate(964.5px, 125.0px); opacity: 1; }
  43.071% { transform: translate(980.6px, 125.0px); opacity: 1; }
  43.272% { transform: translate(996.7px, 125.0px); opacity: 1; }
  43.472% { transform: translate(1012.8px, 125.0px); opacity: 1; }
  43.673% { transform: translate(1028.9px, 125.0px); opacity: 1; }
  43.873% { transform: translate(1045.0px, 125.0px); opacity: 1; }
  44.074% { transform: translate(1061.1px, 125.0px); opacity: 1; }
  44.275% { transform: translate(1077.1px, 125.0px); opacity: 1; }
  44.475% { transform: translate(1093.2px, 125.0px); opacity: 1; }
  44.676% { transform: translate(1109.3px, 125.0px); opacity: 1; }
  44.877% { transform: translate(1125.4px, 125.0px); opacity: 1; }
  45.077% { transform: translate(1141.5px, 125.0px); opacity: 1; }
  45.278% { transform: translate(1157.6px, 125.0px); opacity: 1; }
  45.478% { transform: translate(1173.7px, 125.0px); opacity: 1; }
  45.679% { transform: translate(1189.8px, 125.0px); opacity: 1; }
  45.880% { transform: translate(1205.5px, 128.2px); opacity: 1; }
  46.080% { transform: translate(1221.3px, 131.5px); opacity: 1; }
  46.281% { transform: translate(1237.0px, 134.8px); opacity: 1; }
  46.481% { transform: translate(1252.8px, 138.1px); opacity: 1; }
  46.682% { transform: translate(1268.5px, 141.4px); opacity: 1; }
  46.883% { transform: translate(1284.3px, 144.7px); opacity: 1; }
  47.083% { transform: translate(1300.0px, 148.0px); opacity: 1; }
  96.875% { transform: translate(1300.0px, 148.0px); opacity: 1; }
  98.125%, 100% { transform: translate(1300.0px, 148.0px); opacity: 0; }
}
.fj-pkg-go--0 { animation-name: fj-pkg-0; }
@keyframes fj-pkg-2 {
  0% { transform: translate(868.0px, 265.0px); opacity: 0; }
  41.625% { transform: translate(868.0px, 265.0px); opacity: 0; }
  41.667% { transform: translate(868.0px, 265.0px); opacity: 1; }
  41.867% { transform: translate(884.0px, 265.0px); opacity: 1; }
  42.068% { transform: translate(900.0px, 265.0px); opacity: 1; }
  42.269% { transform: translate(916.1px, 265.0px); opacity: 1; }
  42.469% { transform: translate(932.1px, 265.0px); opacity: 1; }
  42.670% { transform: translate(948.1px, 265.0px); opacity: 1; }
  42.870% { transform: translate(964.1px, 265.0px); opacity: 1; }
  43.071% { transform: translate(980.2px, 265.0px); opacity: 1; }
  43.272% { transform: translate(996.2px, 265.0px); opacity: 1; }
  43.472% { transform: translate(1012.2px, 265.0px); opacity: 1; }
  43.673% { transform: translate(1028.2px, 265.0px); opacity: 1; }
  43.873% { transform: translate(1044.3px, 265.0px); opacity: 1; }
  44.074% { transform: translate(1060.3px, 265.0px); opacity: 1; }
  44.275% { transform: translate(1076.3px, 265.0px); opacity: 1; }
  44.475% { transform: translate(1092.3px, 265.0px); opacity: 1; }
  44.676% { transform: translate(1108.4px, 265.0px); opacity: 1; }
  44.877% { transform: translate(1124.4px, 265.0px); opacity: 1; }
  45.077% { transform: translate(1140.4px, 265.0px); opacity: 1; }
  45.278% { transform: translate(1156.4px, 265.0px); opacity: 1; }
  45.478% { transform: translate(1172.5px, 265.0px); opacity: 1; }
  45.679% { transform: translate(1188.5px, 265.0px); opacity: 1; }
  45.880% { transform: translate(1204.4px, 263.4px); opacity: 1; }
  46.080% { transform: translate(1220.4px, 261.7px); opacity: 1; }
  46.281% { transform: translate(1236.3px, 260.0px); opacity: 1; }
  46.481% { transform: translate(1252.2px, 258.2px); opacity: 1; }
  46.682% { transform: translate(1268.1px, 256.5px); opacity: 1; }
  46.883% { transform: translate(1284.1px, 254.7px); opacity: 1; }
  47.083% { transform: translate(1300.0px, 253.0px); opacity: 1; }
  96.875% { transform: translate(1300.0px, 253.0px); opacity: 1; }
  98.125%, 100% { transform: translate(1300.0px, 253.0px); opacity: 0; }
}
.fj-pkg-go--2 { animation-name: fj-pkg-2; }
@keyframes fj-mslot {
  0%, 46.875% { opacity: 1; }
  47.500%, 96.875% { opacity: 0; }
  98.125%, 100% { opacity: 1; }
}
.fj-mslot { animation-name: fj-mslot; }

/* The ray: a dash along the hairline to the marketplace and back;
   then the row that drifted goes red, the fix goes out, and it
   goes green. */
@keyframes fj-ray-out {
  0%, 56.146% { stroke-dashoffset: 1160; opacity: 0; }
  56.250% { stroke-dashoffset: 1160; opacity: 1; }
  60.417% { stroke-dashoffset: 80; opacity: 1; }
  60.521%, 100% { stroke-dashoffset: 80; opacity: 0; }
}
.fj-ray--out { animation-name: fj-ray-out; }
@keyframes fj-ray-back {
  0%, 61.354% { stroke-dashoffset: 1160; opacity: 0; }
  61.458% { stroke-dashoffset: 1160; opacity: 1; }
  65.625% { stroke-dashoffset: 80; opacity: 1; }
  65.729%, 100% { stroke-dashoffset: 80; opacity: 0; }
}
.fj-ray--back { animation-name: fj-ray-back; }
@keyframes fj-trace {
  0%, 60.208% { opacity: 0; }
  61.354%, 87.500% { opacity: .35; }
  96.875%, 100% { opacity: 0; }
}
.fj-ray__trace { animation-name: fj-trace; }
@keyframes fj-watch {
  0%, 66.562% { fill: var(--fj-row-fill); stroke: var(--fj-row-stroke); }
  67.083%, 73.854% { fill: var(--fj-bad-fill); stroke: var(--c-coral); }
  74.375%, 96.875% { fill: var(--fj-good-fill); stroke: var(--c-teal); }
  98.125%, 100% { fill: var(--fj-row-fill); stroke: var(--fj-row-stroke); }
}
.fj-row--watch .fj-row__c { animation-name: fj-watch; }

/* Dark until something reaches it, then awake to the end of the
   pass. The shop and the database are awake from the start: one
   is where the pass begins, the other already holds data. */
@keyframes fj-live-box-hook {
  0%, 3.958% { opacity: .28; }
  5.104%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--hook { animation-name: fj-live-box-hook; }
@keyframes fj-live-fig-hook {
  0%, 3.958% { opacity: .1; }
  5.104%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--hook { animation-name: fj-live-fig-hook; }
@keyframes fj-live-name-hook {
  0%, 3.958% { opacity: .3; }
  5.104%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--hook { animation-name: fj-live-name-hook; }
@keyframes fj-live-box-gate {
  0%, 7.500% { opacity: .28; }
  8.646%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--gate { animation-name: fj-live-box-gate; }
@keyframes fj-live-fig-gate {
  0%, 7.500% { opacity: .1; }
  8.646%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--gate { animation-name: fj-live-fig-gate; }
@keyframes fj-live-name-gate {
  0%, 7.500% { opacity: .3; }
  8.646%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--gate { animation-name: fj-live-name-gate; }
@keyframes fj-live-box-ctl {
  0%, 56.042% { opacity: .28; }
  57.188%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--ctl { animation-name: fj-live-box-ctl; }
@keyframes fj-live-fig-ctl {
  0%, 56.042% { opacity: .1; }
  57.188%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--ctl { animation-name: fj-live-fig-ctl; }
@keyframes fj-live-name-ctl {
  0%, 56.042% { opacity: .3; }
  57.188%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--ctl { animation-name: fj-live-name-ctl; }
@keyframes fj-live-box-l0 {
  0%, 13.750% { opacity: .28; }
  14.896%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--l0 { animation-name: fj-live-box-l0; }
@keyframes fj-live-fig-l0 {
  0%, 13.750% { opacity: .1; }
  14.896%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--l0 { animation-name: fj-live-fig-l0; }
@keyframes fj-live-name-l0 {
  0%, 13.750% { opacity: .3; }
  14.896%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--l0 { animation-name: fj-live-name-l0; }
@keyframes fj-live-box-l1 {
  0%, 22.083% { opacity: .28; }
  23.229%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--l1 { animation-name: fj-live-box-l1; }
@keyframes fj-live-fig-l1 {
  0%, 22.083% { opacity: .1; }
  23.229%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--l1 { animation-name: fj-live-fig-l1; }
@keyframes fj-live-name-l1 {
  0%, 22.083% { opacity: .3; }
  23.229%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--l1 { animation-name: fj-live-name-l1; }
@keyframes fj-live-box-l2 {
  0%, 36.667% { opacity: .28; }
  37.812%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--l2 { animation-name: fj-live-box-l2; }
@keyframes fj-live-fig-l2 {
  0%, 36.667% { opacity: .1; }
  37.812%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--l2 { animation-name: fj-live-fig-l2; }
@keyframes fj-live-name-l2 {
  0%, 36.667% { opacity: .3; }
  37.812%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--l2 { animation-name: fj-live-name-l2; }
@keyframes fj-live-box-wb {
  0%, 17.917% { opacity: .28; }
  19.062%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--wb { animation-name: fj-live-box-wb; }
@keyframes fj-live-fig-wb {
  0%, 17.917% { opacity: .1; }
  19.062%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--wb { animation-name: fj-live-fig-wb; }
@keyframes fj-live-name-wb {
  0%, 17.917% { opacity: .3; }
  19.062%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--wb { animation-name: fj-live-name-wb; }
@keyframes fj-live-box-ym {
  0%, 26.250% { opacity: .28; }
  27.396%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .28; }
}
.fj-box--ym { animation-name: fj-live-box-ym; }
@keyframes fj-live-fig-ym {
  0%, 26.250% { opacity: .1; }
  27.396%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .1; }
}
.fj-fig--ym { animation-name: fj-live-fig-ym; }
@keyframes fj-live-name-ym {
  0%, 26.250% { opacity: .3; }
  27.396%, 87.500% { opacity: 1; }
  96.875%, 100% { opacity: .3; }
}
.fj-name--ym { animation-name: fj-live-name-ym; }
