统一 Airshelf 界面组件与图标

This commit is contained in:
iye
2026-05-27 12:29:41 +08:00
parent ea335587d2
commit 086d92991e
47 changed files with 750 additions and 450 deletions
+6 -4
View File
@@ -27,7 +27,8 @@
--blue-soft: #E8EFFB;
--topbar-h: 57px;
--aside-w: 248px;
--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
--mono: "Inter", system-ui, -apple-system, "Segoe UI", "PingFang SC",
"Hiragino Sans GB", "Microsoft YaHei", sans-serif;
--sans: "Inter", system-ui, -apple-system, "Segoe UI", "PingFang SC",
"Hiragino Sans GB", "Microsoft YaHei", sans-serif;
}
@@ -68,8 +69,8 @@ aside.sidebar {
position: relative;
}
.brand { display: flex; align-items: center; gap: 10px; padding: 6px 8px 14px; }
.flame { width: 22px; height: 22px; color: var(--orange); }
.flame svg { width: 100%; height: 100%; }
.brand-mark, .flame { width: 22px; height: 22px; color: var(--orange); }
.brand-mark svg, .flame svg { width: 100%; height: 100%; }
.brand-name { font-weight: 700; font-size: 18px; letter-spacing: -.012em; }
.brand-ver {
font-family: var(--mono); font-size: 9.5px; color: var(--ink-3);
@@ -287,6 +288,7 @@ main.main { position: relative; overflow: hidden; background: var(--bg); min-wid
.btn.btn-ghost:hover { background: var(--bg-soft); color: var(--ink); }
.btn.btn-sm { padding: 5px 11px; font-size: 12px; }
.btn.btn-lg { padding: 10px 18px; font-size: 13.5px; }
.btn.btn-create svg { width: 16px; height: 16px; }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.btn:disabled:hover { background: var(--card); }
@@ -561,7 +563,7 @@ main.main { position: relative; overflow: hidden; background: var(--bg); min-wid
display: flex; align-items: center; justify-content: center;
flex-shrink: 0; border: 1px solid var(--orange-soft);
}
.shortcut .ic svg { width: 15px; height: 15px; }
.shortcut .ic svg { width: 16px; height: 16px; }
.shortcut .t { font-size: 13px; font-weight: 600; }
.shortcut .d {
font-size: 11.5px; color: var(--ink-3);
+3 -9
View File
@@ -1,5 +1,5 @@
import type { Metadata } from "next";
import { Inter, JetBrains_Mono } from "next/font/google";
import { Inter } from "next/font/google";
import "./globals.css";
import Sidebar from "@/components/Sidebar";
import GridBg from "@/components/GridBg";
@@ -10,14 +10,8 @@ const inter = Inter({
display: "swap",
});
const mono = JetBrains_Mono({
subsets: ["latin"],
variable: "--font-mono",
display: "swap",
});
export const metadata: Metadata = {
title: "流·Studio — AI 短视频生产平台",
title: "Airshelf — AI 短视频生产平台",
description:
"为抖音 / TikTok 商户打造的 AI 短视频生产流水线 · 脚本 → 基础资产 → 故事板 → 视频片段 → 拼接导出",
};
@@ -28,7 +22,7 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
<html lang="zh-CN" className={`${inter.variable} ${mono.variable}`}>
<html lang="zh-CN" className={inter.variable}>
<body>
<div className="app">
<Sidebar />
+8 -23
View File
@@ -63,12 +63,12 @@ export default function WorkspacePage() {
</div>
</div>
<div className="actions">
<Link className="btn" href="/products">
<Icon name="plus" size={14} />
<Link className="btn btn-create" href="/products">
<Icon name="product-plus" size={16} />
新建商品
</Link>
<Link className="btn btn-primary" href="/projects/new">
<Icon name="plus" size={14} />
<Link className="btn btn-primary btn-create" href="/projects/new">
<Icon name="clapperboard" size={16} />
新建项目
</Link>
</div>
@@ -132,43 +132,28 @@ export default function WorkspacePage() {
</div>
<div className="shortcuts">
<Link className="shortcut" href="/products">
<div className="ic">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.8}>
<path d="m3 7 9-4 9 4-9 4-9-4z" />
<path d="m3 12 9 4 9-4M3 17l9 4 9-4" />
</svg>
</div>
<div className="ic"><Icon name="package" /></div>
<div>
<div className="t">商品库</div>
<div className="d">12 SKU</div>
</div>
</Link>
<Link className="shortcut" href="/library">
<div className="ic"><Icon name="bars" /></div>
<div className="ic"><Icon name="images" /></div>
<div>
<div className="t">资产库</div>
<div className="d">人 8 · 景 14 · 片 8</div>
</div>
</Link>
<Link className="shortcut" href="/account">
<div className="ic">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.8}>
<circle cx="12" cy="12" r="9" />
<path d="M12 7v10M9 10h4a1.5 1.5 0 0 1 0 3h-3a1.5 1.5 0 0 0 0 3h4" />
</svg>
</div>
<div className="ic"><Icon name="credit-card" /></div>
<div>
<div className="t">充值</div>
<div className="d">¥327.40</div>
</div>
</Link>
<Link className="shortcut" href="/projects">
<div className="ic">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.8}>
<rect x="3" y="4" width="18" height="16" rx="2" />
<path d="M7 4v16M16 4v16M3 9h18M3 15h18" />
</svg>
</div>
<div className="ic"><Icon name="clapperboard" /></div>
<div>
<div className="t">所有项目</div>
<div className="d">12 个</div>
+2 -2
View File
@@ -36,8 +36,8 @@ export default function ProductsPage() {
</div>
</div>
<div className="actions">
<button className="btn btn-primary">
<Icon name="plus" size={14} />
<button className="btn btn-primary btn-create">
<Icon name="product-plus" size={16} />
新建商品
</button>
</div>
+1 -1
View File
@@ -247,7 +247,7 @@ export default function NewProjectPage() {
>
<div className="num">
{state === "done"
? <Icon name="check" size={12} strokeWidth={3} />
? <Icon name="check" size={12} strokeWidth={1.5} />
: s.n}
</div>
<div>
+2 -2
View File
@@ -121,8 +121,8 @@ export default function ProjectsPage() {
</div>
</div>
<div className="actions">
<Link className="btn btn-primary btn-lg" href="/projects/new">
<Icon name="plus" size={14} />
<Link className="btn btn-primary btn-lg btn-create" href="/projects/new">
<Icon name="clapperboard" size={16} />
新建项目
</Link>
</div>