From 627c0ee88727a5fa094bfb92a19a4021d4bb48e9 Mon Sep 17 00:00:00 2001 From: Codex Bot Date: Wed, 28 Oct 2026 15:31:25 +0800 Subject: [PATCH] Refine documentation UI with distinct collection navigation and borderless surfaces --- README.md | 2 +- apps/docs/src/components/Icon.tsx | 5 +- apps/docs/src/components/Shell.tsx | 79 +++--- apps/docs/src/lib/collections.ts | 24 ++ apps/docs/src/pages/docs/[...slug].tsx | 9 +- apps/docs/src/pages/index.tsx | 17 +- apps/docs/src/styles/globals.css | 227 +++++++++++++++--- design/verification/collection-ui/README.md | 21 ++ .../collection-ui/desktop-language.jpg | Bin 0 -> 68469 bytes 9 files changed, 288 insertions(+), 96 deletions(-) create mode 100644 apps/docs/src/lib/collections.ts create mode 100644 design/verification/collection-ui/README.md create mode 100644 design/verification/collection-ui/desktop-language.jpg diff --git a/README.md b/README.md index b9cfc02..9b7f0e3 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ tools/figures/ 独立 Python 项目,使用 drawsvg 编程制图 - `pnpm start`:在本地预览已构建站点。 - `pnpm check`:依次执行 lint、类型检查、制图与构建。 -站点默认浅色,使用本地系统字体。全站搜索支持正文关键词、`⌘/Ctrl K`、方向键与 Enter;代码块提供复制与反馈。桌面提供分组导航和滚动高亮的页内目录,小屏可展开文档菜单与页内目录。首页入口、草案提示、前后篇导航均引用现有 Markdown 内容和资料目录配置。 +站点默认浅色,使用本地系统字体。全站搜索支持正文关键词、`⌘/Ctrl K`、方向键与 Enter;代码块提供复制与反馈。桌面提供分组导航和滚动高亮的页内目录,小屏可展开文档菜单与页内目录。首页入口、草案提示、前后篇导航均引用现有 Markdown 内容和资料目录配置。顶部提供文档切换,阅读页左侧只展示当前文档,并有独立图标、名称与返回入口;搜索框标明当前文档范围。界面主要通过留白、轻渐变与状态反馈分层,支持减少动态效果的系统偏好。 参考设计截图与研究记录保存在 `design/references`;浏览器验收截图与检查说明保存在 `design/verification`。这些文件不作为站点静态资源发布。 diff --git a/apps/docs/src/components/Icon.tsx b/apps/docs/src/components/Icon.tsx index ad6424c..41f46c9 100644 --- a/apps/docs/src/components/Icon.tsx +++ b/apps/docs/src/components/Icon.tsx @@ -2,10 +2,13 @@ import type { CSSProperties } from "react"; // One stroke style for controls and navigation; labels carry the meaning. export function Icon({ name, size = 18, style }: { - name: "search" | "arrow" | "book" | "code" | "menu" | "close"; + name: "search" | "arrow" | "book" | "code" | "menu" | "close" | "layers" | "nodes" | "chevron"; size?: number; style?: CSSProperties; }) { const paths = { + layers: <>, + nodes: <>, + chevron: , search: <>, arrow: , book: <>, diff --git a/apps/docs/src/components/Shell.tsx b/apps/docs/src/components/Shell.tsx index 665ea7b..ef4880f 100644 --- a/apps/docs/src/components/Shell.tsx +++ b/apps/docs/src/components/Shell.tsx @@ -2,6 +2,7 @@ import Link from "next/link"; import { Icon } from "@/components/Icon"; import { useEffect, useRef, useState, type ReactNode } from "react"; import type { DocLink } from "@/lib/docs"; +import { collectionEntries, collectionIcon, collectionLabel, collectionTone } from "@/lib/collections"; export function Brand() { @@ -13,10 +14,9 @@ export function Brand() { - Endor /{" "} Tabularium - 文档 + Docs ); } @@ -32,51 +32,36 @@ export function Navigation({ const collection = docs.find((d) => d.slug === current)?.collection; const scopedDocs = docs.filter((d) => d.collection === collection); const groups = [...new Set(scopedDocs.map((d) => d.group))]; - const collections = [...new Set(docs.map((d) => d.collection))]; + const collections = collectionEntries(docs); return ( ); } + export function Shell({ docs, current, @@ -96,6 +81,7 @@ export function Shell({ const [selected, setSelected] = useState(0); const [menu, setMenu] = useState(false); const collection = docs.find((d) => d.slug === current)?.collection; + const collections = collectionEntries(docs); const results = searchDocs.filter((d) => (!collection || d.collection === collection) && `${d.title} ${d.description} ${d.searchText ?? ""}` @@ -134,18 +120,15 @@ export function Shell({ return () => document.removeEventListener("keydown", keyboard); }, []); return ( - <> +
跳到正文
@@ -208,7 +191,7 @@ export function Shell({ { @@ -264,7 +247,7 @@ export function Shell({ ))} {!results.length && (

- 没有找到相关文档。试试「节点」「SVG」或「pnpm」。 + 没有找到相关内容,请尝试其他关键词。

)} @@ -272,6 +255,6 @@ export function Shell({ ↑ ↓ 选择 Enter 打开 · Esc 关闭 - + ); } diff --git a/apps/docs/src/lib/collections.ts b/apps/docs/src/lib/collections.ts new file mode 100644 index 0000000..49ad668 --- /dev/null +++ b/apps/docs/src/lib/collections.ts @@ -0,0 +1,24 @@ +import type { DocLink } from "@/lib/docs"; + +export function collectionLabel(name: string) { + return name.replace(/ 文档$| 源码教程$|问题集$/g, ""); +} +export function collectionTone(name?: string) { + if (name?.includes("Pretext")) return "blue"; + if (name?.includes("语言设计")) return "violet"; + if (name?.includes("垃圾回收")) return "amber"; + return "green"; +} +export function collectionIcon(name?: string): "book" | "code" | "layers" | "nodes" { + if (name?.includes("Pretext")) return "code"; + if (name?.includes("语言设计")) return "layers"; + if (name?.includes("垃圾回收")) return "nodes"; + return "book"; +} +export function collectionEntries(docs: DocLink[]) { + return [...new Set(docs.map((doc) => doc.collection))].map((name) => { + const items = docs.filter((doc) => doc.collection === name); + const entry = items.find((doc) => doc.slug.endsWith("/00-overview")) ?? items[0]; + return { name, entry, count: items.length }; + }); +} diff --git a/apps/docs/src/pages/docs/[...slug].tsx b/apps/docs/src/pages/docs/[...slug].tsx index 4667eea..c92dd88 100644 --- a/apps/docs/src/pages/docs/[...slug].tsx +++ b/apps/docs/src/pages/docs/[...slug].tsx @@ -18,6 +18,8 @@ import { listDocs, readDoc, type Doc, type DocLink } from "@/lib/docs"; import { Shell, Navigation } from "@/components/Shell"; import { ArchitectureFigure } from "@/components/ArchitectureFigure"; import { CodeBlock } from "@/components/CodeBlock"; +import { collectionEntries, collectionLabel } from "@/lib/collections"; +import { Icon } from "@/components/Icon"; import { headingsFor } from "@/lib/navigation"; type Props = { doc: Doc; docs: DocLink[] }; @@ -49,6 +51,7 @@ export default function DocPage({ const [active, setActive] = useState(""); const siblings = docs.filter((d) => d.collection === doc.collection); + const collectionEntry = collectionEntries(docs).find((c) => c.name === doc.collection)!.entry; const index = siblings.findIndex((d) => d.slug === doc.slug); useEffect(() => { const observer = new IntersectionObserver( @@ -90,9 +93,9 @@ export default function DocPage({
- 文档 - / - {doc.group} + {collectionLabel(doc.collection)} + + {doc.slug === collectionEntry.slug ? "概览" : doc.group === doc.collection ? doc.title : doc.group} {doc.draft && 草案}
diff --git a/apps/docs/src/pages/index.tsx b/apps/docs/src/pages/index.tsx index d82369f..56a9f92 100644 --- a/apps/docs/src/pages/index.tsx +++ b/apps/docs/src/pages/index.tsx @@ -5,6 +5,7 @@ import { useState } from "react"; import { listDocs, type DocLink } from "@/lib/docs"; import { Shell, Navigation } from "@/components/Shell"; import { Icon } from "@/components/Icon"; +import { collectionEntries, collectionIcon, collectionLabel, collectionTone } from "@/lib/collections"; export const getStaticProps: GetStaticProps<{ docs: DocLink[] }> = async () => ({ props: { docs: await listDocs() }, @@ -17,7 +18,7 @@ export default function Home({ docs }: InferGetStaticPropsType doc.collection))]; const filtered = docs.filter((doc) => (!collection || doc.collection === collection) && `${doc.title} ${doc.description}`.toLocaleLowerCase().includes(query.trim().toLocaleLowerCase())); - const featured = docs.filter((doc) => doc.featured).slice(0, 3); + const entries = collectionEntries(docs); return <> Tabularium · 资料库 @@ -25,16 +26,16 @@ export default function Home({ docs }: InferGetStaticPropsType
-

资料库

+

文档中心

系统设计、源码研究与学习笔记。

- -
{featured.map((doc) => - -

{doc.title.replace("(草案)", "")}

-

{doc.description}

- + +
{entries.map(({ name, entry, count }) => + +

{collectionLabel(name)}

+

{entry.description}

+ {count} 篇 )}
diff --git a/apps/docs/src/styles/globals.css b/apps/docs/src/styles/globals.css index 9fb3fa8..8c7971f 100644 --- a/apps/docs/src/styles/globals.css +++ b/apps/docs/src/styles/globals.css @@ -55,7 +55,7 @@ button { } .site-header { height: 68px; - border-bottom: 1px solid var(--line); + border: 0; display: flex; align-items: center; padding: 0 32px; @@ -82,9 +82,9 @@ button { color: #c8ceca; } .docs-badge { - font-size: 10px; + font-size: 13px; padding: 2px 5px; - border: 1px solid var(--line); + border: 0; border-radius: 4px; color: var(--muted); letter-spacing: 0; @@ -123,7 +123,7 @@ button { display: flex; gap: 9px; align-items: center; - border: 1px solid #e2e7e3; + border: 0; background: #fafbf9; border-radius: 7px; padding: 7px 10px; @@ -138,7 +138,7 @@ button { } .search-trigger kbd { margin-left: auto; - border: 1px solid var(--line); + border: 0; border-radius: 3px; padding: 0 4px; font-size: 10px; @@ -163,7 +163,7 @@ button { grid-template-columns: 238px minmax(0, 1fr); } .sidebar { - border-right: 1px solid var(--line); + border: 0; padding: 32px 22px; height: calc(100dvh - 68px); position: sticky; @@ -200,7 +200,7 @@ button { padding: 9px 10px; line-height: 1.6; color: #637066; - border-left: 1px solid var(--line); + border: 0; margin-left: 10px; } .nav-item:hover { @@ -225,9 +225,9 @@ button { padding: 0 48px; } .eyebrow { font-size: 13px; font-weight: 500; color: var(--muted); margin: 0; } -.draft-badge { color: #8c733e; background: #faf6e9; border: 1px solid #eee4c9; border-radius: 4px; padding: 2px 6px; font-size: 12px; white-space: nowrap; } +.draft-badge { color: #8c733e; background: #faf6e9; border: 0; border-radius: 4px; padding: 2px 6px; font-size: 12px; white-space: nowrap; } .site-footer { - border-top: 1px solid var(--line); + border: 0; display: flex; justify-content: space-between; gap: 15px; @@ -324,7 +324,7 @@ button { SFMono-Regular, Consolas, monospace; - border: 1px solid #e7ece7; + border: 0; background: #f6f8f5; border-radius: 4px; padding: 2px 5px; @@ -344,7 +344,7 @@ button { min-width: 360px; margin: 0; font-size: 13px; - border: 1px solid var(--line); + border: 0; border-radius: 7px; } .prose thead { @@ -357,7 +357,7 @@ button { min-width: 100px; } .prose img { - border: 1px solid var(--line); + border: 0; border-radius: 8px; padding: 12px; background: #fafbf8; @@ -366,7 +366,7 @@ button { .callout { display: flex; gap: 12px; - border: 1px solid #e2e9e0; + border: 0; padding: 15px 18px; border-radius: 7px; background: #f8faf6; @@ -392,7 +392,7 @@ button { font-size: 16px; } .code-block { - border: 1px solid #e1e7e0; + border: 0; border-radius: 8px; overflow: hidden; background: #f9fbf7; @@ -404,7 +404,7 @@ button { justify-content: space-between; align-items: center; padding: 10px 15px; - border-bottom: 1px solid #e7ece4; + border: 0; color: #879781; font: 10px ui-monospace, @@ -415,7 +415,7 @@ button { } .code-toolbar button { padding: 2px 6px; - border: 1px solid #dce5d6; + border: 0; border-radius: 4px; font-size: 11px; min-height: 28px; @@ -472,13 +472,13 @@ button { margin-bottom: 18px; } .toc nav { - border-left: 1px solid var(--line); + border: 0; } .toc nav a { display: block; padding: 7px 0 7px 15px; margin-left: -1px; - border-left: 1px solid transparent; + border: 0; color: #69766b; line-height: 1.6; } @@ -494,7 +494,7 @@ button { display: flex; gap: 15px; justify-content: space-between; - border-top: 1px solid var(--line); + border: 0; padding: 25px 0; margin-top: 45px; font-size: 10px; @@ -510,7 +510,7 @@ button { margin: 10px 0 45px; } .pagination > a { - border: 1px solid var(--line); + border: 0; padding: 18px; border-radius: 7px; } @@ -533,7 +533,7 @@ button { } .search-dialog { padding: 0; - border: 1px solid var(--line); + border: 0; border-radius: 12px; width: min(570px, calc(100vw - 32px)); max-height: 80dvh; @@ -550,7 +550,7 @@ button { align-items: center; gap: 13px; padding: 17px; - border-bottom: 1px solid var(--line); + border: 0; } .search-input-row > span { font-size: 25px; @@ -564,7 +564,7 @@ button { } .search-input-row button { font-size: 10px; - border: 1px solid var(--line); + border: 0; border-radius: 4px; padding: 3px 5px; } @@ -578,7 +578,7 @@ button { } .search-result { display: block; - border: 1px solid transparent; + border: 0; padding: 13px; border-radius: 7px; } @@ -612,7 +612,7 @@ button { } .search-footer { padding: 12px 20px; - border-top: 1px solid var(--line); + border: 0; font-size: 10px; color: #9da797; display: flex; @@ -656,7 +656,7 @@ button { .mobile-toc { display: block; margin: 18px 0; - border: 1px solid var(--line); + border: 0; border-radius: 6px; padding: 10px 15px; font-size: 12px; @@ -699,7 +699,7 @@ button { top: 62px; z-index: 25; background: #fff; - border-bottom: 1px solid var(--line); + border: 0; } .mobile-bar button { display: flex; @@ -716,7 +716,7 @@ button { .mobile-navigation { display: block; padding: 15px 22px; - border-bottom: 1px solid var(--line); + border: 0; max-height: 65dvh; overflow: auto; } @@ -833,6 +833,7 @@ button { *, *::before, *::after { + animation: none !important; transition: none !important; } } @@ -852,7 +853,7 @@ button { .table-scroll { overflow-x: auto; - border: 1px solid var(--line); + border: 0; border-radius: 7px; margin: 24px 0; } @@ -981,7 +982,7 @@ button { .auth-card { width: min(390px, calc(100vw - 40px)); padding: 36px; - border: 1px solid var(--line); + border: 0; border-radius: 12px; background: white; box-shadow: 0 15px 45px #34523c06; @@ -1007,7 +1008,7 @@ button { .auth-card input { width: 100%; padding: 13px; - border: 1px solid #d8e2d7; + border: 0; border-radius: 6px; font: 24px ui-monospace, @@ -1060,7 +1061,7 @@ button { .library-intro p { margin: 0; font-size: 16px; color: var(--muted); } .featured-section h2, .library-section h2 { font-size: 19px; font-weight: 550; margin: 0 0 22px; } .featured-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); gap: 20px; } -.featured-link { position: relative; border: 1px solid var(--line); border-radius: 8px; padding: 26px; } +.featured-link { position: relative; border: 0; border-radius: 8px; padding: 26px; } .featured-link:hover { border-color: #a4b7aa; background: #fafcfb; } .featured-link > svg:first-child { color: var(--green); margin-bottom: 18px; } .featured-link h3 { font-size: 18px; font-weight: 550; line-height: 1.6; margin: 0 0 10px; padding-right: 18px; } @@ -1071,11 +1072,11 @@ button { .collection-filters { display: flex; gap: 6px; flex-wrap: wrap; } .collection-filters button { font-size: 14px; padding: 8px 12px; border-radius: 5px; color: var(--muted); } .collection-filters button[aria-pressed="true"] { background: #eef4f0; color: var(--green); } -.library-search { display: flex; align-items: center; gap: 8px; color: var(--muted); border: 1px solid var(--line); border-radius: 6px; padding: 9px 12px; } +.library-search { display: flex; align-items: center; gap: 8px; color: var(--muted); border: 0; border-radius: 6px; padding: 9px 12px; } .library-search input { min-width: 0; width: 145px; outline: 0; font-size: 14px; } .library-search:focus-within { border-color: var(--green); } -.library-list { padding: 0; margin: 0; list-style: none; border-top: 1px solid var(--line); } -.library-list li { border-bottom: 1px solid var(--line); } +.library-list { padding: 0; margin: 0; list-style: none; border: 0; } +.library-list li { border: 0; } .library-list a { display: flex; align-items: center; gap: 18px; padding: 20px 4px; } .library-list a:hover { color: var(--green); background: #fafcfb; } .library-row-title { flex: 1; font-size: 15px; line-height: 1.7; } @@ -1105,3 +1106,159 @@ button { .site-footer { font-size: 13px; } } .search-status { padding: 12px 20px 0; font-size: 13px; color: var(--muted); } + +/* Shared typography; each document keeps its own identity and reading context. */ +:root { --ink: #202724; --muted: #707873; --green: #27745b; --accent-wash: #e9f2ec; --ease: cubic-bezier(.2,.7,.2,1); } +body { background: #fdfefd; } +svg { flex-shrink: 0; } +[data-tone="blue"] { --green: #456da2; --accent-wash: #eaf0f9; } +[data-tone="violet"] { --green: #79609e; --accent-wash: #f1ecf8; } +[data-tone="amber"] { --green: #927346; --accent-wash: #f6f0e6; } +.site-header { height: 64px; padding: 0 30px; gap: 32px; border-bottom: 1px solid #edf0ee; background: #fdfefded; backdrop-filter: blur(18px); } +.brand { gap: 10px; } +.brand-mark i { background: linear-gradient(160deg,#80b69a,#27745b); } +.docs-badge { color: #819087; padding: 0; font-size: 13px; } +.top-nav { align-self: stretch; align-items: stretch; gap: 26px; margin-left: 16px; } +.top-nav a, .top-nav a:nth-child(2) { display: flex; align-items: center; position: relative; white-space: nowrap; transition: color 180ms; } +.top-nav a::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2px; background: var(--green); transform: scaleX(0); transform-origin: left; transition: transform 220ms var(--ease); } +.top-nav a:hover, .top-nav a[aria-current="page"] { color: var(--ink); } +.top-nav a[aria-current="page"]::after { transform: scaleX(1); } +.search-trigger { margin-left: auto; width: 218px; padding: 8px 12px; background: #f0f3f1; color: #768078; transition: background 180ms,box-shadow 180ms; } +.search-trigger:hover { background: #eaf0ec; box-shadow: 0 3px 16px #1c3c2810; } +.search-trigger span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } +.search-trigger kbd { background: transparent; font-size: 11px; white-space: nowrap; } +.logout-button { font-size: 12px; } +.home-layout { grid-template-columns: 272px minmax(0,1fr); } +.reading-layout { grid-template-columns: 272px minmax(0,1fr) 222px; } +.sidebar { padding: 30px 26px 40px; height: calc(100dvh - 64px); top: 64px; scrollbar-width: thin; scrollbar-color: #d9e2dc transparent; } +.nav-back { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; color: #8a948e; margin: 0 8px 28px; transition: color 160ms; } +.nav-back:hover { color: var(--green); } +.collection-identity { display: flex; gap: 12px; align-items: center; color: var(--green); font-size: 16px; font-weight: 550; margin: 0 8px 28px; line-height: 1.5; } +.collection-nav-link { display: flex; align-items: center; gap: 12px; padding: 12px 10px; margin-bottom: 6px; border-radius: 7px; color: #647169; transition: background 180ms,color 180ms; } +.collection-nav-link svg:last-child { margin-left: auto; opacity: 0; transform: translateX(-3px); transition: opacity 180ms,transform 180ms; } +.collection-nav-link:hover { background: #f0f5f1; color: var(--green); } +.collection-nav-link:hover svg:last-child { opacity: 1; transform: none; } +.nav-group { margin-top: 28px; } +.nav-group > p { font-size: 12px; font-weight: 500; color: #909991; margin: 0 10px 10px; } +.nav-item { position: relative; padding: 8px 10px; margin: 2px 0; border-radius: 5px; line-height: 1.65; color: #68756d; transition: color 160ms,background 160ms; } +.nav-item:hover { color: var(--green); background: color-mix(in srgb,var(--accent-wash) 45%,transparent); } +.nav-item[aria-current="page"] { color: var(--green); background: linear-gradient(90deg,var(--accent-wash),transparent); } +.nav-item[aria-current="page"]::before { content: ""; position: absolute; left: -3px; top: 10px; bottom: 10px; width: 2px; border-radius: 2px; background: var(--green); } +.home-main { max-width: 1160px; } +.library-intro { position: relative; padding: 68px 0 46px; isolation: isolate; } +.library-intro::before { content: ""; position: absolute; z-index: -1; width: 420px; max-width: 100%; height: 240px; top: 0; left: -30px; background: radial-gradient(ellipse at 30% 30%,#eaf3ed99,transparent 70%); pointer-events: none; } +.library-intro h1 { font-weight: 550; } +.featured-grid { grid-template-columns: repeat(auto-fit,minmax(min(100%,220px),1fr)); } +.featured-link { display: flex; flex-direction: column; padding: 24px; border-radius: 12px; background: linear-gradient(145deg,color-mix(in srgb,var(--accent-wash) 65%,white),#fbfcfb 65%); transition: transform 240ms var(--ease),box-shadow 240ms var(--ease); } +.featured-link:hover { background: linear-gradient(145deg,var(--accent-wash),#fbfcfb 80%); transform: translateY(-4px); box-shadow: 0 14px 36px #1d35220d; } +.collection-art { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 12px; color: var(--green); background: linear-gradient(145deg,#ffffffc9,var(--accent-wash)); margin-bottom: 26px; box-shadow: 0 2px 8px #25483705; transition: transform 240ms var(--ease); } +.featured-link:hover .collection-art { transform: translateY(-2px) rotate(-4deg); } +.featured-link h3 { font-size: 19px; margin: 0 0 12px; padding: 0; } +.featured-link p { flex: 1; } +.collection-entry { display: flex; align-items: center; justify-content: space-between; margin-top: 28px; color: var(--green); font-size: 13px; } +.collection-entry svg { transition: transform 200ms var(--ease); } +.featured-link:hover .collection-entry svg { transform: translateX(4px); } +.collection-filters { gap: 4px; } +.collection-filters button { font-size: 13px; transition: background 180ms,color 180ms; } +.collection-filters button:hover { color: var(--green); background: #f0f4f1; } +.collection-filters button[aria-pressed="true"] { background: linear-gradient(120deg,var(--accent-wash),#f2f6f3); } +.library-search { background: #f1f4f2; } +.library-search:focus-within { box-shadow: 0 0 0 2px var(--accent-wash); } +.library-list a { padding: 19px 14px; border-radius: 7px; transition: background 180ms,color 180ms; } +.library-list a:hover { background: #f2f6f3; } +.library-row-title { font-size: 14px; } +.library-row-group { font-size: 12px; color: #929b95; } +.library-list svg { transition: transform 180ms; } +.library-list a:hover svg { transform: translateX(3px); } +.site-footer { padding: 32px 0; font-size: 12px; color: #919a94; } +.reading-main { max-width: 852px; padding: 38px 44px 0; } +.breadcrumb { align-items: center; flex-wrap: wrap; font-size: 12px; margin-bottom: 30px; line-height: 1.7; } +.breadcrumb a { color: #6c7970; } +.breadcrumb > span:not(.draft-badge) { max-width: 100%; } +.draft-badge { font-size: 11px; background: #f7f2e9; } +.prose { line-height: 1.9; --tw-prose-links: var(--green); } +.prose > p:first-of-type { font-size: 17px; color: #788379; } +.prose code:not(pre code) { background: #eef2ef; } +.prose tbody tr, .prose thead tr { border: 0; } +.prose tbody tr:nth-child(even) { background: #f6f8f6; } +.prose thead { background: #eef3ef; } +.prose img { background: transparent; padding: 0; } +.callout { padding: 18px 20px; font-size: 14px; background: linear-gradient(120deg,#eef4ef,#f8faf7); } +.callout-draft { background: linear-gradient(120deg,#f7f1e7,#fcfaf5); } +.code-block { background: #f2f5f2; } +.code-toolbar { font-size: 12px; background: #eaf0eb88; } +.code-toolbar button { font-size: 12px; background: #ffffffaa; transition: background 180ms; } +.code-toolbar button:hover { background: white; } +.toc { top: 64px; height: calc(100dvh - 64px); padding: 44px 24px 30px 12px; font-size: 12px; } +.toc > .eyebrow { font-size: 12px; color: #929c94; } +.toc nav a { padding: 7px 10px; margin: 0; border-radius: 4px; color: #8a968d; transition: color 160ms,background 160ms; } +.toc nav a:hover, .toc nav a.active { color: var(--green); background: linear-gradient(90deg,var(--accent-wash),transparent); } +.article-end { margin-top: 30px; font-size: 12px; } +.pagination > a { background: #f3f6f3; transition: background 180ms,transform 180ms var(--ease); } +.pagination > a:hover { background: var(--accent-wash); transform: translateY(-2px); } +.pagination small { font-size: 12px; } +.search-dialog { background: #fdfefd; box-shadow: 0 24px 90px #192d2330; } +.search-dialog[open] { animation: surface-in 180ms var(--ease); } +.search-dialog::backdrop { backdrop-filter: blur(5px); } +.search-input-row { background: #f3f6f3; padding: 20px; } +.search-result.selected, .search-result:hover { background: var(--accent-wash); } +.search-result > span, .search-result small { font-size: 12px; } +.auth-page { background: radial-gradient(ellipse at 50% 30%,#edf5ef,transparent 60%),#fbfdfb; } +.auth-card { box-shadow: 0 18px 64px #294d340b; } +.auth-card input { background: #eff4ef; } +.auth-card button[type="submit"] { background: linear-gradient(120deg,#3e8969,#2c7057); } +@keyframes surface-in { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: none; } } +.reading-main, .library-intro { animation: surface-in 320ms var(--ease) both; } +@media (max-width: 1200px) { + .site-header { gap: 22px; padding: 0 24px; } + .top-nav { gap: 18px; margin-left: 0; } + .search-trigger { width: 180px; } + .reading-layout { grid-template-columns: 248px minmax(0,1fr); } + .home-layout { grid-template-columns: 248px minmax(0,1fr); } + .sidebar { padding-left: 22px; padding-right: 22px; } + .toc { display: none; } + .home-main { padding: 0 36px; } + .mobile-toc { display: block; background: #f3f6f3; } +} +@media (min-width: 761px) and (max-width: 980px) { + .top-nav { display: flex; gap: 14px; font-size: 12px; } + .search-trigger { width: 36px; height: 34px; padding: 8px; justify-content: center; } + .search-trigger span, .search-trigger kbd { display: none; } + .mobile-bar, .mobile-navigation { display: none; } + .sidebar { display: block; } +} +@media (max-width: 760px) { + html { scroll-padding-top: 165px; } + .site-header { height: auto; padding: 0 20px; column-gap: 18px; row-gap: 0; flex-wrap: wrap; } + .brand { height: 62px; font-size: 15px; } + .top-nav { display: flex; order: 4; width: 100%; overflow-x: auto; gap: 24px; min-width: 0; margin: 0; height: 44px; flex: 0 0 100%; font-size: 13px; scrollbar-width: none; } + .top-nav a { padding: 0; } + .search-trigger { width: 36px; height: 34px; padding: 8px; justify-content: center; } + .search-trigger span, .search-trigger kbd { display: none; } + .home-layout, .reading-layout { grid-template-columns: 1fr; } + .sidebar { display: none; } + .mobile-bar { display: block; top: 106px; background: #fdfefdf0; backdrop-filter: blur(14px); } + .mobile-bar button { font-size: 13px; color: var(--green); } + .mobile-navigation { padding: 20px 22px; background: #f7faf7; box-shadow: 0 16px 24px #26382c08; } + .mobile-navigation .collection-identity, .mobile-navigation .nav-back { margin-bottom: 20px; } + .home-main { padding: 0 24px; } + .library-intro { padding: 40px 0 34px; } + .library-intro h1 { font-size: 32px; } + .reading-main { padding: 26px 24px 0; } + .prose h1 { font-size: 29px; } + .breadcrumb { margin-bottom: 24px; } +} +@media (max-width: 520px) { + .featured-grid { grid-template-columns: 1fr; } + .featured-link { padding: 23px; } + .library-section { padding-top: 38px; } + .library-list a { padding: 16px 8px; } + .prose > p:first-of-type { font-size: 16px; } + .pagination strong { font-size: 13px; } + .site-footer { font-size: 12px; } +} +@media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto; } + *, *::before, *::after { animation: none !important; transition: none !important; } + .featured-link:hover, .featured-link:hover .collection-art, .pagination > a:hover { transform: none; } +} diff --git a/design/verification/collection-ui/README.md b/design/verification/collection-ui/README.md new file mode 100644 index 0000000..c29b9da --- /dev/null +++ b/design/verification/collection-ui/README.md @@ -0,0 +1,21 @@ +# 文档 UI 验收 · 2026-10-28 + +参考 Supabase Database Overview 与 AI Tools 的桌面界面:共用排版,分别维护文档标识、局部目录与顶部上下文。保留 Tabularium 品牌与现有文档路径。 + +## 实现 + +- 顶部切换文档,显示当前选中项。左侧显示当前文档名称、图标、独立目录和返回入口;面包屑连接该文档入口。 +- 文档中心按合集提供入口,不把所有章节铺成卡片。原有筛选、分页和全文搜索保留;阅读页搜索提示显示当前文档范围。 +- 移除导航、卡片、提示、代码、表格和上下篇等区域的多数边框,以留白、浅色表面和轻渐变建立层次。不同文档使用克制的强调色。 +- 入口提供 hover 浮起和箭头反馈;选中项、链接和搜索有过渡;正文及对话框有短暂进入效果。系统设置减少动态效果时关闭动画和过渡。 + +## 验证 + +- ESLint、类型检查、Next.js webpack 生产构建通过。认证单元测试 3/3 通过。 +- 对最终生产构建运行原有 auth-cli verify:全部文档、搜索索引、附件、静态资源、404 和认证边界通过。 +- 浏览器开发预览:1440×900 桌面检查首页、Pretext、语言设计;顶部点击切换后局部目录和搜索提示更新。搜索 nonlocal 返回本合集两篇文章,方向键与 Enter 能打开章节。 +- 390×844 检查正文、顶部横向文档切换和本地目录展开;截图未见正文横向溢出。 +- 下图为开发预览截图,左下角 Next.js 开发按钮不进入生产产物。生产产物已完成 HTTP 验收;额外的生产浏览器截图因原开发标签页关闭后连接失效未保存。 +- 不代表远程 CI 已完成,也不代表 PR 已合并或生产环境已部署。 + +![桌面语言设计文档](desktop-language.jpg) diff --git a/design/verification/collection-ui/desktop-language.jpg b/design/verification/collection-ui/desktop-language.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35a8095e9b89f2a258ea61012caca7499c2e4b8e GIT binary patch literal 68469 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