<div class="flex flex-col justify-center gap-6 lg:mx-[144px]">
<div x-data="initCarouselcarousel159090564()" x-init="init()" class="relative w-full h-full mx-auto">
<div class="flex justify-between items-center mb-8 ">
<h2 class="text-3xl font-semibold ">Nos engagements pour bien voir et bien entendre</h2>
<div class="flex items-center justify-center space-x-4 ">
<div class=" hidden sm:flex flex space-x-2">
<button type="button" class="carousel-button-prev-carousel-159090564 before:border-none btn btn-dark-subtle btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.46967 12.5303C9.17678 12.2374 9.17678 11.7626 9.46967 11.4697L13.4697 7.46967C13.7626 7.17678 14.2374 7.17678 14.5303 7.46967C14.8232 7.76256 14.8232 8.23744 14.5303 8.53033L11.0607 12L14.5303 15.4697C14.8232 15.7626 14.8232 16.2374 14.5303 16.5303C14.2374 16.8232 13.7626 16.8232 13.4697 16.5303L9.46967 12.5303Z" fill="currentColor" />
</svg>
</button>
<button type="button" class="carousel-button-next-carousel-159090564 before:border-none btn btn-dark-subtle btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.5303 11.4697C14.8232 11.7626 14.8232 12.2374 14.5303 12.5303L10.5303 16.5303C10.2374 16.8232 9.76256 16.8232 9.46967 16.5303C9.17678 16.2374 9.17678 15.7626 9.46967 15.4697L12.9393 12L9.46967 8.53033C9.17678 8.23744 9.17678 7.76256 9.46967 7.46967C9.76256 7.17678 10.2374 7.17678 10.5303 7.46967L14.5303 11.4697Z" fill="currentColor" />
</svg>
</button>
</div>
</div>
</div>
<div x-ref="swiperContainer" id="carousel-159090564" class="swiper md:h-full">
<div class="swiper-wrapper ">
<div class="swiper-slide !transform-none " data-theme="light" data-hash="index-carousel-159090564-0">
<div x-data="hyva.modal()" @click="show('opticTestModal', $event)" class="relative min-w-[80%] h-[484px] bg-center rounded-lg cursor-pointer bg-cover" style="background-image: url('/img/commitment/test-optic.png');">
<div class="absolute inset-0 bg-black/10 rounded-lg"></div>
<h2 class="absolute top-6 left-6 font-medium text-white text-2xl">Test de vue gratuit</h2>
<div class="absolute bottom-6 right-6">
<button type="button" class=" btn btn-light btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 7C12.75 6.58579 12.4142 6.25 12 6.25C11.5858 6.25 11.25 6.58579 11.25 7V11.25H7C6.58579 11.25 6.25 11.5858 6.25 12C6.25 12.4142 6.58579 12.75 7 12.75H11.25V17C11.25 17.4142 11.5858 17.75 12 17.75C12.4142 17.75 12.75 17.4142 12.75 17V12.75H17C17.4142 12.75 17.75 12.4142 17.75 12C17.75 11.5858 17.4142 11.25 17 11.25H12.75V7Z" fill="currentColor" />
</svg>
</button>
</div>
<div x-cloak x-bind="overlay('opticTestModal')" x-spread="overlay('opticTestModal')" class="fixed inset-0 top-32 bg-black bg-opacity-50 backdrop-blur-xl z-50 overflow-y-auto cursor-default">
<div class="fixed flex w-full justify-center items-start text-left z-40 min-h-screen">
<div x-ref="opticTestModal" role="dialog" aria-modal="true" class="relative bg-white shadow-xl rounded-3xl p-10 w-[960px] my-10">
<div class="sticky top-6 flex justify-end -mr-4" @click.stop="hide()">
<button type="button" class=" btn btn-dark-ghost btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.99469 7.9047C8.70179 7.6118 8.22692 7.6118 7.93403 7.9047C7.64113 8.19759 7.64113 8.67246 7.93403 8.96536L10.9392 11.9706L7.93403 14.9758C7.64114 15.2687 7.64114 15.7435 7.93403 16.0364C8.22693 16.3293 8.7018 16.3293 8.99469 16.0364L11.9999 13.0312L15.0051 16.0364C15.298 16.3293 15.7729 16.3293 16.0658 16.0364C16.3586 15.7435 16.3586 15.2687 16.0658 14.9758L13.0606 11.9706L16.0658 8.96536C16.3587 8.67246 16.3587 8.19759 16.0658 7.9047C15.7729 7.6118 15.298 7.6118 15.0051 7.9047L11.9999 10.9099L8.99469 7.9047Z" fill="currentColor" />
</svg>
</button>
</div>
<div class="flex flex-col md:mx-8 mb-8">
<span class="font-medium text-normal">Êtes vous sûr de bien voir ?</span>
<h2 class="font-medium text-3xl">Test de vue gratuit</h2>
<picture>
<source srcset="/img/commitment/eyetest2.png" media="(min-width: 640px)" />
<img x-ref="image" src="/img/telemedecine/telemedecineMobile.png" alt="test de vue gratuit" class="object-cover object-center my-6 rounded-lg w-full h-full" loading="lazy" />
</picture>
<div class="flex flex-col gap-4">
<h2 class="font-medium text-3xl">Testez* gratuitement votre vue</h2>
<p>Aujourd’hui, les troubles visuels touchent environ 70% de la population française.Il est donc essentiel de faire contrôler votre vue régulièrement. Nous avons des solutions pour vous !</p>
</div>
<div class="flex flex-col gap-6 my-8">
<div class="flex flex-col gap-4 my-12">
<span class="text-xl font-medium mb-2">Faire vérifier votre vue en magasin, c'est simple et rapide !</span>
<div class="flex flex-col my-8 gap-4 lg:grid lg:grid-rows-2 lg:grid-flow-col gap-6">
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/phone2.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prendre un rendez-vous dans le magasin de votre choix.</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/letter.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Notre opticien effectue une vérification de votre vue.</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/eyes3.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">N'hésitez pas à apporter votre ordonnance.</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/lunette.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">On vous aide à trouver la meilleure solution pour votre confort visuel</span>
</div>
</div>
</div>
<div class="bg-neutral-100 rounded-lg w-full flex flex-col">
<div class="flex flex-col m-9 gap-2">
<div class="flex flex-row items-center gap-1 mb-4">
<span><svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C17.1086 21.25 21.25 17.1086 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75ZM1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 17.9371 17.9371 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12ZM9.25 11C9.25 10.5858 9.58579 10.25 10 10.25H12C12.2489 10.25 12.4815 10.3734 12.621 10.5795C12.7606 10.7856 12.7888 11.0475 12.6964 11.2785L11.5192 14.2215C11.3221 14.7141 11.685 15.25 12.2155 15.25H13C13.4142 15.25 13.75 15.5858 13.75 16C13.75 16.4142 13.4142 16.75 13 16.75H12.2155C10.6238 16.75 9.5353 15.1423 10.1265 13.6644L10.8922 11.75H10C9.58579 11.75 9.25 11.4142 9.25 11ZM12 7C11.4478 7 11 7.44772 11 8C11 8.55228 11.4478 9 12 9H12.1C12.6523 9 13.1 8.55228 13.1 8C13.1 7.44772 12.6523 7 12.1 7H12Z" fill="currentColor" />
</svg>
</span>
<span class="text-xl font-medium">Bon à savoir : durée de validité de votre ordonnance</span>
</div>
<div class="flex flex-row items-center justify-between gap-1 bg-white px-6 w-full min-h-14 rounded-lg shadow-sm">
<span></span>
<span><svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5336 11.473C19.6039 11.5441 19.657 11.6258 19.6931 11.7129L19.5336 11.473ZM19.5299 11.4693L15.5303 7.46967C15.2374 7.17678 14.7626 7.17678 14.4697 7.46967C14.1768 7.76256 14.1768 8.23744 14.4697 8.53033L17.1893 11.25H5C4.58579 11.25 4.25 11.5858 4.25 12C4.25 12.4142 4.58579 12.75 5 12.75H17.1893L14.4697 15.4697C14.1768 15.7626 14.1768 16.2374 14.4697 16.5303C14.7626 16.8232 15.2374 16.8232 15.5303 16.5303L19.5303 12.5303C19.6022 12.4584 19.6565 12.3755 19.6931 12.2871C19.7298 12.1987 19.75 12.1017 19.75 12C19.75 11.8983 19.7298 11.8013 19.6931 11.7129" fill="currentColor" />
</svg>
</span>
<span></span>
</div>
<div class="flex flex-row items-center justify-between gap-1 bg-white px-6 w-full min-h-14 rounded-lg shadow-sm">
<span></span>
<span><svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5336 11.473C19.6039 11.5441 19.657 11.6258 19.6931 11.7129L19.5336 11.473ZM19.5299 11.4693L15.5303 7.46967C15.2374 7.17678 14.7626 7.17678 14.4697 7.46967C14.1768 7.76256 14.1768 8.23744 14.4697 8.53033L17.1893 11.25H5C4.58579 11.25 4.25 11.5858 4.25 12C4.25 12.4142 4.58579 12.75 5 12.75H17.1893L14.4697 15.4697C14.1768 15.7626 14.1768 16.2374 14.4697 16.5303C14.7626 16.8232 15.2374 16.8232 15.5303 16.5303L19.5303 12.5303C19.6022 12.4584 19.6565 12.3755 19.6931 12.2871C19.7298 12.1987 19.75 12.1017 19.75 12C19.75 11.8983 19.7298 11.8013 19.6931 11.7129" fill="currentColor" />
</svg>
</span>
<span></span>
</div>
<div class="flex flex-row items-center justify-between gap-1 bg-white px-6 w-full min-h-14 rounded-lg shadow-sm">
<span></span>
<span><svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5336 11.473C19.6039 11.5441 19.657 11.6258 19.6931 11.7129L19.5336 11.473ZM19.5299 11.4693L15.5303 7.46967C15.2374 7.17678 14.7626 7.17678 14.4697 7.46967C14.1768 7.76256 14.1768 8.23744 14.4697 8.53033L17.1893 11.25H5C4.58579 11.25 4.25 11.5858 4.25 12C4.25 12.4142 4.58579 12.75 5 12.75H17.1893L14.4697 15.4697C14.1768 15.7626 14.1768 16.2374 14.4697 16.5303C14.7626 16.8232 15.2374 16.8232 15.5303 16.5303L19.5303 12.5303C19.6022 12.4584 19.6565 12.3755 19.6931 12.2871C19.7298 12.1987 19.75 12.1017 19.75 12C19.75 11.8983 19.7298 11.8013 19.6931 11.7129" fill="currentColor" />
</svg>
</span>
<span></span>
</div>
</div>
</div>
</div>
</div>
<div class="flex w-full justify-center sticky bottom-0 p-4 z-5 gap-x-4 lg:gap-x-6">
<div class="">
<button type="button" class=" btn btn-dark btn-size-large btn-icons">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.25C8.41421 1.25 8.75 1.58579 8.75 2V3.25H15.25V2C15.25 1.58579 15.5858 1.25 16 1.25C16.4142 1.25 16.75 1.58579 16.75 2V3.25H20C21.5188 3.25 22.75 4.48122 22.75 6V20C22.75 21.5188 21.5188 22.75 20 22.75H4C2.48122 22.75 1.25 21.5188 1.25 20V6C1.25 4.48122 2.48122 3.25 4 3.25H7.25V2C7.25 1.58579 7.58579 1.25 8 1.25ZM7.25 4.75H4C3.30964 4.75 2.75 5.30964 2.75 6V8.25H21.25V6C21.25 5.30964 20.6904 4.75 20 4.75H16.75V6C16.75 6.41421 16.4142 6.75 16 6.75C15.5858 6.75 15.25 6.41421 15.25 6V4.75H8.75V6C8.75 6.41421 8.41421 6.75 8 6.75C7.58579 6.75 7.25 6.41421 7.25 6V4.75ZM21.25 9.75H2.75V20C2.75 20.6904 3.30964 21.25 4 21.25H20C20.6904 21.25 21.25 20.6904 21.25 20V9.75ZM12 14.5C12.5523 14.5 13 14.0523 13 13.5C13 12.9477 12.5523 12.5 12 12.5C11.4477 12.5 11 12.9477 11 13.5C11 14.0523 11.4477 14.5 12 14.5ZM8 17.5C8 18.0523 7.55228 18.5 7 18.5C6.44772 18.5 6 18.0523 6 17.5C6 16.9477 6.44772 16.5 7 16.5C7.55228 16.5 8 16.9477 8 17.5ZM12 18.5C12.5523 18.5 13 18.0523 13 17.5C13 16.9477 12.5523 16.5 12 16.5C11.4477 16.5 11 16.9477 11 17.5C11 18.0523 11.4477 18.5 12 18.5ZM17 14.5C17.5523 14.5 18 14.0523 18 13.5C18 12.9477 17.5523 12.5 17 12.5C16.4477 12.5 16 12.9477 16 13.5C16 14.0523 16.4477 14.5 17 14.5ZM17 18.5C17.5523 18.5 18 18.0523 18 17.5C18 16.9477 17.5523 16.5 17 16.5C16.4477 16.5 16 16.9477 16 17.5C16 18.0523 16.4477 18.5 17 18.5Z" fill="currentColor" />
</svg>
Prendre un rendez-vous
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
'use strict';
(function() {
const modals = [];
const excludedFromFocusTrapping = new Set();
function trapFocusInNextModalWithOverlay() {
for (let idx = modals.length - 1; idx >= 0; idx--) {
const nextOnStack = modals[idx];
const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
if (!isOverlayDisabled(nextDialogElement)) {
hyva.trapFocus(nextDialogElement);
break;
}
}
}
function focusables(dialogElement) {
const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
return Array.from(dialogElement.querySelectorAll(selector))
.filter(el => !el.hasAttribute('disabled'));
}
function firstVisible(elements) {
const a = Array.from(elements);
for (let i = 0; i < a.length; i++) {
if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
}
return null;
}
function isInViewport(element) {
const rect = element && element.getBoundingClientRect();
return rect &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.right <= window.innerWidth &&
rect.bottom <= window.innerHeight;
}
function setFocusAfterTransition(dialogElement, duration) {
/*
* If the dialog contains an x-focus-first element that is not within a nested dialog, set focus
* immediately from the trapFocus default, to avoid the switch after the transition duration.
*/
const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
next: for (let candidate of candidates) {
for (let child of nested) {
if (child.contains(candidate)) continue next;
}
setTimeout(() => candidate.focus(), 50);
break;
}
window.setTimeout(() => {
const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
focusables(dialogElement)[0] ||
null;
focusElement && isInViewport(focusElement) && focusElement.focus();
}, Math.max(1, duration));
}
function determineTrigger($refs, dialog, trigger) {
/* if show() was called without arguments use the event target as open trigger */
if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
return dialog.target;
}
/* if show('name', $event) was called with the event as the second argument use the event target as trigger */
if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
return trigger.target;
}
/* if show('name', 'trigger') was called with the ref name pr selector of the trigger element */
if (typeof trigger === 'string') {
try {
return $refs[trigger] || document.querySelector(trigger)
} catch (e) {
/* Intentionally left empty because we don't know if trigger is intended as a valid selector string */
}
}
/* if show('name', document.querySelector('...')) was called, use that as the trigger */
if (trigger instanceof Element) {
return trigger;
}
/* unknown trigger - no focus will be set when the dialog is hidden */
return null;
}
function isOverlayDisabled(dialog) {
return dialog && dialog.hasAttribute('x-no-overlay')
}
function areRemainingModalsWithoutOverlay(modals) {
const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
return overflowDisabled.length === modals.length;
}
window.hyva.modal = function(options) {
const config = Object.assign({
dialog: 'dialog',
duration: 300,
/* ms before allowing subsequent hiding of modals for nested modals (see transition duration) */
transitionEnter: 'transition ease-out duration-300',
transitionEnterStart: 'opacity-0',
transitionEnterEnd: 'opacity-100',
transitionLeave: 'transition ease-in duration-300',
transitionLeaveStart: 'opacity-100',
transitionLeaveEnd: 'opacity-0',
}, options);
let lastHide = 0;
return {
opened: {},
show(dialog, trigger) {
console.log('show');
const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
const name = typeof dialog === 'string' ? dialog : config.dialog;
const dialogElement = this.$refs[name];
if (!dialogElement) {
console.error(`Use $modal->getShowJs() in the open trigger, or specify a custom name with\n$modal->withDialogRefName("my-name") and use show("my-name", $event).`);
return;
}
const useOverlay = !dialogElement.hasAttribute('x-no-overlay');
if (this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.add('!transform-none');
}
}
dialogElement.scrollTop = 0;
/* Prevent adding the same modal on the stack twice */
if (this.opened[name]) {
return;
}
if (focusTargetAfterHide) {
focusTargetAfterHide.setAttribute('aria-expanded', 'true');
}
this.opened[name] = true;
useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
setFocusAfterTransition(dialogElement, config.duration);
const frame = {
name,
instance: this,
focusTarget: focusTargetAfterHide,
time: Date.now()
};
modals.push(frame);
if (useOverlay) {
document.body.classList.add('overflow-hidden');
}
return new Promise(resolve => frame.resolve = resolve);
},
cancel() {
this.hide(false);
},
ok() {
this.hide(true);
},
hide(value) {
// Guard against Escape being pressed multiple times before a transition is finished, otherwise
// this function will pop further dialogs from the stack but the display will not update.
console.log('Hiding modal:', value);
if (Date.now() - lastHide < config.duration) {
return;
}
lastHide = Date.now();
const modal = modals.pop() || {};
const name = modal.name;
this.opened[name] = false;
hyva.releaseFocus(modal.instance.$refs[modal.name])
trapFocusInNextModalWithOverlay();
const nextFocusAfterHide = modal.focusTarget;
nextFocusAfterHide && setTimeout(() => {
nextFocusAfterHide.setAttribute('aria-expanded', 'false');
nextFocusAfterHide.focus()
}, config.duration);
if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
document.body.classList.remove('overflow-hidden');
}
if (this.$refs && this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.remove('!transform-none');
}
}
modal.resolve(value);
},
overlay(dialog) {
const name = typeof dialog === 'string' ? dialog : config.dialog;
return {
['x-show']() {
return this.opened[name]
},
['x-transition:enter']: config.transitionEnter,
['x-transition:enter-start']: config.transitionEnterStart,
['x-transition:enter-end']: config.transitionEnterEnd,
['x-transition:leave']: config.transitionLeave,
['x-transition:leave-start']: config.transitionLeaveStart,
['x-transition:leave-end']: config.transitionLeaveEnd,
['@hyva-modal-show.window'](event) {
event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
}
};
}
};
}
window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1]
window.hyva.modal.pop = function() {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
modal.instance.hide();
}
}
window.hyva.modal.excludeSelectorsFromFocusTrap = function(selectors) {
typeof selectors === 'string' || selectors instanceof String ?
excludedFromFocusTrapping.add(selectors) :
selectors.map(selector => excludedFromFocusTrapping.add(selector));
}
window.hyva.modal.eventListeners = {
keydown: event => {
if (event.key === 'Escape') {
window.hyva.modal.pop();
}
},
/* generic modal @click.outside handler */
click: event => {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
const dialog = modal.instance.$refs[modal.name];
if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
!isOverlayDisabled(dialog) && // if dialog has overlay
!dialog.contains(event.target)) { // if click is outside of dialog
modal.instance.hide();
}
}
}
};
document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
document.addEventListener('click', window.hyva.modal.eventListeners.click);
})();
</script>
</div>
<div class="swiper-slide !transform-none " data-theme="light" data-hash="index-carousel-159090564-1">
<div x-data="hyva.modal()" @click="show('audioTestModal', $event)" class="relative min-w-[80%] h-[484px] bg-center rounded-lg cursor-pointer bg-cover" style="background-image: url('/img/commitment/audiotest.png');">
<div class="absolute inset-0 bg-black/10 rounded-lg"></div>
<h2 class="absolute top-6 left-6 font-medium text-white text-2xl">Test d'audition gratuit</h2>
<div class="absolute bottom-6 right-6">
<button type="button" class=" btn btn-light btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 7C12.75 6.58579 12.4142 6.25 12 6.25C11.5858 6.25 11.25 6.58579 11.25 7V11.25H7C6.58579 11.25 6.25 11.5858 6.25 12C6.25 12.4142 6.58579 12.75 7 12.75H11.25V17C11.25 17.4142 11.5858 17.75 12 17.75C12.4142 17.75 12.75 17.4142 12.75 17V12.75H17C17.4142 12.75 17.75 12.4142 17.75 12C17.75 11.5858 17.4142 11.25 17 11.25H12.75V7Z" fill="currentColor" />
</svg>
</button>
</div>
<div x-cloak x-bind="overlay('audioTestModal')" x-spread="overlay('audioTestModal')" class="fixed inset-0 top-32 bg-black bg-opacity-50 backdrop-blur-xl z-50 overflow-y-auto cursor-default">
<div class="fixed flex w-full justify-center items-start text-left z-40 min-h-screen">
<div x-ref="audioTestModal" role="dialog" aria-modal="true" class="relative bg-white shadow-xl rounded-3xl p-10 w-[960px] my-10">
<div class="sticky top-6 flex justify-end -mr-4" @click.stop="hide()">
<button type="button" class=" btn btn-dark-ghost btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.99469 7.9047C8.70179 7.6118 8.22692 7.6118 7.93403 7.9047C7.64113 8.19759 7.64113 8.67246 7.93403 8.96536L10.9392 11.9706L7.93403 14.9758C7.64114 15.2687 7.64114 15.7435 7.93403 16.0364C8.22693 16.3293 8.7018 16.3293 8.99469 16.0364L11.9999 13.0312L15.0051 16.0364C15.298 16.3293 15.7729 16.3293 16.0658 16.0364C16.3586 15.7435 16.3586 15.2687 16.0658 14.9758L13.0606 11.9706L16.0658 8.96536C16.3587 8.67246 16.3587 8.19759 16.0658 7.9047C15.7729 7.6118 15.298 7.6118 15.0051 7.9047L11.9999 10.9099L8.99469 7.9047Z" fill="currentColor" />
</svg>
</button>
</div>
<div class="flex flex-col md:mx-8 mb-8">
<span class="font-medium text-normal">Tester son audition est aussi simple que de tester sa vue.</span>
<h2 class="font-medium text-3xl">Test auditif gratuit*</h2>
<picture>
<source srcset="/img/commitment/audio-test.png" media="(min-width: 640px)" />
<img x-ref="image" src="/img/commitment/audiotest.png" alt="test de vue gratuit" class="object-cover object-center my-6 rounded-lg w-full h-full" loading="lazy" />
</picture>
<div class="flex flex-col gap-4">
<h2 class="font-medium text-3xl">Pourquoi se faire dépister ?</h2>
<p>Le dépistage est la première étape vers une bonne santé auditive. Pour cela, vous pouvez réaliser un test auditif par un professionnel de santé, médecin ORL ou audioprothésiste diplômé d’État.
Ce test a pour but de suivre l’évolution de votre audition et de déceler une possible perte auditive.
La prise en charge précoce d’un trouble auditif est la clé pour conserver son bien-être auditif le plus longtemps possible.</p>
<span>
<a href="#" class=" text-base link-leading-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5336 11.473C19.6039 11.5441 19.657 11.6258 19.6931 11.7129L19.5336 11.473ZM19.5299 11.4693L15.5303 7.46967C15.2374 7.17678 14.7626 7.17678 14.4697 7.46967C14.1768 7.76256 14.1768 8.23744 14.4697 8.53033L17.1893 11.25H5C4.58579 11.25 4.25 11.5858 4.25 12C4.25 12.4142 4.58579 12.75 5 12.75H17.1893L14.4697 15.4697C14.1768 15.7626 14.1768 16.2374 14.4697 16.5303C14.7626 16.8232 15.2374 16.8232 15.5303 16.5303L19.5303 12.5303C19.6022 12.4584 19.6565 12.3755 19.6931 12.2871C19.7298 12.1987 19.75 12.1017 19.75 12C19.75 11.8983 19.7298 11.8013 19.6931 11.7129" fill="currentColor" />
</svg>
Link
</a>
</span>
</div>
<div class="flex flex-col gap-6 my-8">
<div class="flex flex-col lg:flex-row bg-neutral-100 rounded-lg w-full gap-9 p-9">
<img src="/img/commitment/goodmood.png" alt="/img/commitment/goodmood.png" class="h-[295px] lg:h-[425px] rounded-lg object-cover object-center lg:w-1/2">
<div class="lg:w-1/2">
<span class="text-xl font-medium">Comment se passe le test ?</span>
<div>
<ol class="flex flex-col list-decimal pl-5 my-4 gap-6">
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
</div>
</div>
</div>
<div class="flex flex-col gap-4 my-9">
<h2 class="text-xl font-medium">Être rappelé pour prendre rendez-vous</h2>
<p>Complétez le formulaire ci-dessous et nos conseillers vous rappelleront dans les plus brefs délais du lundi au vendredi de 10h à 12h et de 14h à 17h.</p>
</div>
</div>
</div>
<div class="relative flex flex-col bg-neutral-100 rounded-lg w-full gap-9 p-9 z-10">
<div class="flex flex-col gap-y-4">
<span class="font-medium">Civilité</span>
<div class="flex flex-row gap-6">
<label class="selection-control-label selection-control-size-sm">
<input type="radio">
<span>Madame</span>
</label>
<label class="selection-control-label selection-control-size-sm">
<input type="radio">
<span>Monsieur</span>
</label>
</div>
</div>
<div class="flex flex-col gap-y-2">
<label>
<input type="text" placeholder="Nom" class="border-neutral-300 w-full rounded-md placeholder:text-neutral-500">
</label>
<label>
<input type="text" placeholder="Prénom" class="border-neutral-300 w-full rounded-md placeholder:text-neutral-500">
</label>
<label>
<input type="text" placeholder="Email" class="border-neutral-300 w-full rounded-md placeholder:text-neutral-500">
</label>
<div class="flex flex-col lg:flex-row gap-2">
<select class="border-neutral-300 rounded-md inline-block md:w-auto w-full">
<option value="" selected>France (+33)</option>
<option value="">Antigua-et-Barbuda (+1268)</option>
<option value="">République centrafricaine (+236)</option>
</select>
<input type="text" placeholder="Téléphone" class="flex border-neutral-300 lg:w-3/4 rounded-md placeholder:text-neutral-500">
</div>
</div>
<div class="flex flex-col gap-y-4">
<span class="font-medium">Je possède déjà une ordonnance d'ORL</span>
<div class="flex flex-row gap-6">
<label class="selection-control-label selection-control-size-sm">
<input type="radio">
<span>Oui</span>
</label>
<label class="selection-control-label selection-control-size-sm">
<input type="radio">
<span>Non</span>
</label>
</div>
</div>
<div>
<label class="selection-control-label selection-control-size-sm">
<input type="checkbox">
<span>J’accepte de recevoir des offres et actualités de la part des enseignes du Groupe Afflelou** (Opticien et Acousticien).</span>
</label>
</div>
<div class="flex justify-center w-full">
<button type="button" class=" btn btn-audio btn-size-large btn-icons">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.15544 3.68525C7.94039 3.50031 7.66543 3.39987 7.3818 3.40266L7.3749 3.4027H4.57004C4.40787 3.40289 4.24752 3.43683 4.09918 3.50235C3.95075 3.56792 3.81759 3.66367 3.70819 3.78352C3.59879 3.90336 3.51554 4.04468 3.46375 4.19846C3.41248 4.35069 3.39314 4.51184 3.40692 4.67185C3.70295 7.45044 4.64886 10.1204 6.16815 12.4656L6.1715 12.4708C7.55193 14.6432 9.39372 16.485 11.5661 17.8654L11.5716 17.8689C13.906 19.3828 16.5626 20.3284 19.3284 20.6301C19.4887 20.6438 19.6501 20.6242 19.8024 20.5727C19.9566 20.5206 20.0982 20.4368 20.2182 20.3268C20.3381 20.2167 20.4337 20.0829 20.4989 19.9337C20.5641 19.7846 20.5975 19.6235 20.5968 19.4607V19.4579V16.6527C20.5968 16.6469 20.5969 16.6411 20.597 16.6353C20.6041 16.3487 20.5057 16.0694 20.3203 15.8507C20.1356 15.6326 19.8774 15.4899 19.5946 15.4493C18.6456 15.3239 17.7139 15.0916 16.8171 14.757L16.8155 14.7564C16.6063 14.6777 16.379 14.6607 16.1604 14.7073C15.9424 14.7538 15.7423 14.8617 15.5836 15.0182L15.5824 15.0194L14.3976 16.2041C14.1744 16.4274 13.8295 16.4739 13.5551 16.3179C11.1043 14.9244 9.07516 12.8952 7.68163 10.4445C7.52558 10.17 7.57214 9.82515 7.79538 9.60192L8.98137 8.41592C9.13784 8.25722 9.24569 8.05708 9.29218 7.8391C9.33879 7.62054 9.32177 7.39321 9.24314 7.18403L9.24255 7.18245C8.90791 6.28567 8.67567 5.35396 8.55024 4.40505C8.51001 4.1253 8.36977 3.86957 8.15544 3.68525ZM7.37172 2.00009C7.99438 1.99486 8.59782 2.21575 9.06999 2.62181C9.5431 3.02869 9.85212 3.59371 9.93945 4.21157L9.94036 4.21801C10.0518 5.06331 10.2586 5.89328 10.5566 6.69209L10.5561 6.69051C10.729 7.1507 10.7665 7.65083 10.6639 8.13165C10.5614 8.61247 10.3232 9.05381 9.97748 9.40339L9.97472 9.40618L9.17237 10.2085C10.3338 12.0846 11.9149 13.6657 13.791 14.8271L14.5961 14.022C14.9457 13.6763 15.387 13.4381 15.8679 13.3356C16.3484 13.2331 16.8481 13.2704 17.3081 13.4431C18.1067 13.7411 18.9364 13.9477 19.7815 14.0592L19.7878 14.06C20.4123 14.1481 20.9827 14.4627 21.3905 14.944C21.7962 15.4228 22.0127 16.0334 21.9994 16.6607V19.4564C22.0007 19.814 21.9273 20.168 21.7841 20.4956C21.6406 20.8237 21.4302 21.1182 21.1664 21.3603C20.9025 21.6024 20.591 21.7867 20.2518 21.9014C19.9126 22.0161 19.5532 22.0587 19.1965 22.0265L19.1839 22.0252C16.1986 21.7008 13.3309 20.681 10.8111 19.0475C8.467 17.5574 6.47942 15.5698 4.98932 13.2257C3.3501 10.6944 2.32997 7.81274 2.01151 4.81391L2.01044 4.80297C1.97831 4.44742 2.02056 4.08908 2.13451 3.75076C2.24846 3.41244 2.4316 3.10156 2.67228 2.8379C2.91296 2.57424 3.20591 2.36358 3.53246 2.21934C3.85902 2.07509 4.21203 2.00043 4.56903 2.00009H7.37172Z" fill="currentColor" />
</svg>
Être rappelé
</button>
</div>
<p class="text-xs text-neutral-400">
En complétant le présent formulaire et en cliquant sur « être rappelé », je suis informé(e) et j’accepte que mes données personnelles soient traitées par la société LION SENECA/France AUDIO, en qualité de responsable de traitement afin de me recontacter pour organiser mon essayage d’aides auditives conformément à sa politique de confidentialité.
Mes données personnelles pourront également être utilisées, avec mon consentement, par les sociétés LION SENECA/France AUDIO et ALAIN AFFLELOU FRANCHISEUR pour m’envoyer de la prospection commerciale.
Pour en savoir plus sur le traitement de vos données et sur vos droits, consultez la politique de confidentialité Alain Afflelou Acousticien.
</p>
</div>
<div class="flex flex-col gap-2 text-neutral-500 text-xs mt-4">
<p>* Sous réserve d’une prescription médicale.</p>
<p>** Les sociétés Alain Afflelou Franchiseur et Lion/Seneca France Audio.</p>
</div>
<div class="flex w-full justify-center sticky bottom-0 p-4 z-5 gap-x-4 lg:gap-x-6">
<div class="">
<button type="button" class=" btn btn-audio btn-size-large btn-icons">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.15544 3.68525C7.94039 3.50031 7.66543 3.39987 7.3818 3.40266L7.3749 3.4027H4.57004C4.40787 3.40289 4.24752 3.43683 4.09918 3.50235C3.95075 3.56792 3.81759 3.66367 3.70819 3.78352C3.59879 3.90336 3.51554 4.04468 3.46375 4.19846C3.41248 4.35069 3.39314 4.51184 3.40692 4.67185C3.70295 7.45044 4.64886 10.1204 6.16815 12.4656L6.1715 12.4708C7.55193 14.6432 9.39372 16.485 11.5661 17.8654L11.5716 17.8689C13.906 19.3828 16.5626 20.3284 19.3284 20.6301C19.4887 20.6438 19.6501 20.6242 19.8024 20.5727C19.9566 20.5206 20.0982 20.4368 20.2182 20.3268C20.3381 20.2167 20.4337 20.0829 20.4989 19.9337C20.5641 19.7846 20.5975 19.6235 20.5968 19.4607V19.4579V16.6527C20.5968 16.6469 20.5969 16.6411 20.597 16.6353C20.6041 16.3487 20.5057 16.0694 20.3203 15.8507C20.1356 15.6326 19.8774 15.4899 19.5946 15.4493C18.6456 15.3239 17.7139 15.0916 16.8171 14.757L16.8155 14.7564C16.6063 14.6777 16.379 14.6607 16.1604 14.7073C15.9424 14.7538 15.7423 14.8617 15.5836 15.0182L15.5824 15.0194L14.3976 16.2041C14.1744 16.4274 13.8295 16.4739 13.5551 16.3179C11.1043 14.9244 9.07516 12.8952 7.68163 10.4445C7.52558 10.17 7.57214 9.82515 7.79538 9.60192L8.98137 8.41592C9.13784 8.25722 9.24569 8.05708 9.29218 7.8391C9.33879 7.62054 9.32177 7.39321 9.24314 7.18403L9.24255 7.18245C8.90791 6.28567 8.67567 5.35396 8.55024 4.40505C8.51001 4.1253 8.36977 3.86957 8.15544 3.68525ZM7.37172 2.00009C7.99438 1.99486 8.59782 2.21575 9.06999 2.62181C9.5431 3.02869 9.85212 3.59371 9.93945 4.21157L9.94036 4.21801C10.0518 5.06331 10.2586 5.89328 10.5566 6.69209L10.5561 6.69051C10.729 7.1507 10.7665 7.65083 10.6639 8.13165C10.5614 8.61247 10.3232 9.05381 9.97748 9.40339L9.97472 9.40618L9.17237 10.2085C10.3338 12.0846 11.9149 13.6657 13.791 14.8271L14.5961 14.022C14.9457 13.6763 15.387 13.4381 15.8679 13.3356C16.3484 13.2331 16.8481 13.2704 17.3081 13.4431C18.1067 13.7411 18.9364 13.9477 19.7815 14.0592L19.7878 14.06C20.4123 14.1481 20.9827 14.4627 21.3905 14.944C21.7962 15.4228 22.0127 16.0334 21.9994 16.6607V19.4564C22.0007 19.814 21.9273 20.168 21.7841 20.4956C21.6406 20.8237 21.4302 21.1182 21.1664 21.3603C20.9025 21.6024 20.591 21.7867 20.2518 21.9014C19.9126 22.0161 19.5532 22.0587 19.1965 22.0265L19.1839 22.0252C16.1986 21.7008 13.3309 20.681 10.8111 19.0475C8.467 17.5574 6.47942 15.5698 4.98932 13.2257C3.3501 10.6944 2.32997 7.81274 2.01151 4.81391L2.01044 4.80297C1.97831 4.44742 2.02056 4.08908 2.13451 3.75076C2.24846 3.41244 2.4316 3.10156 2.67228 2.8379C2.91296 2.57424 3.20591 2.36358 3.53246 2.21934C3.85902 2.07509 4.21203 2.00043 4.56903 2.00009H7.37172Z" fill="currentColor" />
</svg>
Être rappelé
</button>
</div>
<div class="">
<button type="button" class=" btn btn-audio-subtle btn-size-large btn-icons">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.25C8.41421 1.25 8.75 1.58579 8.75 2V3.25H15.25V2C15.25 1.58579 15.5858 1.25 16 1.25C16.4142 1.25 16.75 1.58579 16.75 2V3.25H20C21.5188 3.25 22.75 4.48122 22.75 6V20C22.75 21.5188 21.5188 22.75 20 22.75H4C2.48122 22.75 1.25 21.5188 1.25 20V6C1.25 4.48122 2.48122 3.25 4 3.25H7.25V2C7.25 1.58579 7.58579 1.25 8 1.25ZM7.25 4.75H4C3.30964 4.75 2.75 5.30964 2.75 6V8.25H21.25V6C21.25 5.30964 20.6904 4.75 20 4.75H16.75V6C16.75 6.41421 16.4142 6.75 16 6.75C15.5858 6.75 15.25 6.41421 15.25 6V4.75H8.75V6C8.75 6.41421 8.41421 6.75 8 6.75C7.58579 6.75 7.25 6.41421 7.25 6V4.75ZM21.25 9.75H2.75V20C2.75 20.6904 3.30964 21.25 4 21.25H20C20.6904 21.25 21.25 20.6904 21.25 20V9.75ZM12 14.5C12.5523 14.5 13 14.0523 13 13.5C13 12.9477 12.5523 12.5 12 12.5C11.4477 12.5 11 12.9477 11 13.5C11 14.0523 11.4477 14.5 12 14.5ZM8 17.5C8 18.0523 7.55228 18.5 7 18.5C6.44772 18.5 6 18.0523 6 17.5C6 16.9477 6.44772 16.5 7 16.5C7.55228 16.5 8 16.9477 8 17.5ZM12 18.5C12.5523 18.5 13 18.0523 13 17.5C13 16.9477 12.5523 16.5 12 16.5C11.4477 16.5 11 16.9477 11 17.5C11 18.0523 11.4477 18.5 12 18.5ZM17 14.5C17.5523 14.5 18 14.0523 18 13.5C18 12.9477 17.5523 12.5 17 12.5C16.4477 12.5 16 12.9477 16 13.5C16 14.0523 16.4477 14.5 17 14.5ZM17 18.5C17.5523 18.5 18 18.0523 18 17.5C18 16.9477 17.5523 16.5 17 16.5C16.4477 16.5 16 16.9477 16 17.5C16 18.0523 16.4477 18.5 17 18.5Z" fill="currentColor" />
</svg>
Prendre un rendez-vous
</button>
</div>
<div class="">
<button type="button" class=" btn btn-audio-subtle btn-size-large btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.25C8.41421 1.25 8.75 1.58579 8.75 2V3.25H15.25V2C15.25 1.58579 15.5858 1.25 16 1.25C16.4142 1.25 16.75 1.58579 16.75 2V3.25H20C21.5188 3.25 22.75 4.48122 22.75 6V20C22.75 21.5188 21.5188 22.75 20 22.75H4C2.48122 22.75 1.25 21.5188 1.25 20V6C1.25 4.48122 2.48122 3.25 4 3.25H7.25V2C7.25 1.58579 7.58579 1.25 8 1.25ZM7.25 4.75H4C3.30964 4.75 2.75 5.30964 2.75 6V8.25H21.25V6C21.25 5.30964 20.6904 4.75 20 4.75H16.75V6C16.75 6.41421 16.4142 6.75 16 6.75C15.5858 6.75 15.25 6.41421 15.25 6V4.75H8.75V6C8.75 6.41421 8.41421 6.75 8 6.75C7.58579 6.75 7.25 6.41421 7.25 6V4.75ZM21.25 9.75H2.75V20C2.75 20.6904 3.30964 21.25 4 21.25H20C20.6904 21.25 21.25 20.6904 21.25 20V9.75ZM12 14.5C12.5523 14.5 13 14.0523 13 13.5C13 12.9477 12.5523 12.5 12 12.5C11.4477 12.5 11 12.9477 11 13.5C11 14.0523 11.4477 14.5 12 14.5ZM8 17.5C8 18.0523 7.55228 18.5 7 18.5C6.44772 18.5 6 18.0523 6 17.5C6 16.9477 6.44772 16.5 7 16.5C7.55228 16.5 8 16.9477 8 17.5ZM12 18.5C12.5523 18.5 13 18.0523 13 17.5C13 16.9477 12.5523 16.5 12 16.5C11.4477 16.5 11 16.9477 11 17.5C11 18.0523 11.4477 18.5 12 18.5ZM17 14.5C17.5523 14.5 18 14.0523 18 13.5C18 12.9477 17.5523 12.5 17 12.5C16.4477 12.5 16 12.9477 16 13.5C16 14.0523 16.4477 14.5 17 14.5ZM17 18.5C17.5523 18.5 18 18.0523 18 17.5C18 16.9477 17.5523 16.5 17 16.5C16.4477 16.5 16 16.9477 16 17.5C16 18.0523 16.4477 18.5 17 18.5Z" fill="currentColor" />
</svg>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
'use strict';
(function() {
const modals = [];
const excludedFromFocusTrapping = new Set();
function trapFocusInNextModalWithOverlay() {
for (let idx = modals.length - 1; idx >= 0; idx--) {
const nextOnStack = modals[idx];
const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
if (!isOverlayDisabled(nextDialogElement)) {
hyva.trapFocus(nextDialogElement);
break;
}
}
}
function focusables(dialogElement) {
const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
return Array.from(dialogElement.querySelectorAll(selector))
.filter(el => !el.hasAttribute('disabled'));
}
function firstVisible(elements) {
const a = Array.from(elements);
for (let i = 0; i < a.length; i++) {
if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
}
return null;
}
function isInViewport(element) {
const rect = element && element.getBoundingClientRect();
return rect &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.right <= window.innerWidth &&
rect.bottom <= window.innerHeight;
}
function setFocusAfterTransition(dialogElement, duration) {
/*
* If the dialog contains an x-focus-first element that is not within a nested dialog, set focus
* immediately from the trapFocus default, to avoid the switch after the transition duration.
*/
const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
next: for (let candidate of candidates) {
for (let child of nested) {
if (child.contains(candidate)) continue next;
}
setTimeout(() => candidate.focus(), 50);
break;
}
window.setTimeout(() => {
const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
focusables(dialogElement)[0] ||
null;
focusElement && isInViewport(focusElement) && focusElement.focus();
}, Math.max(1, duration));
}
function determineTrigger($refs, dialog, trigger) {
/* if show() was called without arguments use the event target as open trigger */
if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
return dialog.target;
}
/* if show('name', $event) was called with the event as the second argument use the event target as trigger */
if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
return trigger.target;
}
/* if show('name', 'trigger') was called with the ref name pr selector of the trigger element */
if (typeof trigger === 'string') {
try {
return $refs[trigger] || document.querySelector(trigger)
} catch (e) {
/* Intentionally left empty because we don't know if trigger is intended as a valid selector string */
}
}
/* if show('name', document.querySelector('...')) was called, use that as the trigger */
if (trigger instanceof Element) {
return trigger;
}
/* unknown trigger - no focus will be set when the dialog is hidden */
return null;
}
function isOverlayDisabled(dialog) {
return dialog && dialog.hasAttribute('x-no-overlay')
}
function areRemainingModalsWithoutOverlay(modals) {
const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
return overflowDisabled.length === modals.length;
}
window.hyva.modal = function(options) {
const config = Object.assign({
dialog: 'dialog',
duration: 300,
/* ms before allowing subsequent hiding of modals for nested modals (see transition duration) */
transitionEnter: 'transition ease-out duration-300',
transitionEnterStart: 'opacity-0',
transitionEnterEnd: 'opacity-100',
transitionLeave: 'transition ease-in duration-300',
transitionLeaveStart: 'opacity-100',
transitionLeaveEnd: 'opacity-0',
}, options);
let lastHide = 0;
return {
opened: {},
show(dialog, trigger) {
console.log('show');
const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
const name = typeof dialog === 'string' ? dialog : config.dialog;
const dialogElement = this.$refs[name];
if (!dialogElement) {
console.error(`Use $modal->getShowJs() in the open trigger, or specify a custom name with\n$modal->withDialogRefName("my-name") and use show("my-name", $event).`);
return;
}
const useOverlay = !dialogElement.hasAttribute('x-no-overlay');
if (this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.add('!transform-none');
}
}
dialogElement.scrollTop = 0;
/* Prevent adding the same modal on the stack twice */
if (this.opened[name]) {
return;
}
if (focusTargetAfterHide) {
focusTargetAfterHide.setAttribute('aria-expanded', 'true');
}
this.opened[name] = true;
useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
setFocusAfterTransition(dialogElement, config.duration);
const frame = {
name,
instance: this,
focusTarget: focusTargetAfterHide,
time: Date.now()
};
modals.push(frame);
if (useOverlay) {
document.body.classList.add('overflow-hidden');
}
return new Promise(resolve => frame.resolve = resolve);
},
cancel() {
this.hide(false);
},
ok() {
this.hide(true);
},
hide(value) {
// Guard against Escape being pressed multiple times before a transition is finished, otherwise
// this function will pop further dialogs from the stack but the display will not update.
console.log('Hiding modal:', value);
if (Date.now() - lastHide < config.duration) {
return;
}
lastHide = Date.now();
const modal = modals.pop() || {};
const name = modal.name;
this.opened[name] = false;
hyva.releaseFocus(modal.instance.$refs[modal.name])
trapFocusInNextModalWithOverlay();
const nextFocusAfterHide = modal.focusTarget;
nextFocusAfterHide && setTimeout(() => {
nextFocusAfterHide.setAttribute('aria-expanded', 'false');
nextFocusAfterHide.focus()
}, config.duration);
if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
document.body.classList.remove('overflow-hidden');
}
if (this.$refs && this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.remove('!transform-none');
}
}
modal.resolve(value);
},
overlay(dialog) {
const name = typeof dialog === 'string' ? dialog : config.dialog;
return {
['x-show']() {
return this.opened[name]
},
['x-transition:enter']: config.transitionEnter,
['x-transition:enter-start']: config.transitionEnterStart,
['x-transition:enter-end']: config.transitionEnterEnd,
['x-transition:leave']: config.transitionLeave,
['x-transition:leave-start']: config.transitionLeaveStart,
['x-transition:leave-end']: config.transitionLeaveEnd,
['@hyva-modal-show.window'](event) {
event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
}
};
}
};
}
window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1]
window.hyva.modal.pop = function() {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
modal.instance.hide();
}
}
window.hyva.modal.excludeSelectorsFromFocusTrap = function(selectors) {
typeof selectors === 'string' || selectors instanceof String ?
excludedFromFocusTrapping.add(selectors) :
selectors.map(selector => excludedFromFocusTrapping.add(selector));
}
window.hyva.modal.eventListeners = {
keydown: event => {
if (event.key === 'Escape') {
window.hyva.modal.pop();
}
},
/* generic modal @click.outside handler */
click: event => {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
const dialog = modal.instance.$refs[modal.name];
if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
!isOverlayDisabled(dialog) && // if dialog has overlay
!dialog.contains(event.target)) { // if click is outside of dialog
modal.instance.hide();
}
}
}
};
document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
document.addEventListener('click', window.hyva.modal.eventListeners.click);
})();
</script>
</div>
<div class="swiper-slide !transform-none " data-theme="light" data-hash="index-carousel-159090564-2">
<div x-data="hyva.modal()" @click="show('teleconsultingModal', $event)" class="relative min-w-[80%] h-[484px] bg-center rounded-lg cursor-pointer bg-cover" style="background-image: url('/img/commitment/commitment-teleconsultant.jpg');">
<div class="absolute inset-0 bg-black/10 rounded-lg"></div>
<h2 class="absolute top-6 left-6 font-medium text-white text-2xl">Téléconsultation</h2>
<div class="absolute bottom-6 right-6">
<button type="button" class=" btn btn-light btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 7C12.75 6.58579 12.4142 6.25 12 6.25C11.5858 6.25 11.25 6.58579 11.25 7V11.25H7C6.58579 11.25 6.25 11.5858 6.25 12C6.25 12.4142 6.58579 12.75 7 12.75H11.25V17C11.25 17.4142 11.5858 17.75 12 17.75C12.4142 17.75 12.75 17.4142 12.75 17V12.75H17C17.4142 12.75 17.75 12.4142 17.75 12C17.75 11.5858 17.4142 11.25 17 11.25H12.75V7Z" fill="currentColor" />
</svg>
</button>
</div>
<div x-cloak x-bind="overlay('teleconsultingModal')" x-spread="overlay('teleconsultingModal')" class="fixed inset-0 top-32 bg-black bg-opacity-50 backdrop-blur-xl z-50 overflow-y-auto cursor-default">
<div class="fixed flex w-full justify-center items-start text-left z-40 min-h-screen">
<div x-ref="teleconsultingModal" role="dialog" aria-modal="true" class="relative bg-white shadow-xl rounded-3xl p-10 w-[960px] my-10">
<div class="sticky top-6 flex justify-end -mr-4" @click.stop="hide()">
<button type="button" class=" btn btn-dark-ghost btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.99469 7.9047C8.70179 7.6118 8.22692 7.6118 7.93403 7.9047C7.64113 8.19759 7.64113 8.67246 7.93403 8.96536L10.9392 11.9706L7.93403 14.9758C7.64114 15.2687 7.64114 15.7435 7.93403 16.0364C8.22693 16.3293 8.7018 16.3293 8.99469 16.0364L11.9999 13.0312L15.0051 16.0364C15.298 16.3293 15.7729 16.3293 16.0658 16.0364C16.3586 15.7435 16.3586 15.2687 16.0658 14.9758L13.0606 11.9706L16.0658 8.96536C16.3587 8.67246 16.3587 8.19759 16.0658 7.9047C15.7729 7.6118 15.298 7.6118 15.0051 7.9047L11.9999 10.9099L8.99469 7.9047Z" fill="currentColor" />
</svg>
</button>
</div>
<div class="flex flex-col md:mx-8 mb-8">
<span class="font-medium text-normal">Proximité, Innovation et Praticité</span>
<h2 class="font-medium text-3xl">Téléconsultation ophtalmologique</h2>
<picture>
<source srcset="/img/commitment/commitment-teleconsultant.jpg" media="(min-width: 640px)" />
<img x-ref="image" src="/img/telemedecine/telemedecineMobile.png" alt="téléconsultation" class="object-cover object-center my-6 rounded-lg w-full h-full" loading="lazy" />
</picture>
<div class="flex flex-col gap-4">
<h2 class="font-medium text-3xl">Gagnez un temps precieux !</h2>
<p>ALAIN AFFLELOU vous permet de bénéficier d'une téléconsultation avec un Ophtalmologue qui réalisera à distance
un examen complet de la vue. C'est un service innovant avec ou sans rendez-vous disponible <br> dans nos magasins
Alain Afflelou équipés près de chez vous.</p>
</div>
<div class="flex flex-col gap-6 my-8">
<div class="flex flex-col my-8 gap-4 ">
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/eye.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">ALAIN AFFLELOU prend soin de votre santé visuelle</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/eyetest.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prise en charge par des ophtalmologistes et orthoptistes diplômés</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/contente.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Tarifs conventionnés sans dépassement d'honoraires</span>
</div>
</div>
<div class="flex flex-col lg:flex-row gap-6">
<div class="min-h-[496px] bg-neutral-100 rounded-lg lg:w-1/2 flex flex-col">
<div class="flex flex-col mx-4 my-9 md:mx-9 ">
<span class="text-xl font-medium">Déroulement de la <br> téléconsultation</span>
<div>
<ol class="flex flex-col list-decimal pl-5 my-4 gap-6">
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
</div>
</div>
<div class="flex flex-row items-center gap-1 mx-9 mb-9">
<span><svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C17.1086 21.25 21.25 17.1086 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75ZM1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 17.9371 17.9371 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12ZM9.25 11C9.25 10.5858 9.58579 10.25 10 10.25H12C12.2489 10.25 12.4815 10.3734 12.621 10.5795C12.7606 10.7856 12.7888 11.0475 12.6964 11.2785L11.5192 14.2215C11.3221 14.7141 11.685 15.25 12.2155 15.25H13C13.4142 15.25 13.75 15.5858 13.75 16C13.75 16.4142 13.4142 16.75 13 16.75H12.2155C10.6238 16.75 9.5353 15.1423 10.1265 13.6644L10.8922 11.75H10C9.58579 11.75 9.25 11.4142 9.25 11ZM12 7C11.4478 7 11 7.44772 11 8C11 8.55228 11.4478 9 12 9H12.1C12.6523 9 13.1 8.55228 13.1 8C13.1 7.44772 12.6523 7 12.1 7H12Z" fill="currentColor" />
</svg>
</span>
<span>Assurez-vous de la disponibilité de la salle en prenant <b>rendez-vous</b></span>
</div>
</div>
<div class="min-h-[496px] bg-neutral-100 rounded-lg lg:w-1/2 flex flex-col justify-between">
<div class="flex flex-col mx-4 my-9 md:mx-9 flex-grow gap-6">
<span class="text-xl font-medium">À ne pas oublier lors de votre<br> venue :</span>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/cartevitale.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prendre un rendez-vous dans le magasin de votre choix.</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/phone.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prendre un rendez-vous dans le magasin de votre choix.</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/cb.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prendre un rendez-vous dans le magasin de votre choix.</span>
</div>
</div>
</div>
</div>
<div>
<div class="my-10">
<span class="text-xl font-medium">Questions fréquentes</span>
<div x-data="{ open: null }" class="divide-y border-y my-6">
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Quels sont les avantages de la téléconsultation ophtalmologique ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<span>La téléconsultation ophtalmologique proposée par Alain Afflelou présente plusieurs avantages...</span>
<ul class="list-disc pl-5 mt-2">
<li>Lutte contre les déserts médicaux</li>
<li>Pas de rendez-vous préalable nécessaire</li>
<li>Réduction des délais d'attente</li>
<li>Consultation immédiate</li>
<li>Technologie innovante</li>
<li>Dépistage de pathologies</li>
<li>Suivi médical de votre vision plus régulière</li>
</ul>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Quels sont les équipements utilisés durant la téléconsultation ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<p>Lors de la téléconsultation ophtalmologique proposée par Alain Afflelou...</p>
<ul class="list-disc pl-5 mt-2">
<li>Frontofocomètre</li>
<li>Auto-réfractomètre</li>
<li>Réfractomètre binoculaire</li>
<li>Tonométrie</li>
<li>Pachymétrie</li>
<li>Topographie</li>
<li>Rétinographie</li>
</ul>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Est-ce que le service est gratuit ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<p>Le service de téléconsultation ophtalmologique proposé par Alain Afflelou n'est pas gratuit, mais il est proposé au tarif conventionné, c'est-à-dire sans dépassement d'honoraires.
Cela signifie que les consultations sont facturées selon les tarifs fixés par la sécurité sociale, ce qui permet aux patients de bénéficier d'une prise en charge partielle ou totale par leur assurance maladie, en fonction de leur couverture.</p>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Suis-je obligé d'acheter après ma téléconsultation ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<p>Non, vous êtes libre d'acheter vos lunettes, lentilles ou autres équipements où vous le souhaitez après avoir reçu l'ordonnance à la suite de la téléconsultation.
Il n'y a aucune obligation d'achat dans les magasins Alain Afflelou qui proposent ce service.</p>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Pour quels motifs puis-je faire un rendez-vous en téléconsultation ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<div class="space-y-4">
<p>Vous pouvez prendre un rendez-vous pour plusieurs motifs, principalement liés à la correction visuelle et au dépistage de certaines pathologies.</p>
<p>Comme par exemple :</p>
<ul class="list-disc pl-5">
<li>Renouvellement ou primo-prescription de lunettes,</li>
<li>Renouvellement de lentilles,</li>
<li>Renouvellement de lunettes et lentilles.</li>
</ul>
<p>Un dépistage des pathologies sera systématiquement réalisé, cependant si vous êtes atteint d'une pathologie déjà connue (DMLA, cataracte, glaucome...) il sera préférable de consulter un ophtalmologue en physique. Aussi, la téléconsultation n'est pas adaptée pour des cas d'œil rouge, de conjonctivite, orgelet ou autre infection de ce type.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="flex w-full justify-center sticky bottom-0 p-4 z-5 gap-x-4 lg:gap-x-6">
<div class="">
<button type="button" class=" btn btn-dark btn-size-large btn-icons">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.25C8.41421 1.25 8.75 1.58579 8.75 2V3.25H15.25V2C15.25 1.58579 15.5858 1.25 16 1.25C16.4142 1.25 16.75 1.58579 16.75 2V3.25H20C21.5188 3.25 22.75 4.48122 22.75 6V20C22.75 21.5188 21.5188 22.75 20 22.75H4C2.48122 22.75 1.25 21.5188 1.25 20V6C1.25 4.48122 2.48122 3.25 4 3.25H7.25V2C7.25 1.58579 7.58579 1.25 8 1.25ZM7.25 4.75H4C3.30964 4.75 2.75 5.30964 2.75 6V8.25H21.25V6C21.25 5.30964 20.6904 4.75 20 4.75H16.75V6C16.75 6.41421 16.4142 6.75 16 6.75C15.5858 6.75 15.25 6.41421 15.25 6V4.75H8.75V6C8.75 6.41421 8.41421 6.75 8 6.75C7.58579 6.75 7.25 6.41421 7.25 6V4.75ZM21.25 9.75H2.75V20C2.75 20.6904 3.30964 21.25 4 21.25H20C20.6904 21.25 21.25 20.6904 21.25 20V9.75ZM12 14.5C12.5523 14.5 13 14.0523 13 13.5C13 12.9477 12.5523 12.5 12 12.5C11.4477 12.5 11 12.9477 11 13.5C11 14.0523 11.4477 14.5 12 14.5ZM8 17.5C8 18.0523 7.55228 18.5 7 18.5C6.44772 18.5 6 18.0523 6 17.5C6 16.9477 6.44772 16.5 7 16.5C7.55228 16.5 8 16.9477 8 17.5ZM12 18.5C12.5523 18.5 13 18.0523 13 17.5C13 16.9477 12.5523 16.5 12 16.5C11.4477 16.5 11 16.9477 11 17.5C11 18.0523 11.4477 18.5 12 18.5ZM17 14.5C17.5523 14.5 18 14.0523 18 13.5C18 12.9477 17.5523 12.5 17 12.5C16.4477 12.5 16 12.9477 16 13.5C16 14.0523 16.4477 14.5 17 14.5ZM17 18.5C17.5523 18.5 18 18.0523 18 17.5C18 16.9477 17.5523 16.5 17 16.5C16.4477 16.5 16 16.9477 16 17.5C16 18.0523 16.4477 18.5 17 18.5Z" fill="currentColor" />
</svg>
Prendre un rendez-vous
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
'use strict';
(function() {
const modals = [];
const excludedFromFocusTrapping = new Set();
function trapFocusInNextModalWithOverlay() {
for (let idx = modals.length - 1; idx >= 0; idx--) {
const nextOnStack = modals[idx];
const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
if (!isOverlayDisabled(nextDialogElement)) {
hyva.trapFocus(nextDialogElement);
break;
}
}
}
function focusables(dialogElement) {
const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
return Array.from(dialogElement.querySelectorAll(selector))
.filter(el => !el.hasAttribute('disabled'));
}
function firstVisible(elements) {
const a = Array.from(elements);
for (let i = 0; i < a.length; i++) {
if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
}
return null;
}
function isInViewport(element) {
const rect = element && element.getBoundingClientRect();
return rect &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.right <= window.innerWidth &&
rect.bottom <= window.innerHeight;
}
function setFocusAfterTransition(dialogElement, duration) {
/*
* If the dialog contains an x-focus-first element that is not within a nested dialog, set focus
* immediately from the trapFocus default, to avoid the switch after the transition duration.
*/
const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
next: for (let candidate of candidates) {
for (let child of nested) {
if (child.contains(candidate)) continue next;
}
setTimeout(() => candidate.focus(), 50);
break;
}
window.setTimeout(() => {
const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
focusables(dialogElement)[0] ||
null;
focusElement && isInViewport(focusElement) && focusElement.focus();
}, Math.max(1, duration));
}
function determineTrigger($refs, dialog, trigger) {
/* if show() was called without arguments use the event target as open trigger */
if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
return dialog.target;
}
/* if show('name', $event) was called with the event as the second argument use the event target as trigger */
if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
return trigger.target;
}
/* if show('name', 'trigger') was called with the ref name pr selector of the trigger element */
if (typeof trigger === 'string') {
try {
return $refs[trigger] || document.querySelector(trigger)
} catch (e) {
/* Intentionally left empty because we don't know if trigger is intended as a valid selector string */
}
}
/* if show('name', document.querySelector('...')) was called, use that as the trigger */
if (trigger instanceof Element) {
return trigger;
}
/* unknown trigger - no focus will be set when the dialog is hidden */
return null;
}
function isOverlayDisabled(dialog) {
return dialog && dialog.hasAttribute('x-no-overlay')
}
function areRemainingModalsWithoutOverlay(modals) {
const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
return overflowDisabled.length === modals.length;
}
window.hyva.modal = function(options) {
const config = Object.assign({
dialog: 'dialog',
duration: 300,
/* ms before allowing subsequent hiding of modals for nested modals (see transition duration) */
transitionEnter: 'transition ease-out duration-300',
transitionEnterStart: 'opacity-0',
transitionEnterEnd: 'opacity-100',
transitionLeave: 'transition ease-in duration-300',
transitionLeaveStart: 'opacity-100',
transitionLeaveEnd: 'opacity-0',
}, options);
let lastHide = 0;
return {
opened: {},
show(dialog, trigger) {
console.log('show');
const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
const name = typeof dialog === 'string' ? dialog : config.dialog;
const dialogElement = this.$refs[name];
if (!dialogElement) {
console.error(`Use $modal->getShowJs() in the open trigger, or specify a custom name with\n$modal->withDialogRefName("my-name") and use show("my-name", $event).`);
return;
}
const useOverlay = !dialogElement.hasAttribute('x-no-overlay');
if (this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.add('!transform-none');
}
}
dialogElement.scrollTop = 0;
/* Prevent adding the same modal on the stack twice */
if (this.opened[name]) {
return;
}
if (focusTargetAfterHide) {
focusTargetAfterHide.setAttribute('aria-expanded', 'true');
}
this.opened[name] = true;
useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
setFocusAfterTransition(dialogElement, config.duration);
const frame = {
name,
instance: this,
focusTarget: focusTargetAfterHide,
time: Date.now()
};
modals.push(frame);
if (useOverlay) {
document.body.classList.add('overflow-hidden');
}
return new Promise(resolve => frame.resolve = resolve);
},
cancel() {
this.hide(false);
},
ok() {
this.hide(true);
},
hide(value) {
// Guard against Escape being pressed multiple times before a transition is finished, otherwise
// this function will pop further dialogs from the stack but the display will not update.
console.log('Hiding modal:', value);
if (Date.now() - lastHide < config.duration) {
return;
}
lastHide = Date.now();
const modal = modals.pop() || {};
const name = modal.name;
this.opened[name] = false;
hyva.releaseFocus(modal.instance.$refs[modal.name])
trapFocusInNextModalWithOverlay();
const nextFocusAfterHide = modal.focusTarget;
nextFocusAfterHide && setTimeout(() => {
nextFocusAfterHide.setAttribute('aria-expanded', 'false');
nextFocusAfterHide.focus()
}, config.duration);
if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
document.body.classList.remove('overflow-hidden');
}
if (this.$refs && this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.remove('!transform-none');
}
}
modal.resolve(value);
},
overlay(dialog) {
const name = typeof dialog === 'string' ? dialog : config.dialog;
return {
['x-show']() {
return this.opened[name]
},
['x-transition:enter']: config.transitionEnter,
['x-transition:enter-start']: config.transitionEnterStart,
['x-transition:enter-end']: config.transitionEnterEnd,
['x-transition:leave']: config.transitionLeave,
['x-transition:leave-start']: config.transitionLeaveStart,
['x-transition:leave-end']: config.transitionLeaveEnd,
['@hyva-modal-show.window'](event) {
event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
}
};
}
};
}
window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1]
window.hyva.modal.pop = function() {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
modal.instance.hide();
}
}
window.hyva.modal.excludeSelectorsFromFocusTrap = function(selectors) {
typeof selectors === 'string' || selectors instanceof String ?
excludedFromFocusTrapping.add(selectors) :
selectors.map(selector => excludedFromFocusTrapping.add(selector));
}
window.hyva.modal.eventListeners = {
keydown: event => {
if (event.key === 'Escape') {
window.hyva.modal.pop();
}
},
/* generic modal @click.outside handler */
click: event => {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
const dialog = modal.instance.$refs[modal.name];
if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
!isOverlayDisabled(dialog) && // if dialog has overlay
!dialog.contains(event.target)) { // if click is outside of dialog
modal.instance.hide();
}
}
}
};
document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
document.addEventListener('click', window.hyva.modal.eventListeners.click);
})();
</script>
</div>
<div class="swiper-slide !transform-none " data-theme="light" data-hash="index-carousel-159090564-3">
<div x-data="hyva.modal()" @click="show('visagismModal', $event)" class="relative min-w-[80%] h-[484px] bg-center rounded-lg cursor-pointer bg-cover" style="background-image: url('/img/commitment/visagism.png');">
<div class="absolute inset-0 bg-black/10 rounded-lg"></div>
<h2 class="absolute top-6 left-6 font-medium text-white text-2xl">Visagisme</h2>
<div class="absolute bottom-6 right-6">
<button type="button" class=" btn btn-light btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 7C12.75 6.58579 12.4142 6.25 12 6.25C11.5858 6.25 11.25 6.58579 11.25 7V11.25H7C6.58579 11.25 6.25 11.5858 6.25 12C6.25 12.4142 6.58579 12.75 7 12.75H11.25V17C11.25 17.4142 11.5858 17.75 12 17.75C12.4142 17.75 12.75 17.4142 12.75 17V12.75H17C17.4142 12.75 17.75 12.4142 17.75 12C17.75 11.5858 17.4142 11.25 17 11.25H12.75V7Z" fill="currentColor" />
</svg>
</button>
</div>
<div x-cloak x-bind="overlay('visagismModal')" x-spread="overlay('visagismModal')" class="fixed inset-0 top-32 bg-black bg-opacity-50 backdrop-blur-xl z-50 overflow-y-auto cursor-default">
<div class="fixed flex w-full justify-center items-start text-left z-40 min-h-screen">
<div x-ref="visagismModal" role="dialog" aria-modal="true" class="relative bg-white shadow-xl rounded-3xl p-10 w-[960px] my-10">
<div class="sticky top-6 flex justify-end -mr-4" @click.stop="hide()">
<button type="button" class=" btn btn-dark-ghost btn-size-sm btn-only-icon">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.99469 7.9047C8.70179 7.6118 8.22692 7.6118 7.93403 7.9047C7.64113 8.19759 7.64113 8.67246 7.93403 8.96536L10.9392 11.9706L7.93403 14.9758C7.64114 15.2687 7.64114 15.7435 7.93403 16.0364C8.22693 16.3293 8.7018 16.3293 8.99469 16.0364L11.9999 13.0312L15.0051 16.0364C15.298 16.3293 15.7729 16.3293 16.0658 16.0364C16.3586 15.7435 16.3586 15.2687 16.0658 14.9758L13.0606 11.9706L16.0658 8.96536C16.3587 8.67246 16.3587 8.19759 16.0658 7.9047C15.7729 7.6118 15.298 7.6118 15.0051 7.9047L11.9999 10.9099L8.99469 7.9047Z" fill="currentColor" />
</svg>
</button>
</div>
<div class="flex flex-col md:mx-8 mb-8">
<span class="font-medium text-normal">Notre engagement</span>
<h2 class="font-medium text-3xl">Visagisme</h2>
<picture>
<source srcset="/img/commitment/commitment-teleconsultant.jpg" media="(min-width: 640px)" />
<img x-ref="image" src="/img/telemedecine/telemedecineMobile.png" alt="téléconsultation" class="object-cover object-center my-6 rounded-lg w-full h-full" loading="lazy" />
</picture>
<div class="flex flex-col gap-4">
<h2 class="font-medium text-3xl">Notre engagement pour votre vision</h2>
<p>Description de l'engagement...</p>
</div>
<div class="flex flex-col gap-6 my-8">
<div class="flex flex-col my-8 gap-4 ">
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/eye.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">ALAIN AFFLELOU prend soin de votre santé visuelle</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/eyetest.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prise en charge par des ophtalmologistes et orthoptistes diplômés</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/contente.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Tarifs conventionnés sans dépassement d'honoraires</span>
</div>
</div>
<div class="flex flex-col lg:flex-row gap-6">
<div class="min-h-[496px] bg-neutral-100 rounded-lg lg:w-1/2 flex flex-col">
<div class="flex flex-col mx-4 my-9 md:mx-9 ">
<span class="text-xl font-medium">Déroulement de la téléconsultation</span>
<div>
<ol class="flex flex-col list-decimal pl-5 my-4 gap-6">
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
</div>
</div>
<div class="flex flex-row items-center gap-1 mx-9 mb-9">
<span><svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C17.1086 21.25 21.25 17.1086 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75ZM1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 17.9371 17.9371 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12ZM9.25 11C9.25 10.5858 9.58579 10.25 10 10.25H12C12.2489 10.25 12.4815 10.3734 12.621 10.5795C12.7606 10.7856 12.7888 11.0475 12.6964 11.2785L11.5192 14.2215C11.3221 14.7141 11.685 15.25 12.2155 15.25H13C13.4142 15.25 13.75 15.5858 13.75 16C13.75 16.4142 13.4142 16.75 13 16.75H12.2155C10.6238 16.75 9.5353 15.1423 10.1265 13.6644L10.8922 11.75H10C9.58579 11.75 9.25 11.4142 9.25 11ZM12 7C11.4478 7 11 7.44772 11 8C11 8.55228 11.4478 9 12 9H12.1C12.6523 9 13.1 8.55228 13.1 8C13.1 7.44772 12.6523 7 12.1 7H12Z" fill="currentColor" />
</svg>
</span>
<span>Assurez-vous de la disponibilité de la salle en prenant <b>rendez-vous</b></span>
</div>
</div>
<div class="min-h-[496px] bg-neutral-100 rounded-lg lg:w-1/2 flex flex-col justify-between">
<div class="flex flex-col mx-4 my-9 md:mx-9 flex-grow gap-6">
<span class="text-xl font-medium">À ne pas oublier lors de votre<br> venue :</span>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/cartevitale.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prendre un rendez-vous dans le magasin de votre choix.</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/phone.jpeg" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prendre un rendez-vous dans le magasin de votre choix.</span>
</div>
<div class="flex items-center w-full min-h-[88px] border rounded-full gap-4 bg-neutral-50">
<img src="/img/commitment/cb.png" alt="" class="ml-4 rounded-full min-w-14 w-14 h-14 object-cover object-center" />
<span class="pr-8">Prendre un rendez-vous dans le magasin de votre choix.</span>
</div>
</div>
</div>
</div>
<div>
<div class="my-10">
<span class="text-xl font-medium">Questions fréquentes</span>
<div x-data="{ open: null }" class="divide-y border-y my-6">
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Quels sont les avantages de la téléconsultation ophtalmologique ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<span>La téléconsultation ophtalmologique proposée par Alain Afflelou présente plusieurs avantages...</span>
<ul class="list-disc pl-5 mt-2">
<li>Lutte contre les déserts médicaux</li>
<li>Pas de rendez-vous préalable nécessaire</li>
<li>Réduction des délais d'attente</li>
<li>Consultation immédiate</li>
<li>Technologie innovante</li>
<li>Dépistage de pathologies</li>
<li>Suivi médical de votre vision plus régulière</li>
</ul>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Quels sont les équipements utilisés durant la téléconsultation ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<p>Lors de la téléconsultation ophtalmologique proposée par Alain Afflelou...</p>
<ul class="list-disc pl-5 mt-2">
<li>Frontofocomètre</li>
<li>Auto-réfractomètre</li>
<li>Réfractomètre binoculaire</li>
<li>Tonométrie</li>
<li>Pachymétrie</li>
<li>Topographie</li>
<li>Rétinographie</li>
</ul>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Est-ce que le service est gratuit ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<p>Le service de téléconsultation ophtalmologique proposé par Alain Afflelou n'est pas gratuit, mais il est proposé au tarif conventionné, c'est-à-dire sans dépassement d'honoraires.
Cela signifie que les consultations sont facturées selon les tarifs fixés par la sécurité sociale, ce qui permet aux patients de bénéficier d'une prise en charge partielle ou totale par leur assurance maladie, en fonction de leur couverture.</p>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Suis-je obligé d'acheter après ma téléconsultation ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<p>Non, vous êtes libre d'acheter vos lunettes, lentilles ou autres équipements où vous le souhaitez après avoir reçu l'ordonnance à la suite de la téléconsultation.
Il n'y a aucune obligation d'achat dans les magasins Alain Afflelou qui proposent ce service.</p>
</div>
</div>
<div x-data="{ expanded: false }" class=" text-neutral-800">
<h2 class="font-semibold">
<button type="button" @click="expanded = !expanded " class="flex justify-between items-center w-full py-4 ">
<span class="flex flex-wrap gap-3">
Pour quels motifs puis-je faire un rendez-vous en téléconsultation ?
</span>
<span :class="expanded ? 'rotate-180' : ''" class="transform transition-transform duration-300">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5303 14.5303C12.2374 14.8232 11.7626 14.8232 11.4697 14.5303L7.46967 10.5303C7.17678 10.2374 7.17678 9.76256 7.46967 9.46967C7.76256 9.17678 8.23744 9.17678 8.53033 9.46967L12 12.9393L15.4697 9.46967C15.7626 9.17678 16.2374 9.17678 16.5303 9.46967C16.8232 9.76256 16.8232 10.2374 16.5303 10.5303L12.5303 14.5303Z" fill="currentColor" />
</svg>
</span>
</button>
</h2>
<div x-cloak x-show="expanded" x-collapse class="py-4 text-sm">
<div class="space-y-4">
<p>Vous pouvez prendre un rendez-vous pour plusieurs motifs, principalement liés à la correction visuelle et au dépistage de certaines pathologies.</p>
<p>Comme par exemple :</p>
<ul class="list-disc pl-5">
<li>Renouvellement ou primo-prescription de lunettes,</li>
<li>Renouvellement de lentilles,</li>
<li>Renouvellement de lunettes et lentilles.</li>
</ul>
<p>Un dépistage des pathologies sera systématiquement réalisé, cependant si vous êtes atteint d'une pathologie déjà connue (DMLA, cataracte, glaucome...) il sera préférable de consulter un ophtalmologue en physique. Aussi, la téléconsultation n'est pas adaptée pour des cas d'œil rouge, de conjonctivite, orgelet ou autre infection de ce type.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="flex w-full justify-center sticky bottom-0 p-4 z-5 gap-x-4 lg:gap-x-6">
<div class="">
<button type="button" class=" btn btn-dark btn-size-large btn-icons">
<svg class=" shrink-0" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.25C8.41421 1.25 8.75 1.58579 8.75 2V3.25H15.25V2C15.25 1.58579 15.5858 1.25 16 1.25C16.4142 1.25 16.75 1.58579 16.75 2V3.25H20C21.5188 3.25 22.75 4.48122 22.75 6V20C22.75 21.5188 21.5188 22.75 20 22.75H4C2.48122 22.75 1.25 21.5188 1.25 20V6C1.25 4.48122 2.48122 3.25 4 3.25H7.25V2C7.25 1.58579 7.58579 1.25 8 1.25ZM7.25 4.75H4C3.30964 4.75 2.75 5.30964 2.75 6V8.25H21.25V6C21.25 5.30964 20.6904 4.75 20 4.75H16.75V6C16.75 6.41421 16.4142 6.75 16 6.75C15.5858 6.75 15.25 6.41421 15.25 6V4.75H8.75V6C8.75 6.41421 8.41421 6.75 8 6.75C7.58579 6.75 7.25 6.41421 7.25 6V4.75ZM21.25 9.75H2.75V20C2.75 20.6904 3.30964 21.25 4 21.25H20C20.6904 21.25 21.25 20.6904 21.25 20V9.75ZM12 14.5C12.5523 14.5 13 14.0523 13 13.5C13 12.9477 12.5523 12.5 12 12.5C11.4477 12.5 11 12.9477 11 13.5C11 14.0523 11.4477 14.5 12 14.5ZM8 17.5C8 18.0523 7.55228 18.5 7 18.5C6.44772 18.5 6 18.0523 6 17.5C6 16.9477 6.44772 16.5 7 16.5C7.55228 16.5 8 16.9477 8 17.5ZM12 18.5C12.5523 18.5 13 18.0523 13 17.5C13 16.9477 12.5523 16.5 12 16.5C11.4477 16.5 11 16.9477 11 17.5C11 18.0523 11.4477 18.5 12 18.5ZM17 14.5C17.5523 14.5 18 14.0523 18 13.5C18 12.9477 17.5523 12.5 17 12.5C16.4477 12.5 16 12.9477 16 13.5C16 14.0523 16.4477 14.5 17 14.5ZM17 18.5C17.5523 18.5 18 18.0523 18 17.5C18 16.9477 17.5523 16.5 17 16.5C16.4477 16.5 16 16.9477 16 17.5C16 18.0523 16.4477 18.5 17 18.5Z" fill="currentColor" />
</svg>
Prendre un rendez-vous
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
'use strict';
(function() {
const modals = [];
const excludedFromFocusTrapping = new Set();
function trapFocusInNextModalWithOverlay() {
for (let idx = modals.length - 1; idx >= 0; idx--) {
const nextOnStack = modals[idx];
const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
if (!isOverlayDisabled(nextDialogElement)) {
hyva.trapFocus(nextDialogElement);
break;
}
}
}
function focusables(dialogElement) {
const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
return Array.from(dialogElement.querySelectorAll(selector))
.filter(el => !el.hasAttribute('disabled'));
}
function firstVisible(elements) {
const a = Array.from(elements);
for (let i = 0; i < a.length; i++) {
if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
}
return null;
}
function isInViewport(element) {
const rect = element && element.getBoundingClientRect();
return rect &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.right <= window.innerWidth &&
rect.bottom <= window.innerHeight;
}
function setFocusAfterTransition(dialogElement, duration) {
/*
* If the dialog contains an x-focus-first element that is not within a nested dialog, set focus
* immediately from the trapFocus default, to avoid the switch after the transition duration.
*/
const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
next: for (let candidate of candidates) {
for (let child of nested) {
if (child.contains(candidate)) continue next;
}
setTimeout(() => candidate.focus(), 50);
break;
}
window.setTimeout(() => {
const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
focusables(dialogElement)[0] ||
null;
focusElement && isInViewport(focusElement) && focusElement.focus();
}, Math.max(1, duration));
}
function determineTrigger($refs, dialog, trigger) {
/* if show() was called without arguments use the event target as open trigger */
if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
return dialog.target;
}
/* if show('name', $event) was called with the event as the second argument use the event target as trigger */
if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
return trigger.target;
}
/* if show('name', 'trigger') was called with the ref name pr selector of the trigger element */
if (typeof trigger === 'string') {
try {
return $refs[trigger] || document.querySelector(trigger)
} catch (e) {
/* Intentionally left empty because we don't know if trigger is intended as a valid selector string */
}
}
/* if show('name', document.querySelector('...')) was called, use that as the trigger */
if (trigger instanceof Element) {
return trigger;
}
/* unknown trigger - no focus will be set when the dialog is hidden */
return null;
}
function isOverlayDisabled(dialog) {
return dialog && dialog.hasAttribute('x-no-overlay')
}
function areRemainingModalsWithoutOverlay(modals) {
const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
return overflowDisabled.length === modals.length;
}
window.hyva.modal = function(options) {
const config = Object.assign({
dialog: 'dialog',
duration: 300,
/* ms before allowing subsequent hiding of modals for nested modals (see transition duration) */
transitionEnter: 'transition ease-out duration-300',
transitionEnterStart: 'opacity-0',
transitionEnterEnd: 'opacity-100',
transitionLeave: 'transition ease-in duration-300',
transitionLeaveStart: 'opacity-100',
transitionLeaveEnd: 'opacity-0',
}, options);
let lastHide = 0;
return {
opened: {},
show(dialog, trigger) {
console.log('show');
const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
const name = typeof dialog === 'string' ? dialog : config.dialog;
const dialogElement = this.$refs[name];
if (!dialogElement) {
console.error(`Use $modal->getShowJs() in the open trigger, or specify a custom name with\n$modal->withDialogRefName("my-name") and use show("my-name", $event).`);
return;
}
const useOverlay = !dialogElement.hasAttribute('x-no-overlay');
if (this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.add('!transform-none');
}
}
dialogElement.scrollTop = 0;
/* Prevent adding the same modal on the stack twice */
if (this.opened[name]) {
return;
}
if (focusTargetAfterHide) {
focusTargetAfterHide.setAttribute('aria-expanded', 'true');
}
this.opened[name] = true;
useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
setFocusAfterTransition(dialogElement, config.duration);
const frame = {
name,
instance: this,
focusTarget: focusTargetAfterHide,
time: Date.now()
};
modals.push(frame);
if (useOverlay) {
document.body.classList.add('overflow-hidden');
}
return new Promise(resolve => frame.resolve = resolve);
},
cancel() {
this.hide(false);
},
ok() {
this.hide(true);
},
hide(value) {
// Guard against Escape being pressed multiple times before a transition is finished, otherwise
// this function will pop further dialogs from the stack but the display will not update.
console.log('Hiding modal:', value);
if (Date.now() - lastHide < config.duration) {
return;
}
lastHide = Date.now();
const modal = modals.pop() || {};
const name = modal.name;
this.opened[name] = false;
hyva.releaseFocus(modal.instance.$refs[modal.name])
trapFocusInNextModalWithOverlay();
const nextFocusAfterHide = modal.focusTarget;
nextFocusAfterHide && setTimeout(() => {
nextFocusAfterHide.setAttribute('aria-expanded', 'false');
nextFocusAfterHide.focus()
}, config.duration);
if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
document.body.classList.remove('overflow-hidden');
}
if (this.$refs && this.$refs.swiperContainer && this.$refs.swiperContainer.querySelector) {
const swiperWrapper = this.$refs.swiperContainer.querySelector('.swiper-wrapper');
if (swiperWrapper) {
swiperWrapper.classList.remove('!transform-none');
}
}
modal.resolve(value);
},
overlay(dialog) {
const name = typeof dialog === 'string' ? dialog : config.dialog;
return {
['x-show']() {
return this.opened[name]
},
['x-transition:enter']: config.transitionEnter,
['x-transition:enter-start']: config.transitionEnterStart,
['x-transition:enter-end']: config.transitionEnterEnd,
['x-transition:leave']: config.transitionLeave,
['x-transition:leave-start']: config.transitionLeaveStart,
['x-transition:leave-end']: config.transitionLeaveEnd,
['@hyva-modal-show.window'](event) {
event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
}
};
}
};
}
window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1]
window.hyva.modal.pop = function() {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
modal.instance.hide();
}
}
window.hyva.modal.excludeSelectorsFromFocusTrap = function(selectors) {
typeof selectors === 'string' || selectors instanceof String ?
excludedFromFocusTrapping.add(selectors) :
selectors.map(selector => excludedFromFocusTrapping.add(selector));
}
window.hyva.modal.eventListeners = {
keydown: event => {
if (event.key === 'Escape') {
window.hyva.modal.pop();
}
},
/* generic modal @click.outside handler */
click: event => {
if (modals.length > 0) {
const modal = modals[modals.length - 1];
const dialog = modal.instance.$refs[modal.name];
if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
!isOverlayDisabled(dialog) && // if dialog has overlay
!dialog.contains(event.target)) { // if click is outside of dialog
modal.instance.hide();
}
}
}
};
document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
document.addEventListener('click', window.hyva.modal.eventListeners.click);
})();
</script>
</div>
</div>
<div x-ref="pagination" class="swiper-pagination-carousel-159090564 swiper-pagination swiper-light"></div>
<div class="flex sm:hidden mt-6">
<a href="https://www.afflelou.com/" target="_blank" rel="noopenner noreferer" class="mx-auto btn btn-dark-subtle ">
Voir toute la collection
</a>
</div>
</div>
</div>
<script>
function initCarouselcarousel159090564() {
return {
swiper: null,
options: {
"color": "dark",
"slidesPerView": {
"mobile": 1.3,
"tablet": 2.3,
"desktop": 4
},
"spaceBetween": 30,
"showPagination": true,
"showNavigation": true,
"showNavigationMobile": false
},
componentId: 'carousel-159090564',
init() {
this.initSwiper();
if (typeof this.customFunction === 'function') {
this.customFunction();
}
},
initSwiper() {
this.swiper = new Swiper(this.$refs.swiperContainer, {
slidesPerView: this.options.slidesPerView.mobile,
spaceBetween: this.options.spaceBetween,
pagination: this.options.showPagination ? {
el: '.swiper-pagination-' + this.componentId,
clickable: true,
bulletClass: 'bullet',
bulletActiveClass: 'active',
} : false,
navigation: this.options.showNavigation ? {
nextEl: '.carousel-button-next-' + this.componentId,
prevEl: '.carousel-button-prev-' + this.componentId
} : false,
hashNavigation: {
watchState: true,
},
breakpoints: {
640: {
slidesPerView: this.options.slidesPerView.tablet
},
1024: {
slidesPerView: this.options.slidesPerView.desktop
}
},
on: {
slideChange: () => this.updateSliderTheme(),
},
});
this.updateSliderTheme();
},
updateSliderTheme() {
const activeSlide = this.swiper.slides[this.swiper.activeIndex];
const theme = activeSlide.getAttribute('data-slider-theme');
this.sliderTheme = theme || 'light';
},
customFunction() {
// Custom function can be defined here and overridden outside.
}
};
}
</script>
</div>
<div class="flex flex-col justify-center gap-6 lg:mx-[144px]">
{% render "@carousel" with carousel %}
</div>
{
"carousel": {
"title": "Nos engagements pour bien voir et bien entendre",
"showCTA": false,
"paginationClass": "swiper-light",
"carousel": {
"color": "dark",
"slidesPerView": {
"mobile": 1.3,
"tablet": 2.3,
"desktop": 4
},
"spaceBetween": 30,
"showPagination": true,
"showNavigation": true
},
"useCommitmentCards": true,
"slides": [
{
"template": "commitmentcard",
"id": "opticTest",
"modalTitle": "Test de vue gratuit",
"backgroundImage": "/img/commitment/test-optic.png",
"subtitle": "Êtes vous sûr de bien voir ?",
"title": "Test de vue gratuit",
"image": {
"src": "/img/commitment/eyetest2.png",
"alt": "test de vue gratuit"
},
"content": {
"title": "Testez* gratuitement votre vue",
"description": "Aujourd’hui, les troubles visuels touchent environ 70% de la population française.Il est donc essentiel de faire contrôler votre vue régulièrement. Nous avons des solutions pour vous !"
},
"featuresBubbles": {
"title": "Faire vérifier votre vue en magasin, c'est simple et rapide !",
"classItems": "lg:grid lg:grid-rows-2 lg:grid-flow-col gap-6",
"items": [
{
"icon": "/img/commitment/phone2.png",
"text": "Prendre un rendez-vous dans le magasin de votre choix."
},
{
"icon": "/img/commitment/letter.png",
"text": "Notre opticien effectue une vérification de votre vue."
},
{
"icon": "/img/commitment/eyes3.png",
"text": "N'hésitez pas à apporter votre ordonnance."
},
{
"icon": "/img/commitment/lunette.png",
"text": "On vous aide à trouver la meilleure solution pour votre confort visuel"
}
]
},
"recapArray": {
"title": "Bon à savoir : durée de validité de votre ordonnance",
"items": [
{
"left": "Moins de 16 ans",
"right": "1 an de validité"
},
{
"left": "Moins de 16 ans",
"right": "1 an de validité"
},
{
"left": "Moins de 16 ans",
"right": "1 an de validité"
}
]
},
"steps": [],
"requirements": [],
"faq": [],
"footerButtons": [
{
"label": "Prendre un rendez-vous",
"icon": "library--calendar",
"color": "dark",
"type": "leading-icon"
}
]
},
{
"template": "commitmentcard",
"id": "audioTest",
"modalTitle": "Test d'audition gratuit",
"backgroundImage": "/img/commitment/audiotest.png",
"subtitle": "Tester son audition est aussi simple que de tester sa vue.",
"title": "Test auditif gratuit*",
"image": {
"src": "/img/commitment/audio-test.png",
"srcMobile": "/img/commitment/audiotest.png",
"alt": "test de vue gratuit"
},
"content": {
"title": "Pourquoi se faire dépister ?",
"description": "Le dépistage est la première étape vers une bonne santé auditive. Pour cela, vous pouvez réaliser un test auditif par un professionnel de santé, médecin ORL ou audioprothésiste diplômé d’État.\n Ce test a pour but de suivre l’évolution de votre audition et de déceler une possible perte auditive.\n La prise en charge précoce d’un trouble auditif est la clé pour conserver son bien-être auditif le plus longtemps possible.",
"button": {
"label": "Reconnaitre une baisse d'audition",
"icon": "library--arrow-right"
}
},
"questions": {
"image": {
"src": "/img/commitment/goodmood.png",
"alt": "/img/commitment/goodmood.png"
},
"title": "Comment se passe le test ?",
"items": [
"Votre audioprothésiste vous pose quelques questions sur votre santé auditive pour savoir si vous avez été exposé par le passé à des éléments qui auraient pu altérer votre audition.",
"Votre professionnel de santé va ensuite procéder à un examen de vos oreilles afin de vérifier qu’un bouchon n’obstrue pas votre conduit auditif par exemple.",
"Il va ensuite procéder à l’analyser de vos capacités auditives. Un test sonore totalement indolore.",
"En fonction de vos résultats, votre audioprothésiste vous conseille les solutions auditives les plus adaptées et vous donnera des conseils pour prendre soin de votre santé auditive."
]
},
"subContent": {
"title": "Être rappelé pour prendre rendez-vous",
"content": "Complétez le formulaire ci-dessous et nos conseillers vous rappelleront dans les plus brefs délais du lundi au vendredi de 10h à 12h et de 14h à 17h."
},
"contactForm": {
"show": true
},
"featuresBubbles": [],
"steps": {},
"requirements": {},
"faq": [],
"footerButtons": [
{
"color": "audio",
"label": "Être rappelé",
"icon": "library--call",
"type": "leading-icon"
},
{
"divClass": "hidden lg:flex",
"color": "audio-subtle",
"label": "Prendre un rendez-vous",
"icon": "library--calendar",
"type": "leading-icon"
},
{
"divClass": "lg:hidden",
"color": "audio-subtle",
"icon": "library--calendar",
"type": "only-icon"
}
]
},
{
"template": "commitmentcard",
"id": "teleconsulting",
"modalTitle": "Téléconsultation",
"title": "Téléconsultation ophtalmologique",
"subtitle": "Proximité, Innovation et Praticité",
"backgroundImage": "/img/commitment/commitment-teleconsultant.jpg",
"image": {
"srcMobile": "/img/telemedecine/telemedecineMobile.png",
"src": "/img/commitment/commitment-teleconsultant.jpg",
"alt": "téléconsultation"
},
"content": {
"title": "Gagnez un temps precieux !",
"description": "ALAIN AFFLELOU vous permet de bénéficier d'une téléconsultation avec un Ophtalmologue qui réalisera à distance\n un examen complet de la vue. C'est un service innovant avec ou sans rendez-vous disponible <br> dans nos magasins\n Alain Afflelou équipés près de chez vous."
},
"featuresBubbles": {
"items": [
{
"icon": "/img/commitment/eye.jpeg",
"text": "ALAIN AFFLELOU prend soin de votre santé visuelle"
},
{
"icon": "/img/commitment/eyetest.jpeg",
"text": "Prise en charge par des ophtalmologistes et orthoptistes diplômés"
},
{
"icon": "/img/commitment/contente.jpeg",
"text": "Tarifs conventionnés sans dépassement d'honoraires"
}
]
},
"steps": {
"title": "Déroulement de la <br> téléconsultation",
"items": [
"Créez votre compte grâce à votre carte vitale.",
"L'examen est réalisé par un orthoptiste",
"Un ophtalmologiste posera son diagnostique.",
"Récupérez le compte-rendu et l'ordonnance en fin de consultation."
],
"complementary": "Assurez-vous de la disponibilité de la salle en prenant <b>rendez-vous</b>"
},
"requirements": {
"title": "À ne pas oublier lors de votre<br> venue :",
"items": [
{
"icon": "/img/commitment/cartevitale.png",
"text": "Carte Vitale"
},
{
"icon": "/img/commitment/phone.jpeg",
"text": "Smartphone"
},
{
"icon": "/img/commitment/cb.png",
"text": "Carte Bleue"
}
]
},
"faq": {
"title": "Questions fréquentes",
"items": [
{
"question": "Quels sont les avantages de la téléconsultation ophtalmologique ?",
"answer": "\n <span>La téléconsultation ophtalmologique proposée par Alain Afflelou présente plusieurs avantages...</span>\n <ul class=\"list-disc pl-5 mt-2\">\n <li>Lutte contre les déserts médicaux</li>\n <li>Pas de rendez-vous préalable nécessaire</li>\n <li>Réduction des délais d'attente</li>\n <li>Consultation immédiate</li>\n <li>Technologie innovante</li>\n <li>Dépistage de pathologies</li>\n <li>Suivi médical de votre vision plus régulière</li>\n </ul>\n "
},
{
"question": "Quels sont les équipements utilisés durant la téléconsultation ?",
"answer": "\n <p>Lors de la téléconsultation ophtalmologique proposée par Alain Afflelou...</p>\n <ul class=\"list-disc pl-5 mt-2\">\n <li>Frontofocomètre</li>\n <li>Auto-réfractomètre</li>\n <li>Réfractomètre binoculaire</li>\n <li>Tonométrie</li>\n <li>Pachymétrie</li>\n <li>Topographie</li>\n <li>Rétinographie</li>\n </ul>\n "
},
{
"question": "Est-ce que le service est gratuit ?",
"answer": "\n <p>Le service de téléconsultation ophtalmologique proposé par Alain Afflelou n'est pas gratuit, mais il est proposé au tarif conventionné, c'est-à-dire sans dépassement d'honoraires.\n Cela signifie que les consultations sont facturées selon les tarifs fixés par la sécurité sociale, ce qui permet aux patients de bénéficier d'une prise en charge partielle ou totale par leur assurance maladie, en fonction de leur couverture.</p>\n "
},
{
"question": "Suis-je obligé d'acheter après ma téléconsultation ?",
"answer": "\n <p>Non, vous êtes libre d'acheter vos lunettes, lentilles ou autres équipements où vous le souhaitez après avoir reçu l'ordonnance à la suite de la téléconsultation.\n Il n'y a aucune obligation d'achat dans les magasins Alain Afflelou qui proposent ce service.</p>\n "
},
{
"question": "Pour quels motifs puis-je faire un rendez-vous en téléconsultation ?",
"answer": "\n <div class=\"space-y-4\">\n <p>Vous pouvez prendre un rendez-vous pour plusieurs motifs, principalement liés à la correction visuelle et au dépistage de certaines pathologies.</p>\n <p>Comme par exemple :</p>\n <ul class=\"list-disc pl-5\">\n <li>Renouvellement ou primo-prescription de lunettes,</li>\n <li>Renouvellement de lentilles,</li>\n <li>Renouvellement de lunettes et lentilles.</li>\n </ul>\n <p>Un dépistage des pathologies sera systématiquement réalisé, cependant si vous êtes atteint d'une pathologie déjà connue (DMLA, cataracte, glaucome...) il sera préférable de consulter un ophtalmologue en physique. Aussi, la téléconsultation n'est pas adaptée pour des cas d'œil rouge, de conjonctivite, orgelet ou autre infection de ce type.</p>\n </div>\n "
}
]
},
"footerButtons": [
{
"label": "Prendre un rendez-vous",
"icon": "library--calendar",
"color": "dark",
"type": "leading-icon"
}
]
},
{
"template": "commitmentcard",
"id": "visagism",
"modalTitle": "Visagisme",
"title": "Visagisme",
"subtitle": "Notre engagement",
"backgroundImage": "/img/commitment/visagism.png",
"image": {
"src": "/img/commitment/commitment-teleconsultant.jpg",
"alt": "téléconsultation"
},
"content": {
"title": "Notre engagement pour votre vision",
"description": "Description de l'engagement..."
},
"featuresBubbles": {
"items": [
{
"icon": "/img/commitment/eye.jpeg",
"text": "ALAIN AFFLELOU prend soin de votre santé visuelle"
},
{
"icon": "/img/commitment/eyetest.jpeg",
"text": "Prise en charge par des ophtalmologistes et orthoptistes diplômés"
},
{
"icon": "/img/commitment/contente.jpeg",
"text": "Tarifs conventionnés sans dépassement d'honoraires"
}
]
},
"steps": {
"title": "Déroulement de la téléconsultation",
"items": [
"Créez votre compte grâce à votre carte vitale.",
"L'examen est réalisé par un orthoptiste",
"Un ophtalmologiste posera son diagnostique.",
"Récupérez le compte-rendu et l'ordonnance en fin de consultation."
],
"complementary": "Assurez-vous de la disponibilité de la salle en prenant <b>rendez-vous</b>"
},
"requirements": {
"title": "À ne pas oublier lors de votre<br> venue :",
"items": [
{
"icon": "/img/commitment/cartevitale.png",
"text": "Carte Vitale"
},
{
"icon": "/img/commitment/phone.jpeg",
"text": "Smartphone"
},
{
"icon": "/img/commitment/cb.png",
"text": "Carte Bleue"
}
]
},
"faq": {
"title": "Questions fréquentes",
"items": [
{
"question": "Quels sont les avantages de la téléconsultation ophtalmologique ?",
"answer": "\n <span>La téléconsultation ophtalmologique proposée par Alain Afflelou présente plusieurs avantages...</span>\n <ul class=\"list-disc pl-5 mt-2\">\n <li>Lutte contre les déserts médicaux</li>\n <li>Pas de rendez-vous préalable nécessaire</li>\n <li>Réduction des délais d'attente</li>\n <li>Consultation immédiate</li>\n <li>Technologie innovante</li>\n <li>Dépistage de pathologies</li>\n <li>Suivi médical de votre vision plus régulière</li>\n </ul>\n "
},
{
"question": "Quels sont les équipements utilisés durant la téléconsultation ?",
"answer": "\n <p>Lors de la téléconsultation ophtalmologique proposée par Alain Afflelou...</p>\n <ul class=\"list-disc pl-5 mt-2\">\n <li>Frontofocomètre</li>\n <li>Auto-réfractomètre</li>\n <li>Réfractomètre binoculaire</li>\n <li>Tonométrie</li>\n <li>Pachymétrie</li>\n <li>Topographie</li>\n <li>Rétinographie</li>\n </ul>\n "
},
{
"question": "Est-ce que le service est gratuit ?",
"answer": "\n <p>Le service de téléconsultation ophtalmologique proposé par Alain Afflelou n'est pas gratuit, mais il est proposé au tarif conventionné, c'est-à-dire sans dépassement d'honoraires.\n Cela signifie que les consultations sont facturées selon les tarifs fixés par la sécurité sociale, ce qui permet aux patients de bénéficier d'une prise en charge partielle ou totale par leur assurance maladie, en fonction de leur couverture.</p>\n "
},
{
"question": "Suis-je obligé d'acheter après ma téléconsultation ?",
"answer": "\n <p>Non, vous êtes libre d'acheter vos lunettes, lentilles ou autres équipements où vous le souhaitez après avoir reçu l'ordonnance à la suite de la téléconsultation.\n Il n'y a aucune obligation d'achat dans les magasins Alain Afflelou qui proposent ce service.</p>\n "
},
{
"question": "Pour quels motifs puis-je faire un rendez-vous en téléconsultation ?",
"answer": "\n <div class=\"space-y-4\">\n <p>Vous pouvez prendre un rendez-vous pour plusieurs motifs, principalement liés à la correction visuelle et au dépistage de certaines pathologies.</p>\n <p>Comme par exemple :</p>\n <ul class=\"list-disc pl-5\">\n <li>Renouvellement ou primo-prescription de lunettes,</li>\n <li>Renouvellement de lentilles,</li>\n <li>Renouvellement de lunettes et lentilles.</li>\n </ul>\n <p>Un dépistage des pathologies sera systématiquement réalisé, cependant si vous êtes atteint d'une pathologie déjà connue (DMLA, cataracte, glaucome...) il sera préférable de consulter un ophtalmologue en physique. Aussi, la téléconsultation n'est pas adaptée pour des cas d'œil rouge, de conjonctivite, orgelet ou autre infection de ce type.</p>\n </div>\n "
}
]
},
"footerButtons": [
{
"label": "Prendre un rendez-vous",
"icon": "library--calendar",
"color": "dark",
"type": "leading-icon"
}
]
}
]
}
}
No notes defined.