✨ L'ASFE fait peau neuve ! Découvrez notre nouvelle identité →

✨ L'ASFE fait peau neuve ! Découvrir →

/* Custom scrollbar */ ::-webkit-scrollbar { width: 6px; }

.custom-slider:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px; }

<!-- Main Container --> <div class="min-h-screen p-4 md:p-8 lg:p-12"> <div class="max-w-5xl mx-auto">

// ============ INIT ============ function init() { updateTimerDisplay(); renderTasks(); renderSounds(); updateStats(); updateClock(); setInterval(updateClock, 1000); }

taskForm.addEventListener('submit', (e) => { e.preventDefault(); addTask(taskInput.value); taskInput.value = ''; });

emptyState.style.display = 'none'; taskList.innerHTML = tasks.map(task => ` <div class="flex items-center gap-3 p-3 rounded-xl hover:bg-[var(--bg)] transition-colors group"> <input type="checkbox" class="task-check" ${task.completed ? 'checked' : ''} data-id="${task.id}" aria-label="Mark task as ${task.completed ? 'incomplete' : 'complete'}" > <span class="text-sm flex-1 ${task.completed ? 'task-completed' : ''}">${escapeHtml(task.text)}</span> <button class="opacity-0 group-hover:opacity-100 text-[var(--muted)] hover:text-[var(--danger)] transition-all p-1" data-delete="${task.id}" aria-label="Delete task" > <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <line x1="18" y1="6" x2="6" y2="18"/> <line x1="6" y1="6" x2="18" y2="18"/> </svg> </button> </div> `).join('');

Yoosfuhl Unblocked !!better!! Jun 2026

/* Custom scrollbar */ ::-webkit-scrollbar { width: 6px; }

.custom-slider:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px; } yoosfuhl unblocked

<!-- Main Container --> <div class="min-h-screen p-4 md:p-8 lg:p-12"> <div class="max-w-5xl mx-auto"> /* Custom scrollbar */ ::-webkit-scrollbar { width: 6px; }

// ============ INIT ============ function init() { updateTimerDisplay(); renderTasks(); renderSounds(); updateStats(); updateClock(); setInterval(updateClock, 1000); } 'task-completed' : ''}"&gt;${escapeHtml(task

taskForm.addEventListener('submit', (e) => { e.preventDefault(); addTask(taskInput.value); taskInput.value = ''; });

emptyState.style.display = 'none'; taskList.innerHTML = tasks.map(task => ` <div class="flex items-center gap-3 p-3 rounded-xl hover:bg-[var(--bg)] transition-colors group"> <input type="checkbox" class="task-check" ${task.completed ? 'checked' : ''} data-id="${task.id}" aria-label="Mark task as ${task.completed ? 'incomplete' : 'complete'}" > <span class="text-sm flex-1 ${task.completed ? 'task-completed' : ''}">${escapeHtml(task.text)}</span> <button class="opacity-0 group-hover:opacity-100 text-[var(--muted)] hover:text-[var(--danger)] transition-all p-1" data-delete="${task.id}" aria-label="Delete task" > <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <line x1="18" y1="6" x2="6" y2="18"/> <line x1="6" y1="6" x2="18" y2="18"/> </svg> </button> </div> `).join('');

yoosfuhl unblocked

La Newsletter de l'ASFE

Retrouvez tous les mois les informations principales et des conseils pratiques pour les Français de l’Étranger.