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:
parent
0a89dc0c2b
commit
1236bde688
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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 — 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 — 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>
|
||||
’s complex systems simulation framework. Model
|
||||
governance proposals before deploying them — 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 —
|
||||
breaking down coordination problems into solvable substrates.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Three modes */}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
Loading…
Reference in New Issue