My programme0

SUSTAINABLE MOBILITY WORKSHOPS

Find a workshop.

One question, one audience, one workshop. The “+” saves the workshop to your project notebook.

A group gathered in the Äerdschëff greenhouse
Observe, share ideas and learn at Äerdschëff.
Where to begin?
Explore all workshops
Save or resume my project

Photographs from Äerdschëff’s teaching materials and workshops. Workshop photographs illustrate the approach, not necessarily the proposed session.

`;} load();setMotion();renderResults();renderSelection();if(restoredBrief&&$('composer'))makeProposal(false); if($('filter-shell')&&window.matchMedia('(max-width:620px)').matches)$('filter-shell').open=false; $('motion-toggle')?.addEventListener('click',()=>{motionOff=!motionOff;setMotion();save();}); if(reduce.addEventListener)reduce.addEventListener('change',setMotion); document.addEventListener('visibilitychange',()=>{document.body.classList.toggle('is-backgrounded',document.hidden);if(document.hidden){liveAnimations.forEach(a=>a.cancel());save();}}); addEventListener('pagehide',save); document.addEventListener('click',e=>{ const a=e.target.closest('a[href]');if(!a)return; const u=new URL(a.href,location.href);if(u.pathname===location.pathname&&u.hash){const target=document.getElementById(u.hash.slice(1));if(target?.closest('details'))target.closest('details').open=true;}if(u.origin===location.origin&&u.pathname!==location.pathname&&selection.length&&save()===false){e.preventDefault();announce('La sauvegarde est indisponible. Emportez votre projet modifiable avant de changer de page.');} }); if(location.hash){const target=document.getElementById(location.hash.slice(1));if(target?.closest('details'))target.closest('details').open=true;} if('IntersectionObserver' in window){ if($('hero-collage'))new IntersectionObserver(entries=>entries.forEach(e=>e.target.classList.toggle('in-view',e.isIntersecting)),{threshold:.05}).observe($('hero-collage')); if($('composer'))new IntersectionObserver(entries=>entries.forEach(e=>$('selection-dock').classList.toggle('in-composer',e.isIntersecting)),{rootMargin:'-10% 0px -10% 0px'}).observe($('composer')); const drawObserver=new IntersectionObserver(entries=>entries.forEach(e=>{if(e.isIntersecting){e.target.classList.add('drawn');drawObserver.unobserve(e.target);}}),{threshold:.1}); all('.draw').forEach(p=>{if(motion())p.classList.add('waiting');drawObserver.observe(p);}); } if($('hero-collage')&&window.matchMedia('(hover:hover) and (pointer:fine)').matches){let pf=0;const collage=$('hero-collage'),target=document.querySelector('.binocular-wrap');collage.addEventListener('pointermove',e=>{if(!motion()||pf)return;pf=requestAnimationFrame(()=>{const r=collage.getBoundingClientRect();target.style.setProperty('--mx',((e.clientX-r.left-r.width/2)*.016)+'px');target.style.setProperty('--my',((e.clientY-r.top-r.height/2)*.016)+'px');pf=0;});});collage.addEventListener('pointerleave',()=>{target.style.setProperty('--mx','0px');target.style.setProperty('--my','0px');});} function scrollProgress(){if(scrollFrame)return;scrollFrame=requestAnimationFrame(()=>{const max=document.documentElement.scrollHeight-innerHeight;const amount=max>0?Math.min(1,Math.max(0,scrollY/max)):0;$('reading-progress').style.transform=`scaleX(${amount})`;scrollFrame=0;});} addEventListener('scroll',scrollProgress,{passive:true});addEventListener('resize',()=>{drawThread();scrollProgress();}); document.addEventListener('load',e=>{if(e.target?.tagName==='IMG'&&e.target.closest('#moodboard'))drawThread();},true); $('filters')?.addEventListener('submit',e=>{e.preventDefault();clearTimeout(searchTimer);filtersChanged();go($('catalogue-title'),true);}); $('filters')?.addEventListener('change',()=>{clearTimeout(searchTimer);filtersChanged();}); $('filters')?.addEventListener('reset',()=>{clearTimeout(searchTimer);activeIntent='';setTimeout(filtersChanged,0);}); $('query')?.addEventListener('input',()=>{clearTimeout(searchTimer);searchTimer=setTimeout(filtersChanged,180);}); $('show-more')?.addEventListener('click',()=>{resultPage++;renderResults();go($('catalogue-title'),true);}); $('previous-page')?.addEventListener('click',()=>{resultPage=Math.max(0,resultPage-1);renderResults();go($('catalogue-title'),true);}); all('[data-intent]').forEach(b=>b.addEventListener('click',()=>{activeIntent=b.dataset.intent;$('query').value='';$('theme').value=activeIntent;all('#filter-disciplines input').forEach(c=>c.checked=false);filtersChanged();go($('catalogue-title'),true);})); $('all-intents')?.addEventListener('click',()=>{$('filters').reset();}); $('budget')?.addEventListener('change',()=>{invalidate();renderSelection();}); $('visit-hours')?.addEventListener('change',()=>{invalidate();renderSelection();}); ['school','period'].forEach(id=>$(id)?.addEventListener('input',invalidate)); $('project-question')?.addEventListener('input',()=>{if(teamActive)$('team-question').value=$('project-question').value;invalidate();}); $('participants')?.addEventListener('input',()=>{invalidate();renderSelection();}); $('class-info')?.addEventListener('input',()=>{invalidate();renderSelection();}); ['teacher-count','team-hours','team-question','team-production'].forEach(id=>$(id)?.addEventListener('input',()=>{if(teamActive&&id==='team-question')$('project-question').value=$('team-question').value;invalidate();if(teamActive){$('team-refresh').hidden=false;renderSelection();}})); $('team-disciplines')?.addEventListener('change',()=>{invalidate();if(teamActive)renderSelection();}); $('team-form')?.addEventListener('submit',e=>{e.preventDefault();const t=teamValues();if(t.disciplines.length<2){$('team-status').textContent='Choisissez au moins deux disciplines à faire dialoguer.';all('#team-disciplines input')[0]?.focus();return;}if(!t.question){$('team-status').textContent='Écrivez votre question commune, même provisoire.';$('team-question').focus();return;} teamActive=true;$('project-question').value=t.question; const target=Math.max(Number($('team-hours').value),total());if(target<=480)$('budget').value=String(target);invalidate();renderSelection();$('team-refresh').hidden=true; $('team-status').textContent='Votre question est reprise dans le carnet. Les suggestions sont à examiner avant de les ajouter.'; if(budget()-total()>=120)showSuggestions();else{go($('composer-title'),true);say('compose-status','Votre carnet est conservé. Ajustez sa durée pour proposer des ateliers liés à la nouvelle question.');} }); $('suggest')?.addEventListener('click',showSuggestions); $('keep-suggestions')?.addEventListener('click',keepSuggestions); $('dismiss-suggestions')?.addEventListener('click',()=>{pendingSuggestions=[];$('suggestion-review').hidden=true;$('suggest').focus({preventScroll:true});}); $('build')?.addEventListener('click',()=>makeProposal()); $('clear-selection')?.addEventListener('click',()=>{selection=[];invalidate();renderSelection();announce('Le carnet est vide. Votre question de projet est conservée.');$('suggest').focus({preventScroll:true});}); document.addEventListener('click',e=>{ const add=e.target.closest('[data-add]'),remove=e.target.closest('[data-remove]'),detail=e.target.closest('[data-detail]'),up=e.target.closest('[data-up]'),down=e.target.closest('[data-down]'),ex=e.target.closest('[data-example]'),adjust=e.target.closest('[data-budget]'); if(add)toggle(Number(add.dataset.add),add);if(remove)toggle(Number(remove.dataset.remove),remove);if(detail)openDetail(Number(detail.dataset.detail),detail);if(ex)applyExample(ex.dataset.example); if(up||down){const id=Number(up?up.dataset.up:down.dataset.down),a=selection.indexOf(id),b=a+(up?-1:1);if(a>=0&&b>=0&&bgo($('composer-title'),true));else visitProject();} }); $('close-detail')?.addEventListener('click',()=>$('detail').close()); $('detail')?.addEventListener('close',()=>{document.body.classList.remove('modal-open');const next=detailOpener?.isConnected?detailOpener:document.querySelector(`[data-detail="${detailId}"]`);next?.focus({preventScroll:true});}); $('detail')?.addEventListener('click',e=>{if(e.target!==$('detail'))return;const r=$('detail').getBoundingClientRect();if(e.clientXr.right||e.clientYr.bottom)$('detail').close();}); $('download-text')?.addEventListener('click',()=>{if(proposal)download(new Blob([proposal.text],{type:'text/plain;charset=utf-8'}),'Mon-brief-Aerdscheff.txt');}); $('download-html')?.addEventListener('click',()=>{if(proposal)download(new Blob([briefHTML()],{type:'text/html;charset=utf-8'}),'Mon-brief-Aerdscheff.html');}); $('print')?.addEventListener('click',()=>{if(proposal)window.print();}); $('copy')?.addEventListener('click',async()=>{if(!proposal)return;try{if(navigator.clipboard&&window.isSecureContext){await navigator.clipboard.writeText(proposal.text);}else{const temp=document.createElement('textarea');temp.value=proposal.text;temp.style.position='fixed';temp.style.left='-9999px';document.body.append(temp);temp.select();const ok=document.execCommand('copy');temp.remove();if(!ok)throw new Error('Clipboard unavailable');}say('export-status','Le texte du brief a été copié.');}catch(_){say('export-status','La copie automatique n’est pas disponible ici. Utilisez la version texte ou le texte complet ci-dessous.');document.querySelector('.full-brief').open=true;}}); $('find-entry')?.addEventListener('click',e=>{e.preventDefault();$('filter-shell').open=true;go($('query'),true);}); $('download-draft')?.addEventListener('click',()=>{download(new Blob([JSON.stringify(snapshot(),null,2)],{type:'application/json'}),'Mon-projet-Aerdscheff.json');say('draft-status','Projet modifiable exporté. « Reprendre un projet » permet de le rouvrir sur cette page.');}); $('import-draft')?.addEventListener('click',()=>{$('draft-file').value='';$('draft-file').click();}); $('draft-file')?.addEventListener('change',async()=>{ const file=$('draft-file').files[0];if(!file)return; try{if(file.size>100000)throw new Error('Le fichier de projet est trop volumineux.'); const raw=JSON.parse(await file.text());E.validateDraft(raw,catalog); // Validate before modifying the active project. clearTimeout(searchTimer);applyDraft(raw);invalidate();setMotion();renderResults();renderSelection();if(restoredBrief&&$('composer'))makeProposal(false); say('draft-status','Projet repris : sélection, question, équipe et contexte restaurés.');go($('composer-title'),true); }catch(error){say('draft-status','Projet non importé. '+(error instanceof SyntaxError?'Le fichier JSON est illisible.':error.message));} }); $('forget-draft')?.addEventListener('click',()=>{ forgetNextSave=true;clearTimeout(searchTimer); try{localStorage.removeItem(storageKey);}catch(_){} selection=[];teamActive=false;activeIntent='';expanded=false;pendingSuggestions=[];retained={fields:{budget:'240','visit-hours':'120','teacher-count':'2','team-hours':'240'},filterDisciplines:[],teamDisciplines:[],adapt:false}; $('filters')?.reset();$('team-form')?.reset(); Object.keys(E.fieldLimits).forEach(id=>{const el=$(id);if(!el)return;if(el.tagName==='SELECT')el.value=el.querySelector('option[selected]')?.value||el.options[0].value;else el.value='';}); all('#team-disciplines input,#filter-disciplines input').forEach(c=>c.checked=false); invalidate();renderResults();renderSelection();$('team-refresh').hidden=true; $('request-body').value='';$('brief-paper').innerHTML='';$('proposal-text').textContent='';$('suggestion-options').innerHTML='';$('suggestion-note').textContent='';$('team-summary').innerHTML='';$('open-email').href='mailto:team@aerdscheff.lu';$('team-status').textContent='';say('draft-status','Le brouillon a été effacé sur cet appareil.'); setTimeout(()=>{forgetNextSave=false;},1);$('import-draft').focus({preventScroll:true}); }); async function copyText(text,status){ try{if(navigator.clipboard&&window.isSecureContext)await navigator.clipboard.writeText(text); else{const active=document.activeElement,t=document.createElement('textarea');t.value=text;t.style.position='fixed';t.style.left='-9999px';document.body.append(t);t.select();const ok=document.execCommand('copy');t.remove();active?.focus({preventScroll:true});if(!ok)throw new Error();} $(status).textContent='Message copié. Relisez-le et complétez-le dans votre messagerie.'; }catch(_){$(status).textContent='Sélectionnez et copiez le texte du message ci-dessus.';} } function mailLink(){ $('open-email').href='#transmettre-demande'; $('open-email').textContent='Transmettre ma demande'; $('request-status').textContent='Relis ton projet, puis complète tes coordonnées pour l’équipe.'; } $('prepare-request')?.addEventListener('click',()=>{ if(!proposal)return; const rows=selection.map(id=>'• '+item(id).title+' ('+hours(minutes(item(id)))+')').join('\n'); $('request-body').value='Bonjour,\n\nNous souhaitons préparer une formation autour de cette question :\n'+($('project-question').value.trim()||'Question à préciser ensemble.')+'\n\n'+rows+'\n\nÉtablissement : '+($('school').value||'à préciser')+'\nClasse : '+($('class-info').value||(field('level')&&field('level')!=='0'?field('level')+'e':'à préciser'))+' · '+(field('branch')||'filière à préciser')+'\nEffectif : '+($('participants').value||'à préciser')+'\nPériode et lieu : '+($('period').value||'à préciser')+(teamActive?'\nÉquipe : '+teamValues().teachers+' enseignants · '+teamValues().disciplines.join(', ')+(teamValues().production?'\nProduction commune souhaitée : '+teamValues().production:''):'')+'\n\nPourriez-vous nous préciser les possibilités d’accueil, l’articulation pédagogique, les tarifs et les disponibilités ?\n\nMerci,\n[Votre nom et vos coordonnées]'; mailLink();$('request-panel').hidden=false;go($('request-title'),true); }); $('request-body')?.addEventListener('input',mailLink); $('copy-email')?.addEventListener('click',()=>copyText($('request-body').value,'request-status')); })();

Extraklass · Plan the next steps

A question, a project.

Share your project with the team to clarify the programme, dates and practical arrangements.