Replaces the mailto: section on /cancellation-refund with a real form that POSTs to https://discord-bot.firefrostgaming.com/api/appeals/submit. Form fields: discord_username, email, circumstances, requested_outcome Client-side: disables button during submit, shows result inline Success: displays confirmation + appeal reference ID Failure: shows error + falls back to support@ mailto Backend was deployed earlier in this session — this closes the full Phase 2 user-facing flow. End-to-end tested via curl; browser test still needed post-deploy. Preserves the mailto: line as a fallback below the form in case the API endpoint is unreachable.
126 lines
11 KiB
Plaintext
126 lines
11 KiB
Plaintext
---
|
|
layout: layouts/base.njk
|
|
title: Cancellation & Refund Policy
|
|
description: Firefrost Gaming Cancellation and Refund Policy — We Don't Kick People Out
|
|
---
|
|
|
|
<!-- HERO -->
|
|
<div style="padding: 100px 40px; background: linear-gradient(135deg, #0f0f1e 0%, #1a1a2e 100%); text-align: center;">
|
|
<h1 style="font-size: 4rem; font-weight: 900; margin-bottom: 30px; color: #ffffff; text-shadow: 2px 2px 8px rgba(0,0,0,0.7);">Cancellation & Refund Policy</h1>
|
|
<p style="font-size: 1.5rem; color: #a8dadc; max-width: 900px; margin: 0 auto; line-height: 1.8;">Effective April 11, 2026</p>
|
|
<p style="font-size: 1.25rem; color: #FFD700; max-width: 900px; margin: 20px auto 0; font-weight: 600;">We Don't Kick People Out.</p>
|
|
</div>
|
|
|
|
<!-- CONTENT -->
|
|
<div style="padding: 100px 60px; background: linear-gradient(135deg, #1a1a2e 0%, #0f0f1e 100%);">
|
|
<div style="max-width: 900px; margin: 0 auto; color: #e8f4f8; line-height: 1.8; font-size: 1.1rem;">
|
|
|
|
<h2 style="color: #4ecdc4; font-size: 2rem; margin-top: 40px; margin-bottom: 20px;">Our Promise: Awakened Is Forever</h2>
|
|
<p>At Firefrost Gaming, once you have paid us even a single dollar, you are permanently part of our community. Your <strong style="color: #FFD700;">Awakened tier</strong> status is lifetime. It never expires. It cannot be lost through cancellation, payment failure, or the passage of time.</p>
|
|
<p>This is not a marketing gimmick. This is a core policy encoded directly into our systems. When you subscribe to any tier — Elemental, Knight, Master, Legend, or Sovereign — you automatically receive lifetime Awakened access as a permanent baseline. Even if your paid subscription ends, that baseline remains.</p>
|
|
|
|
<h2 style="color: #4ecdc4; font-size: 2rem; margin-top: 40px; margin-bottom: 20px;">Canceling Your Subscription</h2>
|
|
<p>You may cancel your subscription at any time through your Stripe customer portal or by contacting <a href="mailto:support@firefrostgaming.com" style="color: #FFD700;">support@firefrostgaming.com</a>.</p>
|
|
<p><strong style="color: #ff6b35;">When you cancel:</strong></p>
|
|
<ul style="margin-left: 20px; margin-bottom: 20px;">
|
|
<li style="margin-bottom: 10px;">You keep full access to your paid tier until the end of your current billing period — you get what you paid for.</li>
|
|
<li style="margin-bottom: 10px;">At the end of that period, your paid tier role is removed and you are automatically demoted to Awakened.</li>
|
|
<li style="margin-bottom: 10px;">You retain Awakened access permanently, including Discord community membership and server whitelist.</li>
|
|
<li style="margin-bottom: 10px;">No separate "grace period" is needed — the billing cycle itself is your grace.</li>
|
|
</ul>
|
|
|
|
<h2 style="color: #4ecdc4; font-size: 2rem; margin-top: 40px; margin-bottom: 20px;">Failed Payments</h2>
|
|
<p>If a recurring payment fails, Stripe will automatically retry over approximately two weeks. During retries, your account remains active. If all retries fail, your subscription ends and you are automatically demoted to Awakened — the same as a voluntary cancellation. You are never removed from the community for a failed payment.</p>
|
|
<p>We recommend updating your payment method through your customer portal if you receive a notice of a failed charge.</p>
|
|
|
|
<h2 style="color: #4ecdc4; font-size: 2rem; margin-top: 40px; margin-bottom: 20px;">Refund Policy</h2>
|
|
<p>Because our subscription tiers grant immediate access to ongoing services, <strong>all sales are final</strong>. We do not offer automatic refunds.</p>
|
|
<p>If you have a legitimate reason to request a refund — an accidental purchase, a billing error, or exceptional circumstances — you may submit an appeal to the Trinity using the form below. We take every appeal seriously and respond personally.</p>
|
|
<p style="padding: 20px; background: rgba(168, 85, 247, 0.1); border-left: 4px solid #a855f7; border-radius: 8px; margin: 20px 0;"><strong style="color: #a855f7;">Important:</strong> Initiating a refund or chargeback through Stripe or your bank without first contacting us results in immediate removal of all Firefrost Gaming access, including Awakened. This is the one circumstance under which we will remove a member. You may still appeal this decision through the form below.</p>
|
|
|
|
<h2 style="color: #4ecdc4; font-size: 2rem; margin-top: 40px; margin-bottom: 20px;">The Trinity Appeal Process</h2>
|
|
<p>We believe in second chances. If your access has been removed — whether due to a refund, chargeback, or other action — you have the right to appeal directly to the Trinity (Michael, Meg, and Holly, the co-founders of Firefrost Gaming).</p>
|
|
<p>To submit an appeal, please fill out the form below. The Trinity reviews every submission personally and responds within 7 days. Decisions are made with compassion and context — we understand that mistakes happen, billing systems can be confusing, and life is complicated.</p>
|
|
|
|
<form id="appealForm" style="margin-top: 30px; padding: 30px; background: rgba(168, 85, 247, 0.08); border: 1px solid rgba(168, 85, 247, 0.3); border-radius: 12px;">
|
|
<div style="margin-bottom: 20px;">
|
|
<label for="discord_username" style="display: block; color: #FFD700; font-weight: 600; margin-bottom: 8px;">Discord Username</label>
|
|
<input type="text" id="discord_username" name="discord_username" required maxlength="100" style="width: 100%; padding: 12px; background: #1a1a2e; border: 1px solid rgba(78, 205, 196, 0.3); border-radius: 6px; color: #e8f4f8; font-size: 1rem;" />
|
|
</div>
|
|
<div style="margin-bottom: 20px;">
|
|
<label for="email" style="display: block; color: #FFD700; font-weight: 600; margin-bottom: 8px;">Email (used for your subscription)</label>
|
|
<input type="email" id="email" name="email" required maxlength="255" style="width: 100%; padding: 12px; background: #1a1a2e; border: 1px solid rgba(78, 205, 196, 0.3); border-radius: 6px; color: #e8f4f8; font-size: 1rem;" />
|
|
</div>
|
|
<div style="margin-bottom: 20px;">
|
|
<label for="circumstances" style="display: block; color: #FFD700; font-weight: 600; margin-bottom: 8px;">What happened? (circumstances of the ban or concern)</label>
|
|
<textarea id="circumstances" name="circumstances" required maxlength="5000" rows="6" style="width: 100%; padding: 12px; background: #1a1a2e; border: 1px solid rgba(78, 205, 196, 0.3); border-radius: 6px; color: #e8f4f8; font-size: 1rem; resize: vertical;"></textarea>
|
|
</div>
|
|
<div style="margin-bottom: 20px;">
|
|
<label for="requested_outcome" style="display: block; color: #FFD700; font-weight: 600; margin-bottom: 8px;">What outcome are you requesting?</label>
|
|
<textarea id="requested_outcome" name="requested_outcome" required maxlength="2000" rows="3" style="width: 100%; padding: 12px; background: #1a1a2e; border: 1px solid rgba(78, 205, 196, 0.3); border-radius: 6px; color: #e8f4f8; font-size: 1rem; resize: vertical;"></textarea>
|
|
</div>
|
|
<button type="submit" id="appealSubmit" style="padding: 14px 40px; background: linear-gradient(135deg, #a855f7 0%, #4ecdc4 100%); color: white; border: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; cursor: pointer;">Submit Appeal to the Trinity</button>
|
|
<div id="appealResult" style="margin-top: 20px; padding: 15px; border-radius: 8px; display: none;"></div>
|
|
</form>
|
|
|
|
<script>
|
|
document.getElementById('appealForm').addEventListener('submit', async (e) => {
|
|
e.preventDefault();
|
|
const btn = document.getElementById('appealSubmit');
|
|
const result = document.getElementById('appealResult');
|
|
btn.disabled = true;
|
|
btn.textContent = 'Submitting...';
|
|
result.style.display = 'none';
|
|
try {
|
|
const res = await fetch('https://discord-bot.firefrostgaming.com/api/appeals/submit', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
discord_username: document.getElementById('discord_username').value,
|
|
email: document.getElementById('email').value,
|
|
circumstances: document.getElementById('circumstances').value,
|
|
requested_outcome: document.getElementById('requested_outcome').value
|
|
})
|
|
});
|
|
const data = await res.json();
|
|
if (res.ok) {
|
|
result.style.display = 'block';
|
|
result.style.background = 'rgba(78, 205, 196, 0.15)';
|
|
result.style.border = '1px solid #4ecdc4';
|
|
result.style.color = '#4ecdc4';
|
|
result.innerHTML = '<strong>✓ ' + data.message + '</strong><br>Appeal reference: #' + data.appeal_id;
|
|
document.getElementById('appealForm').reset();
|
|
btn.textContent = 'Appeal Submitted';
|
|
} else {
|
|
throw new Error(data.error || 'Submission failed');
|
|
}
|
|
} catch (err) {
|
|
result.style.display = 'block';
|
|
result.style.background = 'rgba(255, 107, 53, 0.15)';
|
|
result.style.border = '1px solid #ff6b35';
|
|
result.style.color = '#ff6b35';
|
|
result.innerHTML = '<strong>Submission failed:</strong> ' + err.message + '<br>Please email <a href="mailto:support@firefrostgaming.com" style="color: #FFD700;">support@firefrostgaming.com</a> directly.';
|
|
btn.disabled = false;
|
|
btn.textContent = 'Submit Appeal to the Trinity';
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<p style="color: #6b7280; font-style: italic; margin-top: 20px;">Alternatively, you may email <a href="mailto:support@firefrostgaming.com?subject=Trinity%20Appeal" style="color: #a8dadc;">support@firefrostgaming.com</a> with the subject "Trinity Appeal" if the form is unavailable.</p>
|
|
|
|
<h2 style="color: #4ecdc4; font-size: 2rem; margin-top: 40px; margin-bottom: 20px;">Hard Bans</h2>
|
|
<p>We only remove all Firefrost Gaming access — including Awakened — in two circumstances:</p>
|
|
<ul style="margin-left: 20px; margin-bottom: 20px;">
|
|
<li style="margin-bottom: 10px;"><strong style="color: #ff6b35;">Refund or chargeback:</strong> As described above. Always appealable.</li>
|
|
<li style="margin-bottom: 10px;"><strong style="color: #ff6b35;">Serious Terms of Service violations:</strong> Harassment, cheating, exploitation, or other conduct that harms the community. See our <a href="/terms" style="color: #FFD700;">Terms of Service</a>. Appealable at the Trinity's discretion.</li>
|
|
</ul>
|
|
<p>We do not ban people for canceling, for running out of money, for taking a break from the game, or for any reason related to their subscription status.</p>
|
|
|
|
<h2 style="color: #4ecdc4; font-size: 2rem; margin-top: 40px; margin-bottom: 20px;">Questions?</h2>
|
|
<p>If any part of this policy is unclear, or you'd like to discuss your specific situation before making a decision, please reach out to <a href="mailto:support@firefrostgaming.com" style="color: #FFD700;">support@firefrostgaming.com</a>. We would rather answer ten questions before a cancellation than lose a member to a misunderstanding.</p>
|
|
|
|
<p style="color: #4ecdc4; font-style: italic; text-align: center; margin-top: 60px; font-size: 1.25rem;">Fire + Frost + Foundation = Where Love Builds Legacy 💙🔥❄️</p>
|
|
|
|
</div>
|
|
</div>
|