diff --git a/admin.html b/admin.html index c39ea63..ba0f71c 100644 --- a/admin.html +++ b/admin.html @@ -791,6 +791,52 @@ +
+

Themes & Beliefs

+
+
+ +
+ ${(app.top_themes || []).map(t => `${t}`).join('') || '-'} +
+
+
+ +
${app.belief_update || '-'}
+
+
+ +
+ ${(app.selected_weeks || []).map(w => `${w}`).join('') || '-'} +
+
+
+
+ +
+

Practical Needs

+
+
+ +

${app.food_preference || '-'}

+
+
+ +

${app.volunteer_interest ? '✓ Yes' : 'No'}

+
+
+ +
${app.accessibility_needs || '-'}
+
+ ${app.coupon_code ? ` +
+ +

${app.coupon_code}

+
+ ` : ''} +
+
+

Financial & Practical

diff --git a/api/application.js b/api/application.js index f9d33cf..98d3c35 100644 --- a/api/application.js +++ b/api/application.js @@ -61,14 +61,12 @@ const confirmationEmail = (application) => { : ''; return { - subject: 'Application Received - Valley of the Commons', + subject: 'Welcome to the Process - Valley of the Commons', html: `
-

Thank You for Applying!

+

We're glad you're here, ${application.first_name}!

-

Dear ${application.first_name},

- -

We've received your application to join Valley of the Commons (August 24 - September 20, 2026).

+

Your application to Valley of the Commons (August 24 – September 20, 2026) has been received. We're excited to read about what you'll bring to the village.

Your Booking Summary

@@ -99,10 +97,9 @@ const confirmationEmail = (application) => {

What happens next?

  1. Complete your registration payment (if you haven't already)
  2. -
  3. Our team will review your application
  4. +
  5. Our team will review your application within 1 week
  6. We may reach out with follow-up questions
  7. -
  8. You'll receive a decision within 2-3 weeks
  9. - ${accomType ? '
  10. Your bed will be assigned automatically once payment is confirmed
  11. ' : ''} + ${accomType ? '
  12. Your accommodation will be allocated and details sent to you shortly after payment is confirmed
  13. ' : ''}
@@ -112,7 +109,7 @@ const confirmationEmail = (application) => {
  • Valley of the Commons
  • -

    If you have any questions, reply to this email and we'll get back to you.

    +

    If you have any questions, just reply to this email — we'd love to hear from you.

    With warmth,
    @@ -212,7 +209,7 @@ module.exports = async function handler(req, res) { const data = req.body; // Validate required fields - const required = ['first_name', 'last_name', 'email', 'motivation', 'code_of_conduct_accepted', 'privacy_policy_accepted']; + const required = ['first_name', 'last_name', 'email', 'motivation', 'belief_update', 'privacy_policy_accepted']; for (const field of required) { if (!data[field]) { return res.status(400).json({ error: `Missing required field: ${field}` }); @@ -244,6 +241,10 @@ module.exports = async function handler(req, res) { const governance = Array.isArray(data.governance_interest) ? data.governance_interest : (data.governance_interest ? [data.governance_interest] : null); const previousEvents = Array.isArray(data.previous_events) ? data.previous_events : (data.previous_events ? [data.previous_events] : null); + // Prepare new array fields + const selectedWeeks = Array.isArray(data.weeks) ? data.weeks : (data.weeks ? [data.weeks] : []); + const topThemes = Array.isArray(data.top_themes) ? data.top_themes : (data.top_themes ? [data.top_themes] : null); + // Insert application const result = await pool.query( `INSERT INTO applications ( @@ -255,11 +256,14 @@ module.exports = async function handler(req, res) { how_heard, referral_name, previous_events, emergency_name, emergency_phone, emergency_relationship, code_of_conduct_accepted, privacy_policy_accepted, photo_consent, scholarship_needed, scholarship_reason, contribution_amount, - ip_address, user_agent, need_accommodation, want_food, accommodation_type + ip_address, user_agent, need_accommodation, want_food, accommodation_type, + selected_weeks, top_themes, belief_update, volunteer_interest, coupon_code, + food_preference, accessibility_needs ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, - $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44 + $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, + $45, $46, $47, $48, $49, $50, $51 ) RETURNING id, submitted_at`, [ data.first_name?.trim(), @@ -305,11 +309,17 @@ module.exports = async function handler(req, res) { req.headers['user-agent'] || null, data.need_accommodation || false, data.want_food || false, - data.accommodation_type || null + data.accommodation_type || null, + selectedWeeks.length > 0 ? selectedWeeks : null, + topThemes, + data.belief_update?.trim() || null, + data.volunteer_interest || false, + data.coupon_code?.trim() || null, + data.food_preference?.trim() || null, + data.accessibility_needs?.trim() || null ] ); - const weeksSelected = Array.isArray(data.weeks) ? data.weeks : []; const application = { id: result.rows[0].id, submitted_at: result.rows[0].submitted_at, @@ -328,7 +338,7 @@ module.exports = async function handler(req, res) { referral_name: data.referral_name, arrival_date: data.arrival_date, departure_date: data.departure_date, - weeks: weeksSelected, + weeks: selectedWeeks, need_accommodation: data.need_accommodation || false, accommodation_preference: data.accommodation_preference || null, accommodation_type: data.accommodation_type || null, @@ -342,7 +352,7 @@ module.exports = async function handler(req, res) { // Add to Listmonk newsletter addToListmonk(application.email, `${application.first_name} ${application.last_name}`, { source: 'application', - weeks: weeksSelected, + weeks: selectedWeeks, contributionAmount: data.contribution_amount, }).catch(err => console.error('[Listmonk] Application sync failed:', err.message)); @@ -382,17 +392,17 @@ module.exports = async function handler(req, res) { // Create Mollie payment for registration + accommodation fee let checkoutUrl = null; - if (weeksSelected.length > 0 && process.env.MOLLIE_API_KEY) { + if (selectedWeeks.length > 0 && process.env.MOLLIE_API_KEY) { try { const paymentResult = await createPayment( application.id, 'registration', - weeksSelected.length, + selectedWeeks.length, application.email, application.first_name, application.last_name, application.accommodation_type, - weeksSelected + selectedWeeks ); checkoutUrl = paymentResult.checkoutUrl; console.log(`Mollie payment created: ${paymentResult.paymentId} (€${paymentResult.amount})`); diff --git a/api/mollie.js b/api/mollie.js index 466b302..c1255d9 100644 --- a/api/mollie.js +++ b/api/mollie.js @@ -226,7 +226,7 @@ const paymentConfirmationEmail = (application, bookingResult) => { ${bookingHtml} -

    Your application is now complete. Our team will review it and get back to you within 2-3 weeks.

    +

    Your application is now complete. Our team will review it and get back to you within 1 week.

    If you have any questions, reply to this email and we'll get back to you.

    diff --git a/apply.html b/apply.html index 26febdc..4769529 100644 --- a/apply.html +++ b/apply.html @@ -58,36 +58,10 @@ padding: 2rem; } - .intro { - text-align: center; - margin-bottom: 2rem; - padding: 2rem; - background: white; - border-radius: 12px; - } - - .intro h1 { - font-family: 'Cormorant Garamond', serif; - font-size: 2.25rem; - color: var(--forest); - margin-bottom: 1rem; - } - - .intro p { color: #666; font-size: 0.95rem; } - - .event-badge { - display: inline-block; - background: var(--forest); - color: white; - padding: 0.5rem 1rem; - border-radius: 20px; - font-size: 0.875rem; - margin-bottom: 1rem; - } - /* Progress */ .progress-container { margin-bottom: 2rem; + display: none; } .progress-bar { @@ -196,7 +170,8 @@ .week-card:hover { border-color: var(--forest-light); } .week-card.selected { border-color: var(--forest); background: rgba(45, 80, 22, 0.05); } - .week-card input { display: none; } + .week-card input[type="checkbox"], + .week-card input[type="radio"] { display: none; } .week-card h4 { font-size: 0.95rem; color: var(--forest); margin-bottom: 0.25rem; } .week-card .dates { font-size: 0.8rem; color: #666; margin-bottom: 0.5rem; } @@ -244,29 +219,6 @@ .btn-secondary:hover { background: #eee; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } - /* Success */ - .success-message { text-align: center; padding: 2rem; } - - .success-icon { - width: 70px; - height: 70px; - background: var(--forest); - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - margin: 0 auto 1.5rem; - } - - .success-icon svg { width: 35px; height: 35px; stroke: white; } - - .success-message h2 { - font-family: 'Cormorant Garamond', serif; - font-size: 1.75rem; - color: var(--forest); - margin-bottom: 1rem; - } - /* Error */ .error-message { background: #fef2f2; @@ -289,9 +241,270 @@ .footer a { color: var(--forest); } + /* ===== Landing screen ===== */ + .landing { + text-align: center; + padding: 2rem; + background: white; + border-radius: 12px; + } + + .landing h1 { + font-family: 'Cormorant Garamond', serif; + font-size: 2.25rem; + color: var(--forest); + margin-bottom: 1rem; + } + + .landing .event-badge { + display: inline-block; + background: var(--forest); + color: white; + padding: 0.5rem 1rem; + border-radius: 20px; + font-size: 0.875rem; + margin-bottom: 1rem; + } + + .landing .overview-text { + color: #666; + font-size: 0.95rem; + max-width: 550px; + margin: 0 auto 2rem; + } + + .pricing-cards { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + margin: 2rem 0; + text-align: left; + } + + .pricing-card { + background: var(--sand); + border-radius: 10px; + padding: 1.25rem; + } + + .pricing-card h3 { + font-size: 1rem; + color: var(--forest); + margin-bottom: 0.5rem; + } + + .pricing-card .price-range { + font-size: 1.25rem; + font-weight: 600; + color: var(--charcoal); + margin-bottom: 0.25rem; + } + + .pricing-card .price-note { + font-size: 0.8rem; + color: #666; + } + + .time-estimate { + background: var(--sand); + padding: 0.75rem 1rem; + border-radius: 8px; + font-size: 0.85rem; + color: #666; + margin-bottom: 1.5rem; + } + + .resume-notice { + background: #e8f5e9; + border: 1px solid #c8e6c9; + color: #2d5016; + padding: 0.75rem 1rem; + border-radius: 8px; + margin-bottom: 1rem; + font-size: 0.9rem; + } + + /* ===== Theme picker ===== */ + .theme-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.75rem; + } + + .theme-option { + border: 2px solid #ddd; + border-radius: 10px; + padding: 1rem; + cursor: pointer; + transition: all 0.2s; + text-align: center; + } + + .theme-option:hover { border-color: var(--forest-light); } + .theme-option.selected { border-color: var(--forest); background: rgba(45, 80, 22, 0.05); } + .theme-option.disabled-theme { opacity: 0.4; cursor: not-allowed; } + + .theme-option h4 { + font-size: 0.9rem; + color: var(--forest); + margin-bottom: 0.25rem; + } + + .theme-counter { + text-align: center; + font-size: 0.85rem; + color: #666; + margin-top: 0.75rem; + } + + /* ===== Food radio group ===== */ + .radio-group { + display: flex; + flex-direction: column; + gap: 0.5rem; + } + + .radio-option { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 0; + cursor: pointer; + } + + .radio-option input[type="radio"] { + width: 18px; + height: 18px; + accent-color: var(--forest); + } + + /* ===== Review step ===== */ + .review-section { + background: var(--sand); + border-radius: 10px; + padding: 1.25rem; + margin-bottom: 1rem; + } + + .review-section-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.75rem; + } + + .review-section-header h3 { + font-size: 1rem; + color: var(--forest); + } + + .review-edit-link { + font-size: 0.85rem; + color: var(--forest); + cursor: pointer; + text-decoration: underline; + } + + .review-field { + margin-bottom: 0.5rem; + } + + .review-field .review-label { + font-size: 0.75rem; + color: #666; + text-transform: uppercase; + } + + .review-field .review-value { + font-size: 0.9rem; + white-space: pre-wrap; + } + + .review-price-summary { + background: white; + border: 2px solid var(--forest); + border-radius: 10px; + padding: 1.25rem; + margin-top: 1.5rem; + } + + .review-price-summary h3 { + font-size: 1.1rem; + color: var(--forest); + margin-bottom: 0.75rem; + } + + .price-line { + display: flex; + justify-content: space-between; + padding: 0.25rem 0; + font-size: 0.9rem; + } + + .price-line.total { + border-top: 1px solid #ddd; + margin-top: 0.5rem; + padding-top: 0.75rem; + font-weight: 600; + font-size: 1.1rem; + } + + /* ===== Success state ===== */ + .success-card { + text-align: center; + padding: 2.5rem 2rem; + background: linear-gradient(135deg, #f0f7eb 0%, #e8f5e9 50%, #f5f5f0 100%); + border-radius: 12px; + } + + .success-icon { + width: 70px; + height: 70px; + background: var(--forest); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + margin: 0 auto 1.5rem; + } + + .success-icon svg { width: 35px; height: 35px; stroke: white; } + + .success-card h2 { + font-family: 'Cormorant Garamond', serif; + font-size: 1.75rem; + color: var(--forest); + margin-bottom: 1rem; + } + + .next-steps-box { + background: white; + border-radius: 10px; + padding: 1.25rem; + margin: 1.5rem auto; + max-width: 420px; + text-align: left; + } + + .next-steps-box h3 { + font-size: 0.95rem; + color: var(--forest); + margin-bottom: 0.75rem; + } + + .next-steps-box ol { + padding-left: 1.25rem; + font-size: 0.9rem; + color: #555; + } + + .next-steps-box li { margin-bottom: 0.5rem; } + @media (max-width: 600px) { .container { padding: 1rem; } - .form-section { padding: 1.5rem; } + .form-section, .landing { padding: 1.5rem; } + .pricing-cards { grid-template-columns: 1fr; } + .theme-grid { grid-template-columns: 1fr; } } @@ -304,153 +517,46 @@
    -
    + +
    August 24 – September 20, 2026

    Application Form

    -

    Valley of the Commons is a four-week pop-up village exploring housing, production, decision-making and ownership in community. We ask that you be thoughtful in your answers to help us understand if you are the right fit. We will not penalize you for unfamiliarity with any topic; please be honest.

    +

    Valley of the Commons is a four-week pop-up village exploring housing, production, decision-making and ownership in community. Each week has a different theme — attend one week or all four.

    + +
    +
    +

    Registration

    +
    +
    per week, depending on timing
    +
    +
    +

    Accommodation

    +
    €275 – €700/wk
    +
    optional, multiple room types
    +
    +
    + +
    This application takes approximately 15–20 minutes to complete.
    + + + +
    -
    +
    -
    0% complete
    +
    Step 1 of 10 — 10%
    -
    - -
    -
    Question 1 of 9
    -

    Contact Information

    - -
    -
    - - -
    -
    - - -
    -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    -
    - -
    -
    - - -
    -
    Question 2 of 9
    -

    How did you hear about Valley of the Commons? *

    - -
    - -
    - -
    - - -
    -
    - - -
    -
    Question 3 of 9
    -

    Referral name(s) (optional)

    -

    Who can vouch for you?

    - -
    - -
    - -
    - - -
    -
    - - -
    -
    Question 4 of 9
    -

    What are your affiliations? *

    -

    What projects or groups are you affiliated with?

    - -
    - -
    - -
    - - -
    -
    - - -
    -
    Question 5 of 9
    -

    Why would you like to join Valley of the Commons, and why are you a good fit? *

    - -
    - -
    - -
    - - -
    -
    - - -
    -
    Question 6 of 9
    -

    What are you currently building, researching, or working on? *

    - -
    - -
    - -
    - - -
    -
    - - -
    -
    Question 7 of 9
    -

    How will you contribute to Valley of the Commons? *

    -

    Villagers co-create their experience. You can start an interest club, lead a discussion or workshop, teach a cooking class, or more.

    - -
    - -
    - -
    - - -
    -
    - - -
    -
    Question 8 of 9
    + + +
    +
    Step 1 of 10

    Which week(s) would you like to attend? *

    -

    Select the weeks you'd like to join.

    +

    Select the weeks you'd like to join. Prices update as you choose.

    - -
    -

    Accommodation

    - - - - - - - - -

    Food

    - - -
    -
    -
    Select at least one week
    +
    Select at least one week to see pricing
    +
    + +
    +
    + +
    +
    + + +
    +
    Step 2 of 10
    +

    About You

    + +
    +
    + + +
    +
    + + +
    +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    @@ -592,43 +647,316 @@
    - -
    -
    Question 9 of 9
    -

    Anything else you'd like to add? (optional)

    + +
    +
    Step 3 of 10
    +

    What are your affiliations? *

    +

    What projects or groups are you affiliated with?

    - +
    +
    + + +
    +
    + + +
    +
    Step 4 of 10
    +

    Why would you like to join Valley of the Commons, and why are you a good fit? *

    + +
    + +
    + +
    + + +
    +
    + + +
    +
    Step 5 of 10
    +

    What are you currently building, researching, or working on? *

    + +
    + +
    + +
    + + +
    +
    + + +
    +
    Step 6 of 10
    +

    How will you contribute to Valley of the Commons? *

    +

    Villagers co-create their experience. You can start an interest club, lead a discussion or workshop, teach a cooking class, or more.

    + +
    + +
    + +
    + + +
    +
    + + +
    +
    Step 7 of 10
    +

    Which themes interest you most?

    +

    Pick up to 3 themes you're most drawn to.

    + +
    +
    +

    The Commons

    +
    History, theory, and practice of shared resources
    +
    +
    +

    Post-Capitalist Production

    +
    Alternative economies and cooperative production
    +
    +
    +

    Future Living

    +
    Housing, ecological design, and community building
    +
    +
    +

    Governance & Funding

    +
    Decision-making, legal structures, and shared assets
    +
    +
    +
    0 of 3 selected
    + +
    + + +
    + +
    + + +
    +
    + + +
    +
    Step 8 of 10
    +

    What's a belief you've recently updated or changed your mind about? *

    +

    We value intellectual curiosity and the ability to update one's thinking. This can be about anything — work, life, politics, a personal habit.

    + +
    + +
    + +
    + + +
    +
    + + +
    +
    Step 9 of 10
    +

    Practical Details

    + + +

    Accommodation

    + + + + + + + + +

    Food Preference

    +
    + + + + + +
    + + +
    + + +
    + + +
    +
    + + +
    + + +
    + + +
    + + +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    Step 10 of 10
    +

    Review Your Application

    +

    Please review your answers below. Click "Edit" to make changes.

    + +
    + +
    +
    - +
    @@ -78,7 +77,7 @@

    Pop-Up Event to Seed the Valley

    24 August 2026 – 20 September 2026

    - APPLY NOW + REGISTER NOW @@ -202,9 +201,6 @@
    -

    - Register → -

    @@ -226,7 +222,6 @@ from €120 / week
    REGISTER NOW -

    You'll be added to our mailing list to stay updated.

    @@ -238,6 +233,7 @@ +

    You'll be added to our mailing list to stay updated.

    diff --git a/payment-return.html b/payment-return.html index 8ef43f1..62ec689 100644 --- a/payment-return.html +++ b/payment-return.html @@ -216,7 +216,7 @@ switch (data.paymentStatus) { case 'paid': showStatus('success', 'Payment Confirmed!', - 'Your payment has been received. We\'ll review your application and get back to you within 2-3 weeks.', true); + 'Your payment has been received. We\'ll review your application and get back to you within 1 week.', true); break; case 'pending': case 'open': diff --git a/server.js b/server.js index 376dbfc..2f0e9d8 100644 --- a/server.js +++ b/server.js @@ -87,6 +87,18 @@ async function runMigrations() { ADD COLUMN IF NOT EXISTS accommodation_type VARCHAR(50) `); + // Form restructure columns (migration 004) + await pool.query(` + ALTER TABLE applications + ADD COLUMN IF NOT EXISTS selected_weeks TEXT[], + ADD COLUMN IF NOT EXISTS top_themes TEXT[], + ADD COLUMN IF NOT EXISTS belief_update TEXT, + ADD COLUMN IF NOT EXISTS volunteer_interest BOOLEAN DEFAULT FALSE, + ADD COLUMN IF NOT EXISTS coupon_code TEXT, + ADD COLUMN IF NOT EXISTS food_preference TEXT, + ADD COLUMN IF NOT EXISTS accessibility_needs TEXT + `); + // Rename resend_id → message_id in email_log (legacy column name) const colCheck = await pool.query(` SELECT column_name FROM information_schema.columns diff --git a/sponsorships.html b/sponsorships.html index a31c53c..6739d04 100644 --- a/sponsorships.html +++ b/sponsorships.html @@ -16,6 +16,7 @@ --color-bg: #ffffff; --color-accent: #000; --color-link: #000; + --color-forest: #2d5016; --font-sans: 'Urbanist', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } @@ -39,7 +40,7 @@ } .header-container { - max-width: 900px; + max-width: 1100px; margin: 0 auto; padding: 0 2rem; display: flex; @@ -59,15 +60,15 @@ .header a:hover { text-decoration: underline; } .content { - max-width: 900px; + max-width: 1100px; margin: 0 auto; - padding: 4rem 2rem; + padding: 3rem 2rem 4rem; flex: 1; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; + } + + .page-header { text-align: center; + margin-bottom: 3rem; } h1 { @@ -81,21 +82,177 @@ .subtitle { font-size: 1.2rem; color: var(--color-text-light); - margin-bottom: 2rem; + margin-bottom: 1rem; } - .coming-soon { - font-size: 1.1rem; + .intro-text { + font-size: 1.05rem; color: var(--color-text-light); - max-width: 500px; - margin-bottom: 2rem; + max-width: 650px; + margin: 0 auto; } - .contact { - font-size: 1rem; + /* Tier cards */ + .tiers { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1.25rem; + margin-bottom: 3rem; } - .contact a { + .tier-card { + border: 1px solid #e5e5e5; + border-radius: 12px; + overflow: hidden; + display: flex; + flex-direction: column; + } + + .tier-card.featured { + border-color: var(--color-forest); + box-shadow: 0 4px 16px rgba(45, 80, 22, 0.12); + } + + .tier-header { + padding: 1.5rem 1.25rem 1rem; + text-align: center; + border-bottom: 1px solid #e5e5e5; + } + + .tier-card.featured .tier-header { + background: var(--color-forest); + border-bottom-color: var(--color-forest); + } + + .tier-card.featured .tier-name, + .tier-card.featured .tier-price, + .tier-card.featured .tier-limit { + color: white; + } + + .tier-name { + font-size: 0.85rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + margin-bottom: 0.5rem; + color: var(--color-text); + } + + .tier-price { + font-size: 2rem; + font-weight: 700; + color: var(--color-text); + line-height: 1.2; + } + + .tier-limit { + font-size: 0.8rem; + color: var(--color-text-light); + margin-top: 0.25rem; + } + + .tier-body { + padding: 1.25rem; + flex: 1; + display: flex; + flex-direction: column; + gap: 1rem; + } + + .tier-perk { + display: flex; + gap: 0.5rem; + font-size: 0.9rem; + line-height: 1.4; + } + + .tier-perk .perk-icon { + flex-shrink: 0; + width: 20px; + text-align: center; + color: var(--color-forest); + font-weight: 600; + } + + .tier-perk .perk-label { + font-weight: 600; + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--color-text-light); + display: block; + margin-bottom: 0.1rem; + } + + .tier-perk.empty { + color: #ccc; + } + + .tier-footer { + padding: 1.25rem; + border-top: 1px solid #f0f0f0; + text-align: center; + } + + .tier-cta { + display: inline-block; + padding: 0.6rem 1.5rem; + border-radius: 6px; + font-size: 0.9rem; + font-weight: 600; + text-decoration: none; + text-transform: uppercase; + letter-spacing: 0.04em; + border: 1px solid var(--color-text); + color: var(--color-text); + transition: all 0.2s; + } + + .tier-cta:hover { + background: var(--color-text); + color: white; + } + + .tier-card.featured .tier-cta { + background: var(--color-forest); + color: white; + border-color: var(--color-forest); + } + + .tier-card.featured .tier-cta:hover { + background: #3a6b1e; + } + + /* Footnote */ + .footnote { + text-align: center; + font-size: 0.85rem; + color: var(--color-text-light); + font-style: italic; + margin-bottom: 3rem; + } + + /* CTA */ + .cta-section { + text-align: center; + padding: 2.5rem; + background: #f9f9f6; + border-radius: 12px; + } + + .cta-section h2 { + font-size: 1.5rem; + font-weight: 600; + margin-bottom: 0.5rem; + } + + .cta-section p { + color: var(--color-text-light); + margin-bottom: 1rem; + } + + .cta-section a { color: var(--color-link); font-weight: 600; } @@ -114,25 +271,202 @@ } .footer a:hover { text-decoration: underline; } + + /* Responsive */ + @media (max-width: 900px) { + .tiers { + grid-template-columns: repeat(2, 1fr); + } + } + + @media (max-width: 550px) { + .tiers { + grid-template-columns: 1fr; + } + .content { padding: 2rem 1rem; } + }
    -

    Sponsorships

    -

    Aug 24 – Sep 20, 2026 · Höllental, Austrian Alps

    -

    Details coming soon. We're finalizing sponsorship packages for Valley of the Commons and will share more here shortly.

    -

    Interested? Reach out at team@valleyofthecommons.com

    + + +
    + +
    +
    +
    Friend of
    the Commons
    +
    €1,000
    +
    Unlimited spots
    +
    +
    +
    + +
    Ticket Voucher€250
    +
    +
    + +
    VisibilityName on sponsor list
    +
    +
    + +
    Public GratitudeSocial media recognition
    +
    +
    + +
    Stage Access
    +
    +
    + +
    Video Assets
    +
    +
    + +
    Branded Handouts
    +
    +
    + +
    + + +
    +
    +
    Symbiont
    Supporter
    +
    €2,500
    +
    10 spots
    +
    +
    +
    + +
    Ticket Voucher€625
    +
    +
    + +
    VisibilitySmall logo on website
    +
    +
    + +
    Public GratitudeSocial media recognition
    +
    +
    + +
    Stage Access25 min exclusive session (no competing sessions)
    +
    +
    + +
    Video Assets
    +
    +
    + +
    Branded Handouts
    +
    +
    + +
    + + + + + +
    +
    +
    Mycelium
    Partner
    +
    €10,000
    +
    3 spots
    +
    +
    +
    + +
    Ticket Voucher€2,500
    +
    +
    + +
    VisibilityCentral logo on website & signage
    +
    +
    + +
    Public GratitudeSocial media recognition + naming in opening & closing ceremony
    +
    +
    + +
    Stage Access2× 45 min exclusive session
    +
    +
    + +
    Video AssetsExtended feature
    +
    +
    + +
    Branded HandoutsCosmo-local gimmicks* produced in our fablab
    +
    +
    + +
    +
    + +

    * Customized to your specific needs

    + +
    +

    Interested in sponsoring?

    +

    We'd love to discuss how we can work together. Every tier is customizable.

    +

    team@valleyofthecommons.com

    +