feat: polish website model radar
This commit is contained in:
@@ -134,9 +134,9 @@ export function BossAiMotion({ children }: BossAiMotionProps) {
|
||||
} as gsap.TweenVars);
|
||||
|
||||
gsap.to(routeRows, {
|
||||
x: (index) => (index % 2 === 0 ? -12 : 10),
|
||||
y: (index) => -4 - index * 1.8,
|
||||
autoAlpha: (index) => 1 - index * 0.025,
|
||||
x: (index) => (index % 2 === 0 ? -4 : 4),
|
||||
y: (index) => -2 - index * 0.9,
|
||||
autoAlpha: (index) => 1 - index * 0.015,
|
||||
ease: "none",
|
||||
stagger: 0.03,
|
||||
scrollTrigger: {
|
||||
|
||||
+72
-17
@@ -373,8 +373,8 @@ a {
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 32px;
|
||||
background:
|
||||
radial-gradient(circle at 18% 18%, rgba(215, 255, 77, 0.15), transparent 32%),
|
||||
radial-gradient(circle at 86% 82%, rgba(139, 246, 255, 0.13), transparent 34%),
|
||||
radial-gradient(circle at 18% 18%, rgba(215, 255, 77, 0.14), transparent 30%),
|
||||
radial-gradient(circle at 86% 82%, rgba(139, 246, 255, 0.09), transparent 34%),
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.035)),
|
||||
rgba(10, 20, 18, 0.84);
|
||||
padding: 18px;
|
||||
@@ -466,13 +466,17 @@ a {
|
||||
|
||||
.console-bar {
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
z-index: 4;
|
||||
min-height: 54px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
justify-content: flex-start;
|
||||
border-radius: 18px;
|
||||
border-color: rgba(215, 255, 77, 0.22);
|
||||
background:
|
||||
linear-gradient(90deg, rgba(215, 255, 77, 0.11), rgba(255, 255, 255, 0.035) 42%, rgba(139, 246, 255, 0.06)),
|
||||
rgba(255, 255, 255, 0.035);
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
@@ -495,7 +499,7 @@ a {
|
||||
|
||||
.route-list {
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
z-index: 4;
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
margin-top: 12px;
|
||||
@@ -509,11 +513,26 @@ a {
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
border-radius: 18px;
|
||||
padding: 0 14px 0 32px;
|
||||
padding: 0 14px 0 34px;
|
||||
overflow: hidden;
|
||||
transform: translateZ(0);
|
||||
}
|
||||
|
||||
.route-row::after {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
content: "";
|
||||
background: linear-gradient(110deg, rgba(255, 255, 255, 0.08), transparent 28%, transparent 76%, rgba(215, 255, 77, 0.06));
|
||||
opacity: 0;
|
||||
transition: opacity 180ms ease;
|
||||
}
|
||||
|
||||
.route-row > * {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.route-row::before {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
@@ -525,6 +544,7 @@ a {
|
||||
color: var(--blue);
|
||||
font-size: 12px;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.route-row strong {
|
||||
@@ -537,9 +557,40 @@ a {
|
||||
}
|
||||
|
||||
.route-row em {
|
||||
border: 1px solid rgba(255, 255, 255, 0.09);
|
||||
border-radius: 999px;
|
||||
background: rgba(0, 0, 0, 0.14);
|
||||
padding: 5px 8px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.route-row[data-featured="true"] {
|
||||
min-height: 58px;
|
||||
border-color: rgba(215, 255, 77, 0.34);
|
||||
background:
|
||||
linear-gradient(90deg, rgba(215, 255, 77, 0.13), rgba(255, 255, 255, 0.045) 42%, rgba(139, 246, 255, 0.045)),
|
||||
rgba(255, 255, 255, 0.045);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.13),
|
||||
0 18px 44px rgba(0, 0, 0, 0.18);
|
||||
}
|
||||
|
||||
.route-row[data-featured="true"]::after {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.route-row[data-featured="true"] strong {
|
||||
color: var(--text);
|
||||
font-size: 15px;
|
||||
letter-spacing: -0.035em;
|
||||
}
|
||||
|
||||
.route-row[data-featured="true"] em {
|
||||
border-color: rgba(215, 255, 77, 0.22);
|
||||
background: rgba(215, 255, 77, 0.09);
|
||||
color: rgba(248, 255, 244, 0.88);
|
||||
}
|
||||
|
||||
.route-row[data-tone="hot"] span {
|
||||
color: #ffec99;
|
||||
}
|
||||
@@ -596,7 +647,7 @@ a {
|
||||
|
||||
.console-metrics {
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
z-index: 4;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 8px;
|
||||
@@ -621,7 +672,7 @@ a {
|
||||
|
||||
.mini-grid {
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
z-index: 4;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 12px;
|
||||
@@ -640,31 +691,35 @@ a {
|
||||
.flow-glyph {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
right: -22px;
|
||||
bottom: -8px;
|
||||
width: 92%;
|
||||
right: -92px;
|
||||
bottom: -72px;
|
||||
width: 112%;
|
||||
max-width: 520px;
|
||||
opacity: 0.68;
|
||||
opacity: 0.28;
|
||||
pointer-events: none;
|
||||
mask-image: linear-gradient(115deg, transparent 0%, black 22%, black 58%, transparent 88%);
|
||||
mix-blend-mode: screen;
|
||||
}
|
||||
|
||||
.flow-line {
|
||||
fill: none;
|
||||
stroke: url("#lineGradient");
|
||||
stroke-width: 2.5;
|
||||
stroke-width: 2;
|
||||
stroke-linecap: round;
|
||||
stroke-dasharray: 12 18;
|
||||
stroke-dasharray: 9 26;
|
||||
}
|
||||
|
||||
.flow-line-b {
|
||||
opacity: 0.62;
|
||||
opacity: 0.46;
|
||||
}
|
||||
|
||||
.flow-line-c {
|
||||
opacity: 0.48;
|
||||
opacity: 0.32;
|
||||
}
|
||||
|
||||
.flow-dot {
|
||||
fill: var(--acid);
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.dot-b {
|
||||
@@ -672,8 +727,8 @@ a {
|
||||
}
|
||||
|
||||
.node {
|
||||
fill: rgba(255, 255, 255, 0.04);
|
||||
stroke: rgba(215, 255, 77, 0.22);
|
||||
fill: rgba(255, 255, 255, 0.025);
|
||||
stroke: rgba(215, 255, 77, 0.13);
|
||||
}
|
||||
|
||||
.platform-section,
|
||||
|
||||
+22
-16
@@ -36,11 +36,11 @@ const heroStats = [
|
||||
];
|
||||
|
||||
const routes = [
|
||||
{ type: "Reason", model: "gpt-5.5", state: "xhigh", tone: "hot" },
|
||||
{ type: "GPT", model: "gpt-5.5", state: "深度推理", tone: "hot", featured: true },
|
||||
{ type: "Image", model: "gpt-image-2", state: "图像生成", tone: "lime", featured: true },
|
||||
{ type: "Claude", model: "claude-opus-4-8", state: "Messages", tone: "white" },
|
||||
{ type: "Gemini", model: "gemini-3-pro-preview", state: "多模态", tone: "cyan" },
|
||||
{ type: "Image", model: "gpt-image-2", state: "生成中", tone: "lime" },
|
||||
{ type: "Video", model: "doubao-seedance-2-0-260128", state: "排队中", tone: "blue" },
|
||||
{ type: "Video", model: "doubao-seedance-2-0-260128", state: "视频队列", tone: "blue" },
|
||||
];
|
||||
|
||||
const consoleMetrics = [
|
||||
@@ -141,7 +141,7 @@ const controlSignals = [
|
||||
|
||||
function FlowGlyph() {
|
||||
return (
|
||||
<svg className="flow-glyph" viewBox="0 0 520 360" role="img" aria-label="BossAI 工作流动态图形">
|
||||
<svg className="flow-glyph" viewBox="0 0 520 360" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="lineGradient" x1="0" x2="1" y1="0" y2="1">
|
||||
<stop offset="0%" stopColor="#D7FF4D" />
|
||||
@@ -159,26 +159,26 @@ function FlowGlyph() {
|
||||
<path
|
||||
className="flow-line flow-line-a"
|
||||
data-motion-line
|
||||
d="M48 180 C130 62 232 62 314 180 S438 298 488 154"
|
||||
d="M32 110 C138 42 218 86 294 152 S414 238 496 132"
|
||||
/>
|
||||
<path
|
||||
className="flow-line flow-line-b"
|
||||
data-motion-line
|
||||
d="M58 236 C154 318 222 286 274 184 S358 24 462 92"
|
||||
d="M78 238 C170 314 248 256 314 196 S402 92 486 84"
|
||||
/>
|
||||
<path
|
||||
className="flow-line flow-line-c"
|
||||
data-motion-line
|
||||
d="M92 108 C178 164 214 180 260 180 S330 174 424 250"
|
||||
d="M92 170 C180 194 226 190 292 160 S382 150 452 236"
|
||||
/>
|
||||
<g filter="url(#softGlow)">
|
||||
<circle className="flow-dot dot-a" data-motion-dot cx="48" cy="180" r="7" />
|
||||
<circle className="flow-dot dot-b" data-motion-dot cx="260" cy="180" r="9" />
|
||||
<circle className="flow-dot dot-c" data-motion-dot cx="488" cy="154" r="7" />
|
||||
<circle className="flow-dot dot-a" data-motion-dot cx="32" cy="110" r="6" />
|
||||
<circle className="flow-dot dot-b" data-motion-dot cx="294" cy="152" r="8" />
|
||||
<circle className="flow-dot dot-c" data-motion-dot cx="496" cy="132" r="6" />
|
||||
</g>
|
||||
<rect className="node node-a" data-motion="node" x="72" y="58" width="128" height="68" rx="18" />
|
||||
<rect className="node node-b" data-motion="node" x="242" y="146" width="140" height="76" rx="20" />
|
||||
<rect className="node node-c" data-motion="node" x="352" y="248" width="120" height="62" rx="17" />
|
||||
<rect className="node node-a" data-motion="node" x="96" y="44" width="120" height="56" rx="16" />
|
||||
<rect className="node node-b" data-motion="node" x="278" y="128" width="132" height="64" rx="18" />
|
||||
<rect className="node node-c" data-motion="node" x="352" y="236" width="112" height="54" rx="16" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
@@ -188,12 +188,18 @@ function HeroConsole() {
|
||||
<div className="hero-console" data-motion="hero-console" aria-label="BossAI 路由状态预览">
|
||||
<div className="console-orbit" data-motion-orbit />
|
||||
<div className="console-bar">
|
||||
<span>Model Radar</span>
|
||||
<strong>主流模型在线</strong>
|
||||
<span>Model Router</span>
|
||||
<strong>GPT-5.5 + Image 2 Ready</strong>
|
||||
</div>
|
||||
<div className="route-list">
|
||||
{routes.map((route) => (
|
||||
<div className="route-row" data-motion="route-row" data-tone={route.tone} key={route.type}>
|
||||
<div
|
||||
className="route-row"
|
||||
data-featured={route.featured ? "true" : undefined}
|
||||
data-motion="route-row"
|
||||
data-tone={route.tone}
|
||||
key={route.type}
|
||||
>
|
||||
<span>{route.type}</span>
|
||||
<strong>{route.model}</strong>
|
||||
<em>{route.state}</em>
|
||||
|
||||
Reference in New Issue
Block a user