feat: refresh frontend visual design

This commit is contained in:
2026-04-23 11:00:29 +08:00
parent 562c95c4b5
commit 3dd5c454cb
11 changed files with 1262 additions and 336 deletions

View File

@@ -105,20 +105,47 @@ export function SiteShell({ children }: { children: React.ReactNode }) {
}
return (
<div className="shell-grid">
<div className="shell-grid shell-grid-studio">
<aside className="shell-sidebar">
<div className="brand-block">
<div className="brand-block brand-block-studio">
<div className="brand-visual" aria-hidden="true">
<span className="brand-orb brand-orb-primary" />
<span className="brand-orb brand-orb-secondary" />
</div>
<span className="brand-kicker">AI VIDEO STUDIO</span>
<h1>AIVideo</h1>
<p></p>
<p></p>
<div className="brand-pill-row">
<span className="brand-pill">Source mode</span>
<span className="brand-pill">Mock providers</span>
<span className="brand-pill">Local assets</span>
</div>
<div className="brand-status">
<span className="status-dot" />
线
</div>
</div>
<div className="sidebar-note">
<div className="sidebar-note-label">Pipeline Focus</div>
<div className="sidebar-metrics">
<div className="sidebar-metric">
<strong>Prompt</strong>
<span></span>
</div>
<div className="sidebar-metric">
<strong>Assets</strong>
<span></span>
</div>
<div className="sidebar-metric">
<strong>Tasks</strong>
<span></span>
</div>
</div>
</div>
<nav className="sidebar-nav">
{navigation.map((item) => {
{navigation.map((item, index) => {
const Icon = item.icon;
return (
<Link
@@ -133,6 +160,7 @@ export function SiteShell({ children }: { children: React.ReactNode }) {
<span>{item.label}</span>
<small>{item.description}</small>
</div>
<div className="nav-index">{String(index + 1).padStart(2, "0")}</div>
</Link>
);
})}
@@ -148,6 +176,16 @@ export function SiteShell({ children }: { children: React.ReactNode }) {
<div className="profile-name">{data.nickname || data.username}</div>
<div className="profile-meta">{data.email}</div>
</div>
<div className="profile-card-stats">
<div className="profile-stat">
<span></span>
<strong>Creator</strong>
</div>
<div className="profile-stat">
<span>ID</span>
<strong>{(data.publicId || "AIVIDEO").slice(-8)}</strong>
</div>
</div>
<button
className="ghost-button"
onClick={async () => {
@@ -163,7 +201,7 @@ export function SiteShell({ children }: { children: React.ReactNode }) {
<main className="shell-main">
<header className="shell-header">
<div>
<div className="shell-header-content">
<div className="header-kicker">Creative Ops Console</div>
<h2>{title.label}</h2>
<p className="shell-header-copy">{title.description}</p>
@@ -173,7 +211,8 @@ export function SiteShell({ children }: { children: React.ReactNode }) {
<Activity size={14} />
</div>
<div className="header-chip">{data.publicId}</div>
<div className="header-chip">{data.publicId || "UNAVAILABLE"}</div>
<div className="header-chip"> / / mock </div>
</div>
</header>
<section className="shell-content">{children}</section>