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 d56c4f3f734e [Docs] Polish homepage connector pills and CTA button
(#472)
d56c4f3f734e is described below
commit d56c4f3f734ea00da1360c3871068e9178f6833f
Author: Daniel <[email protected]>
AuthorDate: Mon Jun 22 14:01:05 2026 +0800
[Docs] Polish homepage connector pills and CTA button (#472)
---
src/pages/home/index.jsx | 68 +++++++++++++++++----
src/pages/home/index.less | 148 ++++++++++++++++++++++++++++------------------
2 files changed, 145 insertions(+), 71 deletions(-)
diff --git a/src/pages/home/index.jsx b/src/pages/home/index.jsx
index e7ec6e6ef4e3..a95eea8b5d9f 100644
--- a/src/pages/home/index.jsx
+++ b/src/pages/home/index.jsx
@@ -1006,9 +1006,15 @@ export default function Home() {
'left-top',
'left-mid',
'left-bot',
+ 'left-core-top',
+ 'left-core-mid',
+ 'left-core-bot',
'right-top',
'right-mid',
'right-bot',
+ 'right-core-top',
+ 'right-core-mid',
+ 'right-core-bot',
'flow-top',
'flow-mid',
'flow-bot',
@@ -1027,6 +1033,16 @@ export default function Home() {
const buildHorizontalPath = (fromX, toX, y) => `M ${fromX} ${y} H
${toX}`;
+ const buildCenteredConnectorPath = (gapStart, gapEnd, y, ratio,
minLength, maxLength) => {
+ const availableWidth = gapEnd - gapStart;
+ if (availableWidth <= 0) {
+ return 'M 0 0 H 0';
+ }
+ const connectorLength = Math.min(maxLength,
Math.max(minLength, availableWidth * ratio));
+ const connectorOffset = (availableWidth - connectorLength) / 2;
+ return buildHorizontalPath(gapStart + connectorOffset, gapEnd
- connectorOffset, y);
+ };
+
const syncPipelines = () => {
syncFrame = 0;
const layoutRect = grid.getBoundingClientRect();
@@ -1058,9 +1074,6 @@ export default function Home() {
const engineLocal = toLocal(engineRect);
const pipeGlobalShift = 2;
- const leftEnd = engineLocal.left - 18 + pipeGlobalShift;
- const rightStart = engineLocal.right + 18 + pipeGlobalShift;
- const rightPipeShift = -9;
ARCHITECTURE_ROW_KEYS.forEach((key, index) => {
const sourceEl = architectureSourceRefs.current[index];
@@ -1074,19 +1087,44 @@ export default function Home() {
const sourceLocal =
toLocal(sourceEl.getBoundingClientRect());
const targetLocal =
toLocal(targetEl.getBoundingClientRect());
- setPath(`left-${key}`,
buildHorizontalPath(sourceLocal.right + 6 + pipeGlobalShift, leftEnd,
sourceLocal.centerY));
+ const leftGapStart = sourceLocal.right + pipeGlobalShift;
+ const leftGapEnd = engineLocal.left + pipeGlobalShift;
+ const rightGapStart = engineLocal.right + pipeGlobalShift;
+ const rightGapEnd = targetLocal.left + pipeGlobalShift;
+ setPath(
+ `left-${key}`,
+ buildCenteredConnectorPath(
+ leftGapStart,
+ leftGapEnd,
+ sourceLocal.centerY,
+ 0.52,
+ 22,
+ 28,
+ ),
+ );
+ setPath(
+ `left-core-${key}`,
+ buildCenteredConnectorPath(leftGapStart, leftGapEnd,
sourceLocal.centerY, 0.3, 12, 16),
+ );
setPath(
`right-${key}`,
- buildHorizontalPath(
- rightStart + rightPipeShift,
- targetLocal.left - 6 + rightPipeShift +
pipeGlobalShift,
+ buildCenteredConnectorPath(
+ rightGapStart,
+ rightGapEnd,
targetLocal.centerY,
+ 0.52,
+ 22,
+ 28,
),
);
+ setPath(
+ `right-core-${key}`,
+ buildCenteredConnectorPath(rightGapStart, rightGapEnd,
targetLocal.centerY, 0.3, 12, 16),
+ );
const laneY = ((sourceLocal.centerY + targetLocal.centerY)
/ 2).toFixed(2);
const sourceRight = (sourceLocal.right + 6 +
pipeGlobalShift).toFixed(2);
- const targetLeft = (targetLocal.left - 6 + rightPipeShift
+ pipeGlobalShift).toFixed(2);
+ const targetLeft = (targetLocal.left - 6 +
pipeGlobalShift).toFixed(2);
// Keep the motion path continuous so a single pulse can
pass behind the center card.
setPath(`flow-${key}`, buildHorizontalPath(sourceRight,
targetLeft, laneY));
});
@@ -1356,7 +1394,7 @@ export default function Home() {
</section>
<section className="st-home-section st-home-architecture">
- <div className="st-home-container st-home-container-wide">
+ <div className="st-home-container">
<p className="st-home-eyebrow
st-home-rv">{content.architecture.eyebrow}</p>
<h2 className="st-home-section-title st-home-rv">
{content.architecture.titleLead} <span
className="st-home-gradient">{content.architecture.titleAccent}</span>
@@ -1393,9 +1431,15 @@ export default function Home() {
<path id="left-top"></path>
<path id="left-mid"></path>
<path id="left-bot"></path>
+ <path id="left-core-top"></path>
+ <path id="left-core-mid"></path>
+ <path id="left-core-bot"></path>
<path id="right-top"></path>
<path id="right-mid"></path>
<path id="right-bot"></path>
+ <path id="right-core-top"></path>
+ <path id="right-core-mid"></path>
+ <path id="right-core-bot"></path>
<path id="flow-top"></path>
<path id="flow-mid"></path>
<path id="flow-bot"></path>
@@ -1404,16 +1448,14 @@ export default function Home() {
{ARCHITECTURE_ROW_KEYS.map((key) => (
<React.Fragment
key={`pipe-left-${key}`}>
<use href={`#left-${key}`}
className="st-home-architecture-pipe-base"></use>
- <use href={`#left-${key}`}
className="st-home-architecture-pipe-edge"></use>
- <use href={`#left-${key}`}
className="st-home-architecture-pipe-core"></use>
+ <use
href={`#left-core-${key}`}
className="st-home-architecture-pipe-core-centered"></use>
</React.Fragment>
))}
{ARCHITECTURE_ROW_KEYS.map((key) => (
<React.Fragment
key={`pipe-right-${key}`}>
<use href={`#right-${key}`}
className="st-home-architecture-pipe-base"></use>
- <use href={`#right-${key}`}
className="st-home-architecture-pipe-edge"></use>
- <use href={`#right-${key}`}
className="st-home-architecture-pipe-core"></use>
+ <use
href={`#right-core-${key}`}
className="st-home-architecture-pipe-core-centered"></use>
</React.Fragment>
))}
diff --git a/src/pages/home/index.less b/src/pages/home/index.less
index 760370bbdbfe..625baeaf99d0 100644
--- a/src/pages/home/index.less
+++ b/src/pages/home/index.less
@@ -306,14 +306,21 @@ html[data-theme='light'] .st-home {
position: relative;
overflow: hidden;
isolation: isolate;
- background: linear-gradient(135deg, #5db8e2 0%, #6f82dc 58%, #7988e1 100%);
+ background:
+ linear-gradient(90deg, #60c4f3 0%, #68b6ef 36%, #6dacec 62%, #729ee8 100%);
color: #fff;
- border-color: rgba(255, 255, 255, 0.08);
- box-shadow: 0 18px 30px -14px rgba(107, 118, 214, 0.34), inset 0 1px 0
rgba(255, 255, 255, 0.12);
+ border-color: rgba(141, 198, 247, 0.22);
+ box-shadow:
+ 0 18px 30px -14px rgba(73, 132, 206, 0.34),
+ 0 8px 18px -16px rgba(96, 196, 243, 0.44),
+ inset 0 1px 0 rgba(255, 255, 255, 0.14);
}
.st-home-btn-primary:hover {
- box-shadow: 0 22px 36px -14px rgba(107, 118, 214, 0.4), inset 0 1px 0
rgba(255, 255, 255, 0.16);
+ box-shadow:
+ 0 22px 36px -14px rgba(77, 139, 214, 0.4),
+ 0 10px 22px -16px rgba(96, 196, 243, 0.5),
+ inset 0 1px 0 rgba(255, 255, 255, 0.18);
}
.st-home-btn-primary::before {
@@ -322,19 +329,20 @@ html[data-theme='light'] .st-home {
inset: 0;
border-radius: inherit;
background:
- linear-gradient(180deg, rgba(255, 255, 255, 0.18) 0%, rgba(255, 255, 255,
0.06) 42%, rgba(255, 255, 255, 0) 100%),
- radial-gradient(circle at 50% 12%, rgba(255, 255, 255, 0.12) 0%, rgba(255,
255, 255, 0) 44%);
+ linear-gradient(180deg, rgba(255, 255, 255, 0.18) 0%, rgba(255, 255, 255,
0.07) 38%, rgba(255, 255, 255, 0) 100%),
+ radial-gradient(circle at 18% 14%, rgba(255, 255, 255, 0.16) 0%, rgba(255,
255, 255, 0) 36%),
+ radial-gradient(circle at 84% 18%, rgba(255, 255, 255, 0.09) 0%, rgba(255,
255, 255, 0) 34%);
pointer-events: none;
}
.st-home-btn-primary::after {
content: '';
position: absolute;
- inset: 1px 1px auto;
- height: 42%;
+ inset: 1.5px;
border-radius: inherit;
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.16) 0%, rgba(255,
255, 255, 0) 100%);
- opacity: 0.42;
+ border: 1px solid rgba(255, 255, 255, 0.14);
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.08) 0%, rgba(255,
255, 255, 0.02) 28%, rgba(255, 255, 255, 0) 60%);
+ opacity: 0.72;
pointer-events: none;
}
@@ -1001,7 +1009,7 @@ html[data-theme='light'] .st-home {
--lift-y: 0px;
position: relative;
margin-top: 3.25rem;
- padding: 2.25rem;
+ padding: 2rem;
border-radius: 2.5rem;
border: 1px solid rgba(90, 150, 230, 0.18);
background:
@@ -1038,13 +1046,11 @@ html[data-theme='light'] .st-home {
inset: 0;
z-index: 0;
pointer-events: none;
- opacity: 0.72;
+ opacity: 0.48;
background:
- radial-gradient(circle at var(--spot-x) var(--spot-y), rgba(117, 173, 255,
0.16), transparent 24%),
- linear-gradient(120deg, transparent 0%, rgba(101, 208, 199, 0.08) 46%,
transparent 54%),
- linear-gradient(180deg, transparent 0%, rgba(98, 142, 226, 0.05) 100%);
- transform: translateX(-55%);
- animation: st-home-board-shimmer 8s linear infinite;
+ radial-gradient(circle at 20% 22%, rgba(84, 196, 255, 0.1), transparent
24%),
+ radial-gradient(circle at 82% 22%, rgba(97, 208, 199, 0.08), transparent
26%),
+ linear-gradient(180deg, transparent 0%, rgba(98, 142, 226, 0.04) 100%);
transition: opacity 0.3s ease;
}
@@ -1066,17 +1072,17 @@ html[data-theme='light'] .st-home {
}
.st-home-architecture-board-inner {
- min-height: 44.75rem;
+ min-height: 41.5rem;
padding: 1rem 0.375rem 0.25rem;
transform: translateZ(2px);
}
.st-home-architecture-header {
display: grid;
- grid-template-columns: minmax(0, 1fr) 20rem minmax(0, 1fr);
+ grid-template-columns: minmax(0, 1fr) 17rem minmax(0, 1fr);
align-items: center;
- gap: 1.75rem;
- margin-bottom: 1.75rem;
+ gap: 1.25rem;
+ margin-bottom: 1.5rem;
}
.st-home-architecture-stage {
@@ -1131,11 +1137,11 @@ html[data-theme='light'] .st-home {
.st-home-architecture-grid {
position: relative;
display: grid;
- grid-template-columns: minmax(0, 26rem) 18rem minmax(0, 26rem);
+ grid-template-columns: minmax(0, 24rem) 16rem minmax(0, 24rem);
justify-content: space-between;
align-items: stretch;
- gap: 1.25rem;
- min-height: 37.5rem;
+ gap: 1rem;
+ min-height: 34.5rem;
isolation: isolate;
}
@@ -1187,6 +1193,14 @@ html[data-theme='light'] .st-home {
animation: st-home-dash 3.2s linear infinite;
}
+.st-home-architecture-pipe-core-centered {
+ fill: none;
+ stroke: rgba(240, 246, 255, 0.9);
+ stroke-width: 5;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+}
+
.st-home-architecture-pipe-edge {
fill: none;
stroke: rgba(98, 179, 255, 0.56);
@@ -1218,6 +1232,10 @@ html[data-theme='light'] .st-home {
stroke: rgba(255, 255, 255, 0.98);
}
+.st-home-architecture-board.is-hovering
.st-home-architecture-pipe-core-centered {
+ stroke: rgba(255, 255, 255, 0.98);
+}
+
.st-home-architecture-board.is-hovering .st-home-architecture-pipe-edge {
stroke: rgba(104, 182, 255, 0.74);
}
@@ -1238,8 +1256,8 @@ html[data-theme='light'] .st-home {
--engine-spot-y: 12%;
position: relative;
width: 100%;
- min-height: 27.5rem;
- padding: 1.75rem 1.5rem 1.625rem;
+ min-height: 24.75rem;
+ padding: 1.5rem 1.25rem 1.375rem;
border-radius: 2.125rem;
border: 1px solid rgba(105, 161, 235, 0.2);
background: linear-gradient(180deg, rgba(14, 24, 40, 0.95), rgba(8, 15, 28,
0.99));
@@ -1293,10 +1311,10 @@ html[data-theme='light'] .st-home {
}
.st-home-architecture-engine-logo {
- width: 4.125rem;
- height: 4.125rem;
- margin: 0 auto 1rem;
- padding: 0.6875rem;
+ width: 3.75rem;
+ height: 3.75rem;
+ margin: 0 auto 0.875rem;
+ padding: 0.625rem;
border-radius: 1.25rem;
background: linear-gradient(180deg, rgba(18, 31, 53, 0.96), rgba(13, 23, 41,
0.94));
box-shadow:
@@ -1324,9 +1342,9 @@ html[data-theme='light'] .st-home {
.st-home-architecture-engine-name {
position: relative;
z-index: 1;
- margin: 0 0 0.75rem;
+ margin: 0 0 0.625rem;
text-align: center;
- font-size: 1.25rem;
+ font-size: 1.15rem;
font-weight: 800;
letter-spacing: -0.02em;
color: #eef4ff;
@@ -1336,43 +1354,43 @@ html[data-theme='light'] .st-home {
display: flex;
align-items: baseline;
justify-content: center;
- gap: 0.5rem;
- margin-bottom: 1.125rem;
+ gap: 0.44rem;
+ margin-bottom: 0.95rem;
font-family: var(--ifm-font-family-monospace);
font-weight: 800;
}
.st-home-architecture-engine-e {
color: #42b8ec;
- font-size: 1.9rem;
+ font-size: 1.72rem;
}
.st-home-architecture-engine-t-small {
color: #61d0c7;
- font-size: 1.9rem;
+ font-size: 1.72rem;
font-weight: 800;
}
.st-home-architecture-engine-l {
color: #75a2eb;
- font-size: 1.9rem;
+ font-size: 1.72rem;
}
.st-home-architecture-engine-t {
color: #8fd4f6;
- font-size: 1.9rem;
+ font-size: 1.72rem;
}
.st-home-architecture-engine-pillars {
display: grid;
- gap: 0.75rem;
- margin-top: 0.75rem;
+ gap: 0.625rem;
+ margin-top: 0.625rem;
}
.st-home-architecture-engine-pillar {
position: relative;
- padding: 0.875rem 0.875rem 0.875rem 1.125rem;
- border-radius: 1.125rem;
+ padding: 0.75rem 0.8125rem 0.75rem 1rem;
+ border-radius: 1rem;
background: rgba(15, 28, 49, 0.76);
border: 1px solid rgba(98, 150, 230, 0.16);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
@@ -1387,7 +1405,7 @@ html[data-theme='light'] .st-home {
.st-home-architecture-engine-pillar strong {
display: block;
- margin-bottom: 0.375rem;
+ margin-bottom: 0.3125rem;
color: #9fc4ff;
font-size: 0.75rem;
font-weight: 800;
@@ -1399,8 +1417,8 @@ html[data-theme='light'] .st-home {
.st-home-architecture-engine-pillar span {
display: block;
color: rgba(231, 239, 255, 0.84);
- font-size: 0.9375rem;
- line-height: 1.55;
+ font-size: 0.875rem;
+ line-height: 1.5;
font-weight: 700;
}
@@ -1434,8 +1452,8 @@ html[data-theme='light'] .st-home {
.st-home-architecture-card {
position: relative;
- min-height: 9.125rem;
- padding: 1.375rem 1.5rem 1.25rem;
+ min-height: 8.375rem;
+ padding: 1.2rem 1.3rem 1.125rem;
border-radius: 1.5rem;
background: linear-gradient(180deg, rgba(12, 20, 35, 0.98), rgba(9, 15, 28,
0.96));
border: 1px solid rgba(94, 140, 210, 0.16);
@@ -1476,7 +1494,7 @@ html[data-theme='light'] .st-home {
align-items: baseline;
justify-content: space-between;
gap: 1rem;
- margin-bottom: 1.125rem;
+ margin-bottom: 0.95rem;
}
.st-home-architecture-card-dot {
@@ -1512,16 +1530,16 @@ html[data-theme='light'] .st-home {
.st-home-architecture-chip-list {
display: flex;
flex-wrap: wrap;
- gap: 0.625rem;
+ gap: 0.55rem;
}
.st-home-architecture-chip {
- padding: 0.625rem 0.875rem;
+ padding: 0.55rem 0.8rem;
border: 1px solid rgba(96, 136, 198, 0.18);
border-radius: 0.875rem;
background: linear-gradient(180deg, rgba(17, 28, 47, 0.92), rgba(13, 21, 37,
0.88));
color: #c8dcff;
- font-size: 0.9375rem;
+ font-size: 0.9rem;
line-height: 1;
font-weight: 700;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
@@ -2236,10 +2254,10 @@ html[data-theme='light'] .st-home
.st-home-architecture-board::before {
}
html[data-theme='light'] .st-home .st-home-architecture-board::after {
- opacity: 0.86;
+ opacity: 0.5;
background:
- radial-gradient(circle at var(--spot-x) var(--spot-y), rgba(255, 255, 255,
0.48), transparent 24%),
- linear-gradient(120deg, transparent 0%, rgba(103, 200, 193, 0.12) 46%,
transparent 52%),
+ radial-gradient(circle at 18% 22%, rgba(255, 255, 255, 0.26), transparent
22%),
+ radial-gradient(circle at 82% 22%, rgba(103, 200, 193, 0.1), transparent
24%),
linear-gradient(180deg, transparent 0%, rgba(127, 163, 236, 0.03) 100%);
}
@@ -2278,6 +2296,10 @@ html[data-theme='light'] .st-home
.st-home-architecture-pipe-core {
stroke: rgba(255, 255, 255, 0.92);
}
+html[data-theme='light'] .st-home .st-home-architecture-pipe-core-centered {
+ stroke: rgba(255, 255, 255, 0.94);
+}
+
html[data-theme='light'] .st-home .st-home-architecture-pipe-edge {
stroke: rgba(104, 182, 255, 0.52);
}
@@ -2455,14 +2477,24 @@ html[data-theme='light'] .st-home .st-home-btn-dark {
}
html[data-theme='light'] .st-home .st-home-btn-primary {
- background: linear-gradient(135deg, #63c0ea 0%, #7ba3ec 56%, #7f93e7 100%);
- box-shadow: 0 20px 32px -16px rgba(99, 126, 209, 0.22), inset 0 1px 0
rgba(255, 255, 255, 0.2);
+ background: linear-gradient(90deg, #67c6f2 0%, #71bbef 36%, #78afec 64%,
#7b9fe7 100%);
+ border-color: rgba(127, 178, 234, 0.26);
+ box-shadow:
+ 0 20px 32px -16px rgba(99, 138, 209, 0.22),
+ 0 10px 24px -18px rgba(103, 198, 242, 0.3),
+ inset 0 1px 0 rgba(255, 255, 255, 0.22);
}
html[data-theme='light'] .st-home .st-home-btn-primary::before {
background:
- linear-gradient(180deg, rgba(255, 255, 255, 0.24) 0%, rgba(255, 255, 255,
0.06) 40%, rgba(255, 255, 255, 0) 100%),
- radial-gradient(circle at 50% 12%, rgba(255, 255, 255, 0.14) 0%, rgba(255,
255, 255, 0) 46%);
+ linear-gradient(180deg, rgba(255, 255, 255, 0.24) 0%, rgba(255, 255, 255,
0.08) 40%, rgba(255, 255, 255, 0) 100%),
+ radial-gradient(circle at 18% 14%, rgba(255, 255, 255, 0.18) 0%, rgba(255,
255, 255, 0) 36%),
+ radial-gradient(circle at 84% 18%, rgba(255, 255, 255, 0.1) 0%, rgba(255,
255, 255, 0) 34%);
+}
+
+html[data-theme='light'] .st-home .st-home-btn-primary::after {
+ border-color: rgba(255, 255, 255, 0.18);
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.1) 0%, rgba(255,
255, 255, 0.03) 28%, rgba(255, 255, 255, 0) 62%);
}
html[data-theme='light'] .st-home .st-home-btn-outline:hover,