This is an automated email from the ASF dual-hosted git repository.

davidzollo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/seatunnel-website.git


The following commit(s) were added to refs/heads/main by this push:
     new 4520320dc1d5 [Docs] Restore native homepage motion (#540)
4520320dc1d5 is described below

commit 4520320dc1d5afc04e49519a839ef8e05722fa15
Author: Daniel <[email protected]>
AuthorDate: Tue Sep 22 04:51:58 2026 -0400

    [Docs] Restore native homepage motion (#540)
---
 src/components/home/MotionMechanismGrid.jsx |  32 +++++--
 src/pages/home/index.jsx                    |  10 ++
 src/pages/home/index.less                   | 144 +++++++++++++++++++++++++++-
 3 files changed, 172 insertions(+), 14 deletions(-)

diff --git a/src/components/home/MotionMechanismGrid.jsx 
b/src/components/home/MotionMechanismGrid.jsx
index cfce5436a2ec..86bfb35b7200 100644
--- a/src/components/home/MotionMechanismGrid.jsx
+++ b/src/components/home/MotionMechanismGrid.jsx
@@ -52,11 +52,11 @@ function ParallelReadsDiagram() {
             })}
             {[54, 87, 120].map((y, index) => (
                 <g key={y}>
-                    <path d={`M134 88 C168 88 174 ${y} 204 ${y}`} 
className="st-home-motion-diagram-line" fill="none" />
+                    <path d={`M134 88 C168 88 174 ${y} 204 ${y}`} 
className="st-home-motion-diagram-line st-home-motion-diagram-flow" fill="none" 
/>
                     <rect x="205" y={y - 13} width="121" height="26" rx="7" 
className="st-home-motion-diagram-node" />
                     <circle cx="220" cy={y} r="3.5" className={index === 1 ? 
'st-home-motion-diagram-teal-fill' : 'st-home-motion-diagram-blue-fill'} />
                     <text x="232" y={y + 5} 
className="st-home-motion-diagram-copy">Reader {index + 1}</text>
-                    <path d={`M326 ${y} C364 ${y} 384 88 428 88`} 
className="st-home-motion-diagram-line" fill="none" />
+                    <path d={`M326 ${y} C364 ${y} 384 88 428 88`} 
className="st-home-motion-diagram-line st-home-motion-diagram-flow" fill="none" 
/>
                 </g>
             ))}
             <Arrow x="427" y="88" />
@@ -79,7 +79,7 @@ function SnapshotCdcDiagram() {
             <text x="29" y="104" 
className="st-home-motion-diagram-copy">42</text><text x="76" y="104" 
className="st-home-motion-diagram-copy">NEW</text>
             <rect x="201" y="24" width="98" height="23" rx="12" 
className="st-home-motion-diagram-soft" />
             <text x="250" y="40" textAnchor="middle" 
className="st-home-motion-diagram-accent-text">SNAPSHOT</text>
-            <path d="M153 82H367" className="st-home-motion-diagram-line" 
fill="none" />
+            <path d="M153 82H367" className="st-home-motion-diagram-line 
st-home-motion-diagram-flow" fill="none" />
             <Arrow x="367" y="82" />
             <rect x="235" y="70" width="48" height="23" rx="7" 
className="st-home-motion-diagram-teal" />
             <text x="259" y="86" textAnchor="middle" 
className="st-home-motion-diagram-on-teal">S:42</text>
@@ -102,7 +102,7 @@ function TransformDiagram() {
             <text x="28" y="57" 
className="st-home-motion-diagram-copy">1&nbsp;&nbsp; Ada</text>
             <text x="28" y="82" 
className="st-home-motion-diagram-copy">0&nbsp;&nbsp; Temp</text>
             <text x="28" y="107" 
className="st-home-motion-diagram-copy">2&nbsp;&nbsp; Lin</text>
-            <path d="M142 76H206M315 76h84" 
className="st-home-motion-diagram-line" fill="none" />
+            <path d="M142 76H206M315 76h84" 
className="st-home-motion-diagram-line st-home-motion-diagram-flow" fill="none" 
/>
             <Arrow x="399" y="76" />
             <rect x="207" y="48" width="108" height="56" rx="13" 
className="st-home-motion-diagram-blue" />
             <text x="261" y="82" textAnchor="middle" 
className="st-home-motion-diagram-on-blue st-home-motion-diagram-sql">SQL</text>
@@ -129,7 +129,7 @@ function RoutingDiagram() {
                         <rect x="389" y={y + 8} width="16" height="14" rx="2" 
className="st-home-motion-diagram-table" />
                         <text x="55" y={y + 20} 
className="st-home-motion-diagram-copy">{table}</text>
                         <text x="416" y={y + 20} 
className="st-home-motion-diagram-copy">{table}</text>
-                        <path d={`M144 ${y + 15} C179 ${y + 15} 189 82 221 
82M299 82 C333 82 343 ${y + 15} 376 ${y + 15}`} 
className="st-home-motion-diagram-line" fill="none" />
+                        <path d={`M144 ${y + 15} C179 ${y + 15} 189 82 221 
82M299 82 C333 82 343 ${y + 15} 376 ${y + 15}`} 
className="st-home-motion-diagram-line st-home-motion-diagram-flow" fill="none" 
/>
                         <Arrow x="375" y={y + 15} />
                     </g>
                 );
@@ -161,7 +161,7 @@ function SchemaDiagram() {
                     </g>
                 );
             })}
-            <path d="M152 82H364" className="st-home-motion-diagram-line" 
fill="none" /><Arrow x="364" y="82" />
+            <path d="M152 82H364" className="st-home-motion-diagram-line 
st-home-motion-diagram-flow" fill="none" /><Arrow x="364" y="82" />
             <rect x="225" y="48" width="58" height="22" rx="11" 
className="st-home-motion-diagram-soft" /><text x="254" y="64" 
textAnchor="middle" className="st-home-motion-diagram-accent-text">DDL</text>
             <rect x="217" y="74" width="42" height="23" rx="7" 
className="st-home-motion-diagram-blue" /><text x="238" y="90" 
textAnchor="middle" className="st-home-motion-diagram-on-blue">ADD</text>
         </svg>
@@ -171,13 +171,13 @@ function SchemaDiagram() {
 function CheckpointDiagram() {
     return (
         <svg viewBox="0 0 520 166" className="st-home-motion-diagram" 
aria-hidden="true">
-            <path d="M122 70h70M327 70h70" 
className="st-home-motion-diagram-line" fill="none" /><Arrow x="192" y="70" 
/><Arrow x="397" y="70" />
+            <path d="M122 70h70M327 70h70" 
className="st-home-motion-diagram-line st-home-motion-diagram-flow" fill="none" 
/><Arrow x="192" y="70" /><Arrow x="397" y="70" />
             {['Source', 'Writer', 'Sink'].map((label, index) => {
                 const x = [16, 198, 403][index];
                 return <g key={label}><rect x={x} y="47" width="104" 
height="43" rx="10" className="st-home-motion-diagram-node" /><text x={x + 52} 
y="74" textAnchor="middle" 
className="st-home-motion-diagram-strong">{label}</text></g>;
             })}
             <rect x="232" y="20" width="70" height="21" rx="10" 
className="st-home-motion-diagram-soft" /><text x="267" y="35" 
textAnchor="middle" 
className="st-home-motion-diagram-accent-text">BARRIER</text>
-            <path d="M68 91C68 130 157 137 215 137M250 91v25" 
className="st-home-motion-diagram-line" fill="none" />
+            <path d="M68 91C68 130 157 137 215 137M250 91v25" 
className="st-home-motion-diagram-line st-home-motion-diagram-flow 
st-home-motion-diagram-flow-teal" fill="none" />
             <rect x="215" y="114" width="134" height="38" rx="9" 
className="st-home-motion-diagram-node" />
             <text x="282" y="135" textAnchor="middle" 
className="st-home-motion-diagram-copy">Checkpoint state</text>
             <text x="282" y="147" textAnchor="middle" 
className="st-home-motion-diagram-label">COMPLETED</text>
@@ -198,10 +198,22 @@ function MotionDiagram({type}) {
     return diagrams[type];
 }
 
-export default function MotionMechanismGrid({caption, gridLabel, mechanisms}) {
+export default function MotionMechanismGrid({caption, controls, gridLabel, 
mechanisms}) {
+    const [isMotionPaused, setIsMotionPaused] = React.useState(false);
+
     return (
         <>
-            <ul className="st-home-motion-grid" aria-label={gridLabel}>
+            <div className="st-home-motion-toolbar" role="group" 
aria-label={controls.label}>
+                <button
+                    type="button"
+                    className="st-home-motion-control"
+                    aria-pressed={isMotionPaused}
+                    onClick={() => setIsMotionPaused((paused) => !paused)}
+                >
+                    {isMotionPaused ? controls.play : controls.pause}
+                </button>
+            </div>
+            <ul className={`st-home-motion-grid${isMotionPaused ? ' 
is-motion-paused' : ''}`} aria-label={gridLabel}>
                 {mechanisms.map((mechanism, index) => (
                     <li key={mechanism.title} className={`st-home-motion-card 
st-home-motion-card-${mechanism.diagram}`}>
                         <article>
diff --git a/src/pages/home/index.jsx b/src/pages/home/index.jsx
index 55c206c760b1..32868dfb5088 100644
--- a/src/pages/home/index.jsx
+++ b/src/pages/home/index.jsx
@@ -264,6 +264,11 @@ const HOME_COPY = {
             title: 'Data integration, in motion.',
             lead: 'Six mechanisms that keep data moving through parallel 
workloads, continuous change, and recoverable failures.',
             gridLabel: 'SeaTunnel data integration mechanisms',
+            controls: {
+                label: 'Motion controls',
+                pause: 'Pause motion',
+                play: 'Resume motion',
+            },
             caption: 'Illustrative flows—not a deployment blueprint. 
Production behavior depends on the selected connector, engine, and 
configuration.',
             mechanisms: [
                 {diagram: 'parallel', title: 'Parallel batch reads', 
description: 'Divide the work. Read independent splits in parallel.', detail: 
'Independent readers process assigned source splits.', note: 'JDBC example · 
Split assignment is source-specific.'},
@@ -525,6 +530,11 @@ const HOME_COPY = {
             title: 'Data integration, in motion.',
             lead: 'Six mechanisms that keep data moving through parallel 
workloads, continuous change, and recoverable failures.',
             gridLabel: 'SeaTunnel data integration mechanisms',
+            controls: {
+                label: 'Motion controls',
+                pause: 'Pause motion',
+                play: 'Resume motion',
+            },
             caption: 'Illustrative flows—not a deployment blueprint. 
Production behavior depends on the selected connector, engine, and 
configuration.',
             mechanisms: [
                 {diagram: 'parallel', title: 'Parallel batch reads', 
description: 'Divide the work. Read independent splits in parallel.', detail: 
'Independent readers process assigned source splits.', note: 'JDBC example · 
Split assignment is source-specific.'},
diff --git a/src/pages/home/index.less b/src/pages/home/index.less
index e6b860ed8238..7c8aa0daf96f 100644
--- a/src/pages/home/index.less
+++ b/src/pages/home/index.less
@@ -980,7 +980,22 @@ html[data-theme='light'] .st-home {
   --motion-on-teal: #061f2a;
   --motion-teal-text: #6ee5d7;
   --motion-highlight: rgba(82, 203, 191, 0.14);
-  background: var(--bg1);
+  padding: 4rem 1.5rem;
+  background: var(--bg0);
+}
+
+.st-home-motion-section .st-home-container {
+  overflow: hidden;
+  padding: clamp(2.25rem, 5vw, 4.5rem);
+  border: 1px solid var(--motion-line);
+  border-radius: 2rem;
+  background:
+    radial-gradient(circle at 10% 0%, rgba(93, 184, 226, 0.16), transparent 
32%),
+    radial-gradient(circle at 90% 10%, rgba(82, 203, 191, 0.12), transparent 
28%),
+    linear-gradient(145deg, rgba(14, 31, 59, 0.98), rgba(7, 16, 34, 0.98));
+  box-shadow:
+    0 32px 72px rgba(2, 6, 15, 0.28),
+    inset 0 1px 0 rgba(255, 255, 255, 0.04);
 }
 
 .st-home-motion-section .st-home-section-title {
@@ -995,11 +1010,43 @@ html[data-theme='light'] .st-home {
   display: grid;
   grid-template-columns: repeat(3, minmax(0, 1fr));
   gap: 1.15rem;
-  margin: 3rem 0 0;
+  margin: 1rem 0 0;
   padding: 0;
   list-style: none;
 }
 
+.st-home-motion-toolbar {
+  display: flex;
+  justify-content: flex-end;
+  margin-top: 1.5rem;
+}
+
+.st-home-motion-control {
+  padding: 0.48rem 0.82rem;
+  border: 1px solid var(--motion-line);
+  border-radius: 999px;
+  background: var(--motion-card);
+  color: var(--motion-ink);
+  cursor: pointer;
+  font-family: var(--ifm-font-family-base);
+  font-size: 0.76rem;
+  font-weight: 700;
+  line-height: 1;
+  transition: border-color 160ms ease, background-color 160ms ease, color 
160ms ease;
+}
+
+.st-home-motion-control:hover,
+.st-home-motion-control:focus-visible {
+  border-color: var(--motion-teal);
+  background: var(--motion-highlight);
+  color: var(--motion-ink);
+}
+
+.st-home-motion-control:focus-visible {
+  outline: 2px solid var(--motion-blue);
+  outline-offset: 2px;
+}
+
 .st-home-motion-card {
   min-width: 0;
   border: 1px solid var(--motion-line);
@@ -1161,6 +1208,26 @@ html[data-theme='light'] .st-home {
   stroke-width: 1.6;
 }
 
+.st-home-motion-diagram-flow {
+  stroke: var(--motion-blue);
+  stroke-dasharray: 3 10;
+  stroke-dashoffset: 0;
+  animation: st-home-motion-flow 1.8s linear infinite;
+}
+
+.st-home-motion-diagram-flow-teal {
+  stroke: var(--motion-teal);
+  animation-delay: -0.6s;
+}
+
+.st-home-motion-card:nth-child(even) .st-home-motion-diagram-flow {
+  animation-delay: -0.9s;
+}
+
+.st-home-motion-card:nth-child(3n) .st-home-motion-diagram-flow {
+  animation-delay: -1.35s;
+}
+
 .st-home-motion-diagram-soft,
 .st-home-motion-diagram-chip {
   fill: var(--motion-soft);
@@ -1169,10 +1236,16 @@ html[data-theme='light'] .st-home {
 .st-home-motion-diagram-packet,
 .st-home-motion-diagram-blue {
   fill: var(--motion-blue);
+  transform-box: fill-box;
+  transform-origin: center;
+  animation: st-home-motion-pulse 2.4s ease-in-out infinite;
 }
 
 .st-home-motion-diagram-teal {
   fill: var(--motion-teal);
+  transform-box: fill-box;
+  transform-origin: center;
+  animation: st-home-motion-pulse 2.4s ease-in-out infinite -0.8s;
 }
 
 .st-home-motion-diagram-blue-fill {
@@ -1191,6 +1264,20 @@ html[data-theme='light'] .st-home {
 
 .st-home-motion-diagram-highlight {
   fill: var(--motion-highlight);
+  animation: st-home-motion-highlight 2.4s ease-in-out infinite;
+}
+
+.st-home-motion-card:hover .st-home-motion-diagram-flow,
+.st-home-motion-card:hover .st-home-motion-diagram-packet,
+.st-home-motion-card:hover .st-home-motion-diagram-blue,
+.st-home-motion-card:hover .st-home-motion-diagram-teal,
+.st-home-motion-card:hover .st-home-motion-diagram-highlight,
+.st-home-motion-grid.is-motion-paused .st-home-motion-diagram-flow,
+.st-home-motion-grid.is-motion-paused .st-home-motion-diagram-packet,
+.st-home-motion-grid.is-motion-paused .st-home-motion-diagram-blue,
+.st-home-motion-grid.is-motion-paused .st-home-motion-diagram-teal,
+.st-home-motion-grid.is-motion-paused .st-home-motion-diagram-highlight {
+  animation-play-state: paused;
 }
 
 .st-home-motion-card-detail {
@@ -2710,7 +2797,17 @@ html[data-theme='light'] .st-home 
.st-home-motion-section {
   --motion-on-teal: #0d3945;
   --motion-teal-text: #07777b;
   --motion-highlight: #dff3f1;
-  background: linear-gradient(180deg, #e7eef8 0%, #f4f8fd 100%);
+  background: #e7eef8;
+}
+
+html[data-theme='light'] .st-home .st-home-motion-section .st-home-container {
+  background:
+    radial-gradient(circle at 10% 0%, rgba(103, 189, 238, 0.18), transparent 
32%),
+    radial-gradient(circle at 90% 10%, rgba(97, 208, 199, 0.15), transparent 
28%),
+    linear-gradient(145deg, rgba(255, 255, 255, 0.98), rgba(239, 246, 252, 
0.98));
+  box-shadow:
+    0 28px 64px rgba(100, 129, 183, 0.18),
+    inset 0 1px 0 rgba(255, 255, 255, 0.76);
 }
 
 html[data-theme='light'] .st-home .st-home-motion-card {
@@ -3005,11 +3102,20 @@ html[data-theme='light'] .st-home .st-home-rv {
     padding: 5.5rem 1rem;
   }
 
+  .st-home-motion-section {
+    padding: 2.5rem 1rem;
+  }
+
+  .st-home-motion-section .st-home-container {
+    padding: 2rem 1.25rem;
+    border-radius: 1.35rem;
+  }
+
   .st-home-motion-grid {
     display: grid;
     grid-template-columns: repeat(2, minmax(0, 1fr));
     gap: 0.875rem;
-    margin: 2.25rem 0 0;
+    margin: 1rem 0 0;
   }
 
   .st-home-motion-card article {
@@ -3085,6 +3191,36 @@ html[data-theme='light'] .st-home .st-home-rv {
   }
 }
 
+@keyframes st-home-motion-flow {
+  to {
+    stroke-dashoffset: -52;
+  }
+}
+
+@keyframes st-home-motion-pulse {
+  0%,
+  100% {
+    opacity: 1;
+    transform: scale(0.96);
+  }
+
+  50% {
+    opacity: 1;
+    transform: scale(1);
+  }
+}
+
+@keyframes st-home-motion-highlight {
+  0%,
+  100% {
+    opacity: 0.68;
+  }
+
+  50% {
+    opacity: 1;
+  }
+}
+
 @keyframes st-home-flow {
   from {
     left: -60%;

Reply via email to