style(entropy-guide): rebuild on the dashboard's own sidebar + glass-card
Demo images / Build & push demo images (push) Successful in 4m1s

Replaces the bespoke doc-page chrome with the app's real components:
DashboardSidebar shell (256px, rgba(0,0,0,.25) + 18px blur, staggered
nav-item entrance), the AnimatedLogo neode mark with its 20 staggered
squares, sidebar-nav-item + nav-tab-active for section state, and the
Settings wallpaper behind it all.

Every bespoke container (.card/.card-sm/.step/.score-card/.callout-*/
.diagram) is gone — .glass-card from style.css is now the only box on
the page, with layout-only grids inside it.

Scroll-spy lives in nav.js rather than inline, since the node's CSP is
script-src 'self'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
archipelago
2026-08-06 09:30:41 -04:00
co-authored by Claude Fable 5
parent 3e124dd4b3
commit 53753687a5
2 changed files with 857 additions and 951 deletions
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
// Scroll-spy for the sidebar, mirroring the dashboard's nav-tab-active state.
// External file (not inline) because the node's CSP is script-src 'self'.
(function () {
var links = Array.prototype.slice.call(
document.querySelectorAll('.sidebar-nav .sidebar-nav-item[href^="#"]')
)
if (!links.length || !('IntersectionObserver' in window)) return
var sections = links
.map(function (a) { return document.getElementById(a.getAttribute('href').slice(1)) })
.filter(Boolean)
function activate(id) {
links.forEach(function (a) {
a.classList.toggle('nav-tab-active', a.getAttribute('href') === '#' + id)
})
}
var visible = {}
var observer = new IntersectionObserver(function (entries) {
entries.forEach(function (e) { visible[e.target.id] = e.isIntersecting })
// Topmost section currently on screen wins, so the highlight tracks reading position.
for (var i = 0; i < sections.length; i++) {
if (visible[sections[i].id]) { activate(sections[i].id); return }
}
}, { rootMargin: '-10% 0px -70% 0px', threshold: 0 })
sections.forEach(function (s) { observer.observe(s) })
})()