simstudioai--sim
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
381 行
5.5 KiB
CSS
381 行
5.5 KiB
CSS
/**
|
|
* 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 (0–0.5s), a white pulse falls down its wire
|
|
* (0.4–1.2s), dwells in the router while the hub blooms (1.2–2s),
|
|
* travels out to the destination (2–2.8s), the destination tag's fill
|
|
* crossfades in as the route connects (2.7–3.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;
|
|
}
|
|
}
|