Files
singular-particular-space/DumperCan/UI Style References/solarpunk_style_reference.html
JL Kruger 5422131782 Initial commit — Singular Particular Space v1
Homepage (site/index.html): integration-v14 promoted, Writings section
integrated with 33 pieces clustered by type (stories/essays/miscellany),
Writings welcome lightbox, content frame at 98% opacity.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 12:09:22 +02:00

1507 lines
52 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Solarpunk Design System</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
/* ============================================
SOLARPUNK DESIGN SYSTEM
Hopeful Technology | Ecological Design | Human-Centered
============================================ */
/* ===== 1. CSS RESET ===== */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* ===== 2. CSS VARIABLES ===== */
:root {
/* --- BACKGROUND GRADIENT ---
Dawn to midday progression - optimistic light */
--bg-gradient-1: #1a2f1a; /* Deep forest green */
--bg-gradient-2: #2a3a28; /* Rich earth */
--bg-gradient-3: #2f3f38; /* Stone gray-green */
--bg-gradient-4: #344a42; /* Sage shadow */
/* --- SURFACE BACKGROUNDS --- */
--bg-elevated: rgba(230,240,220,0.05);
--bg-card: rgba(230,240,220,0.10);
--bg-darker: rgba(40,60,40,0.40);
--bg-solid-dark: #1a2f1a;
--bg-solid-light: #f5f9f0;
/* --- BORDERS --- */
--border-color: #7a9270;
--border-width: 1.5px;
--border-width-thick: 3px;
/* --- BORDER RADIUS ---
Organic curves, flowing not geometric */
--radius-sm: 6px;
--radius-md: 10px;
--radius-lg: 16px;
--radius-xl: 24px;
--radius-organic: 12px 18px 14px 20px; /* Asymmetric organic */
/* --- COLOR SYSTEM ---
Inspired by photosynthesis, soil, sun, growth */
--flora-1: #6faa5f; /* Living green */
--flora-2: #4a8b3f; /* Deep leaf */
--terra-1: #c67d4a; /* Clay earth */
--terra-2: #a86840; /* Terracotta */
--sol-1: #f4a841; /* Solar gold */
--sol-2: #e89530; /* Warm amber */
--aqua-1: #5ba3a3; /* Water teal */
--aqua-2: #3d8585; /* Deep cyan */
/* --- TYPOGRAPHY COLORS --- */
--text-primary: #e8f0e0;
--text-secondary: #c5d8ba;
--text-muted: #98b088;
--text-dark: #2a3a28;
--text-h1-gradient: linear-gradient(135deg, #6faa5f 0%, #f4a841 50%, #5ba3a3 100%);
--text-h2: #6faa5f;
--text-h3: #f4a841;
--text-h4: #5ba3a3;
--text-h5: #c67d4a;
--text-h6: #e8f0e0;
/* --- BUTTON GRADIENTS --- */
--btn-primary-gradient: linear-gradient(135deg, #6faa5f 0%, #4a8b3f 100%);
--btn-solar-gradient: linear-gradient(135deg, #f4a841 0%, #e89530 100%);
--btn-aqua-gradient: linear-gradient(135deg, #5ba3a3 0%, #3d8585 100%);
/* --- FONTS --- */
--font-header: 'Outfit', sans-serif;
--font-body: 'Space Grotesk', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
}
/* ===== 3. BASE STYLES ===== */
body {
font-family: var(--font-body);
background: linear-gradient(180deg,
var(--bg-gradient-1) 0%,
var(--bg-gradient-2) 33%,
var(--bg-gradient-3) 66%,
var(--bg-gradient-4) 100%);
background-attachment: fixed;
color: var(--text-primary);
line-height: 1.7;
min-height: 100vh;
padding: 20px;
}
/* ===== 4. LAYOUT ===== */
.container {
max-width: 1200px;
margin: 0 auto;
}
.grid {
display: grid;
gap: 1.5rem;
margin-bottom: 1.5rem;
}
.grid-2 { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.grid-3 { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
.grid-4 { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
/* ===== 5. TYPOGRAPHY ===== */
h1 {
font-size: clamp(2rem, 5vw, 3rem);
font-weight: 700;
margin-bottom: 1rem;
background: var(--text-h1-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-family: var(--font-header);
letter-spacing: -0.01em;
}
h2 {
font-size: clamp(1.5rem, 4vw, 2rem);
font-weight: 600;
color: var(--text-h2);
margin-bottom: 1rem;
font-family: var(--font-header);
}
h3 {
font-size: clamp(1.25rem, 3vw, 1.5rem);
font-weight: 600;
color: var(--text-h3);
margin-bottom: 0.75rem;
font-family: var(--font-header);
}
h4 {
font-size: clamp(1.1rem, 2.5vw, 1.25rem);
font-weight: 600;
color: var(--text-h4);
margin-bottom: 0.75rem;
font-family: var(--font-header);
}
h5 {
font-size: 1.1rem;
font-weight: 600;
color: var(--text-h5);
margin-bottom: 0.5rem;
font-family: var(--font-header);
}
h6 {
font-size: 1rem;
font-weight: 500;
color: var(--text-h6);
margin-bottom: 0.5rem;
font-family: var(--font-header);
}
p {
margin-bottom: 1rem;
line-height: 1.75;
}
strong {
color: var(--flora-1);
font-weight: 600;
}
em {
color: var(--sol-1);
font-style: italic;
}
code {
font-family: var(--font-mono);
background: var(--bg-elevated);
padding: 0.25rem 0.5rem;
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-sm);
font-size: 0.9em;
color: var(--aqua-1);
}
pre {
font-family: var(--font-mono);
background: var(--bg-elevated);
padding: 1.25rem;
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-md);
overflow-x: auto;
margin-bottom: 1.5rem;
}
pre code {
background: transparent;
border: none;
padding: 0;
color: var(--text-primary);
}
blockquote {
background: var(--bg-elevated);
border-left: var(--border-width-thick) solid var(--flora-1);
border-radius: var(--radius-sm);
padding: 1.25rem 1.5rem;
margin: 1.5rem 0;
font-style: italic;
color: var(--text-secondary);
}
ul, ol {
margin-bottom: 1.5rem;
margin-left: 2rem;
}
ul li, ol li {
margin-bottom: 0.5rem;
line-height: 1.7;
}
dl {
margin-bottom: 1.5rem;
}
dt {
font-weight: 600;
color: var(--flora-1);
margin-top: 1rem;
}
dd {
margin-left: 2rem;
margin-bottom: 0.5rem;
color: var(--text-secondary);
}
/* ===== BUTTONS ===== */
.btn {
display: inline-block;
padding: 0.875rem 1.75rem;
text-decoration: none;
font-weight: 600;
font-size: 0.9375rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
border: none;
font-family: var(--font-body);
border-radius: var(--radius-md);
position: relative;
overflow: hidden;
}
.btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.2);
transition: left 0.5s;
}
.btn:hover::before {
left: 100%;
}
.btn-primary {
background: var(--btn-primary-gradient);
color: white;
box-shadow: 0 4px 12px rgba(111, 170, 95, 0.3);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(111, 170, 95, 0.4);
}
.btn-solar {
background: var(--btn-solar-gradient);
color: white;
box-shadow: 0 4px 12px rgba(244, 168, 65, 0.3);
}
.btn-solar:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(244, 168, 65, 0.4);
}
.btn-aqua {
background: var(--btn-aqua-gradient);
color: white;
box-shadow: 0 4px 12px rgba(91, 163, 163, 0.3);
}
.btn-aqua:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(91, 163, 163, 0.4);
}
.btn-outline {
background: transparent;
color: var(--text-primary);
border: 2px solid var(--flora-1);
}
.btn-outline:hover {
background: rgba(111, 170, 95, 0.1);
transform: translateY(-2px);
}
/* ===== CARDS & PANELS ===== */
.card {
background: var(--bg-card);
backdrop-filter: blur(10px);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-lg);
padding: 1.75rem;
margin-bottom: 1.5rem;
transition: transform 0.3s, box-shadow 0.3s;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(111, 170, 95, 0.15);
}
.card-elevated {
background: var(--bg-elevated);
backdrop-filter: blur(10px);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-lg);
padding: 1.75rem;
margin-bottom: 1.5rem;
}
.card-organic {
background: var(--bg-card);
backdrop-filter: blur(10px);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-organic);
padding: 1.75rem;
margin-bottom: 1.5rem;
position: relative;
}
.card-organic::before {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: linear-gradient(135deg, var(--flora-1), var(--sol-1), var(--aqua-1));
border-radius: inherit;
opacity: 0;
transition: opacity 0.3s;
z-index: -1;
}
.card-organic:hover::before {
opacity: 0.3;
}
.card-terra {
background: linear-gradient(135deg, rgba(198, 125, 74, 0.1) 0%, rgba(168, 104, 64, 0.1) 100%);
border-color: var(--terra-1);
}
.card-light {
background: var(--bg-solid-light);
color: var(--text-dark);
border: var(--border-width-thick) solid var(--flora-1);
border-radius: var(--radius-xl);
padding: 2rem;
margin-bottom: 1.5rem;
}
.card-light h1,
.card-light h2,
.card-light h3,
.card-light h4,
.card-light h5,
.card-light h6 {
color: var(--bg-gradient-1);
background: none;
-webkit-text-fill-color: var(--bg-gradient-1);
}
.card-light p,
.card-light li,
.card-light td,
.card-light dd {
color: var(--text-dark);
}
.card-light strong {
color: var(--flora-2);
}
.card-light em {
color: var(--terra-2);
}
.card-light code {
background: rgba(111, 170, 95, 0.1);
border-color: var(--flora-1);
color: var(--flora-2);
}
/* ===== TABLES ===== */
table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-md);
margin-bottom: 1.5rem;
background: var(--bg-card);
overflow: hidden;
}
thead {
background: linear-gradient(135deg, rgba(111, 170, 95, 0.2), rgba(74, 139, 63, 0.2));
}
th {
padding: 1rem;
text-align: left;
font-weight: 600;
border-bottom: var(--border-width) solid var(--border-color);
color: var(--flora-1);
}
td {
padding: 0.875rem 1rem;
border-bottom: var(--border-width) solid rgba(122, 146, 112, 0.2);
}
tbody tr:last-child td {
border-bottom: none;
}
tbody tr:hover {
background: rgba(111, 170, 95, 0.08);
}
tfoot {
background: var(--bg-elevated);
font-weight: 500;
}
tfoot td {
border-top: var(--border-width) solid var(--border-color);
border-bottom: none;
}
/* ===== FORMS ===== */
.form-group {
margin-bottom: 1.5rem;
}
label {
display: block;
margin-bottom: 0.5rem;
font-weight: 500;
color: var(--text-secondary);
font-size: 0.9375rem;
}
input[type="text"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="url"],
input[type="tel"],
input[type="search"],
input[type="date"],
input[type="time"],
textarea,
select {
width: 100%;
padding: 0.75rem 1rem;
background: var(--bg-elevated);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-family: var(--font-body);
font-size: 1rem;
transition: all 0.3s;
}
input:focus,
textarea:focus,
select:focus {
outline: none;
border-color: var(--flora-1);
box-shadow: 0 0 0 3px rgba(111, 170, 95, 0.2);
background: var(--bg-card);
}
textarea {
min-height: 120px;
resize: vertical;
}
input[type="checkbox"],
input[type="radio"] {
width: 1.25rem;
height: 1.25rem;
margin-right: 0.5rem;
cursor: pointer;
accent-color: var(--flora-1);
}
.checkbox-group,
.radio-group {
display: flex;
align-items: center;
margin-bottom: 0.75rem;
}
/* ===== PROGRESS BARS ===== */
progress {
-webkit-appearance: none;
appearance: none;
width: 100%;
height: 1rem;
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-md);
margin-bottom: 1rem;
}
progress::-webkit-progress-bar {
background-color: var(--bg-elevated);
border-radius: var(--radius-md);
}
progress::-webkit-progress-value {
background: var(--btn-primary-gradient);
border-radius: var(--radius-md);
transition: width 0.3s;
}
progress::-moz-progress-bar {
background: var(--btn-primary-gradient);
border-radius: var(--radius-md);
}
.progress-wrapper {
position: relative;
margin-bottom: 1.5rem;
}
.progress-label {
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
font-size: 0.9375rem;
color: var(--text-secondary);
}
.progress-custom {
width: 100%;
height: 1rem;
background: var(--bg-elevated);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-md);
position: relative;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: var(--btn-primary-gradient);
border-radius: var(--radius-sm);
transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
}
.progress-fill::after {
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
animation: shimmer 2s infinite;
}
@keyframes shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
/* ===== BADGES & PILLS ===== */
.badge {
display: inline-block;
padding: 0.375rem 0.875rem;
font-size: 0.8125rem;
font-weight: 600;
border: var(--border-width) solid;
border-radius: 20px;
letter-spacing: 0.02em;
}
.badge-flora {
background: rgba(111, 170, 95, 0.15);
color: var(--flora-1);
border-color: var(--flora-1);
}
.badge-sol {
background: rgba(244, 168, 65, 0.15);
color: var(--sol-1);
border-color: var(--sol-1);
}
.badge-aqua {
background: rgba(91, 163, 163, 0.15);
color: var(--aqua-1);
border-color: var(--aqua-1);
}
.badge-terra {
background: rgba(198, 125, 74, 0.15);
color: var(--terra-1);
border-color: var(--terra-1);
}
/* ===== TABS ===== */
.tabs {
margin-bottom: 1.5rem;
}
.tab-buttons {
display: flex;
gap: 0.5rem;
margin-bottom: 0;
border-bottom: 2px solid var(--border-color);
}
.tab-button {
padding: 0.875rem 1.5rem;
background: transparent;
border: none;
border-bottom: 3px solid transparent;
color: var(--text-secondary);
cursor: pointer;
font-family: var(--font-body);
font-weight: 500;
font-size: 1rem;
transition: all 0.3s;
margin-bottom: -2px;
border-radius: var(--radius-sm) var(--radius-sm) 0 0;
}
.tab-button:hover {
color: var(--text-primary);
background: rgba(111, 170, 95, 0.05);
}
.tab-button.active {
color: var(--flora-1);
border-bottom-color: var(--flora-1);
background: rgba(111, 170, 95, 0.1);
}
.tab-content {
display: none;
padding: 1.75rem;
background: var(--bg-card);
border: var(--border-width) solid var(--border-color);
border-top: none;
border-radius: 0 0 var(--radius-lg) var(--radius-lg);
}
.tab-content.active {
display: block;
}
/* ===== TIMELINE ===== */
.timeline {
position: relative;
padding: 2rem 0;
overflow: hidden;
}
.timeline::before {
content: '';
position: absolute;
left: 50%;
top: 0;
bottom: 0;
width: 3px;
background: linear-gradient(180deg, var(--flora-1), var(--sol-1), var(--aqua-1));
transform: translateX(-50%);
border-radius: 2px;
}
.timeline-item {
position: relative;
margin-bottom: 3rem;
display: flex;
align-items: center;
width: 100%;
}
.timeline-item:nth-child(odd) {
flex-direction: row;
justify-content: flex-start;
}
.timeline-item:nth-child(even) {
flex-direction: row-reverse;
justify-content: flex-start;
}
.timeline-content {
width: 45%;
max-width: 45%;
padding: 1.5rem;
background: var(--bg-card);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-lg);
word-wrap: break-word;
overflow-wrap: break-word;
}
.timeline-marker {
position: absolute;
left: 50%;
width: 16px;
height: 16px;
background: var(--flora-1);
border: 3px solid var(--bg-gradient-1);
border-radius: 50%;
transform: translateX(-50%);
z-index: 1;
box-shadow: 0 0 0 4px rgba(111, 170, 95, 0.2);
}
.timeline-date {
font-size: 0.875rem;
color: var(--sol-1);
font-weight: 600;
margin-bottom: 0.5rem;
}
/* ===== ALERT BOXES ===== */
.alert {
padding: 1.25rem 1.5rem;
margin-bottom: 1.5rem;
border: var(--border-width) solid;
border-radius: var(--radius-md);
border-left-width: var(--border-width-thick);
}
.alert-flora {
background: rgba(111, 170, 95, 0.1);
border-color: var(--flora-1);
}
.alert-sol {
background: rgba(244, 168, 65, 0.1);
border-color: var(--sol-1);
}
.alert-aqua {
background: rgba(91, 163, 163, 0.1);
border-color: var(--aqua-1);
}
.alert-terra {
background: rgba(198, 125, 74, 0.1);
border-color: var(--terra-1);
}
/* ===== STAT CARDS ===== */
.stat-card {
background: var(--bg-card);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-lg);
padding: 1.75rem;
text-align: center;
transition: transform 0.3s;
}
.stat-card:hover {
transform: translateY(-4px);
}
.stat-value {
font-size: 2.5rem;
font-weight: 700;
background: var(--text-h1-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 0.5rem;
font-family: var(--font-header);
}
.stat-label {
font-size: 0.9375rem;
color: var(--text-secondary);
}
/* ===== CHART ELEMENTS ===== */
.chart-bar {
margin-bottom: 1.25rem;
}
.chart-label {
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
font-size: 0.9375rem;
color: var(--text-secondary);
}
.chart-bar-fill {
height: 1rem;
background: var(--bg-elevated);
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-md);
position: relative;
overflow: hidden;
}
.chart-bar-value {
height: 100%;
background: var(--btn-primary-gradient);
border-radius: var(--radius-sm);
transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
/* ===== HEADER ===== */
.header-solid {
background: linear-gradient(135deg, var(--bg-gradient-1), var(--bg-gradient-2));
color: var(--text-primary);
padding: 2.5rem 2rem;
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-xl);
margin-bottom: 2rem;
position: relative;
overflow: hidden;
}
.header-solid::before {
content: '';
position: absolute;
top: -50%;
right: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(111, 170, 95, 0.1) 0%, transparent 70%);
animation: pulse 4s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); opacity: 0.5; }
50% { transform: scale(1.1); opacity: 0.8; }
}
.header-solid h1,
.header-solid h2,
.header-solid h3 {
position: relative;
z-index: 1;
}
/* ===== SECTION DIVIDERS ===== */
.section-divider {
height: 2px;
background: linear-gradient(90deg, transparent, var(--flora-1), transparent);
margin: 3rem 0;
border: none;
border-radius: 2px;
}
/* ===== COLOR SWATCHES ===== */
.color-swatches {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 1rem;
margin-bottom: 1.5rem;
}
.color-swatch {
aspect-ratio: 1;
border: var(--border-width) solid var(--border-color);
border-radius: var(--radius-md);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 0.8125rem;
font-family: var(--font-mono);
text-align: center;
padding: 0.75rem;
}
/* ===== UTILITY CLASSES ===== */
.text-center { text-align: center; }
.text-right { text-align: right; }
.mb-1 { margin-bottom: 1rem; }
.mb-2 { margin-bottom: 2rem; }
.mb-3 { margin-bottom: 3rem; }
.mt-1 { margin-top: 1rem; }
.mt-2 { margin-top: 2rem; }
.mt-3 { margin-top: 3rem; }
/* ===== RESPONSIVE ===== */
@media (max-width: 768px) {
.timeline::before {
left: 0;
}
.timeline-item {
flex-direction: column !important;
align-items: flex-start;
}
.timeline-content {
width: 100%;
margin-left: 2rem;
}
.timeline-marker {
left: 0;
transform: translateX(0);
}
.grid-2,
.grid-3,
.grid-4 {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<!-- MAIN HEADER -->
<div class="header-solid text-center">
<h1>Solarpunk Design System</h1>
<p style="font-size: 1.125rem; margin-top: 0.75rem; color: var(--text-secondary);">Technology in Harmony with Nature | Optimistic Future Design</p>
</div>
<!-- PHILOSOPHY -->
<section class="mb-3">
<div class="card-light">
<h2>Design Philosophy</h2>
<p>This system embodies solarpunk principles: <strong>technology should enhance rather than replace nature</strong>. Every element reflects growth, sustainability, and hopeful human-centered progress. Unlike dystopian or antiseptic corporate aesthetics, this design celebrates <em>optimism through informed action</em>.</p>
<h3>Core Principles</h3>
<ul>
<li><strong>Flora (Growth):</strong> Living greens represent continuous development and natural systems</li>
<li><strong>Sol (Energy):</strong> Solar golds symbolize renewable power and enlightened progress</li>
<li><strong>Aqua (Flow):</strong> Water teals embody adaptability and resource consciousness</li>
<li><strong>Terra (Foundation):</strong> Earth tones ground the system in material reality</li>
</ul>
</div>
</section>
<hr class="section-divider">
<!-- COLOR SYSTEM -->
<section class="mb-3">
<h2>Photosynthetic Color Palette</h2>
<div class="color-swatches">
<div class="color-swatch" style="background: #6faa5f;">
<strong>Flora 1</strong>
<span>#6faa5f</span>
</div>
<div class="color-swatch" style="background: #4a8b3f;">
<strong>Flora 2</strong>
<span>#4a8b3f</span>
</div>
<div class="color-swatch" style="background: #c67d4a;">
<strong>Terra 1</strong>
<span>#c67d4a</span>
</div>
<div class="color-swatch" style="background: #a86840;">
<strong>Terra 2</strong>
<span>#a86840</span>
</div>
<div class="color-swatch" style="background: #f4a841;">
<strong>Sol 1</strong>
<span>#f4a841</span>
</div>
<div class="color-swatch" style="background: #e89530;">
<strong>Sol 2</strong>
<span>#e89530</span>
</div>
<div class="color-swatch" style="background: #5ba3a3;">
<strong>Aqua 1</strong>
<span>#5ba3a3</span>
</div>
<div class="color-swatch" style="background: #3d8585;">
<strong>Aqua 2</strong>
<span>#3d8585</span>
</div>
</div>
<p style="color: var(--text-secondary); font-size: 0.9375rem;">Inspired by photosynthesis, soil composition, sunlight spectrum, and water cycles. Each color family serves distinct semantic purposes while maintaining natural harmony.</p>
</section>
<hr class="section-divider">
<!-- TYPOGRAPHY -->
<section class="mb-3">
<h2>Typography System</h2>
<div class="card">
<h1>H1: Tri-Color Nature Gradient</h1>
<h2>H2: Flora Green (Growth)</h2>
<h3>H3: Solar Gold (Energy)</h3>
<h4>H4: Aqua Teal (Flow)</h4>
<h5>H5: Terra Clay (Foundation)</h5>
<h6>H6: Light Primary</h6>
<p>Body text uses Space Grotesk with generous 1.75 line-height for accessibility and reading comfort. <strong>Strong emphasis</strong> uses living green, while <em>emphasis</em> uses solar gold. Outfit serves as the header font—geometric but warm, technical but human.</p>
<p>Inline <code>code snippets</code> use aqua coloring to represent flowing information.</p>
<pre><code>// Code reflects natural growth patterns
function regenerate(ecosystem) {
return ecosystem.nurture().flourish();
}</code></pre>
<blockquote>
Blockquotes use flora green borders. "The future is not something we enter. The future is something we create." - Leonard I. Sweet
</blockquote>
</div>
</section>
<hr class="section-divider">
<!-- BUTTONS -->
<section class="mb-3">
<h2>Action Components</h2>
<div class="card">
<h3>Primary (Flora Growth)</h3>
<button class="btn btn-primary">Cultivate Action</button>
<h3 class="mt-2">Solar (Energy)</h3>
<button class="btn btn-solar">Generate Power</button>
<h3 class="mt-2">Aqua (Flow)</h3>
<button class="btn btn-aqua">Adapt System</button>
<h3 class="mt-2">Outline (Transparent)</h3>
<button class="btn btn-outline">Secondary Path</button>
<p class="mt-2" style="font-size: 0.9375rem; color: var(--text-secondary);">Buttons feature shimmer effect on hover, suggesting living energy. Organic 10px corners balance technical precision with natural flow.</p>
</div>
</section>
<hr class="section-divider">
<!-- CARDS -->
<section class="mb-3">
<h2>Card Components</h2>
<div class="grid grid-3">
<div class="card">
<h3>Standard Growth</h3>
<p>Default cards lift on hover, suggesting organic vitality and responsive design.</p>
</div>
<div class="card-organic">
<h3>Organic Form</h3>
<p>Asymmetric corners (12px/18px/14px/20px) mimic natural growth patterns. Gradient border appears on hover.</p>
</div>
<div class="card-terra">
<h5>Terra Foundation</h5>
<p>Earth-toned gradient background for grounded, material content.</p>
</div>
</div>
</section>
<hr class="section-divider">
<!-- TABLES -->
<section class="mb-3">
<h2>Data Structures</h2>
<div class="card">
<table>
<thead>
<tr>
<th>Resource</th>
<th>Renewable %</th>
<th>Efficiency</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>Solar Capacity</td>
<td>94%</td>
<td>High</td>
<td><span class="badge badge-flora">Growing</span></td>
</tr>
<tr>
<td>Wind Integration</td>
<td>87%</td>
<td>Optimal</td>
<td><span class="badge badge-aqua">Active</span></td>
</tr>
<tr>
<td>Hydro Systems</td>
<td>78%</td>
<td>Stable</td>
<td><span class="badge badge-sol">Monitoring</span></td>
</tr>
<tr>
<td>Biofuel Research</td>
<td>45%</td>
<td>Developing</td>
<td><span class="badge badge-terra">Testing</span></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2"><strong>Total Renewable</strong></td>
<td colspan="2"><strong>76% System-wide</strong></td>
</tr>
</tfoot>
</table>
</div>
</section>
<hr class="section-divider">
<!-- FORMS -->
<section class="mb-3">
<h2>Input Systems</h2>
<div class="card">
<div class="form-group">
<label for="project">Project Name</label>
<input type="text" id="project" placeholder="Community Solar Garden">
</div>
<div class="form-group">
<label for="contact">Contact Email</label>
<input type="email" id="contact" placeholder="coordinator@solarpunk.coop">
</div>
<div class="form-group">
<label for="scope">Project Scope</label>
<select id="scope">
<option>Neighborhood Scale</option>
<option>District Scale</option>
<option>City Scale</option>
<option>Bioregional Scale</option>
</select>
</div>
<div class="form-group">
<label for="vision">Vision Statement</label>
<textarea id="vision" placeholder="Describe your regenerative vision..."></textarea>
</div>
<div class="form-group">
<label>Priority Systems</label>
<div class="checkbox-group">
<input type="checkbox" id="energy" checked>
<label for="energy" style="display: inline; margin: 0;">Energy Democracy</label>
</div>
<div class="checkbox-group">
<input type="checkbox" id="food">
<label for="food" style="display: inline; margin: 0;">Food Security</label>
</div>
<div class="checkbox-group">
<input type="checkbox" id="water" checked>
<label for="water" style="display: inline; margin: 0;">Water Commons</label>
</div>
</div>
<button class="btn btn-primary">Submit Proposal</button>
<button class="btn btn-outline" style="margin-left: 0.75rem;">Save Draft</button>
</div>
</section>
<hr class="section-divider">
<!-- PROGRESS -->
<section class="mb-3">
<h2>Growth Indicators</h2>
<div class="card">
<h3>Native Progress Elements</h3>
<progress value="75" max="100"></progress>
<progress value="50" max="100"></progress>
<progress value="90" max="100"></progress>
<h3 class="mt-2">Custom Progress Trackers</h3>
<div class="progress-wrapper">
<div class="progress-label">
<span>Carbon Sequestration</span>
<span>850 tons / 1000 target</span>
</div>
<div class="progress-custom">
<div class="progress-fill" style="width: 85%;"></div>
</div>
</div>
<div class="progress-wrapper">
<div class="progress-label">
<span>Community Adoption</span>
<span>62 households / 100</span>
</div>
<div class="progress-custom">
<div class="progress-fill" style="width: 62%;"></div>
</div>
</div>
<p class="mt-1" style="font-size: 0.9375rem; color: var(--text-secondary);">Progress bars feature shimmer animation suggesting active growth and living systems.</p>
</div>
</section>
<hr class="section-divider">
<!-- BADGES -->
<section class="mb-3">
<h2>Status Markers</h2>
<div class="card">
<p>
<span class="badge badge-flora">Thriving</span>
<span class="badge badge-sol">Powered</span>
<span class="badge badge-aqua">Flowing</span>
<span class="badge badge-terra">Grounded</span>
<span class="badge badge-flora">Regenerating</span>
<span class="badge badge-sol">Active</span>
</p>
<h3 class="mt-2">Semantic Applications</h3>
<p>Status: <span class="badge badge-flora">Online</span> <span class="badge badge-sol">Standby</span> <span class="badge badge-terra">Offline</span></p>
<p>Tiers: <span class="badge badge-aqua">Community</span> <span class="badge badge-sol">Cooperative</span> <span class="badge badge-flora">Commons</span></p>
</div>
</section>
<hr class="section-divider">
<!-- TABS -->
<section class="mb-3">
<h2>Navigation Layers</h2>
<div class="card">
<div class="tabs">
<div class="tab-buttons">
<button class="tab-button active" onclick="switchTab(event, 'tab1')">Ecosystem</button>
<button class="tab-button" onclick="switchTab(event, 'tab2')">Metrics</button>
<button class="tab-button" onclick="switchTab(event, 'tab3')">Community</button>
</div>
<div id="tab1" class="tab-content active">
<h3>Ecosystem Overview</h3>
<p>Integrated systems working in harmony. Tabs use organic rounded corners and flora green indicators for active states.</p>
<button class="btn btn-primary">View Details</button>
</div>
<div id="tab2" class="tab-content">
<h3>Impact Metrics</h3>
<ul>
<li>Energy Independence: 87%</li>
<li>Carbon Drawdown: 2,400 tons/year</li>
<li>Food Sovereignty: 64% local</li>
<li>Community Participation: 340 members</li>
</ul>
</div>
<div id="tab3" class="tab-content">
<h3>Community Network</h3>
<p>Collaborative governance and resource sharing.</p>
<p><span class="badge badge-flora">12 Co-ops</span> <span class="badge badge-aqua">45 Projects</span> <span class="badge badge-sol">340 Members</span></p>
</div>
</div>
</div>
</section>
<hr class="section-divider">
<!-- TIMELINE -->
<section class="mb-3">
<h2>Growth Timeline</h2>
<div class="card">
<div class="timeline">
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Phase 1: Seeding</div>
<h4>Community Formation</h4>
<p>Initial outreach, vision alignment, and resource assessment. Foundation building.</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Phase 2: Sprouting</div>
<h4>Infrastructure Development</h4>
<p>Solar installation, water systems, community gardens. First visible growth.</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Phase 3: Flourishing</div>
<h4>System Integration</h4>
<p>Energy sharing networks, local food production, circular economy loops.</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Phase 4: Regenerating</div>
<h4>Scaling & Replication</h4>
<p>Knowledge sharing, network expansion, supporting new communities.</p>
</div>
</div>
</div>
</div>
</section>
<hr class="section-divider">
<!-- STATS -->
<section class="mb-3">
<h2>Impact Metrics</h2>
<div class="grid grid-4">
<div class="stat-card">
<div class="stat-value">94%</div>
<div class="stat-label">Renewable Energy</div>
</div>
<div class="stat-card">
<div class="stat-value">2.4K</div>
<div class="stat-label">Tons CO₂ Sequestered</div>
</div>
<div class="stat-card">
<div class="stat-value">340</div>
<div class="stat-label">Community Members</div>
</div>
<div class="stat-card">
<div class="stat-value">+76%</div>
<div class="stat-label">Local Food Production</div>
</div>
</div>
</section>
<hr class="section-divider">
<!-- CHARTS -->
<section class="mb-3">
<h2>Growth Visualization</h2>
<div class="card">
<h3>System Health Indicators</h3>
<div class="chart-bar">
<div class="chart-label">
<span>Energy Independence</span>
<span>87/100</span>
</div>
<div class="chart-bar-fill">
<div class="chart-bar-value" style="width: 87%;"></div>
</div>
</div>
<div class="chart-bar">
<div class="chart-label">
<span>Food Sovereignty</span>
<span>64/100</span>
</div>
<div class="chart-bar-fill">
<div class="chart-bar-value" style="width: 64%;"></div>
</div>
</div>
<div class="chart-bar">
<div class="chart-label">
<span>Water Security</span>
<span>78/100</span>
</div>
<div class="chart-bar-fill">
<div class="chart-bar-value" style="width: 78%;"></div>
</div>
</div>
<div class="chart-bar">
<div class="chart-label">
<span>Community Resilience</span>
<span>92/100</span>
</div>
<div class="chart-bar-fill">
<div class="chart-bar-value" style="width: 92%;"></div>
</div>
</div>
</div>
</section>
<hr class="section-divider">
<!-- ALERTS -->
<section class="mb-3">
<h2>System Messages</h2>
<div class="alert alert-flora">
<strong>Growth Update:</strong> Solar array expanded by 12 panels. Community capacity increased to 94kW.
</div>
<div class="alert alert-sol">
<strong>Energy Notice:</strong> Peak generation achieved. Surplus energy available for sharing.
</div>
<div class="alert alert-aqua">
<strong>Water Systems:</strong> Rainwater harvesting targets exceeded. Reserve capacity at 120%.
</div>
<div class="alert alert-terra">
<strong>Maintenance:</strong> Composting system requires attention. Schedule cooperative work day.
</div>
</section>
<hr class="section-divider">
<!-- IMPLEMENTATION -->
<section class="mb-3">
<h2>Implementation Guide</h2>
<div class="card">
<h3>Philosophy → Practice</h3>
<p>This system isn't merely aesthetic—it encodes values. Every rounded corner represents organic growth over rigid geometry. Gradient transitions mirror natural change. Shimmer effects suggest living systems.</p>
<h4>Border Radius Strategy</h4>
<ul>
<li><strong>Small (6px):</strong> Inputs, code blocks—functional elements</li>
<li><strong>Medium (10px):</strong> Buttons, standard components—balanced</li>
<li><strong>Large (16px):</strong> Cards, panels—welcoming spaces</li>
<li><strong>Extra (24px):</strong> Headers, features—significant forms</li>
<li><strong>Organic (asymmetric):</strong> Special cards—natural variation</li>
</ul>
</div>
<div class="grid grid-2 mt-2">
<div class="card">
<h3>Color Semantics</h3>
<p><strong>Flora:</strong> Growth, success, primary actions</p>
<p><strong>Sol:</strong> Energy, attention, active states</p>
<p><strong>Aqua:</strong> Flow, information, adaptability</p>
<p><strong>Terra:</strong> Foundation, stability, warnings</p>
</div>
<div class="card">
<h3>Animation Principles</h3>
<p>Use <code>cubic-bezier(0.4, 0, 0.2, 1)</code> for natural motion. Add shimmer effects to suggest vitality. Transitions should feel organic, never mechanical.</p>
</div>
</div>
<div class="alert alert-flora mt-2">
<h3 style="color: var(--text-primary); margin-bottom: 0.5rem;">Core Constraints</h3>
<ul style="margin-left: 1.5rem; margin-top: 0.5rem;">
<li><strong>Optimism required:</strong> Design choices should suggest hope and possibility</li>
<li><strong>Nature-inspired:</strong> Colors from earth, typography with warmth</li>
<li><strong>Organic curves:</strong> 6-24px range, asymmetric when appropriate</li>
<li><strong>Living animations:</strong> Shimmer, pulse, flow—avoid mechanical motion</li>
<li><strong>Semantic color:</strong> Each palette family has distinct meaning</li>
<li><strong>Community-focused:</strong> Language emphasizes collective action</li>
<li><strong>Fonts:</strong> Outfit (geometric-warm) + Space Grotesk (technical-human)</li>
</ul>
</div>
</section>
<!-- FOOTER -->
<footer class="card-light text-center mt-3" style="padding: 2.5rem;">
<h2>Solarpunk Design System Complete</h2>
<p style="margin-top: 1rem;">Optimistic technology | Ecological harmony | Human-centered progress</p>
<p style="font-size: 0.9375rem; margin-top: 0.75rem; opacity: 0.8;">For the future we choose to build together.</p>
</footer>
</div>
<script>
function switchTab(event, tabId) {
document.querySelectorAll('.tab-button').forEach(btn => {
btn.classList.remove('active');
});
document.querySelectorAll('.tab-content').forEach(content => {
content.classList.remove('active');
});
event.target.classList.add('active');
document.getElementById(tabId).classList.add('active');
}
</script>
</body>
</html>