{% extends 'base.html.twig' %}
{% block title %}Demander un devis{% endblock %}
{% block body %}
<header>
{{ include('@FrontView/menus.html.twig') }}
</header>
<main class="front-office-page front-office-generic-page demo-page py-4">
<div class="container">
<div class="row py-1 g-4">
<aside class="col-md-2">
{{ include('@FrontView/menusgeneral.html.twig', { hidePartners: true }) }}
</aside>
<div class="col-md-10">
{% for message in app.flashes('success') %}
<div class="alert alert-success alert-dismissible fade show rounded-3" role="alert">
<i class="fas fa-check-circle me-2"></i>{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
{% endfor %}
{% for message in app.flashes('error') %}
<div class="alert alert-danger alert-dismissible fade show rounded-3" role="alert">
<i class="fas fa-exclamation-circle me-2"></i>{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
{% endfor %}
<section class="demo-hero rounded-4 p-4 p-md-5 mb-4">
<div class="row align-items-center g-4">
<div class="col-lg-8">
<span class="demo-eyebrow">RAPETO DIGITAL</span>
<h1 class="fw-bold text-white mt-2 mb-3">Demander un devis</h1>
<p class="text-white-50 mb-0">Décrivez votre projet et recevez une proposition adaptée à vos besoins.</p>
</div>
<div class="col-lg-4 text-center">
<div class="contact-icon-wrap"><i class="fas fa-comments"></i></div>
</div>
</div>
</section>
<div class="row g-4">
<div class="col-lg-7">
<div class="demo-card h-100">
<div class="mb-4">
<p class="text-muted mb-0">Les champs marqués d’un astérisque sont obligatoires.</p>
</div>
<form method="post" action="{{ path('app_contact') }}">
<input type="hidden" name="_token" value="{{ csrf_token('contact_form') }}">
{% if quote_product %}<input type="hidden" name="product_id" value="{{ quote_product.id }}">{% endif %}
<div class="row g-3">
<div class="col-md-6">
<label for="contact_name" class="form-label">Nom complet *</label>
<input type="text" id="contact_name" name="name" class="form-control" placeholder="Votre nom" required>
</div>
<div class="col-md-6">
<label for="contact_email" class="form-label">Adresse e-mail *</label>
<input type="email" id="contact_email" name="email" class="form-control" placeholder="vous@exemple.com" required>
</div>
<div class="col-md-6">
<label for="contact_phone" class="form-label">Téléphone</label>
<input type="tel" id="contact_phone" name="phone" class="form-control" placeholder="Votre numéro">
</div>
<div class="col-md-6">
<label for="requester_type" class="form-label">Type de demandeur *</label>
<select id="requester_type" name="requester_type" class="form-select" required>
<option value="">Choisir un type</option>
<option>Particulier</option>
<option>Entreprise</option>
</select>
</div>
<div class="col-md-6">
<label for="location" class="form-label">Lieu *</label>
<input type="text" id="location" name="location" class="form-control" placeholder="Votre ville ou région" required>
</div>
<div class="col-md-6">
<label for="role" class="form-label">Rôle / Fonction *</label>
<select id="role" name="role" class="form-select" required>
<option value="">Choisir une fonction</option>
<option>Gérant</option>
<option>Caissier / Caissière</option>
<option>Comptable</option>
<option>Autre</option>
</select>
</div>
<div class="col-md-6">
<label for="product_name" class="form-label">Nom du produit *</label>
<input type="text" id="product_name" name="product_name" class="form-control" value="{{ quote_product ? quote_product.title : '' }}" placeholder="Produit demandé" readonly required>
</div>
<div class="col-md-6">
<label for="product_type" class="form-label">Type du produit *</label>
<input type="text" id="product_type" name="product_type" class="form-control" value="{{ quote_product ? quote_product.statetypeLabels|join(' / ') : '' }}" placeholder="Type de produit" readonly required>
</div>
<div class="col-12 pt-2">
<button type="submit" class="btn btn-primary px-4 contact-submit-btn">
<span class="contact-submit-label">Envoyer ma demande <i class="fas fa-arrow-right ms-2"></i></span>
<span class="contact-submit-loading" aria-hidden="true">
<span class="contact-spinner"></span> Envoi en cours…
</span>
</button>
</div>
</div>
</form>
</div>
</div>
<div class="col-lg-5">
<div class="demo-card h-100">
<h2 class="h4 fw-bold text-primary mb-4">Pourquoi nous contacter ?</h2>
<div class="contact-benefit">
<span><i class="fas fa-lightbulb"></i></span>
<div><strong>Un conseil adapté</strong><p>Nous vous orientons vers la solution correspondant à votre activité.</p></div>
</div>
<div class="contact-benefit">
<span><i class="fas fa-laptop-code"></i></span>
<div><strong>Une solution sur mesure</strong><p>Site vitrine, plateforme dynamique ou logiciel métier.</p></div>
</div>
<div class="contact-benefit">
<span><i class="fas fa-file-invoice-dollar"></i></span>
<div><strong>Un devis clair</strong><p>Votre besoin est étudié avant toute proposition.</p></div>
</div>
<hr class="my-4">
<p class="text-muted mb-0"><i class="fas fa-clock text-primary me-2"></i>Nous revenons vers vous après réception de votre demande.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
{{ include('@FrontView/footer.html.twig') }}
<style>
.demo-page { background: #f7f9fc; }
.demo-hero { background: linear-gradient(135deg, #003b7e 0%, #1769aa 100%); overflow: hidden; padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; }
.demo-hero h1 { font-size: 2rem; }
.demo-hero p { font-size: 1rem; }
.demo-eyebrow { color: #ffd34e; font-size: .7rem; font-weight: 700; letter-spacing: .14rem; }
.contact-icon-wrap { display: inline-flex; align-items: center; justify-content: center; width: 90px; height: 90px; border: 1px solid rgba(255,255,255,.25); border-radius: 50%; color: #ffd34e; font-size: 2.4rem; }
.demo-card { background: #fff; border-radius: 1rem; padding: 1.5rem; box-shadow: 0 12px 35px rgba(0, 59, 126, .08); }
.demo-card h2 { font-size: 1.35rem; }
.demo-card .form-label { color: #16324f; font-weight: 600; }
.demo-card .form-control, .demo-card .form-select { border: 1px solid #dbe3ee; border-radius: .7rem; }
.demo-card .form-control:focus, .demo-card .form-select:focus { border-color: #1769aa; box-shadow: 0 0 0 .2rem rgba(23, 105, 170, .12); }
.contact-benefit { display: flex; gap: 1rem; margin-bottom: 1.5rem; }
.contact-benefit > span { flex: 0 0 42px; height: 42px; display: flex; align-items: center; justify-content: center; background: #eaf3fb; border-radius: .7rem; color: #1769aa; }
.contact-benefit strong { color: #16324f; }
.contact-benefit p { color: #718096; margin: .25rem 0 0; font-size: .85rem; }
.contact-submit-loading { display: none; }
.contact-submit-btn.is-loading { cursor: wait; opacity: .85; }
.contact-submit-btn.is-loading .contact-submit-label { display: none; }
.contact-submit-btn.is-loading .contact-submit-loading { display: inline-flex; align-items: center; gap: .5rem; }
.contact-spinner { width: 1rem; height: 1rem; border: 2px solid rgba(255,255,255,.45); border-top-color: #fff; border-radius: 50%; animation: contact-spin .7s linear infinite; }
@keyframes contact-spin { to { transform: rotate(360deg); } }
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
const form = document.querySelector('.demo-page form');
const button = document.querySelector('.contact-submit-btn');
if (!form || !button) {
return;
}
form.addEventListener('submit', function () {
if (!form.checkValidity()) {
return;
}
button.disabled = true;
button.classList.add('is-loading');
button.setAttribute('aria-busy', 'true');
});
});
</script>
{% endblock %}