docs(web,readme): taste pass — fix stale refs, tighten design rhythm
Polish fixes (12): - INSTALL.md: drop duplicate code block; doc CODEWHALE_VERSION canonical env var; fix example mirror URLs /DeepSeek-TUI/ → /CodeWhale/; remove stale "Once npm publication resumes" conditional - footer.tsx: fix Gitee mirror URL deepseek-tui → CodeWhale - globals.css: update seal CSS shadows from old cream rgba(244,241,232) to paper white rgba(255,255,255) - web/README.md: update palette description cream #FAF6EE → white #FFFFFF - nav.tsx: fix zh-only date strip (第…期) and API label (在线) — now "Edition …" / "API · Online" in en mode - page.tsx: hardcoded v0.8.56 → dynamic facts.version - README.md: merge duplicate Contributing sections - README.ja-JP/vi: parenthesize untranslated Chinese thank-you blurbs Design rhythm (9): - ThinkingTrace section: py-16→py-20, bg-paper-deep, hairlines for reveal - Judgment stack: py-16→py-12; middle cell bg-paper-deep for ABA rhythm - Maintainer loop: py-16→py-14; step numbers grow 01→04 - How it works: py-16→py-12 - Join in closer: py-16→py-20 (dark section breathes) - Ticker: LIVE label shrunk to annotation weight
This commit is contained in:
+1
-1
@@ -94,7 +94,7 @@ web/
|
||||
|
||||
"Yamen tech": Qing memorial document × WeChat news feed × Bloomberg terminal.
|
||||
|
||||
- **Palette**: cream paper `#FAF6EE`, ink `#0A2540`, cinnabar red `#C8102E`, aged gold, jade green, cobalt blue.
|
||||
- **Palette**: white paper `#FFFFFF`, cool gray `#F4F6FB`, ink `#0E0E10`, indigo `#4D6BFE`, jade green, cobalt blue.
|
||||
- **Type**: Fraunces (display), IBM Plex Sans (body), JetBrains Mono (UI/code), Noto Serif SC (decorative CJK anchors).
|
||||
- **Structure**: hairline 1px dividers, multi-column grids, big tabular numbers, surgical use of red for "hot" markers, decorative Chinese-seal squares as section anchors.
|
||||
|
||||
|
||||
@@ -242,7 +242,8 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
<StatGrid stats={stats} />
|
||||
|
||||
{/* SEE HOW IT DECIDES — real reasoning traces prove the constitution operates */}
|
||||
<section className="mx-auto max-w-[1400px] px-6 py-16">
|
||||
<section className="bg-paper-deep hairline-t hairline-b">
|
||||
<div className="mx-auto max-w-[1400px] px-6 py-20">
|
||||
<div className="flex items-baseline gap-4 mb-3 hairline-b pb-4">
|
||||
<Seal char="判" />
|
||||
<h2 className="font-display">
|
||||
@@ -260,10 +261,11 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
? "这些是真实推理的忠实摘录,非杜撰。宪法不是墙上的口号,而是模型决策时真正遵循的顺序。"
|
||||
: "Faithful excerpts from real reasoning — not invented. The constitution isn't a poster on the wall; it's the order the model actually follows when it decides."}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* WHAT IT IS — the core ideas behind the harness */}
|
||||
<section className="mx-auto max-w-[1400px] px-6 py-16">
|
||||
<section className="mx-auto max-w-[1400px] px-6 py-12">
|
||||
<div className="flex items-baseline gap-4 mb-2 hairline-b pb-4">
|
||||
<Seal char="是" />
|
||||
<h2 className="font-display">
|
||||
@@ -286,7 +288,7 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
Agent 不是模型卡片,也不是排行榜数字。它是这个终端、这个工作区、这个会话里的实例。先有地址,责任才有落点。
|
||||
</p>
|
||||
</div>
|
||||
<div className="p-6">
|
||||
<div className="p-6 bg-paper-deep">
|
||||
<div className="eyebrow mb-3">02 · 嵌套宪法</div>
|
||||
<h3 className="font-display text-xl mb-3">冲突时有法律</h3>
|
||||
<p className="text-sm text-ink-soft leading-[1.9]">
|
||||
@@ -310,7 +312,7 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
The agent is not a model card or leaderboard score. It is an instance in this terminal, this workspace, this session. Give it an address before you ask it to act.
|
||||
</p>
|
||||
</div>
|
||||
<div className="p-6">
|
||||
<div className="p-6 bg-paper-deep">
|
||||
<div className="eyebrow mb-3">02 · nested constitution</div>
|
||||
<h3 className="font-display text-xl mb-3">Conflict has law</h3>
|
||||
<p className="text-sm text-ink-soft leading-relaxed">
|
||||
@@ -342,7 +344,7 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
|
||||
{/* MAINTAINER LOOP */}
|
||||
<section className="bg-paper-deep hairline-t hairline-b">
|
||||
<div className="mx-auto max-w-[1400px] px-6 py-16">
|
||||
<div className="mx-auto max-w-[1400px] px-6 py-14">
|
||||
<div className="grid lg:grid-cols-12 gap-10 items-start">
|
||||
<div className="lg:col-span-5">
|
||||
<div className="flex items-baseline gap-4 mb-4">
|
||||
@@ -398,7 +400,7 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
]
|
||||
).map((item) => (
|
||||
<div key={item.n} className="p-5">
|
||||
<div className="font-mono text-[0.7rem] text-indigo uppercase tracking-widest mb-2">{item.n}</div>
|
||||
<div className={`font-mono uppercase tracking-widest mb-2 ${item.n === "01" ? "text-[0.6rem] text-indigo/60" : item.n === "04" ? "text-[0.82rem] text-indigo font-semibold" : "text-[0.7rem] text-indigo"}`}>{item.n}</div>
|
||||
<h3 className="font-display text-lg mb-2">{item.t}</h3>
|
||||
<p className={`text-sm text-ink-soft ${isZh ? "leading-[1.9] tracking-wide" : "leading-relaxed"}`}>
|
||||
{item.d}
|
||||
@@ -412,7 +414,7 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
</section>
|
||||
|
||||
{/* HOW IT WORKS */}
|
||||
<section className="mx-auto max-w-[1400px] px-6 py-16">
|
||||
<section className="mx-auto max-w-[1400px] px-6 py-12">
|
||||
<div className="flex items-baseline gap-4 mb-8 hairline-b pb-4">
|
||||
<Seal char="作" />
|
||||
<h2 className="font-display">
|
||||
@@ -504,7 +506,7 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
<div className="flex items-baseline gap-4 mb-5 hairline-b pb-4">
|
||||
<Seal char="谢" />
|
||||
<div>
|
||||
<div className="eyebrow mb-2">{isZh ? "v0.8.56 致谢" : "v0.8.56 credits"}</div>
|
||||
<div className="eyebrow mb-2">{isZh ? `v${facts.version} 致谢` : `v${facts.version} credits`}</div>
|
||||
<h2 className="font-display text-3xl">
|
||||
{isZh ? "每个补丁和报告都算数" : "Every patch and report counts"}
|
||||
</h2>
|
||||
@@ -556,7 +558,7 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s
|
||||
|
||||
{/* JOIN IN */}
|
||||
<section className="bg-ink text-paper">
|
||||
<div className="mx-auto max-w-[1400px] px-6 py-16 grid lg:grid-cols-12 gap-10 items-center">
|
||||
<div className="mx-auto max-w-[1400px] px-6 py-20 grid lg:grid-cols-12 gap-10 items-center">
|
||||
<div className="lg:col-span-8">
|
||||
<div className="eyebrow text-paper-deep/70 mb-3">{isZh ? "加入" : "Join in"}</div>
|
||||
<h2 className="font-display text-paper text-4xl leading-tight">
|
||||
|
||||
+5
-5
@@ -155,8 +155,8 @@ h3 { font-size: 1.18rem; line-height: 1.25; }
|
||||
border-radius: 1px;
|
||||
letter-spacing: -0.04em;
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgba(244,241,232,0.18),
|
||||
inset 0 0 0 3px var(--ink);
|
||||
inset 0 0 0 1px rgba(255,255,255,0.18),
|
||||
inset 0 0 0 3px var(--ink);
|
||||
transform: rotate(-1.5deg);
|
||||
position: relative;
|
||||
}
|
||||
@@ -165,7 +165,7 @@ h3 { font-size: 1.18rem; line-height: 1.25; }
|
||||
position: absolute;
|
||||
inset: -1px;
|
||||
background:
|
||||
radial-gradient(rgba(244,241,232,0.35) 1px, transparent 1px) 0 0 / 4px 4px;
|
||||
radial-gradient(rgba(255,255,255,0.35) 1px, transparent 1px) 0 0 / 4px 4px;
|
||||
mix-blend-mode: screen;
|
||||
border-radius: 1px;
|
||||
pointer-events: none;
|
||||
@@ -175,8 +175,8 @@ h3 { font-size: 1.18rem; line-height: 1.25; }
|
||||
.seal-indigo {
|
||||
background: var(--indigo);
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgba(244,241,232,0.22),
|
||||
inset 0 0 0 3px var(--indigo);
|
||||
inset 0 0 0 1px rgba(255,255,255,0.22),
|
||||
inset 0 0 0 3px var(--indigo);
|
||||
}
|
||||
|
||||
/* ---------- pills / status ---------- */
|
||||
|
||||
@@ -99,7 +99,7 @@ export function Footer({ locale = "en" }: { locale?: Locale }) {
|
||||
<div className="pt-2 border-t border-paper-line/20">
|
||||
<div className="eyebrow mb-2 text-ink-mute">镜像源 / Mirror</div>
|
||||
<div className="flex flex-wrap gap-3 text-xs">
|
||||
{GITEE_ENABLED && <a href="https://gitee.com/Hmbown/deepseek-tui" className="text-indigo hover:underline" target="_blank" rel="noopener">Gitee 镜像</a>}
|
||||
{GITEE_ENABLED && <a href="https://gitee.com/Hmbown/CodeWhale" className="text-indigo hover:underline" target="_blank" rel="noopener">Gitee 镜像</a>}
|
||||
<a href="https://cnb.cool/codewhale.net/codewhale" className="text-indigo hover:underline" target="_blank" rel="noopener">CNB 镜像</a>
|
||||
<a href="https://npmmirror.com/package/codewhale" className="text-indigo hover:underline" target="_blank" rel="noopener">npmmirror</a>
|
||||
<a href="https://mirrors.tuna.tsinghua.edu.cn/help/crates.io-index.html" className="text-indigo hover:underline" target="_blank" rel="noopener">Tuna crates.io</a>
|
||||
|
||||
@@ -33,14 +33,14 @@ export function Nav({ locale = "en" }: { locale?: Locale }) {
|
||||
<div className="hairline-b">
|
||||
<div className="mx-auto max-w-[1400px] px-6 py-1.5 flex items-center justify-between text-[0.66rem] font-mono uppercase tracking-[0.18em] text-ink-mute">
|
||||
<div className="flex items-center gap-4">
|
||||
<span>{isZh ? `第 ${new Date().toISOString().slice(0, 10)} 期` : `第 ${new Date().toISOString().slice(0, 10)} 期`}</span>
|
||||
<span>{isZh ? `第 ${new Date().toISOString().slice(0, 10)} 期` : `Edition ${new Date().toISOString().slice(0, 10)}`}</span>
|
||||
<span className="hidden sm:inline">· {isZh ? new Date().toLocaleDateString("zh-CN", { weekday: "long", month: "long", day: "numeric" }) : new Date().toLocaleDateString("en-US", { weekday: "long", month: "long", day: "numeric" })}</span>
|
||||
</div>
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="hidden md:inline">codewhale.net</span>
|
||||
<span className="inline-flex items-center gap-1.5">
|
||||
<span className="w-1.5 h-1.5 bg-jade rounded-full inline-block animate-pulse" />
|
||||
<span>{isZh ? "API · 在线" : "API · 在线"}</span>
|
||||
<span>{isZh ? "API · 在线" : "API · Online"}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,7 +10,7 @@ export function Ticker({ items }: { items: FeedItem[] }) {
|
||||
<div className="bg-ink text-paper px-4 py-2 flex items-center shrink-0 gap-2">
|
||||
<span className="w-1.5 h-1.5 bg-indigo rounded-full inline-block animate-pulse" />
|
||||
<span className="font-cjk text-sm font-semibold tracking-wider">实 时</span>
|
||||
<span className="font-mono text-[0.7rem] uppercase tracking-widest text-paper-deep">LIVE</span>
|
||||
<span className="font-mono text-[0.55rem] uppercase tracking-widest text-paper-deep/60 ml-1 self-end mb-0.5">LIVE</span>
|
||||
</div>
|
||||
<div className="flex-1 overflow-hidden relative">
|
||||
<div className="ticker-track py-2 font-mono text-[0.78rem]">
|
||||
|
||||
Reference in New Issue
Block a user