让文字,落在纸上。
光掠过细小的纤维,留下深浅不一的痕迹。纸张有自己的纹理, 而文字仍然应该清晰、安静地被阅读。
The texture of a page should invite a closer look. A quiet surface, with room for words.
正文粗体 ·
链接与参数 ·
paper & ink
Contents
All widgets available via BrowneUI.css and companion static files. Requires Flask dev server for asset paths.
以你选的浅色纸底为基础,铺开相连的纤维簇,加入层叠水痕、 局部晕圈和不同方向的浅折。 默认参数已用于网站背景,可在这里继续调节对比。
光掠过细小的纤维,留下深浅不一的痕迹。纸张有自己的纹理, 而文字仍然应该清晰、安静地被阅读。
The texture of a page should invite a closer look. A quiet surface, with room for words.
正文粗体 ·
链接与参数 ·
paper & ink
参数会保留在当前浏览器。复制后可发给我,作为确认的版本。
Body paragraph in var(--browne-words). Bold text (font-weight 900 for Unifont). Strong text. Regular weight for comparison.
Ruby annotation: 漢字 日本語
Rainbow gradient text — .rainbow
Lead paragraph via .lead — slightly larger font and looser
line height, used for the opening sentence under a title.
A pull quote via .pull restates one key sentence in italic
with a crimson left border.
| Name | Role | Score |
|---|---|---|
| Alice | Engineer | 92 |
| Bob | Designer | 85 |
| Carol | PM | 78 |
Use inline code for short expressions like const x = 42 or SELECT *.
SELECT name FROM users LIMIT 3;
The best way to predict the future is to invent it. — Alan Kay
.quote for an inline citation style — left border in var(--browne-words), no background.
Explicit style via class: a.link — crimson, dotted underline, highlight on hover.
Inside .markdown-page all anchors inherit link styles automatically:
Plain anchor inside .markdown-page — same style, no extra class needed.
Hidden content revealed on click.
Koke
Hanke
Hover to scrub. CSS in BrowneUI.css (--pct custom property + clip-path); JS in /static/js/ba.js (oscillates when idle, tracks pointer on hover).
BrowneUI Rainbow Animation
Loading▊
The following paragraph uses .fade:
This text is invisible (opacity: 0) but still in the layout flow.
↑ empty space above is the faded paragraph.
Centered text via .center (text-align: center)
Line 1
Line 2
Line 3
Line 4
Energy–mass relation: \(E = mc^2\) Euler's identity: \(e^{i\pi} + 1 = 0\)
Panel 1 content.
Panel 2 content.
Hover over
this term
or
HTML
or
sort(arr)
to see tooltips.
The quick brown fox1 jumped over the lazy dog.2 Footnote references link to the footnotes section below.
[1] The fox's speed has not been independently verified.
[2] The dog's laziness is well-documented in the literature.
| Breakpoint | Behaviour |
|---|---|
| > 900px | .container width 60% (default), #toc visible |
| ≤ 900px | .container 85%, #toc shrinks to 14% / 85% font |
| ≤ 600px | .container 96%, #toc hidden |
| #toc hidden, .container full-width, links underlined black, .fade visible |
Note block — use .note for muted annotations.
Warn block — use .warn for warnings (left border var(--browne-highlight)).
Interactive canvas charts via the Chart.js CDN, boxed in figure.chart
with the BrowneUI palette. Needs the Chart.js script and the init block at page end.
Mermaid flowcharts themed to the palette, wrapped in a fixed-height
.diagram-stage with a .diagram-bar toolbar. Drag to pan,
scroll to zoom; buttons call svg-pan-zoom. Needs the Mermaid + svg-pan-zoom scripts
and the init block at page end.
Node label rules. Labels are 1–4 words max.
Never use \n inside a node to pack in detail — that turns labels into paragraphs
and makes diagrams unreadable. Put detail in edge labels
(-->|"on failure"|), the figcaption, or surrounding prose.
One diagram = one concept; split rather than over-stuffing nodes.
| Bad — node as paragraph | Good — node as label |
|---|---|
["spawn subprocess\nclaude -p prompt\n--output-format stream-json"] |
["spawn subprocess"] + edge label or figcaption for flags |
["check: idle > grace_s\nOR total > hard_max_s?"] |
{"idle timeout?"} — one question, no explanation |
3 things that silently break pan/zoom for ALL diagrams on the page:
—, ellipsis …, curly quotes, etc. inside node or edge labels cause the Mermaid lexer to fail. mermaid.run() rejects; the .then(wirePanZoom) callback never fires; every diagram on the page loses pan/zoom. Use only ASCII: hyphens -, three dots ....-->|"List[Action]"| and ["Result<T>"] confuse the tokenizer because [ and < are node-shape sigils in flowchart grammar. Replace with words: -->|"Actions"|, ["Result of T"].diagram.js wires svgPanZoom to all figure.diagram elements at once after mermaid.run() resolves. Non-active tab panels are display:none, so their SVGs have offsetWidth=0. svgPanZoom may throw; the forEach aborts; diagrams that appear later in DOM order also lose pan/zoom. Never put a figure.diagram inside a .tabs panel. Use separate sections with <h3> headings instead.
flowchart LR
A["input"] --> B["transform"]
B --> C["render"]
C -->|"ok"| D["output"]
C -->|"error"| B
Option A
Key: value
Note: description
Option B
Key: value
Note: description
Option C
Key: value
Note: description
Item Title tag
Short description of this item.
Caption A
Caption B
Caption C
test_wave.ply — colored sine wave (400 pts)
same file, independent orbit controls
empty scene — no data-src
Usage: <div class="vox" data-src="/static/ply/file.ply" data-kind="points"></div> — shared WebGL renderer, orbit controls, lazy-loaded.
black_cat.litematic — auto-loaded via data-src
Usage: <div class="mcrender" data-src="/static/litematic/file.litematic"></div> — lazy-loaded, shared resources, add data-grid="false" to hide grid.
No schematic loaded
No image loaded
No JSON loaded
The schematic viewport uses the MCRender browser loader, which accepts .litematic files.