Skip to content

Commit 3ab2a2e

Browse files
luisleo526claude
andcommitted
fix(docs): rebuild header for doxygen 1.13.2 + polish CSS
Root cause of the empty navigation tree: my header.html was a 1.17-flavoured template applied to the 1.13.2 binary in CI. Two concrete failures from the version mismatch: 1. CDN-only jQuery (3.7.1) lacked the smartmenus + jquery-ui resizable plugins that doxygen's bundled jquery.js carries. That broke menu.js, resize.js, and dynsections.js — which is what was collapsing the side-nav to a project-name stub. 2. The 1.17 template referenced codefolding.js which 1.13.2 doesn't emit, producing a 404 (text/html) script load on every page. Rebuild header.html from the 1.13.2 default `doxygen -w html` output, patch in the doxygen-awesome v2.3.4 scripts after jquery.js loads, keep the light-mode default boot snippet. Drop the CDN jQuery — the bundled jquery.js carries everything. CSS rewrite: tighten side-nav typography + indentation, restyle search box, content max-width 920px, table padding + zebra rows, fragment border-radius, tabbed section underlines, footer chrome. Removes the cramped/uneven look from the previous deploy. build.sh prefers /Volumes/Doxygen/Doxygen.app/Contents/Resources/doxygen when present so local builds match the CI binary version. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent c595005 commit 3ab2a2e

3 files changed

Lines changed: 295 additions & 57 deletions

File tree

docs/_theme/custom.css

Lines changed: 278 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,315 @@
1-
/* PineForge — light overrides on top of doxygen-awesome.
2-
Keep this small; the heavy lifting lives in doxygen-awesome.css. */
1+
/* PineForge custom overrides on top of doxygen-awesome.
2+
* Light is the default theme; .dark-mode block flips it. */
33

44
html {
5-
/* OpenCV-ish accent — calmer than the awesome default red-ish hue */
6-
--primary-color: #1565c0;
7-
--primary-dark-color: #0d47a1;
8-
--primary-light-color: #5e92f3;
9-
--page-foreground-color: #2c2c2c;
5+
/* Calm OpenCV-ish blue accent */
6+
--primary-color: #1565c0;
7+
--primary-dark-color: #0d47a1;
8+
--primary-light-color: #5e92f3;
9+
10+
--page-background-color: #ffffff;
11+
--page-foreground-color: #2c2c2c;
1012
--page-secondary-foreground-color: #5d5d5d;
1113

12-
--side-nav-background: #f7f9fb;
13-
--header-background: #fafbfc;
14-
--header-foreground: var(--page-foreground-color);
14+
--side-nav-background: #f8fafc;
15+
--side-nav-foreground: #1f2328;
16+
--header-background: #ffffff;
17+
--separator-color: #e1e4e8;
18+
19+
--code-background: #f3f5f8;
20+
--fragment-background: #f6f8fa;
21+
--fragment-foreground: #1f2328;
1522

16-
--code-background: #f3f5f8;
17-
--fragment-background: #f3f5f8;
18-
--fragment-foreground: #1f2328;
23+
/* Typography */
24+
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI",
25+
"Helvetica Neue", Helvetica, Arial, sans-serif;
26+
--font-family-monospace: "SF Mono", Menlo, Consolas, "Liberation Mono",
27+
monospace;
28+
--content-line-height: 1.65;
29+
--tree-item-height: 28px;
1930
}
2031

2132
html.dark-mode {
22-
--primary-color: #62a5ff;
23-
--primary-dark-color: #4a90e2;
24-
--primary-light-color: #8cc1ff;
25-
--page-background-color: #14181d;
26-
--page-foreground-color: #d7dde4;
27-
--side-nav-background: #1a1f25;
28-
--code-background: #1a1f25;
29-
--fragment-background: #1a1f25;
30-
--fragment-foreground: #e6edf3;
31-
}
32-
33-
/* Tighten the title bar */
33+
--primary-color: #62a5ff;
34+
--primary-dark-color: #4a90e2;
35+
--primary-light-color: #8cc1ff;
36+
37+
--page-background-color: #14181d;
38+
--page-foreground-color: #d7dde4;
39+
--page-secondary-foreground-color: #9aa3ad;
40+
41+
--side-nav-background: #1a1f25;
42+
--side-nav-foreground: #d7dde4;
43+
--header-background: #14181d;
44+
--separator-color: #2a3038;
45+
46+
--code-background: #1a1f25;
47+
--fragment-background: #1a1f25;
48+
--fragment-foreground: #e6edf3;
49+
}
50+
51+
/* ───────────────────────────── Title bar ────────────────────────── */
3452
#projectname {
3553
font-weight: 600;
54+
font-size: 22px;
3655
letter-spacing: -0.01em;
3756
}
57+
#projectnumber {
58+
font-weight: 400;
59+
color: var(--page-secondary-foreground-color);
60+
font-size: 14px;
61+
}
3862
#projectbrief {
3963
color: var(--page-secondary-foreground-color);
64+
font-size: 13px;
65+
line-height: 1.4;
66+
margin-top: 2px;
67+
}
68+
69+
/* ───────────────────────────── Side nav ─────────────────────────── */
70+
#side-nav {
71+
background: var(--side-nav-background);
72+
border-right: 1px solid var(--separator-color);
73+
}
74+
#nav-tree {
75+
background: transparent;
76+
padding: 8px 0;
4077
font-size: 14px;
4178
}
79+
#nav-tree .item {
80+
line-height: 1.6;
81+
padding: 3px 0;
82+
}
83+
#nav-tree a {
84+
color: var(--side-nav-foreground);
85+
text-decoration: none;
86+
}
87+
#nav-tree a:hover {
88+
color: var(--primary-color);
89+
}
90+
#nav-tree .selected > a,
91+
#nav-tree .selected > a:visited {
92+
color: #ffffff !important;
93+
background: var(--primary-color);
94+
border-radius: 4px;
95+
padding: 2px 6px;
96+
margin-right: 6px;
97+
}
98+
99+
/* Indentation: doxygen uses inline padding-left per depth. Tighten it. */
100+
#nav-tree .children_ul {
101+
padding-left: 14px;
102+
}
103+
104+
/* Resizer handle — slimmer */
105+
.ui-resizable-e {
106+
width: 4px !important;
107+
background: transparent;
108+
}
109+
.ui-resizable-e:hover {
110+
background: var(--primary-light-color);
111+
}
112+
113+
/* ───────────────────────────── Search box ───────────────────────── */
114+
#MSearchBox {
115+
background: var(--page-background-color);
116+
border: 1px solid var(--separator-color);
117+
border-radius: 6px;
118+
padding: 4px 8px;
119+
margin: 8px 12px;
120+
box-shadow: none;
121+
width: calc(100% - 24px) !important;
122+
box-sizing: border-box;
123+
}
124+
#MSearchField {
125+
color: var(--page-foreground-color);
126+
font-size: 13px;
127+
}
128+
#MSearchSelect {
129+
margin-right: 4px;
130+
}
131+
132+
/* Dark-mode toggle button — keep top-right pinned */
133+
#MSearchBox + #MSearchSelectExt,
134+
.tabs2 .alter-theme-button { display: none; }
135+
136+
/* ───────────────────────────── Content area ─────────────────────── */
137+
#doc-content {
138+
background: var(--page-background-color);
139+
}
140+
.contents {
141+
max-width: 920px;
142+
margin: 0 auto;
143+
padding: 24px 40px 48px;
144+
font-size: 15px;
145+
line-height: var(--content-line-height);
146+
}
147+
.contents h1 {
148+
font-size: 28px;
149+
font-weight: 600;
150+
border-bottom: 1px solid var(--separator-color);
151+
padding-bottom: 12px;
152+
margin-top: 0;
153+
margin-bottom: 18px;
154+
}
155+
.contents h2 {
156+
font-size: 22px;
157+
font-weight: 600;
158+
margin-top: 36px;
159+
margin-bottom: 12px;
160+
padding-bottom: 6px;
161+
border-bottom: 1px solid var(--separator-color);
162+
}
163+
.contents h3 {
164+
font-size: 17px;
165+
font-weight: 600;
166+
margin-top: 24px;
167+
margin-bottom: 10px;
168+
}
169+
.contents h4 {
170+
font-size: 15px;
171+
font-weight: 600;
172+
margin-top: 18px;
173+
margin-bottom: 6px;
174+
}
42175

43-
/* Tables — slightly more breathing room, match OpenCV docs */
176+
.contents p {
177+
margin: 12px 0;
178+
}
179+
180+
/* ───────────────────────────── Tables ───────────────────────────── */
181+
.contents table.markdownTable,
182+
.contents table.doxtable {
183+
border-collapse: collapse;
184+
margin: 16px 0;
185+
width: 100%;
186+
font-size: 14px;
187+
}
44188
.contents table.markdownTable th,
45-
.contents table.markdownTable td {
189+
.contents table.markdownTable td,
190+
.contents table.doxtable th,
191+
.contents table.doxtable td {
46192
padding: 8px 12px;
193+
border: 1px solid var(--separator-color);
47194
}
48-
.contents table.markdownTable th {
49-
background: var(--header-background);
195+
.contents table.markdownTable th,
196+
.contents table.doxtable th {
197+
background: var(--side-nav-background);
50198
font-weight: 600;
199+
text-align: left;
200+
}
201+
.contents table.markdownTable tr:nth-child(even),
202+
.contents table.doxtable tr:nth-child(even) {
203+
background: rgba(0, 0, 0, 0.015);
204+
}
205+
html.dark-mode .contents table.markdownTable tr:nth-child(even),
206+
html.dark-mode .contents table.doxtable tr:nth-child(even) {
207+
background: rgba(255, 255, 255, 0.03);
51208
}
52209

53-
/* Code fences inside markdown pages — keep them flush, no ugly border */
210+
/* ───────────────────────────── Code blocks ──────────────────────── */
54211
div.fragment {
212+
background: var(--fragment-background);
213+
border: 1px solid var(--separator-color);
55214
border-radius: 6px;
56-
border: 1px solid var(--separator-color, #e1e4e8);
57215
padding: 12px 16px;
216+
margin: 14px 0;
217+
font-family: var(--font-family-monospace);
218+
font-size: 13px;
219+
line-height: 1.55;
220+
overflow-x: auto;
221+
}
222+
.line {
223+
line-height: 1.55;
58224
}
59225

60-
/* Notes / warnings — calmer, OpenCV-style */
61-
dl.note, dl.warning, dl.attention, dl.todo, dl.bug, dl.deprecated {
226+
/* Inline code */
227+
code, .tt {
228+
background: var(--code-background);
229+
padding: 1px 6px;
230+
border-radius: 4px;
231+
font-family: var(--font-family-monospace);
232+
font-size: 0.9em;
233+
}
234+
235+
/* ───────────────────────────── Notes / warnings ─────────────────── */
236+
dl.note, dl.warning, dl.attention, dl.bug, dl.deprecated, dl.todo {
62237
border-left-width: 4px;
63238
border-radius: 4px;
64239
padding: 12px 16px;
65240
margin: 16px 0;
241+
background: var(--side-nav-background);
66242
}
243+
dl.note { border-left-color: var(--primary-color); }
244+
dl.warning, dl.attention { border-left-color: #d97706; }
67245

68-
/* Tighter sidebar typography */
69-
#side-nav .ui-resizable-e {
70-
background: transparent;
246+
/* ───────────────────────────── Tabbed (custom) ──────────────────── */
247+
.tabbed > ul {
248+
list-style: none;
249+
padding: 0;
250+
margin: 12px 0;
251+
display: flex;
252+
flex-wrap: wrap;
253+
gap: 0;
254+
border-bottom: 1px solid var(--separator-color);
255+
}
256+
.tabbed > ul > li {
257+
margin: 0;
258+
}
259+
.tabbed > ul > li > b.tab-title {
260+
display: inline-block;
261+
padding: 8px 14px;
262+
cursor: default;
263+
color: var(--page-secondary-foreground-color);
264+
font-weight: 500;
265+
border-bottom: 2px solid transparent;
266+
}
267+
.tabbed > ul > li:hover > b.tab-title {
268+
color: var(--primary-color);
269+
border-bottom-color: var(--primary-light-color);
71270
}
72271

73-
/* Top nav search — wider field */
74-
#MSearchBox {
75-
min-width: 220px;
272+
/* ───────────────────────────── Footer ───────────────────────────── */
273+
.navpath ul {
274+
background: var(--side-nav-background);
275+
border-top: 1px solid var(--separator-color);
276+
border-bottom: none;
277+
padding: 6px 16px;
278+
font-size: 12px;
279+
}
280+
.navpath li.footer {
281+
color: var(--page-secondary-foreground-color);
282+
}
283+
284+
/* ───────────────────────────── Misc polish ──────────────────────── */
285+
a, a:visited {
286+
color: var(--primary-color);
287+
text-decoration: none;
288+
}
289+
a:hover {
290+
color: var(--primary-dark-color);
291+
text-decoration: underline;
292+
}
293+
294+
hr {
295+
border: none;
296+
border-top: 1px solid var(--separator-color);
297+
margin: 24px 0;
298+
}
299+
300+
/* Title bar inside the project header — give it real breathing room */
301+
#titlearea {
302+
border-bottom: 1px solid var(--separator-color);
303+
background: var(--header-background);
304+
padding: 12px 16px;
305+
}
306+
307+
/* Drop the doxygen-generated hover smartmenu arrows that don't apply here */
308+
.tabs, .tabs2, .tabs3 {
309+
background-image: none;
310+
background-color: var(--header-background);
311+
border-bottom: 1px solid var(--separator-color);
312+
}
313+
.tablist li {
314+
background-image: none;
76315
}

0 commit comments

Comments
 (0)