UEFA Champions League Final 2025

Experience the pinnacle of European football at Allianz Arena, Munich

127
Days
14
Hours
36
Minutes
52
Seconds

Match Information

Teams

PSG
VS
Saturday, October 4, 2025
21:00 CEST
Internazionale

Head-to-Head Statistics

Previous Meetings 8
PSG Wins 3
Internazionale Wins 4
Draws 1

Stadium Information

Venue Details

  • Allianz Arena, Munich
  • Capacity: 75,000
  • Gates open: 18:00 CEST

Transportation

  • U6 to Fröttmaning station
  • Bus lines 294, 295, 296
  • Parking zones P1-P5

Available Tickets

Secure your place at the UEFA Champions League Final 2025. Choose from our range of ticket categories to experience the most prestigious club football event in the world.

VIP Package

Premium Experience

€4,950 Available
  • Premium seating in Category 1
  • Pre-match gourmet dining experience
  • Exclusive access to VIP lounge
  • Complimentary drinks throughout
  • Official match program
  • VIP gift package
Section: VIP West
Gate: A
Seats: Row 1-5

Category 1

Premium Seating

€1,950 Limited
  • Prime central seating along sidelines
  • Excellent views of the pitch
  • Access to Category 1 refreshment areas
  • Fast-track stadium entry
  • Official match program
Section: Main Stand
Gate: B, C
Seats: Row 6-20

Category 2

Standard Seating

€750 Available
  • Good seating behind goals and corners
  • Clear view of the action
  • Access to standard refreshment areas
  • Standard stadium entry
Section: North & South Stands
Gate: D, E, F
Seats: Various

Checkout

Complete your purchase to secure your tickets for the UEFA Champions League Final 2025.

1
Ticket Selection
2
Personal Information
3
Payment
4
Confirmation

Your Selected Ticket

Category 1 Ticket

Main Stand, Gate B, Row 10

€1,950.00
Total €1,950.00
document.addEventListener('DOMContentLoaded', function() { const checkoutSteps = document.querySelectorAll('#checkout > div > div'); const checkoutSections = document.querySelectorAll('#checkout > div > div.p-6'); const continueButtons = document.querySelectorAll('#checkout button.bg-primary'); const backButtons = document.querySelectorAll('#checkout button.bg-gray-200'); let currentStep = 2; // Show payment step initially const ticketSelection = document.getElementById('ticket-selection'); const personalInfoForm = document.getElementById('personal-info-form'); const paymentSection = document.querySelector('#checkout > div > div.p-6:nth-of-type(3)'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); if (ticketSelection && personalInfoForm && paymentSection) { ticketSelection.style.display = 'none'; personalInfoForm.style.display = 'none'; paymentSection.style.display = 'block'; paymentSection.classList.remove('hidden'); // Update progress steps progressSteps[0].classList.add('bg-primary', 'text-white'); progressSteps[1].classList.add('bg-primary', 'text-white'); progressSteps[2].classList.add('bg-primary', 'text-white'); progressSteps.forEach((step, index) => { if (index <= 2) { const stepNumber = step.querySelector('div'); stepNumber.classList.add('bg-white', 'text-primary'); stepNumber.classList.remove('bg-gray-200', 'text-gray-600'); } }); } // Add checkbox functionality const termsCheckbox = document.getElementById('terms'); const checkmark = termsCheckbox.parentElement.querySelector('.checkmark'); function toggleCheckbox(e) { e.preventDefault(); e.stopPropagation(); if (termsCheckbox) { termsCheckbox.checked = !termsCheckbox.checked; // Update visual state const customCheckbox = termsCheckbox.parentElement; if (customCheckbox) { if (termsCheckbox.checked) { customCheckbox.querySelector('.checkmark').classList.add('checked'); } else { customCheckbox.querySelector('.checkmark').classList.remove('checked'); } } // Trigger change event const event = new Event('change', { bubbles: true }); termsCheckbox.dispatchEvent(event); } } // Add click event listeners if (checkmark) { checkmark.addEventListener('click', toggleCheckbox); } if (termsCheckbox) { termsCheckbox.parentElement.addEventListener('click', function(e) { if (e.target !== termsCheckbox) { toggleCheckbox(e); } }); } function showPaymentStep() { const personalInfoForm = document.getElementById('personal-info-form'); const paymentSection = document.querySelector('#checkout > div > div.p-6:nth-of-type(3)'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); if (personalInfoForm && paymentSection) { personalInfoForm.style.display = 'none'; paymentSection.style.display = 'block'; paymentSection.classList.remove('hidden'); progressSteps[2].classList.add('bg-primary', 'text-white'); const stepNumber = progressSteps[2].querySelector('div'); stepNumber.classList.add('bg-white', 'text-primary'); stepNumber.classList.remove('bg-gray-200', 'text-gray-600'); currentStep = 2; } } function showPersonalInfoForm() { const ticketSelection = document.getElementById('ticket-selection'); const personalInfoForm = document.getElementById('personal-info-form'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); if (ticketSelection && personalInfoForm) { ticketSelection.style.display = 'none'; personalInfoForm.style.display = 'block'; personalInfoForm.classList.remove('hidden'); progressSteps[1].classList.add('bg-primary', 'text-white'); const stepNumber = progressSteps[1].querySelector('div'); stepNumber.classList.add('bg-white', 'text-primary'); stepNumber.classList.remove('bg-gray-200', 'text-gray-600'); currentStep = 1; } } function showTicketSelection() { const ticketSelection = document.getElementById('ticket-selection'); const personalInfoForm = document.getElementById('personal-info-form'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); if (ticketSelection && personalInfoForm) { personalInfoForm.style.display = 'none'; ticketSelection.style.display = 'block'; ticketSelection.classList.remove('hidden'); progressSteps[1].classList.remove('bg-primary', 'text-white'); const stepNumber = progressSteps[1].querySelector('div'); stepNumber.classList.remove('bg-white', 'text-primary'); stepNumber.classList.add('bg-gray-200', 'text-gray-600'); currentStep = 0; } } function showTicketSelection() { const ticketSelection = document.getElementById('ticket-selection'); const personalInfoForm = document.getElementById('personal-info-form'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); personalInfoForm.style.opacity = '0'; setTimeout(() => { personalInfoForm.classList.add('hidden'); ticketSelection.classList.remove('hidden'); ticketSelection.style.opacity = '0'; requestAnimationFrame(() => { ticketSelection.style.opacity = '1'; }); progressSteps[1].classList.remove('bg-primary', 'text-white'); const stepNumber = progressSteps[1].querySelector('div'); stepNumber.classList.remove('bg-white', 'text-primary'); stepNumber.classList.add('bg-gray-200', 'text-gray-600'); }, 300); } document.addEventListener('DOMContentLoaded', function() { const form = document.getElementById('personal-info-form'); const feedbackDiv = document.getElementById('form-feedback'); form.addEventListener('submit', async function(e) { e.preventDefault(); if (!form.checkValidity()) { form.reportValidity(); return; } const submitButton = form.querySelector('button[type="submit"]'); const originalButtonText = submitButton.textContent; submitButton.disabled = true; submitButton.textContent = 'Processing...'; try { const formData = new FormData(form); const response = await fetch(form.action, { method: 'POST', body: formData }); body: new URLSearchParams(formData).toString() }); if (response.ok) { feedbackDiv.textContent = 'Information submitted successfully!'; feedbackDiv.className = 'mb-4 p-4 rounded bg-green-100 text-green-800'; feedbackDiv.classList.remove('hidden'); setTimeout(() => { showPaymentStep(); }, 1000); } else { throw new Error('Submission failed'); } } catch (error) { feedbackDiv.textContent = 'There was an error submitting your information. Please try again.'; feedbackDiv.className = 'mb-4 p-4 rounded bg-red-100 text-red-800'; feedbackDiv.classList.remove('hidden'); submitButton.disabled = false; submitButton.textContent = originalButtonText; } }); form.querySelectorAll('input[type="text"], input[type="email"], input[type="tel"], textarea').forEach(input => { input.addEventListener('input', function() { if (this.value.length > 500) { this.value = this.value.substring(0, 500); } }); }); }); // Add click handler for "Continue to Payment" button const continueToPaymentBtn = document.querySelector('button[type="submit"]'); if (continueToPaymentBtn) { continueToPaymentBtn.addEventListener('click', function(e) { e.preventDefault(); const form = document.getElementById('personal-info-form'); if (form.checkValidity()) { showPaymentStep(); } else { form.reportValidity(); } }); } window.showPersonalInfoForm = showPersonalInfoForm; window.showTicketSelection = showTicketSelection; const validatePersonalInfo = () => { const form = document.querySelector('#checkout > div > div.p-6:nth-of-type(2)'); const inputs = form.querySelectorAll('input, select'); let isValid = true; inputs.forEach(input => { const value = input.value.trim(); if (!value) { isValid = false; input.classList.add('border-red-500'); } else { input.classList.remove('border-red-500'); } if (input.type === 'email' && value) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(value)) { isValid = false; input.classList.add('border-red-500'); } } if (input.type === 'tel' && value) { const phoneRegex = /^\+?[\d\s-]{8,}$/; if (!phoneRegex.test(value)) { isValid = false; input.classList.add('border-red-500'); } } }); const continueButton = form.querySelector('button.bg-primary'); if (continueButton) { continueButton.disabled = !isValid; continueButton.classList.toggle('opacity-50', !isValid); } return isValid; }; const transitionToPersonalInfo = () => { const ticketSection = document.querySelector('#checkout > div > div.p-6:first-of-type'); const personalInfoSection = document.querySelector('#checkout > div > div.p-6:nth-of-type(2)'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); ticketSection.style.transition = 'opacity 0.3s ease'; ticketSection.style.opacity = '0'; setTimeout(() => { ticketSection.classList.add('hidden'); personalInfoSection.classList.remove('hidden'); personalInfoSection.style.transition = 'opacity 0.3s ease'; personalInfoSection.style.opacity = '0'; requestAnimationFrame(() => { personalInfoSection.style.opacity = '1'; }); progressSteps[1].classList.add('bg-primary', 'text-white'); progressSteps[1].querySelector('div').classList.add('bg-white', 'text-primary'); progressSteps[1].querySelector('div').classList.remove('bg-gray-200', 'text-gray-600'); currentStep = 1; const form = personalInfoSection; const inputs = form.querySelectorAll('input, select'); inputs.forEach(input => { input.addEventListener('input', validatePersonalInfo); input.addEventListener('blur', validatePersonalInfo); }); validatePersonalInfo(); }, 300); }; document.querySelector('#checkout button.bg-primary').addEventListener('click', function() { if (currentStep === 0) { transitionToPersonalInfo(); } }); function completePurchase() { const button = document.querySelector('.purchase-button-text').parentElement; const buttonText = button.querySelector('.purchase-button-text'); const loadingSpinner = button.querySelector('.purchase-loading'); button.disabled = true; buttonText.textContent = 'Processing...'; loadingSpinner.classList.remove('hidden'); setTimeout(() => { if (currentStep < checkoutSteps.length - 1) { switchToStep(currentStep + 1); button.disabled = false; buttonText.textContent = 'Complete Purchase'; loadingSpinner.classList.add('hidden'); } }, 2000); } window.completePurchase = completePurchase; function showPersonalInformationStep() { const ticketSection = document.querySelector('#checkout > div > div.p-6:first-child'); const personalInfoSection = document.querySelector('#checkout > div > div.p-6:nth-child(2)'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); ticketSection.style.opacity = '0'; setTimeout(() => { ticketSection.classList.add('hidden'); personalInfoSection.classList.remove('hidden'); personalInfoSection.style.opacity = '0'; requestAnimationFrame(() => { personalInfoSection.style.opacity = '1'; }); }, 300); progressSteps[1].classList.add('bg-primary', 'text-white'); const stepNumber = progressSteps[1].querySelector('div'); if (stepNumber) { stepNumber.classList.add('bg-white', 'text-primary'); stepNumber.classList.remove('bg-gray-200', 'text-gray-600'); } } document.querySelector('#checkout button.bg-primary').addEventListener('click', function() { if (currentStep === 0) { showPersonalInformationStep(); currentStep = 1; } }); // Add form validation document.addEventListener('DOMContentLoaded', function() { const personalInfoForm = document.querySelector('#checkout > div > div.p-6:nth-of-type(2)'); const formInputs = personalInfoForm.querySelectorAll('input, select'); const continueButton = personalInfoForm.querySelector('button.bg-primary'); function validateForm() { let isValid = true; formInputs.forEach(input => { if (input.value.trim() === '') { isValid = false; input.classList.add('border-red-500'); } else { input.classList.remove('border-red-500'); } if (input.type === 'email') { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(input.value.trim())) { isValid = false; input.classList.add('border-red-500'); } } if (input.type === 'tel') { const phoneRegex = /^\+?[\d\s-]{8,}$/; if (!phoneRegex.test(input.value.trim())) { isValid = false; input.classList.add('border-red-500'); } } }); continueButton.disabled = !isValid; continueButton.classList.toggle('opacity-50', !isValid); return isValid; } formInputs.forEach(input => { input.addEventListener('input', validateForm); input.addEventListener('blur', validateForm); }); form.addEventListener('submit', function(e) { e.preventDefault(); // on empêche l'envoi au cas où, puis on décide if (form.checkValidity()) { // ✅ Si tout est bon, on envoie réellement vers apply.php form.submit(); } else { // ❌ Sinon, on affiche les erreurs form.reportValidity(); } }); // Proceed to next step } }); // Handle continue button clicks document.querySelector('#checkout button.bg-primary').addEventListener('click', function() { if (currentStep === 0) { const ticketSection = document.querySelector('#checkout > div > div.p-6:first-of-type'); const personalInfoSection = document.querySelector('#checkout > div > div.p-6:nth-of-type(2)'); const progressSteps = document.querySelectorAll('#checkout .flex.border-b > div'); // Fade out current section ticketSection.style.transition = 'opacity 0.3s ease'; ticketSection.style.opacity = '0'; setTimeout(() => { // Hide ticket section and show personal info section ticketSection.classList.add('hidden'); personalInfoSection.classList.remove('hidden'); // Fade in personal info section personalInfoSection.style.transition = 'opacity 0.3s ease'; personalInfoSection.style.opacity = '0'; requestAnimationFrame(() => { personalInfoSection.style.opacity = '1'; }); // Update progress indicator progressSteps[1].classList.add('bg-primary', 'text-white'); progressSteps[1].classList.remove('bg-white', 'text-gray-600'); const stepNumber = progressSteps[1].querySelector('div'); if (stepNumber) { stepNumber.classList.add('bg-white', 'text-primary'); stepNumber.classList.remove('bg-gray-200', 'text-gray-600'); } // Enable back button const backButton = document.querySelector('#checkout button.bg-gray-200'); if (backButton) { backButton.classList.remove('opacity-50', 'cursor-not-allowed'); backButton.disabled = false; } // Update current step currentStep = 1; }, 300); } }); // Handle back button clicks document.querySelectorAll('#checkout button.bg-gray-200').forEach(button => { button.addEventListener('click', function() { if (currentStep > 0) { currentStep--; showStep(currentStep); // Disable back button if we're at the first step if (currentStep === 0) { this.classList.add('opacity-50', 'cursor-not-allowed'); this.disabled = true; } } }); }); function switchToStep(targetStep) { checkoutSteps[currentStep].style.opacity = '0'; setTimeout(() => { checkoutSteps[currentStep].classList.add('hidden'); currentStep = targetStep; checkoutSteps[currentStep].classList.remove('hidden'); checkoutSteps[currentStep].style.opacity = '0'; requestAnimationFrame(() => { checkoutSteps[currentStep].style.opacity = '1'; }); updateProgressSteps(currentStep); }, 300); } window.selectTicket = function(button) { const ticketCard = button.closest('.ticket-card'); const ticketTitle = ticketCard.querySelector('h3').textContent; const ticketPrice = ticketCard.querySelector('.text-3xl.font-bold').textContent; const ticketDetails = ticketCard.querySelector('.text-sm.text-gray-600').textContent; const checkoutTicketTitle = document.querySelector('#checkout .bg-gray-50 h4'); const checkoutTicketPrice = document.querySelector('#checkout .bg-gray-50 .text-xl.font-bold'); const checkoutTicketDetails = document.querySelector('#checkout .bg-gray-50 .text-gray-600'); const checkoutTotal = document.querySelector('#checkout .border-t.border-b .text-xl.font-bold'); if (checkoutTicketTitle) checkoutTicketTitle.textContent = ticketTitle; if (checkoutTicketPrice) checkoutTicketPrice.textContent = ticketPrice; if (checkoutTicketDetails) checkoutTicketDetails.textContent = ticketDetails; if (checkoutTotal) checkoutTotal.textContent = ticketPrice; document.getElementById('checkout').scrollIntoView({ behavior: 'smooth' }); checkoutSteps.forEach(step => { step.classList.add('hidden'); step.style.opacity = '0'; step.style.transition = 'opacity 0.3s ease'; }); checkoutSteps[0].classList.remove('hidden'); requestAnimationFrame(() => { checkoutSteps[0].style.opacity = '1'; }); updateProgressSteps(0); const selectedTicket = document.querySelector('#checkout .bg-gray-50'); selectedTicket.style.transition = 'background-color 0.3s ease'; selectedTicket.style.backgroundColor = '#EFF6FF'; setTimeout(() => { selectedTicket.style.backgroundColor = ''; }, 1000); }; // Move event listeners inside DOMContentLoaded continueButtons.forEach((button, index) => { if (index < continueButtons.length - 1) { button.addEventListener('click', function() { if (currentStep < checkoutSteps.length - 1) { switchToStep(currentStep + 1); } }); } }); backButtons.forEach((button, index) => { button.addEventListener('click', function() { if (currentStep > 0) { switchToStep(currentStep - 1); } }); }); // Close the DOMContentLoaded event listener