feat: replace CTA with registration focus, expand footer, add newsletter & sponsorships
- Replace bottom-of-page waitlist form with registration CTA linking to /apply.html - Add newsletter signup bar (email-only, subscribes to Listmonk) for visitors not ready to register - Expand footer to 3-column grid (Event, Navigate, Community) with sponsorships link - Create sponsorship package (VOTC26-Sponsorship-Package.md) and web page (sponsorships.html) - Add /api/newsletter endpoint for lightweight mailing list signup - Update nav link from "Get involved" to "Register", community partners link updated - Fix listmonk.js to not overwrite existing subscriber names with empty strings - Update apply.html and payment-return.html footers for consistency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
9fdfb29893
commit
3f20e2d9c3
|
|
@ -0,0 +1,290 @@
|
|||
# Valley of the Commons 2026
|
||||
## Sponsorship Package
|
||||
|
||||
---
|
||||
|
||||
# A Four-Week Pop-Up Village on Common Ground
|
||||
|
||||
**August 24 – September 20, 2026 | Commons Hub, Austrian Alps**
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
**Valley of the Commons (VotC)** is a four-week pop-up village in the Austrian Alps where commons practitioners, governance innovators, housing co-op builders, and cosmo-localism researchers come together to prototype life beyond extractive systems. Rooted at Commons Hub in Höllental, this gathering is a living commons — shared in work and study, in making and care, in governance and everyday life.
|
||||
|
||||
### At a Glance
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **Dates** | August 24 – September 20, 2026 |
|
||||
| **Location** | Commons Hub, Höllental, Austrian Alps |
|
||||
| **Expected Attendance** | 60–100 participants |
|
||||
| **Format** | Four-week structured pop-up village |
|
||||
| **Organizers** | Commons Hub |
|
||||
| **Pass Value** | €300/week (€1,200 for full 4 weeks) |
|
||||
|
||||
---
|
||||
|
||||
## Why Sponsor VotC 2026?
|
||||
|
||||
### 1. Reach Engaged Practitioners & Thought Leaders
|
||||
|
||||
VotC attracts a unique audience committed to building alternatives:
|
||||
|
||||
- **Commons Practitioners** — Contributors to cosmo-local production, mutual aid networks, cooperative economies
|
||||
- **Governance Innovators** — DAO architects, participatory governance designers, cooperative founders
|
||||
- **Housing Co-op Builders** — Architects, community land trust leaders, co-housing pioneers
|
||||
- **Academic Researchers** — PhD students, professors, and policy experts on commons, degrowth, and post-capitalism
|
||||
- **Cosmo-localism Practitioners** — Open-source hardware designers, fab lab operators, distributed manufacturing advocates
|
||||
|
||||
### 2. Association with Tangible Impact
|
||||
|
||||
VotC isn't a conference — it's a practice-oriented community building toward permanence. Outcomes include:
|
||||
|
||||
- **Governance charters** and cooperative legal structures
|
||||
- **Housing cluster plans** for the valley
|
||||
- **Open value accounting** frameworks tested in practice
|
||||
- **Cosmo-local production** prototypes and economic models
|
||||
|
||||
### 3. Values-Aligned Audience
|
||||
|
||||
VotC participants are committed builders who:
|
||||
|
||||
- Lead projects with real traction in cooperative economics, regenerative governance, and housing
|
||||
- Make decisions for their organizations and communities
|
||||
- Influence discourse in commons, cooperative, and network society movements
|
||||
- Seek genuine partnerships over marketing placements
|
||||
|
||||
### 4. Deep Engagement, Not Drive-By Exposure
|
||||
|
||||
Four weeks of co-living creates relationships that last. Sponsors become part of the community fabric, not backdrop.
|
||||
|
||||
---
|
||||
|
||||
## Audience Profile
|
||||
|
||||
### Who Attends VotC?
|
||||
|
||||
```
|
||||
60–100 participants from 15+ countries
|
||||
```
|
||||
|
||||
| Segment | % | Description |
|
||||
|---------|---|-------------|
|
||||
| **Commons & Co-op Builders** | 30% | Cooperative founders, community organizers, commons practitioners |
|
||||
| **Researchers & Academics** | 25% | PhD students, professors, think tank members |
|
||||
| **Governance & Legal Designers** | 20% | DAO contributors, participatory governance architects, co-op lawyers |
|
||||
| **Makers & Technologists** | 15% | Fab lab operators, open-source hardware designers, cosmo-local producers |
|
||||
| **Investors & Funders** | 10% | Impact investors, grant makers, commons-aligned foundations |
|
||||
|
||||
### Attendee Interests
|
||||
|
||||
- Commons theory and practice
|
||||
- Cosmo-local production and open value accounting
|
||||
- Housing co-ops and co-living design
|
||||
- Horizontal governance and funding mechanisms
|
||||
- Degrowth and post-capitalism
|
||||
- Community currencies and mutual credit
|
||||
- Network societies and intentional communities
|
||||
- Regenerative land use and stewardship
|
||||
|
||||
### Geographic Distribution
|
||||
|
||||
- **Europe:** 65%
|
||||
- **North America:** 15%
|
||||
- **Global South:** 10%
|
||||
- **Asia-Pacific:** 10%
|
||||
|
||||
---
|
||||
|
||||
## Sponsorship Tiers
|
||||
|
||||
### MYCELIUM PARTNER | €10,000
|
||||
*Become part of the Valley ecosystem*
|
||||
|
||||
**Recognition & Visibility**
|
||||
- Logo placement on website hero section and all pages
|
||||
- Featured sponsor section on event materials and signage
|
||||
- Acknowledgment at opening and closing ceremonies
|
||||
- Social media recognition across all VotC channels
|
||||
- Logo on participant materials and signage
|
||||
|
||||
**Engagement**
|
||||
- **4 complimentary full passes** (4 weeks each — €4,800 value)
|
||||
- Dedicated 60-minute sponsored session slot
|
||||
- Private dinner with organizers and community leaders
|
||||
- First access to participant list (with consent) for networking
|
||||
|
||||
**Content & Media**
|
||||
- Sponsor spotlight in pre-event communications
|
||||
- Feature in post-event summary and report
|
||||
- Rights to use "Official Partner of VotC 2026" in marketing
|
||||
|
||||
---
|
||||
|
||||
### SPORE PARTNER | €5,000
|
||||
*Plant seeds for regenerative futures*
|
||||
|
||||
**Recognition & Visibility**
|
||||
- Logo on website sponsor section
|
||||
- Logo on event signage and materials
|
||||
- Social media recognition
|
||||
- Acknowledgment at ceremonies
|
||||
|
||||
**Engagement**
|
||||
- **2 complimentary full passes** (€2,400 value)
|
||||
- 30-minute workshop or presentation slot
|
||||
- Access to participant introductions (with consent)
|
||||
|
||||
**Content & Media**
|
||||
- Mention in event communications
|
||||
- Inclusion in post-event summary
|
||||
|
||||
---
|
||||
|
||||
### SYMBIONT SUPPORTER | €2,500
|
||||
*Support commons-building infrastructure*
|
||||
|
||||
**Recognition & Visibility**
|
||||
- Logo on website sponsor section
|
||||
- Logo on event signage
|
||||
- Social media mention
|
||||
|
||||
**Engagement**
|
||||
- **1 complimentary full pass** (€1,200 value)
|
||||
- Priority registration access
|
||||
|
||||
**Content & Media**
|
||||
- Mention in event newsletter
|
||||
|
||||
---
|
||||
|
||||
### FRIEND OF THE COMMONS | €1,000
|
||||
*Show solidarity with the movement*
|
||||
|
||||
**Recognition & Visibility**
|
||||
- Name/logo listed on website supporters section
|
||||
- Social media thank-you post
|
||||
|
||||
**Engagement**
|
||||
- **1 discounted pass** (50% off — €600 value)
|
||||
|
||||
---
|
||||
|
||||
## Alternative Partnership Opportunities
|
||||
|
||||
Beyond financial sponsorship, we welcome in-kind contributions and creative partnerships:
|
||||
|
||||
### Theme / Week Sponsorship | Custom
|
||||
Sponsor a specific themed week (e.g., "Cosmo-local Production Week" or "Governance & Funding Week") with naming rights and session curation involvement.
|
||||
|
||||
### Accommodation Sponsorship | ~€3,000–8,000
|
||||
Cover accommodation costs for participants who need financial support, enabling broader access across the four weeks.
|
||||
|
||||
### Meal Sponsorship | ~€2,000–6,000
|
||||
Sponsor shared meals for a week or the entire event — your name becomes synonymous with nourishment and community care.
|
||||
|
||||
### Documentation Sponsorship | ~€2,000
|
||||
Support professional documentation (photography, videography, written summaries) with credit and content rights.
|
||||
|
||||
### Travel Grants | Custom
|
||||
Fund travel scholarships for participants from underrepresented regions or backgrounds.
|
||||
|
||||
### Technology Partnership | In-Kind
|
||||
Provide tools, platforms, or infrastructure (collaboration tools, fab lab equipment, etc.) in exchange for recognition.
|
||||
|
||||
---
|
||||
|
||||
## What Makes VotC Different?
|
||||
|
||||
### It's Not a Conference — It's a Village
|
||||
|
||||
Unlike traditional events, VotC is:
|
||||
|
||||
- **Practice-oriented** — Outcomes feed into real governance charters, housing plans, and economic models
|
||||
- **Deeply relational** — Four weeks of co-living creates bonds that last
|
||||
- **Rooted in place** — Höllental isn't just a venue; it's a site for permanence
|
||||
- **Non-extractive** — Built on commons principles, organized by Commons Hub
|
||||
|
||||
### Participants Contribute, Not Just Consume
|
||||
|
||||
Everyone shares in the work of village life — cooking, cleaning, building, documenting. This creates relationships of mutual care and shared responsibility.
|
||||
|
||||
### Building Toward Permanence
|
||||
|
||||
This popup isn't a simulation. It is a real community taking steps toward valley transformation: exploring housing clusters, cooperative legal structures, and economic models that can anchor a permanent settlement.
|
||||
|
||||
---
|
||||
|
||||
## Programme Structure
|
||||
|
||||
| Week | Theme | Dates |
|
||||
|------|-------|-------|
|
||||
| **Week 1** | Return of the Commons | Aug 24–30 |
|
||||
| **Week 2** | Cosmo-local Production & Open Value Accounting | Aug 31–Sep 6 |
|
||||
| **Week 3** | Future Living | Sep 7–13 |
|
||||
| **Week 4** | Governance & Funding Models | Sep 14–20 |
|
||||
|
||||
**Daily rhythm:** Mornings are structured learning paths. Afternoons host workshops, field visits, and working groups. Evenings are for shared life, reflection, and communal time. Weekends remain open for exploration and connection.
|
||||
|
||||
---
|
||||
|
||||
## Event Budget Overview
|
||||
|
||||
In the spirit of transparency:
|
||||
|
||||
| Category | Allocation |
|
||||
|----------|------------|
|
||||
| Venue & Infrastructure | 35% |
|
||||
| Food & Catering | 30% |
|
||||
| Programme & Facilitators | 15% |
|
||||
| Documentation & Media | 10% |
|
||||
| Accessibility & Support | 10% |
|
||||
|
||||
---
|
||||
|
||||
## Contact & Next Steps
|
||||
|
||||
We'd love to discuss how a partnership could work for your organization.
|
||||
|
||||
**Primary Contact:**
|
||||
- **Email:** team@valleyofthecommons.com
|
||||
|
||||
**Event Website:**
|
||||
- https://valleyofthecommons.com
|
||||
|
||||
**Community:**
|
||||
- Telegram: https://t.me/valleyofthecommons
|
||||
|
||||
**Organizer:**
|
||||
- Commons Hub: https://www.commons-hub.at
|
||||
|
||||
---
|
||||
|
||||
## Key Dates
|
||||
|
||||
| Date | Milestone |
|
||||
|------|-----------|
|
||||
| **Now** | Sponsorship discussions open |
|
||||
| **May 31, 2026** | Early bird registration closes |
|
||||
| **July 31, 2026** | Regular registration closes |
|
||||
| **August 1, 2026** | Final sponsor deliverables due |
|
||||
| **Aug 24 – Sep 20, 2026** | Valley of the Commons 2026 |
|
||||
| **October 2026** | Post-event report and media shared |
|
||||
|
||||
---
|
||||
|
||||
## Closing Note
|
||||
|
||||
VotC isn't seeking sponsors who want logo placement in exchange for attention. We're seeking **partners** who share our vision of commons-based, cooperative, regenerative futures.
|
||||
|
||||
If your organization is building toward a world where value flows differently, where communities hold land and resources in trust, and where governance serves human and ecological flourishing — we want to collaborate.
|
||||
|
||||
Join us in the Austrian Alps for four weeks that might just change how you see what's possible.
|
||||
|
||||
---
|
||||
|
||||
*This sponsorship package was prepared by Commons Hub. Feel free to share this document with potential partners who might be aligned.*
|
||||
|
||||
**Last updated:** March 2026
|
||||
|
|
@ -28,7 +28,7 @@ async function addToListmonk(email, name, attribs = {}) {
|
|||
|
||||
// Check if subscriber exists
|
||||
const existing = await client.query(
|
||||
'SELECT id, attribs FROM subscribers WHERE email = $1',
|
||||
'SELECT id, name, attribs FROM subscribers WHERE email = $1',
|
||||
[email]
|
||||
);
|
||||
|
||||
|
|
@ -38,9 +38,11 @@ async function addToListmonk(email, name, attribs = {}) {
|
|||
subscriberId = existing.rows[0].id;
|
||||
const existingAttribs = existing.rows[0].attribs || {};
|
||||
const merged = { ...existingAttribs, ...mergeAttribs };
|
||||
// Only update name if a non-empty name is provided
|
||||
const updateName = name || existing.rows[0].name || '';
|
||||
await client.query(
|
||||
'UPDATE subscribers SET name = $1, attribs = $2, updated_at = NOW() WHERE id = $3',
|
||||
[name, JSON.stringify(merged), subscriberId]
|
||||
[updateName, JSON.stringify(merged), subscriberId]
|
||||
);
|
||||
console.log(`[Listmonk] Updated existing subscriber: ${email} (ID: ${subscriberId})`);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
// Newsletter signup endpoint — adds email to Listmonk mailing list
|
||||
const { addToListmonk } = require('./listmonk');
|
||||
|
||||
module.exports = async function handler(req, res) {
|
||||
res.setHeader('Access-Control-Allow-Origin', '*');
|
||||
res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
|
||||
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
||||
|
||||
if (req.method === 'OPTIONS') {
|
||||
return res.status(200).end();
|
||||
}
|
||||
|
||||
if (req.method !== 'POST') {
|
||||
return res.status(405).json({ error: 'Method not allowed' });
|
||||
}
|
||||
|
||||
try {
|
||||
const { email } = req.body;
|
||||
|
||||
if (!email || !email.includes('@')) {
|
||||
return res.status(400).json({ error: 'Valid email is required' });
|
||||
}
|
||||
|
||||
const emailLower = email.toLowerCase().trim();
|
||||
|
||||
await addToListmonk(emailLower, '', {
|
||||
source: 'newsletter_signup',
|
||||
});
|
||||
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
message: 'Successfully subscribed!'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Newsletter signup error:', error);
|
||||
return res.status(500).json({ error: 'Failed to subscribe. Please try again later.' });
|
||||
}
|
||||
};
|
||||
|
|
@ -706,7 +706,7 @@
|
|||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<p>Valley of the Commons · <a href="https://www.commons-hub.at/">Commons Hub</a> · <a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a> · <a href="privacy.html">Privacy Policy</a></p>
|
||||
<p>© 2026 Commons Hub · <a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a> · <a href="/privacy.html">Privacy Policy</a> · <a href="/sponsorships.html">Sponsorships</a></p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
|
|
|
|||
100
index.html
100
index.html
|
|
@ -10,7 +10,7 @@
|
|||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Urbanist:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
<script src="waitlist.js" defer></script>
|
||||
<script src="main.js" defer></script>
|
||||
<script src="speakers.js" defer></script>
|
||||
<script src="community-partners.js" defer></script>
|
||||
</head>
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
<span class="nav-speakers-short">Collaborators</span>
|
||||
</a>
|
||||
<a href="#explore">Explore the Valley</a>
|
||||
<a href="#waitlist" class="nav-get-involved">Get involved</a>
|
||||
<a href="#register" class="nav-get-involved">Register</a>
|
||||
<a href="game.html" target="_blank" rel="noopener noreferrer" class="nav-rabbit">🐰</a>
|
||||
<a href="/apply.html" class="nav-cta-button">APPLY NOW</a>
|
||||
</nav>
|
||||
|
|
@ -203,7 +203,7 @@
|
|||
<!-- Partners will be dynamically loaded here -->
|
||||
</div>
|
||||
<p style="text-align: center; margin-top: var(--spacing-md);">
|
||||
<a href="#waitlist" class="explore-link">Get involved →</a>
|
||||
<a href="#register" class="explore-link">Register →</a>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
|
@ -215,49 +215,30 @@
|
|||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<section id="waitlist" class="section cta-section">
|
||||
<!-- Register CTA Section -->
|
||||
<section id="register" class="section cta-section">
|
||||
<div class="cta-content">
|
||||
<h2>Get involved</h2>
|
||||
<p>Join as a partner, theme curator, or sponsor.</p>
|
||||
|
||||
<!-- Waitlist Form -->
|
||||
<form id="waitlist-form" class="waitlist-form">
|
||||
<div class="form-group">
|
||||
<input
|
||||
type="email"
|
||||
id="waitlist-email"
|
||||
name="email"
|
||||
placeholder="Enter your email"
|
||||
required
|
||||
aria-label="Email address"
|
||||
>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input
|
||||
type="text"
|
||||
id="waitlist-name"
|
||||
name="name"
|
||||
placeholder="Your name"
|
||||
required
|
||||
aria-label="Your name"
|
||||
>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<textarea
|
||||
id="waitlist-involvement"
|
||||
name="involvement"
|
||||
placeholder="Describe your desired involvement."
|
||||
required
|
||||
aria-label="Describe your desired involvement"
|
||||
rows="4"
|
||||
></textarea>
|
||||
</div>
|
||||
<button type="submit" class="waitlist-submit">Submit</button>
|
||||
<div id="waitlist-message" class="waitlist-message" role="status" aria-live="polite"></div>
|
||||
</form>
|
||||
<h2>Join Us in the Valley</h2>
|
||||
<p>Four weeks of commons-building in the Austrian Alps. Live, learn, and build together with practitioners, researchers, and community builders shaping life beyond extractive systems.</p>
|
||||
<div class="cta-details">
|
||||
<span>Aug 24 – Sep 20, 2026</span>
|
||||
<span>Höllental, Austrian Alps</span>
|
||||
<span>€300 / week</span>
|
||||
</div>
|
||||
<a href="/apply.html" class="register-button">REGISTER NOW</a>
|
||||
<p class="cta-note">You'll be added to our mailing list to stay updated.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<p class="cta-final">Together, we can turn vision into reality.</p>
|
||||
<!-- Newsletter Signup -->
|
||||
<section class="newsletter-section">
|
||||
<div class="newsletter-content">
|
||||
<p class="newsletter-heading">Not ready to register? Stay in the loop.</p>
|
||||
<form id="newsletter-form" class="newsletter-form">
|
||||
<input type="email" id="newsletter-email" name="email" placeholder="your@email.com" required aria-label="Email address">
|
||||
<button type="submit">Subscribe</button>
|
||||
</form>
|
||||
<div id="newsletter-message" class="newsletter-message" role="status" aria-live="polite"></div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
|
@ -265,7 +246,36 @@
|
|||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<div class="footer-container">
|
||||
<p>© 2026 Commons Hub. <a href="https://www.commons-hub.at" target="_blank" rel="noopener noreferrer">commons-hub.at</a> · <a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a></p>
|
||||
<div class="footer-grid">
|
||||
<div class="footer-column">
|
||||
<h4>Event</h4>
|
||||
<ul>
|
||||
<li>Aug 24 – Sep 20, 2026</li>
|
||||
<li>Höllental, Austrian Alps</li>
|
||||
<li>€300 / week</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h4>Navigate</h4>
|
||||
<ul>
|
||||
<li><a href="#schedule">Schedule</a></li>
|
||||
<li><a href="#collaborators">Collaborators</a></li>
|
||||
<li><a href="#explore">Explore the Valley</a></li>
|
||||
<li><a href="#register">Register</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h4>Community</h4>
|
||||
<ul>
|
||||
<li><a href="https://t.me/valleyofthecommons" target="_blank" rel="noopener noreferrer">Telegram</a></li>
|
||||
<li><a href="https://www.commons-hub.at" target="_blank" rel="noopener noreferrer">Commons Hub</a></li>
|
||||
<li><a href="/sponsorships.html">Sponsorships</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<p>© 2026 Commons Hub · <a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a> · <a href="/privacy.html">Privacy Policy</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,136 @@
|
|||
// Smooth scroll to section, ensuring title is visible
|
||||
function scrollToSection(sectionId, e) {
|
||||
const section = document.getElementById(sectionId);
|
||||
if (!section) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
// Get header height for offset
|
||||
const header = document.querySelector('.header');
|
||||
const headerHeight = header ? header.offsetHeight : 0;
|
||||
const padding = 40; // Extra padding to ensure title is fully visible
|
||||
|
||||
// Calculate position to show section with title visible
|
||||
const sectionRect = section.getBoundingClientRect();
|
||||
const sectionTop = sectionRect.top + window.pageYOffset;
|
||||
|
||||
// Scroll to position that shows the section title with proper spacing
|
||||
const scrollPosition = sectionTop - headerHeight - padding;
|
||||
|
||||
window.scrollTo({
|
||||
top: Math.max(0, scrollPosition),
|
||||
behavior: 'smooth'
|
||||
});
|
||||
}
|
||||
|
||||
// Loading screen handler
|
||||
function initLoadingScreen() {
|
||||
const loadingScreen = document.getElementById('loading-screen');
|
||||
if (!loadingScreen) return;
|
||||
|
||||
let isHiding = false;
|
||||
|
||||
function hideLoadingScreen() {
|
||||
if (isHiding) return;
|
||||
isHiding = true;
|
||||
loadingScreen.classList.add('hidden');
|
||||
setTimeout(function() {
|
||||
loadingScreen.remove();
|
||||
}, 1200);
|
||||
window.removeEventListener('scroll', onScroll);
|
||||
window.removeEventListener('wheel', onScroll);
|
||||
window.removeEventListener('touchmove', onScroll);
|
||||
}
|
||||
|
||||
function onScroll() {
|
||||
hideLoadingScreen();
|
||||
}
|
||||
|
||||
const skipButton = document.getElementById('skip-loading');
|
||||
if (skipButton) {
|
||||
skipButton.addEventListener('click', hideLoadingScreen);
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', onScroll, { passive: true });
|
||||
window.addEventListener('wheel', onScroll, { passive: true });
|
||||
window.addEventListener('touchmove', onScroll, { passive: true });
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
setTimeout(function() {
|
||||
hideLoadingScreen();
|
||||
}, 6500);
|
||||
});
|
||||
}
|
||||
|
||||
// Newsletter form submission handler
|
||||
function initNewsletterForm() {
|
||||
const form = document.getElementById('newsletter-form');
|
||||
if (!form) return;
|
||||
|
||||
const emailInput = document.getElementById('newsletter-email');
|
||||
const messageDiv = document.getElementById('newsletter-message');
|
||||
const submitButton = form.querySelector('button[type="submit"]');
|
||||
|
||||
form.addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
submitButton.disabled = true;
|
||||
submitButton.textContent = 'Subscribing...';
|
||||
messageDiv.textContent = '';
|
||||
messageDiv.className = 'newsletter-message';
|
||||
|
||||
const email = emailInput.value.trim();
|
||||
|
||||
if (!email || !email.includes('@')) {
|
||||
showMessage('Please enter a valid email address.', 'error');
|
||||
submitButton.disabled = false;
|
||||
submitButton.textContent = 'Subscribe';
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/newsletter', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ email }),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (response.ok && data.success) {
|
||||
showMessage('You\'re subscribed! We\'ll keep you updated.', 'success');
|
||||
form.reset();
|
||||
} else {
|
||||
showMessage(data.error || 'Something went wrong. Please try again.', 'error');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error subscribing:', error);
|
||||
showMessage('Network error. Please try again.', 'error');
|
||||
} finally {
|
||||
submitButton.disabled = false;
|
||||
submitButton.textContent = 'Subscribe';
|
||||
}
|
||||
});
|
||||
|
||||
function showMessage(message, type) {
|
||||
messageDiv.textContent = message;
|
||||
messageDiv.className = `newsletter-message ${type}`;
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
initLoadingScreen();
|
||||
|
||||
// Set up scroll handlers for anchor links
|
||||
const registerLinks = document.querySelectorAll('a[href="#register"]');
|
||||
registerLinks.forEach(link => {
|
||||
link.addEventListener('click', (e) => scrollToSection('register', e));
|
||||
});
|
||||
|
||||
const scheduleLinks = document.querySelectorAll('a[href="#schedule"]');
|
||||
scheduleLinks.forEach(link => {
|
||||
link.addEventListener('click', (e) => scrollToSection('schedule', e));
|
||||
});
|
||||
|
||||
initNewsletterForm();
|
||||
});
|
||||
|
|
@ -162,7 +162,7 @@
|
|||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<p>Valley of the Commons · <a href="https://www.commons-hub.at/">Commons Hub</a> · <a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a> · <a href="privacy.html">Privacy Policy</a></p>
|
||||
<p>© 2026 Commons Hub · <a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a> · <a href="/privacy.html">Privacy Policy</a> · <a href="/sponsorships.html">Sponsorships</a></p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ app.use((req, res, next) => {
|
|||
|
||||
// API routes - wrap Vercel serverless functions
|
||||
const waitlistHandler = require('./api/waitlist-db');
|
||||
const newsletterHandler = require('./api/newsletter');
|
||||
const applicationHandler = require('./api/application');
|
||||
const gameChatHandler = require('./api/game-chat');
|
||||
const shareToGithubHandler = require('./api/share-to-github');
|
||||
|
|
@ -39,6 +40,7 @@ const vercelToExpress = (handler) => async (req, res) => {
|
|||
};
|
||||
|
||||
app.all('/api/waitlist', vercelToExpress(waitlistHandler));
|
||||
app.all('/api/newsletter', vercelToExpress(newsletterHandler));
|
||||
app.all('/api/application', vercelToExpress(applicationHandler));
|
||||
app.all('/api/game-chat', vercelToExpress(gameChatHandler));
|
||||
app.all('/api/share-to-github', vercelToExpress(shareToGithubHandler));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,330 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="icon" type="image/svg+xml" href="icon.svg">
|
||||
<link rel="alternate icon" href="icon.svg">
|
||||
<title>Sponsorships - Valley of the Commons</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=Urbanist:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--color-text: #1a1a1a;
|
||||
--color-text-light: #666;
|
||||
--color-bg: #ffffff;
|
||||
--color-accent: #000;
|
||||
--color-link: #000;
|
||||
--font-sans: 'Urbanist', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
--spacing-xs: 0.5rem;
|
||||
--spacing-sm: 1rem;
|
||||
--spacing-md: 2rem;
|
||||
--spacing-lg: 4rem;
|
||||
--max-width: 900px;
|
||||
}
|
||||
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
font-family: var(--font-sans);
|
||||
color: var(--color-text);
|
||||
background: var(--color-bg);
|
||||
line-height: 1.6;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.header {
|
||||
background: var(--color-bg);
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
.header-container {
|
||||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
padding: 0 var(--spacing-md);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.header a {
|
||||
color: var(--color-link);
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
.header a:hover { text-decoration: underline; }
|
||||
|
||||
.content {
|
||||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
padding: var(--spacing-lg) var(--spacing-md);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: clamp(2rem, 4vw, 3rem);
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
margin-bottom: var(--spacing-xs);
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.2rem;
|
||||
color: var(--color-text-light);
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.intro {
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: var(--spacing-lg);
|
||||
max-width: 700px;
|
||||
}
|
||||
|
||||
.tiers {
|
||||
display: grid;
|
||||
gap: var(--spacing-md);
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.tier {
|
||||
border: 2px solid #e5e5e5;
|
||||
padding: var(--spacing-md);
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
|
||||
.tier:hover {
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
|
||||
.tier-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: var(--spacing-sm);
|
||||
flex-wrap: wrap;
|
||||
gap: var(--spacing-xs);
|
||||
}
|
||||
|
||||
.tier-name {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
.tier-price {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.tier-tagline {
|
||||
font-style: italic;
|
||||
color: var(--color-text-light);
|
||||
margin-bottom: var(--spacing-sm);
|
||||
}
|
||||
|
||||
.tier ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.tier ul li {
|
||||
padding: 0.3rem 0;
|
||||
padding-left: 1.5rem;
|
||||
position: relative;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.tier ul li::before {
|
||||
content: "—";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
color: var(--color-text-light);
|
||||
}
|
||||
|
||||
.tier .highlight {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
margin-bottom: var(--spacing-sm);
|
||||
}
|
||||
|
||||
.alternatives {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.alternatives ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.alternatives ul li {
|
||||
padding: 0.5rem 0;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.alternatives ul li strong {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.cta-block {
|
||||
background: var(--color-accent);
|
||||
color: var(--color-bg);
|
||||
padding: var(--spacing-lg);
|
||||
text-align: center;
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.cta-block h2 {
|
||||
color: var(--color-bg);
|
||||
margin-bottom: var(--spacing-sm);
|
||||
}
|
||||
|
||||
.cta-block p {
|
||||
margin-bottom: var(--spacing-sm);
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.cta-block a {
|
||||
color: var(--color-bg);
|
||||
text-decoration: underline;
|
||||
font-weight: 600;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.cta-block a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
padding: var(--spacing-md) 0;
|
||||
text-align: center;
|
||||
color: var(--color-text-light);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: var(--color-link);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer a:hover { text-decoration: underline; }
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.content { padding: var(--spacing-md); }
|
||||
.tier { padding: var(--spacing-sm); }
|
||||
.tier-header { flex-direction: column; }
|
||||
.cta-block { padding: var(--spacing-md); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="header">
|
||||
<div class="header-container">
|
||||
<a href="/">Valley of the Commons</a>
|
||||
<a href="/apply.html">Apply Now</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="content">
|
||||
<h1>Sponsorships</h1>
|
||||
<p class="subtitle">Aug 24 – Sep 20, 2026 · Höllental, Austrian Alps</p>
|
||||
|
||||
<p class="intro">Valley of the Commons is a four-week pop-up village where commons practitioners, governance innovators, and housing co-op builders come together to prototype life beyond extractive systems. We're seeking partners who share this vision.</p>
|
||||
|
||||
<div class="tiers">
|
||||
<div class="tier">
|
||||
<div class="tier-header">
|
||||
<span class="tier-name">Mycelium Partner</span>
|
||||
<span class="tier-price">€10,000</span>
|
||||
</div>
|
||||
<p class="tier-tagline">Become part of the Valley ecosystem</p>
|
||||
<ul>
|
||||
<li><span class="highlight">4 complimentary full passes</span> (4 weeks each — €4,800 value)</li>
|
||||
<li>60-minute sponsored session slot</li>
|
||||
<li>Private dinner with organizers and community leaders</li>
|
||||
<li>Logo on hero section, all pages, and signage</li>
|
||||
<li>Featured in opening and closing ceremonies</li>
|
||||
<li>Pre & post-event spotlight</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="tier">
|
||||
<div class="tier-header">
|
||||
<span class="tier-name">Spore Partner</span>
|
||||
<span class="tier-price">€5,000</span>
|
||||
</div>
|
||||
<p class="tier-tagline">Plant seeds for regenerative futures</p>
|
||||
<ul>
|
||||
<li><span class="highlight">2 complimentary full passes</span> (€2,400 value)</li>
|
||||
<li>30-minute workshop slot</li>
|
||||
<li>Logo on sponsor section and signage</li>
|
||||
<li>Social media recognition</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="tier">
|
||||
<div class="tier-header">
|
||||
<span class="tier-name">Symbiont Supporter</span>
|
||||
<span class="tier-price">€2,500</span>
|
||||
</div>
|
||||
<p class="tier-tagline">Support commons-building infrastructure</p>
|
||||
<ul>
|
||||
<li><span class="highlight">1 complimentary full pass</span> (€1,200 value)</li>
|
||||
<li>Priority registration</li>
|
||||
<li>Logo on sponsor section</li>
|
||||
<li>Newsletter mention</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="tier">
|
||||
<div class="tier-header">
|
||||
<span class="tier-name">Friend of the Commons</span>
|
||||
<span class="tier-price">€1,000</span>
|
||||
</div>
|
||||
<p class="tier-tagline">Show solidarity with the movement</p>
|
||||
<ul>
|
||||
<li><span class="highlight">1 discounted pass</span> (50% off — €600 value)</li>
|
||||
<li>Name on supporters section</li>
|
||||
<li>Social media thank-you</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alternatives">
|
||||
<h2>Alternative Partnerships</h2>
|
||||
<ul>
|
||||
<li><strong>Theme / Week Sponsorship</strong> — Naming rights and session curation for a themed week</li>
|
||||
<li><strong>Accommodation Sponsorship</strong> (€3,000–8,000) — Cover housing for participants who need support</li>
|
||||
<li><strong>Meal Sponsorship</strong> (€2,000–6,000) — Sponsor shared meals for a week or the full event</li>
|
||||
<li><strong>Documentation Sponsorship</strong> (~€2,000) — Support professional photography, videography, and summaries</li>
|
||||
<li><strong>Travel Grants</strong> — Fund travel scholarships for underrepresented participants</li>
|
||||
<li><strong>Technology Partnership</strong> — Provide tools, platforms, or fab lab equipment in-kind</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="cta-block">
|
||||
<h2>Let's Talk</h2>
|
||||
<p>We're seeking partners, not advertisers. If your organization is building toward commons-based, cooperative, regenerative futures — we want to collaborate.</p>
|
||||
<a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<p>© 2026 Commons Hub · <a href="mailto:team@valleyofthecommons.com">team@valleyofthecommons.com</a> · <a href="/privacy.html">Privacy Policy</a> · <a href="/">Home</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
209
styles.css
209
styles.css
|
|
@ -166,8 +166,8 @@ html {
|
|||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
/* Ensure waitlist section has proper spacing for centering */
|
||||
#waitlist {
|
||||
/* Ensure register section has proper spacing for centering */
|
||||
#register {
|
||||
scroll-margin-top: 0;
|
||||
scroll-margin-bottom: 0;
|
||||
}
|
||||
|
|
@ -1000,72 +1000,115 @@ body {
|
|||
display: block;
|
||||
}
|
||||
|
||||
/* Waitlist Form */
|
||||
.waitlist-form {
|
||||
max-width: 500px;
|
||||
margin: var(--spacing-md) auto var(--spacing-md);
|
||||
padding: 0;
|
||||
/* Register CTA */
|
||||
.cta-details {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: var(--spacing-md);
|
||||
margin: var(--spacing-md) 0;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 500;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: var(--spacing-sm);
|
||||
.cta-details span {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.waitlist-form input[type="email"],
|
||||
.waitlist-form input[type="text"],
|
||||
.waitlist-form textarea {
|
||||
width: 100%;
|
||||
padding: var(--spacing-sm) var(--spacing-md);
|
||||
font-size: 1rem;
|
||||
border: 2px solid rgba(255, 255, 255, 0.3);
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
color: var(--color-bg);
|
||||
border-radius: 0;
|
||||
.register-button {
|
||||
display: inline-block;
|
||||
background: var(--color-bg);
|
||||
color: var(--color-accent) !important;
|
||||
padding: var(--spacing-sm) var(--spacing-lg);
|
||||
text-decoration: none !important;
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.1em;
|
||||
font-size: 1.2rem;
|
||||
border: 2px solid var(--color-bg);
|
||||
transition: all 0.2s ease;
|
||||
margin: var(--spacing-sm) 0;
|
||||
}
|
||||
|
||||
.register-button:hover {
|
||||
background: transparent;
|
||||
color: var(--color-bg) !important;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.cta-note {
|
||||
font-size: 0.9rem !important;
|
||||
opacity: 0.8;
|
||||
margin-top: var(--spacing-sm) !important;
|
||||
}
|
||||
|
||||
/* Newsletter Signup */
|
||||
.newsletter-section {
|
||||
background: #f8f8f8;
|
||||
padding: var(--spacing-md) var(--spacing-md);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.newsletter-content {
|
||||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.newsletter-heading {
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: var(--spacing-sm);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.newsletter-form {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: var(--spacing-xs);
|
||||
max-width: 460px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.newsletter-form input[type="email"] {
|
||||
flex: 1;
|
||||
padding: var(--spacing-xs) var(--spacing-sm);
|
||||
font-size: 1rem;
|
||||
border: 2px solid #e5e5e5;
|
||||
background: var(--color-bg);
|
||||
color: var(--color-text);
|
||||
font-family: var(--font-sans);
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.waitlist-form input[type="email"]:focus,
|
||||
.waitlist-form input[type="text"]:focus,
|
||||
.waitlist-form textarea:focus {
|
||||
.newsletter-form input[type="email"]:focus {
|
||||
outline: none;
|
||||
border-color: var(--color-bg);
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
|
||||
.waitlist-form input::placeholder,
|
||||
.waitlist-form textarea::placeholder {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
}
|
||||
|
||||
.waitlist-submit {
|
||||
width: 100%;
|
||||
padding: var(--spacing-sm) var(--spacing-md);
|
||||
.newsletter-form button {
|
||||
padding: var(--spacing-xs) var(--spacing-md);
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
background: var(--color-bg);
|
||||
color: var(--color-accent);
|
||||
border: 2px solid var(--color-bg);
|
||||
letter-spacing: 0.05em;
|
||||
background: var(--color-accent);
|
||||
color: var(--color-bg);
|
||||
border: 2px solid var(--color-accent);
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
font-family: var(--font-sans);
|
||||
margin-top: var(--spacing-sm);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.waitlist-submit:hover:not(:disabled) {
|
||||
background: transparent;
|
||||
color: var(--color-bg);
|
||||
.newsletter-form button:hover:not(:disabled) {
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
.waitlist-submit:disabled {
|
||||
.newsletter-form button:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.waitlist-message {
|
||||
.newsletter-message {
|
||||
margin-top: var(--spacing-xs);
|
||||
padding: var(--spacing-xs) var(--spacing-sm);
|
||||
text-align: center;
|
||||
|
|
@ -1073,22 +1116,18 @@ body {
|
|||
min-height: 1.2rem;
|
||||
}
|
||||
|
||||
.waitlist-message.success {
|
||||
color: #90EE90;
|
||||
background: rgba(144, 238, 144, 0.1);
|
||||
border: 1px solid rgba(144, 238, 144, 0.3);
|
||||
.newsletter-message.success {
|
||||
color: #2d5016;
|
||||
}
|
||||
|
||||
.waitlist-message.error {
|
||||
color: #FFB6C1;
|
||||
background: rgba(255, 182, 193, 0.1);
|
||||
border: 1px solid rgba(255, 182, 193, 0.3);
|
||||
.newsletter-message.error {
|
||||
color: #c53030;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
.footer {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
padding: var(--spacing-md) 0;
|
||||
padding: var(--spacing-lg) 0 var(--spacing-md);
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
|
|
@ -1096,17 +1135,59 @@ body {
|
|||
max-width: var(--max-width);
|
||||
margin: 0 auto;
|
||||
padding: 0 var(--spacing-md);
|
||||
text-align: center;
|
||||
color: var(--color-text-light);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.footer-container a {
|
||||
.footer-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
gap: var(--spacing-lg);
|
||||
margin-bottom: var(--spacing-md);
|
||||
}
|
||||
|
||||
.footer-column h4 {
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
margin-bottom: var(--spacing-sm);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.footer-column ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.footer-column ul li {
|
||||
margin-bottom: 0.4rem;
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.footer-column ul li a {
|
||||
color: var(--color-link);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer-container a:hover {
|
||||
.footer-column ul li a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.footer-bottom {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
padding-top: var(--spacing-md);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.footer-bottom a {
|
||||
color: var(--color-link);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer-bottom a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
|
@ -1255,6 +1336,24 @@ body {
|
|||
padding: var(--spacing-xs) var(--spacing-sm);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.cta-details {
|
||||
flex-direction: column;
|
||||
gap: var(--spacing-xs);
|
||||
}
|
||||
|
||||
.footer-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: var(--spacing-md);
|
||||
}
|
||||
|
||||
.newsletter-form {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.newsletter-form button {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue