feat: polish website model radar
This commit is contained in:
@@ -134,9 +134,9 @@ export function BossAiMotion({ children }: BossAiMotionProps) {
|
|||||||
} as gsap.TweenVars);
|
} as gsap.TweenVars);
|
||||||
|
|
||||||
gsap.to(routeRows, {
|
gsap.to(routeRows, {
|
||||||
x: (index) => (index % 2 === 0 ? -12 : 10),
|
x: (index) => (index % 2 === 0 ? -4 : 4),
|
||||||
y: (index) => -4 - index * 1.8,
|
y: (index) => -2 - index * 0.9,
|
||||||
autoAlpha: (index) => 1 - index * 0.025,
|
autoAlpha: (index) => 1 - index * 0.015,
|
||||||
ease: "none",
|
ease: "none",
|
||||||
stagger: 0.03,
|
stagger: 0.03,
|
||||||
scrollTrigger: {
|
scrollTrigger: {
|
||||||
|
|||||||
+72
-17
@@ -373,8 +373,8 @@ a {
|
|||||||
border: 1px solid var(--line);
|
border: 1px solid var(--line);
|
||||||
border-radius: 32px;
|
border-radius: 32px;
|
||||||
background:
|
background:
|
||||||
radial-gradient(circle at 18% 18%, rgba(215, 255, 77, 0.15), transparent 32%),
|
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.13), transparent 34%),
|
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)),
|
linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.035)),
|
||||||
rgba(10, 20, 18, 0.84);
|
rgba(10, 20, 18, 0.84);
|
||||||
padding: 18px;
|
padding: 18px;
|
||||||
@@ -466,13 +466,17 @@ a {
|
|||||||
|
|
||||||
.console-bar {
|
.console-bar {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 3;
|
z-index: 4;
|
||||||
min-height: 54px;
|
min-height: 54px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
border-radius: 18px;
|
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;
|
padding: 0 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -495,7 +499,7 @@ a {
|
|||||||
|
|
||||||
.route-list {
|
.route-list {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 3;
|
z-index: 4;
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
@@ -509,11 +513,26 @@ a {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
border-radius: 18px;
|
border-radius: 18px;
|
||||||
padding: 0 14px 0 32px;
|
padding: 0 14px 0 34px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transform: translateZ(0);
|
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 {
|
.route-row::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
@@ -525,6 +544,7 @@ a {
|
|||||||
color: var(--blue);
|
color: var(--blue);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.route-row strong {
|
.route-row strong {
|
||||||
@@ -537,9 +557,40 @@ a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.route-row em {
|
.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;
|
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 {
|
.route-row[data-tone="hot"] span {
|
||||||
color: #ffec99;
|
color: #ffec99;
|
||||||
}
|
}
|
||||||
@@ -596,7 +647,7 @@ a {
|
|||||||
|
|
||||||
.console-metrics {
|
.console-metrics {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 3;
|
z-index: 4;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
@@ -621,7 +672,7 @@ a {
|
|||||||
|
|
||||||
.mini-grid {
|
.mini-grid {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 3;
|
z-index: 4;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
@@ -640,31 +691,35 @@ a {
|
|||||||
.flow-glyph {
|
.flow-glyph {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
right: -22px;
|
right: -92px;
|
||||||
bottom: -8px;
|
bottom: -72px;
|
||||||
width: 92%;
|
width: 112%;
|
||||||
max-width: 520px;
|
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 {
|
.flow-line {
|
||||||
fill: none;
|
fill: none;
|
||||||
stroke: url("#lineGradient");
|
stroke: url("#lineGradient");
|
||||||
stroke-width: 2.5;
|
stroke-width: 2;
|
||||||
stroke-linecap: round;
|
stroke-linecap: round;
|
||||||
stroke-dasharray: 12 18;
|
stroke-dasharray: 9 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flow-line-b {
|
.flow-line-b {
|
||||||
opacity: 0.62;
|
opacity: 0.46;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flow-line-c {
|
.flow-line-c {
|
||||||
opacity: 0.48;
|
opacity: 0.32;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flow-dot {
|
.flow-dot {
|
||||||
fill: var(--acid);
|
fill: var(--acid);
|
||||||
|
opacity: 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dot-b {
|
.dot-b {
|
||||||
@@ -672,8 +727,8 @@ a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.node {
|
.node {
|
||||||
fill: rgba(255, 255, 255, 0.04);
|
fill: rgba(255, 255, 255, 0.025);
|
||||||
stroke: rgba(215, 255, 77, 0.22);
|
stroke: rgba(215, 255, 77, 0.13);
|
||||||
}
|
}
|
||||||
|
|
||||||
.platform-section,
|
.platform-section,
|
||||||
|
|||||||
+22
-16
@@ -36,11 +36,11 @@ const heroStats = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const routes = [
|
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: "Claude", model: "claude-opus-4-8", state: "Messages", tone: "white" },
|
||||||
{ type: "Gemini", model: "gemini-3-pro-preview", state: "多模态", tone: "cyan" },
|
{ 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 = [
|
const consoleMetrics = [
|
||||||
@@ -141,7 +141,7 @@ const controlSignals = [
|
|||||||
|
|
||||||
function FlowGlyph() {
|
function FlowGlyph() {
|
||||||
return (
|
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>
|
<defs>
|
||||||
<linearGradient id="lineGradient" x1="0" x2="1" y1="0" y2="1">
|
<linearGradient id="lineGradient" x1="0" x2="1" y1="0" y2="1">
|
||||||
<stop offset="0%" stopColor="#D7FF4D" />
|
<stop offset="0%" stopColor="#D7FF4D" />
|
||||||
@@ -159,26 +159,26 @@ function FlowGlyph() {
|
|||||||
<path
|
<path
|
||||||
className="flow-line flow-line-a"
|
className="flow-line flow-line-a"
|
||||||
data-motion-line
|
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
|
<path
|
||||||
className="flow-line flow-line-b"
|
className="flow-line flow-line-b"
|
||||||
data-motion-line
|
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
|
<path
|
||||||
className="flow-line flow-line-c"
|
className="flow-line flow-line-c"
|
||||||
data-motion-line
|
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)">
|
<g filter="url(#softGlow)">
|
||||||
<circle className="flow-dot dot-a" data-motion-dot cx="48" cy="180" 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="260" cy="180" r="9" />
|
<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="488" cy="154" r="7" />
|
<circle className="flow-dot dot-c" data-motion-dot cx="496" cy="132" r="6" />
|
||||||
</g>
|
</g>
|
||||||
<rect className="node node-a" data-motion="node" x="72" y="58" width="128" height="68" rx="18" />
|
<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="242" y="146" width="140" height="76" rx="20" />
|
<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="248" width="120" height="62" rx="17" />
|
<rect className="node node-c" data-motion="node" x="352" y="236" width="112" height="54" rx="16" />
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -188,12 +188,18 @@ function HeroConsole() {
|
|||||||
<div className="hero-console" data-motion="hero-console" aria-label="BossAI 路由状态预览">
|
<div className="hero-console" data-motion="hero-console" aria-label="BossAI 路由状态预览">
|
||||||
<div className="console-orbit" data-motion-orbit />
|
<div className="console-orbit" data-motion-orbit />
|
||||||
<div className="console-bar">
|
<div className="console-bar">
|
||||||
<span>Model Radar</span>
|
<span>Model Router</span>
|
||||||
<strong>主流模型在线</strong>
|
<strong>GPT-5.5 + Image 2 Ready</strong>
|
||||||
</div>
|
</div>
|
||||||
<div className="route-list">
|
<div className="route-list">
|
||||||
{routes.map((route) => (
|
{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>
|
<span>{route.type}</span>
|
||||||
<strong>{route.model}</strong>
|
<strong>{route.model}</strong>
|
||||||
<em>{route.state}</em>
|
<em>{route.state}</em>
|
||||||
|
|||||||
Reference in New Issue
Block a user