Files
wehub-resource-sync d25d482dc2
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:20:55 +08:00

381 lines
5.5 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* One shared 16s timeline of four 4s route phases, a precomputed shuffle
* so the routing feels varied without true randomness:
*
* phase 0 (0%25%): Zendesk -> Slack
* phase 1 (25%50%): Sheets -> Jira
* phase 2 (50%75%): Gmail -> Salesforce
* phase 3 (75%100%): Zendesk -> Jira
*
* Within each 4s phase: the source tag's white filled state crossfades
* in over its outline (00.5s), a white pulse falls down its wire
* (0.41.2s), dwells in the router while the hub blooms (1.22s),
* travels out to the destination (22.8s), the destination tag's fill
* crossfades in as the route connects (2.73.1s), both hold (to 3.6s),
* then fade back to outlined (to 4s).
*
* Tag fill overlays rest transparent (opacity-0, set inline in the TSX)
* so under prefers-reduced-motion — where every animation here is
* disabled — all six tags render outlined and static.
*/
.pulse {
stroke-dasharray: 0.28 1;
stroke-dashoffset: 0.28;
opacity: 0;
}
.pulseInA {
animation: ops-pulse-in-a 16s linear infinite;
}
@keyframes ops-pulse-in-a {
0%,
2.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
2.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
7.5% {
stroke-dashoffset: -1;
opacity: 1;
}
7.6%,
77.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
77.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
82.5% {
stroke-dashoffset: -1;
opacity: 1;
}
82.6%,
100% {
stroke-dashoffset: -1;
opacity: 0;
}
}
.pulseInB {
animation: ops-pulse-in-b 16s linear infinite;
}
@keyframes ops-pulse-in-b {
0%,
27.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
27.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
32.5% {
stroke-dashoffset: -1;
opacity: 1;
}
32.6%,
100% {
stroke-dashoffset: -1;
opacity: 0;
}
}
.pulseInC {
animation: ops-pulse-in-c 16s linear infinite;
}
@keyframes ops-pulse-in-c {
0%,
52.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
52.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
57.5% {
stroke-dashoffset: -1;
opacity: 1;
}
57.6%,
100% {
stroke-dashoffset: -1;
opacity: 0;
}
}
.pulseOutA {
animation: ops-pulse-out-a 16s linear infinite;
}
@keyframes ops-pulse-out-a {
0%,
12.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
12.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
17.5% {
stroke-dashoffset: -1;
opacity: 1;
}
17.6%,
100% {
stroke-dashoffset: -1;
opacity: 0;
}
}
.pulseOutB {
animation: ops-pulse-out-b 16s linear infinite;
}
@keyframes ops-pulse-out-b {
0%,
37.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
37.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
42.5% {
stroke-dashoffset: -1;
opacity: 1;
}
42.6%,
87.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
87.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
92.5% {
stroke-dashoffset: -1;
opacity: 1;
}
92.6%,
100% {
stroke-dashoffset: -1;
opacity: 0;
}
}
.pulseOutC {
animation: ops-pulse-out-c 16s linear infinite;
}
@keyframes ops-pulse-out-c {
0%,
62.4% {
stroke-dashoffset: 0.28;
opacity: 0;
}
62.5% {
stroke-dashoffset: 0.28;
opacity: 1;
}
67.5% {
stroke-dashoffset: -1;
opacity: 1;
}
67.6%,
100% {
stroke-dashoffset: -1;
opacity: 0;
}
}
.fillSrcA {
animation: ops-fill-src-a 16s linear infinite;
}
@keyframes ops-fill-src-a {
0% {
opacity: 0;
}
3.1% {
opacity: 1;
}
22.5% {
opacity: 1;
}
24.9%,
75% {
opacity: 0;
}
78.1% {
opacity: 1;
}
97.5% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.fillSrcB {
animation: ops-fill-src-b 16s linear infinite;
}
@keyframes ops-fill-src-b {
0%,
25% {
opacity: 0;
}
28.1% {
opacity: 1;
}
47.5% {
opacity: 1;
}
49.9%,
100% {
opacity: 0;
}
}
.fillSrcC {
animation: ops-fill-src-c 16s linear infinite;
}
@keyframes ops-fill-src-c {
0%,
50% {
opacity: 0;
}
53.1% {
opacity: 1;
}
72.5% {
opacity: 1;
}
74.9%,
100% {
opacity: 0;
}
}
.fillDstA {
animation: ops-fill-dst-a 16s linear infinite;
}
@keyframes ops-fill-dst-a {
0%,
16.9% {
opacity: 0;
}
19.4% {
opacity: 1;
}
22.5% {
opacity: 1;
}
24.9%,
100% {
opacity: 0;
}
}
.fillDstB {
animation: ops-fill-dst-b 16s linear infinite;
}
@keyframes ops-fill-dst-b {
0%,
41.9% {
opacity: 0;
}
44.4% {
opacity: 1;
}
47.5% {
opacity: 1;
}
49.9%,
91.9% {
opacity: 0;
}
94.4% {
opacity: 1;
}
97.5% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.fillDstC {
animation: ops-fill-dst-c 16s linear infinite;
}
@keyframes ops-fill-dst-c {
0%,
66.9% {
opacity: 0;
}
69.4% {
opacity: 1;
}
72.5% {
opacity: 1;
}
74.9%,
100% {
opacity: 0;
}
}
.routerBloom {
animation: ops-router-bloom 4s linear infinite;
}
@keyframes ops-router-bloom {
0%,
30% {
box-shadow: 0 0 0 0 color-mix(in srgb, var(--text-muted-inverse) 45%, transparent);
}
50% {
box-shadow: 0 0 0 6px color-mix(in srgb, var(--text-muted-inverse) 0%, transparent);
}
100% {
box-shadow: 0 0 0 0 color-mix(in srgb, var(--text-muted-inverse) 0%, transparent);
}
}
@media (prefers-reduced-motion: reduce) {
.pulseInA,
.pulseInB,
.pulseInC,
.pulseOutA,
.pulseOutB,
.pulseOutC,
.fillSrcA,
.fillSrcB,
.fillSrcC,
.fillDstA,
.fillDstB,
.fillDstC,
.routerBloom {
animation: none;
}
}