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>
1507 lines
52 KiB
HTML
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>
|