Remove section dividers, add mycelium energy pulse, brighten page, add Commons Stack Toolkit

- Remove vertical line dividers (.mycelial-divider) from all sections
- Add connection-density-based pulsing glow to mycelial canvas: nodes
  with more nearby connections pulse brighter with organic sine-wave phase
- Brighten background lightness by +0.02 across all scroll color stops
- Add Commons Stack Toolkit glass-card in Legacy section featuring
  Augmented Bonding Curve, Conviction Voting, and Computer-Aided
  Governance (cadCAD)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-02-27 13:44:07 -08:00
parent 0a89dc0c2b
commit 1236bde688
12 changed files with 113 additions and 49 deletions

View File

@ -5,7 +5,7 @@
:root {
/* Scroll-driven dynamic colors (set by JS) */
--scroll-bg: oklch(0.20 0.03 140);
--scroll-bg: oklch(0.22 0.03 140);
--scroll-fg: oklch(0.93 0.02 130);
--scroll-accent: oklch(0.58 0.12 145);
--scroll-depth: 0;

View File

@ -31,8 +31,6 @@ export function AnastomosisSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-4xl mx-auto space-y-16">
<div className="section-reveal space-y-6 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">

View File

@ -22,8 +22,6 @@ export function CompostSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-5xl mx-auto space-y-16">
<div className="section-reveal space-y-4 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">

View File

@ -22,8 +22,6 @@ export function EmergenceSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-5xl mx-auto space-y-16">
<div className="section-reveal space-y-6 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">

View File

@ -50,8 +50,6 @@ export function GoodsMatrixSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-4xl mx-auto space-y-16">
<div className="section-reveal space-y-4 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">

View File

@ -7,8 +7,6 @@ export function LegacySection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-4xl mx-auto space-y-16">
{/* Header */}
<div className="section-reveal space-y-4 text-center">
@ -54,6 +52,61 @@ export function LegacySection() {
root system, the MycoStack grows outward.
</p>
</div>
{/* Commons Stack Toolkit */}
<div className="glass-card p-6 sm:p-8 space-y-4">
<h4 className="font-serif text-lg font-semibold opacity-70">
The Commons Stack Toolkit
</h4>
<div className="grid gap-4 sm:grid-cols-3 text-sm">
<div className="space-y-2">
<div className="font-serif text-base font-semibold">
Augmented Bonding Curve
</div>
<p className="opacity-70 leading-relaxed">
A continuous funding mechanism that aligns contributor and
community incentives. Tokens minted into a bonding curve with
a built-in reserve &mdash; ensuring every project starts with
a funding floor, not a funding cliff.
</p>
</div>
<div className="space-y-2">
<div className="font-serif text-base font-semibold">
Conviction Voting
</div>
<p className="opacity-70 leading-relaxed">
Governance by sustained preference rather than snapshot
majority. Stake accumulates over time &mdash; the longer you
signal support, the stronger your conviction. Proposals pass
through collective patience, not political campaigns.
</p>
</div>
<div className="space-y-2">
<div className="font-serif text-base font-semibold">
Computer-Aided Governance
</div>
<p className="opacity-70 leading-relaxed">
Built on{" "}
<a
href="https://cadcad.org"
target="_blank"
rel="noopener noreferrer"
className="domain-link"
>
cadCAD
</a>
&rsquo;s complex systems simulation framework. Model
governance proposals before deploying them &mdash; test
incentive structures, stress-test token economies, and
simulate emergent behavior in silico.
</p>
</div>
</div>
<p className="text-xs opacity-40 pt-1">
These tools are the root enzymes of the MycoStack &mdash;
breaking down coordination problems into solvable substrates.
</p>
</div>
</div>
{/* Three modes */}

View File

@ -229,25 +229,6 @@ export function MycelialCanvas() {
ctx.fill()
}
// Draw faint connections between nearby hyphae tips
if (ageRatio < 0.5 && hypha.depth < 3) {
for (const other of alive) {
if (other === hypha) continue
const ox = other.x - hypha.x
const oy = other.y - hypha.y
const od = Math.sqrt(ox * ox + oy * oy)
if (od < 80 && od > 10) {
const connOpacity = 0.06 * (1 - od / 80)
ctx.strokeStyle = accent.replace(")", ` / ${connOpacity})`)
ctx.lineWidth = 0.5
ctx.beginPath()
ctx.moveTo(hypha.x, hypha.y)
ctx.lineTo(other.x, other.y)
ctx.stroke()
}
}
}
// Branching
if (
hypha.age > 25 &&
@ -265,6 +246,54 @@ export function MycelialCanvas() {
alive.push(hypha)
}
// Connection lines + energy pulse at interconnected nodes
const time = Date.now() * 0.002
for (let i = 0; i < alive.length; i++) {
const hypha = alive[i]
const ageRatio = hypha.age / hypha.maxAge
if (ageRatio > 0.5 || hypha.depth >= 3) continue
let connectionCount = 0
for (let j = i + 1; j < alive.length; j++) {
const other = alive[j]
const otherAge = other.age / other.maxAge
if (otherAge > 0.5 || other.depth >= 3) continue
const dx = other.x - hypha.x
const dy = other.y - hypha.y
const dist = Math.sqrt(dx * dx + dy * dy)
if (dist < 80 && dist > 10) {
connectionCount++
const connOpacity = 0.06 * (1 - dist / 80)
ctx.strokeStyle = accent.replace(")", ` / ${connOpacity})`)
ctx.lineWidth = 0.5
ctx.beginPath()
ctx.moveTo(hypha.x, hypha.y)
ctx.lineTo(other.x, other.y)
ctx.stroke()
}
}
// Pulse glow at nodes with multiple connections
if (connectionCount > 0) {
const pulse = 0.5 + 0.5 * Math.sin(time + hypha.x * 0.01 + hypha.y * 0.008)
const intensity = Math.min(connectionCount / 4, 1) * pulse
const radius = 6 + connectionCount * 3
const gradient = ctx.createRadialGradient(
hypha.x, hypha.y, 0,
hypha.x, hypha.y, radius
)
gradient.addColorStop(0, accent.replace(")", ` / ${intensity * 0.15})`))
gradient.addColorStop(1, accent.replace(")", ` / 0)`))
ctx.fillStyle = gradient
ctx.beginPath()
ctx.arc(hypha.x, hypha.y, radius, 0, Math.PI * 2)
ctx.fill()
}
}
// Spore particles
const now = Date.now()
// Emit spores near mouse

View File

@ -52,8 +52,6 @@ export function MyceliumSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-4xl mx-auto space-y-20">
<div className="section-reveal space-y-4 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">

View File

@ -180,8 +180,6 @@ export function NetworkMapSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-5xl mx-auto space-y-16">
<div className="section-reveal space-y-4 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">

View File

@ -170,8 +170,6 @@ export function NoFiSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay" style={{ background: "oklch(0.14 0.02 140 / 0.9)" }}>
<div className="mycelial-divider mb-12" />
<div className="max-w-5xl mx-auto space-y-14">
{/* Ecosystem header */}
<div className="section-reveal space-y-6 text-center">
@ -368,8 +366,6 @@ export function NoFiSection() {
</blockquote>
{/* Network Map */}
<div className="mycelial-divider" />
<div className="section-reveal space-y-4 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">
The Network of Networks

View File

@ -8,15 +8,15 @@ import { useEffect } from "react"
// Background stays in the 0.20-0.24 range (dark forest floor).
// Light text throughout. Hue drifts gently through greens and teals.
const COLOR_STOPS: number[][] = [
[0.0, 0.20, 0.03, 140, 0.93, 0.02, 130, 0.58, 0.12, 145], // Hero: mossy green
[0.10, 0.21, 0.035, 135, 0.93, 0.02, 135, 0.56, 0.13, 140], // Legacy: deep fern
[0.18, 0.22, 0.04, 130, 0.92, 0.02, 125, 0.55, 0.14, 130], // Compost: warm moss
[0.30, 0.22, 0.045, 150, 0.93, 0.02, 150, 0.58, 0.15, 155], // Mycelium: forest green
[0.42, 0.21, 0.04, 170, 0.93, 0.02, 170, 0.55, 0.13, 175], // Undernet: deep teal-green
[0.52, 0.22, 0.04, 160, 0.93, 0.02, 155, 0.57, 0.14, 160], // Anastomosis: fern blend
[0.62, 0.21, 0.035, 145, 0.92, 0.02, 140, 0.55, 0.13, 148], // NoFi: returning green
[0.75, 0.23, 0.04, 135, 0.93, 0.02, 130, 0.58, 0.14, 135], // Emergence: bright moss
[0.90, 0.22, 0.035, 145, 0.93, 0.02, 140, 0.56, 0.13, 150], // Network Map: canopy green
[0.0, 0.22, 0.03, 140, 0.93, 0.02, 130, 0.58, 0.12, 145], // Hero: mossy green
[0.10, 0.23, 0.035, 135, 0.93, 0.02, 135, 0.56, 0.13, 140], // Legacy: deep fern
[0.18, 0.24, 0.04, 130, 0.92, 0.02, 125, 0.55, 0.14, 130], // Compost: warm moss
[0.30, 0.24, 0.045, 150, 0.93, 0.02, 150, 0.58, 0.15, 155], // Mycelium: forest green
[0.42, 0.23, 0.04, 170, 0.93, 0.02, 170, 0.55, 0.13, 175], // Undernet: deep teal-green
[0.52, 0.24, 0.04, 160, 0.93, 0.02, 155, 0.57, 0.14, 160], // Anastomosis: fern blend
[0.62, 0.23, 0.035, 145, 0.92, 0.02, 140, 0.55, 0.13, 148], // NoFi: returning green
[0.75, 0.25, 0.04, 135, 0.93, 0.02, 130, 0.58, 0.14, 135], // Emergence: bright moss
[0.90, 0.24, 0.035, 145, 0.93, 0.02, 140, 0.56, 0.13, 150], // Network Map: canopy green
]
function lerp(a: number, b: number, t: number) {

View File

@ -21,8 +21,6 @@ export function UndernetSection() {
return (
<section ref={sectionRef} className="relative py-20 px-6 noise-overlay">
<div className="mycelial-divider mb-12" />
<div className="max-w-5xl mx-auto space-y-16">
<div className="section-reveal space-y-4 text-center">
<h2 className="font-serif text-4xl sm:text-5xl md:text-6xl font-bold">