Paradoxe Du Choix Et Insertion Professionnelle

Author: Valmir Ferreira — · Updated:

Short summary: L'hyperchoix engendre une paralysie décisionnelle dans l'orientation et l'insertion professionnelle. Face à une multitude d'options, les individus hésitent, craignant de mal choisir. Cela entraîne procrastination et insatisfaction. Pour contrer ce phénomène, il est crucial de simplifier les choix, clarifier les priorités et accepter l'incertitude inherent à la décision.

Quick overview

Site
Le Labo des CIP
Canonical URL
https://lelabodescip.fr/paradoxe-du-choix-et-insertion-professionnelle/
LLM HTML version
https://lelabodescip.fr/paradoxe-du-choix-et-insertion-professionnelle/llm
LLM JSON version
https://lelabodescip.fr/paradoxe-du-choix-et-insertion-professionnelle/llm.json
Manifest
https://lelabodescip.fr/llm-endpoints-manifest.json
Estimated reading time
13 minutes (723 seconds)
Word count
2408

Key points

Primary visual

Paradoxe Du Choix Et Insertion Professionnelle
Main illustration associated with the content.

Structured content

Imagine la scène...

Un bénéficiaire motivé, CV prêt, regard déterminé. Tu ouvres ton navigateur : formations, métiers, dispositifs, options, alternatives… et là, silence radio. Plus un mot. Le regard se perd, la main hésite, le fameux stylo reste en suspens.

Bienvenue dans le quotidien discret mais redoutable du paradoxe du choix.

Ici, on ne parle pas d’un concept théorique réservé aux amphis de psycho, mais d’un phénomène très concret que nous croisons tous les jours en entretien. Trop d’options, trop d’informations, trop de “possibles”… et au final, plus de décision du tout.

Le principe est simple (et un peu cruel) : un peu de choix rassure, trop de choix paralyse. Barry Schwartz, qui a popularisé cette notion, l’a bien montré : au‑delà d’un certain seuil, l’abondance génère anxiété, peur de se tromper, regret anticipé… et parfois immobilisme total.

Dans cet article, on va mettre les pieds dans le réel : comprendre comment l’hyperchoix agit sur l’orientation et l’insertion professionnelle, pourquoi il fragilise nos publics… et surtout comment, côté CIP, on peut désamorcer cette paralysie avec des outils simples, concrets et efficaces.

1. Le Grand Bain de l'Hyperchoix : Où ça nous frappe sur le terrain ?

1. Le Grand Bain de l'Hyperchoix : Où ça nous frappe sur le terrain ?

Le problème, c’est que le monde du travail et de l’éducation est pensé comme un immense buffet à volonté : plus il y a de choix, mieux ce serait… sauf que pour nos publics, cette accumulation d’options crée surtout une pression invisible, silencieuse, mais bien réelle.

Côté Orientation Scolaire

Côté Orientation Scolaire

Le système est devenu hyperspécialisé : options, sous-options, spécialisations de spécialisations… Résultat ? Pour les familles comme pour les jeunes, le choix n’est plus un cap à fixer, mais un parcours d’obstacles mental, souvent anxiogène avant même d’avoir commencé.

  • Plateformes pléthoriques : Les systèmes comme Parcoursup.
  • Salons et filières : Une multitude de filières et de choix d’orientation (parfois on se demande si le nombre de diplômes n'a pas dépassé le nombre de métiers 😅).

Cet hyperchoix agit comme un poids invisible sur les épaules : plus les options s’accumulent, plus la peur de se tromper grandit. Avant même d’avoir réellement commencé, certains jeunes et familles sont déjà convaincus qu’un mauvais choix serait irréversible, presque définitif. Résultat : on hésite, on compare sans fin, on repousse… et parfois, on préfère ne pas choisir du tout plutôt que de risquer « la mauvaise voie ».

Côté Marché du Travail

Côté Marché du Travail

Avec l’ère numérique, le volume d’informations explose littéralement. Tout est à portée de clic, tout le temps, partout. Sur le papier, c’est une richesse. Dans la réalité de l’accompagnement, c’est souvent un brouhaha permanent où tout se vaut… et où plus personne ne sait par quoi commencer.

Résultat : le problème n’est plus l’accès à l’information, mais le tri, la hiérarchisation, le fait de donner du sens. Trop d’infos tuent l’info, augmentent la charge mentale et finissent par transformer une recherche d’opportunité en véritable épreuve cognitive.

  • La profusion d’offres : Des milliers d’annonces sur les jobboards, souvent très proches les unes des autres, qui donnent l’impression que tout est possible… mais rendent la décision plus floue que jamais. Trop d’offres, trop de ressemblances, et au final une question qui revient en boucle chez les publics : « Je commence par laquelle ? »
  • La jungle des dispositifs : Une quantité impressionnante de dispositifs d’aide à l’emploi (contrats aidés, alternance, POE, AFPR, etc.), chacun avec ses règles, ses sigles et ses conditions. Sur le terrain, ça ressemble vite à une carte sans légende : tout existe, tout est mobilisable… mais sans accompagnement, difficile de savoir lequel est pertinent ici et maintenant.

Cette abondance donne l’illusion d’opportunités : tout semble possible, accessible, activable. Mais sur le terrain, elle provoque surtout un flou massif. Trop de portes ouvertes en même temps, trop de scénarios envisageables, et plus aucun repère clair pour avancer sereinement.

Résultat : beaucoup de publics se sentent perdus, non pas par manque de motivation, mais par excès de possibles. La question n’est plus « qu’est-ce que je veux faire ? », mais « comment être sûr de ne pas me tromper ? ». Et quand la peur de rater la “bonne” option prend le dessus, la décision se fige… ou se reporte indéfiniment.

2. Les Effets Côté Publics : Pourquoi on ne choisit plus ?

2. Les Effets Côté Publics : Pourquoi on ne choisit plus ?

Sur le terrain, l’hyperchoix quitte très vite la théorie pour s’inviter dans le concret. Il agit comme un embouteillage mental : trop d’options arrivent en même temps, tout se bloque, plus rien ne circule vraiment. Résultat : la décision n’avance plus… et quand un choix se fait, c’est souvent par défaut, faute de mieux ou d’énergie pour trancher.

Pour nos accompagnés, ce n’est pas un manque de volonté ou d’envie d’avancer. C’est un trop‑plein cognitif qui fatigue, inquiète et finit par pousser à l’évitement. Et c’est précisément là que nous, CIP, observons les signaux faibles… avant que le blocage ne s’installe durablement.

La Paralysie Décisionnelle et l'Évitement

La Paralysie Décisionnelle et l'Évitement

Face à trop d’options concurrentes, le cerveau préfère souvent... ne rien choisir du tout.

  • Procrastination des choix importants : Repousser sans cesse l’inscription à une formation ou la validation d’un contrat. Pas par manque d’envie, mais parce que décider devient épuisant : peur de se tromper, besoin d’être sûr à 100 %, attente du fameux « bon moment »… qui, en pratique, se fait souvent désirer très longtemps.
  • Absences ou renoncements : Dire non, ne pas répondre, ou disparaître juste avant un rendez-vous clé. Pas par désintérêt ni manque de respect, mais parce que la pression du choix devient trop forte : mieux vaut éviter que risquer de faire « le mauvais pas ».

Le Regret et l'Instabilité

Le Regret et l'Instabilité

Même quand un choix est fait (Hourra !), le paradoxe continue de miner la satisfaction.

  • Ruminer les alternatives : Une fois en formation ou en emploi, la personne peut ruminer les options non choisies, persuadée qu’« il existait mieux » ailleurs.
  • Instabilité : À force de ruminer les options non choisies, la personne avance avec un doute permanent en toile de fond. Chaque difficulté devient alors un signal d’alerte, chaque obstacle une preuve qu’elle aurait peut‑être dû choisir autrement. Cette fragilité nourrit les ruptures de contrat et les réorientations répétées, non par manque de capacités, mais parce que le choix initial n’a jamais vraiment été « digéré ».

Le Sentiment d’Être « Pas à la Hauteur »

Le Sentiment d’Être « Pas à la Hauteur »

Pour les jeunes et les publics les plus éloignés de l'emploi, l’hyperchoix combiné à la pression sociale aggrave la situation. Le sentiment de devoir choisir parfaitement, rapidement, renforce l'idée de ne jamais faire le bon choix, surtout en contexte d’inégalités de capital scolaire et social.

Un clin d’œil côté Recruteurs...

On l'oublie souvent, mais le paradoxe touche aussi les employeurs ! Trop de candidatures ou de profils disponibles crée chez eux une surcharge de choix. Résultat ? Lenteur des décisions, reports, et parfois insatisfaction potentielle même après le recrutement. Le syndrome de l'hyperchoix est contagieux !

https://videopress.com/v/tYGlRwr0?resizeToParent=true&cover=true&autoPlay=true&controls=false&loop=true&muted=true&persistVolume=false&preloadContent=metadata&useAverageColor=true

3. Notre Boîte à Outils Anti-Paralysie : Les Leviers d’Action

3. Notre Boîte à Outils Anti-Paralysie : Les Leviers d’Action

En tant qu'experts de l'insertion, notre rôle est de devenir des réducteurs de complexité. Voici les stratégies tirées de ces constats pour nous aider à débloquer la situation :

1. Proposer des « Menus Courts »

1. Proposer des « Menus Courts »

Oublions le catalogue complet et les listes à rallonge. Notre valeur ajoutée, côté CIP, ce n’est pas d’aligner 50 options sur la table, mais de faire le tri pour sécuriser la décision. Cibler 2 ou 3 pistes pertinentes, contextualisées et réalistes permet de redonner de l’air, de la lisibilité… et surtout la capacité de choisir sans s’épuiser.

  • Limiter les options : Nous devrions proposer seulement 2 ou 3 pistes métier ou dispositifs adaptés.
  • Hiérarchiser : Sélectionner ces options en tenant compte du niveau, du projet et surtout des contraintes réelles de la personne. Parce qu’en insertion, il n’existe pas de solution standard : chaque parcours est unique, chaque contexte différent. À nous d’ajuster nos propositions en conséquence, pour qu’elles soient réellement faisables ici et maintenant — pas juste pertinentes sur le papier.

 2.Travailler la Clarification en Amont

 2.Travailler la Clarification en Amont

Avant de regarder les fiches de poste et d’ouvrir les onglets à l’infini, il faut d’abord fixer le cap. Clarifier où l’on va, ce qui compte vraiment et ce qui est non négociable permet de transformer l’hyperchoix flou en un choix ciblé, beaucoup plus rassurant. On passe alors d’un « tout est possible » angoissant à un « voilà ce qui fait sens pour moi, maintenant », et la décision redevient enfin accessible.

  • Explorer les priorités : Avant de parler métiers ou dispositifs, il s’agit de remettre la personne au centre et de clarifier ce qui est vraiment essentiel pour elle. Sécurité financière, niveau de salaire, sens du travail, mobilité possible, rythme de vie, contraintes personnelles… ces repères servent de boussole. Une fois posés, ils permettent d’écarter naturellement certaines options et d’en rendre d’autres évidentes, sans débat interminable ni surcharge mentale.

3. Utiliser des Critères Explicites

3. Utiliser des Critères Explicites

Quand il faut comparer les 2 ou 3 options sélectionnées, une grille simple est un outil puissant pour objectiver la décision et limiter la confusion.

  • Grille de tri (simple et terrain) : un support visuel à remplir avec la personne pour comparer concrètement les options.
CritèresOption AOption BOption C
Indispensable⬜ Oui / ⬜ Non⬜ Oui / ⬜ Non⬜ Oui / ⬜ Non
Important⬜ Oui / ⬜ Non⬜ Oui / ⬜ Non⬜ Oui / ⬜ Non
Secondaire⬜ Oui / ⬜ Non⬜ Oui / ⬜ Non⬜ Oui / ⬜ Non

👉 Objectif : éliminer ce qui ne coche pas les indispensables, puis comparer sereinement le reste, sans surcharge mentale.

Contenir le Regret et Décomplexer le Parcours

Contenir le Regret et Décomplexer le Parcours

Nous devons aider la personne à accepter une réalité souvent inconfortable : tout choix est imparfait. Attendre la décision parfaite, sans risque ni doute, revient souvent à ne jamais décider. Notre rôle, côté CIP, est de sécuriser un choix suffisamment bon, aligné avec la situation actuelle, les contraintes réelles et l’énergie du moment.

L’important n’est donc pas de viser le « choix idéal », mais de faire le meilleur choix possible maintenant, avec les informations disponibles aujourd’hui. Le reste s’ajustera en chemin. Et c’est précisément cette permission de ne pas choisir parfaitement qui libère l’action et remet le mouvement au cœur du parcours.

  • Accepter la réversibilité : Rappeler que le parcours professionnel n'est pas une ligne droite, mais une série d'expériences évolutives et réversibles. C'est en voyant l’expérience comme non linéaire (alternance études/emploi/chômage) que la peur de décider diminue.

Le paradoxe du choix nous enseigne que parfois, en vouloir le meilleur, on finit par ne rien avoir. Notre rôle est de transformer cette anxiété en action par la simplification.

Et si nous construisions ensemble un petit outil pratique (une grille de tri inspirée du point 3) pour faciliter ce travail de réduction et de clarification avec nos publics ? Ce serait la prochaine étape logique pour passer de la théorie à la pratique !

L'outil d'aide à la Décision  (pour les Adhérents) :

L'outil d'aide à la Décision  (pour les Adhérents) :

🧪 Mode d’emploi

🧪 Mode d’emploi

Cet outil a une seule mission : sécuriser un choix rapidement, sans chercher la perfection absolue (qui n'existe pas, rappelons-le 😉).

Il fonctionne en 3 étapes logiques : Cadre → Critères → Analyse.

1️⃣ Le Cadre (On pose le match)

1️⃣ Le Cadre (On pose le match)

Ne comparez pas tout et n'importe quoi.

  • La règle d'or : Maximum 3 options en même temps. Au-delà, le cerveau sature et on ne décide rien.
  • Le conseil : Nommez clairement les options (ex: "Offre Pôle Emploi" vs "Formation AFPA").

2️⃣ Les Critères (Le cœur du réacteur)

2️⃣ Les Critères (Le cœur du réacteur)

C'est ici que tout se joue. L'outil vous demande de classer vos critères selon leur gravité :

  • Indispensable : C'est binaire. Si l'option ne l'a pas, c'est NON direct. (Ex: "Permis B" pour un chauffeur).
  • Important : Ça pèse lourd dans la balance, mais ça ne bloque pas tout.
  • 🔹 Secondaire : C'est la cerise sur le gâteau.

💡 Astuce de pro : Si tout est "Indispensable", aucune option ne sortira vivante. Soyez honnête sur ce qui est vraiment bloquant.

3️⃣ L'Analyse (Le verdict froid)

3️⃣ L'Analyse (Le verdict froid)

L'algorithme est impartial :

  • En Rouge : L'option est éliminée car elle ne remplit pas un critère indispensable. C'est une sécurité pour ne pas s'engager dans une voie sans issue.
  • 🏆 En Vert : L'option qui cumule le meilleur score de confort ("Importants" + "Secondaires").
Grille Labo – Sécuriser un choix /* --- STRATÉGIE D'ISOLATION (Le Bunker) --- */ #labo-app-iso { all: initial; font-family: "Inter", system-ui, -apple-system, sans-serif; font-size: 16px; line-height: 1.6; color: #111827; box-sizing: border-box; display: block; width: 100%; background-color: #f3f4f6; padding: 20px; border-radius: 1rem; /* VARIABLES LOCALES */ --labo-neon: #39ff14; --labo-hover: #1de01c; --bg-card: #ffffff; --text-main: #111827; --text-sec: #4b5563; --border-input: #d1d5db; --border-card: #e5e7eb; --shadow-soft: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03); --shadow-focus: 0 0 0 4px rgba(57, 255, 20, 0.25); --radius-card: 1rem; --radius-input: 0.75rem; } #labo-app-iso * { box-sizing: border-box; font-family: inherit; } /* --- STYLES ISOLÉS --- */ #labo-app-iso .app-wrapper { max-width: 900px; margin: 0 auto; } /* Header */ #labo-app-iso header { background: var(--bg-card); border-bottom: 1px solid var(--border-card); text-align: center; padding: 2rem 1rem 0 1rem; position: relative; box-shadow: var(--shadow-soft); margin-bottom: 2rem; border-radius: var(--radius-card); overflow: hidden; display: block; } #labo-app-iso .header-content { display: flex; flex-direction: column; align-items: center; gap: 1rem; margin-bottom: 2rem; } #labo-app-iso .logo { height: 40px; width: auto; object-fit: contain; margin: 0; border: none; box-shadow: none; } #labo-app-iso h1 { font-size: 1.875rem; font-weight: 800; letter-spacing: -0.025em; margin: 0; color: var(--text-main); line-height: 1.2; text-transform: none; } #labo-app-iso .subtitle { font-size: 1rem; color: var(--text-sec); margin: 0.5rem 0 0 0; font-weight: 400; } #labo-app-iso .header-strip { height: 4px; width: 100%; background-color: var(--labo-neon); margin-top: auto; display: block; } /* Progress Bar */ #labo-app-iso .progress-container { background: #e5e7eb; height: 6px; width: 100%; border-radius: 999px; margin: 20px 0; overflow: hidden; } #labo-app-iso .progress-fill { height: 100%; background: var(--labo-neon); width: 33%; transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1); } /* Navigation Steps */ #labo-app-iso .nav-steps { display: flex; justify-content: space-between; font-size: 0.875rem; color: var(--text-sec); font-weight: 600; margin-bottom: 0.5rem; } /* Cards */ #labo-app-iso .section-card { background: var(--bg-card); border: 1px solid var(--border-card); border-radius: var(--radius-card); padding: 2rem; box-shadow: var(--shadow-soft); margin-bottom: 1.5rem; animation: slideIn 0.4s ease-out; display: block; } @keyframes slideIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } #labo-app-iso .step-title { font-size: 1.25rem; font-weight: 700; margin-top: 0; margin-bottom: 1.5rem; display: inline-block; color: var(--text-main); } #labo-app-iso .title-accent { display: block; width: 40px; height: 4px; background: var(--labo-neon); border-radius: 2px; margin-top: 4px; } /* Form Elements */ #labo-app-iso label { display: block; font-weight: 600; margin-bottom: 0.5rem; font-size: 1rem; color: var(--text-main); } #labo-app-iso input[type="text"], #labo-app-iso select { width: 100%; padding: 0.75rem 1rem; font-size: 1rem; border: 1px solid var(--border-input); border-radius: var(--radius-input); background: #fff; color: var(--text-main); transition: all 0.2s ease; box-sizing: border-box; height: auto; line-height: normal; box-shadow: none; margin: 0; } #labo-app-iso input[type="text"]:focus, #labo-app-iso select:focus { outline: none; border-color: var(--labo-neon); box-shadow: var(--shadow-focus); } /* Buttons */ #labo-app-iso .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.75rem 1.5rem; font-weight: 700; font-size: 1rem; border-radius: var(--radius-input); cursor: pointer; transition: all 0.2s; text-decoration: none; gap: 8px; line-height: 1; border: none; text-transform: none; } #labo-app-iso .btn-primary { background-color: var(--labo-neon); color: #000000; } #labo-app-iso .btn-primary:hover { background-color: var(--labo-hover); transform: translateY(-1px); color: #000000; } #labo-app-iso .btn-ghost { background-color: transparent; border: 1px solid var(--border-input) !important; color: var(--text-sec); } #labo-app-iso .btn-ghost:hover { background-color: #f9fafb; border-color: #9ca3af !important; color: var(--text-main); } #labo-app-iso .btn-danger { background: #fee2e2; color: #991b1b; padding: 0.4rem 0.8rem; font-size: 0.875rem; } #labo-app-iso .btn-full { width: 100%; } /* Tables */ #labo-app-iso .criteria-table { width: 100%; border-collapse: separate; border-spacing: 0; margin-top: 1rem; border: none; } #labo-app-iso .criteria-table th { text-align: left; padding: 1rem; background: #f9fafb; border-bottom: 2px solid var(--border-card); font-weight: 600; color: var(--text-sec); font-size: 0.875rem; text-transform: uppercase; letter-spacing: 0.05em; border-top: none; border-left: none; border-right: none; white-space: nowrap; } #labo-app-iso .criteria-table td { padding: 1rem 0.5rem; border-bottom: 1px solid var(--border-card); vertical-align: top; background: transparent; border-left: none; border-right: none; } /* Checkboxes */ #labo-app-iso .custom-checkbox { appearance: none; -webkit-appearance: none; width: 1.5rem; height: 1.5rem; border: 2px solid var(--border-input); border-radius: 0.375rem; background: white; cursor: pointer; position: relative; transition: all 0.2s; margin: 0 auto; display: block; } #labo-app-iso .custom-checkbox:checked { background-color: var(--labo-neon); border-color: var(--labo-neon); } #labo-app-iso .custom-checkbox:checked::after { content: "✓"; position: absolute; color: black; font-weight: bold; font-size: 1rem; top: 50%; left: 50%; transform: translate(-50%, -50%); } /* Results & Helpers */ #labo-app-iso .helper-text { font-size: 0.95rem; color: var(--text-sec); margin-bottom: 0.5rem; line-height: 1.5; } #labo-app-iso .result-card { background: white; border: 1px solid var(--border-card); border-radius: var(--radius-card); padding: 1.5rem; margin-bottom: 1rem; display: flex; justify-content: space-between; align-items: center; gap: 1rem; } #labo-app-iso .result-card h3 { font-size: 1.2rem; margin-bottom: 5px; color: var(--text-main); } #labo-app-iso .result-card.winner { border: 2px solid var(--labo-neon); background: linear-gradient(to right, #ffffff, #f0fdf4); } #labo-app-iso .result-card.eliminated { background: #f9fafb; opacity: 0.85; border-left: 4px solid #ef4444; } #labo-app-iso .score-pill { background: var(--text-main); color: var(--labo-neon); padding: 0.25rem 0.75rem; border-radius: 999px; font-weight: 800; font-size: 1.1rem; white-space: nowrap; } /* Utils */ #labo-app-iso .hidden { display: none !important; } /* Options en colonne simple */ #labo-app-iso .grid-stack { display: flex; flex-direction: column; gap: 1.5rem; margin-top: 1rem; } #labo-app-iso .flex-between { display: flex; justify-content: space-between; align-items: center; margin-top: 2rem; gap: 1rem; flex-wrap: wrap; } #labo-app-iso .guide-box { background: #ecfdf5; border: 1px dashed var(--labo-neon); padding: 1.5rem; border-radius: var(--radius-card); margin-bottom: 2rem; } #labo-app-iso .mode-label { margin-bottom: 0.5rem; cursor: pointer; display: flex; align-items: center; gap: 10px; } #labo-app-iso .mode-radio { width: 1.2rem; height: 1.2rem; margin: 0; } /* ========================================================================== CORRECTION IMPRESSION (MODE "RAPPORT OFFICIEL") ========================================================================== */ @media print { body { visibility: hidden !important; background: white !important; height: auto !important; overflow: visible !important; } #labo-app-iso { visibility: visible !important; position: absolute !important; left: 0 !important; top: 0 !important; width: 100% !important; margin: 0 !important; padding: 0 !important; background: white !important; border: none !important; box-shadow: none !important; z-index: 99999 !important; } #labo-app-iso * { visibility: visible !important; } #labo-app-iso .section-card, #labo-app-iso .section-card.hidden { display: block !important; opacity: 1 !important; transform: none !important; margin-bottom: 20px !important; border: 1px solid #ddd !important; page-break-inside: avoid; } #labo-app-iso header, #labo-app-iso .nav-steps, #labo-app-iso .progress-container, #labo-app-iso .flex-between, #labo-app-iso .btn, #labo-app-iso .guide-box, #labo-app-iso .mode-label, #labo-app-iso button { display: none !important; } #labo-app-iso input[type="text"], #labo-app-iso select { border: none !important; background: transparent !important; padding: 0 !important; font-weight: bold; color: #000 !important; } #labo-app-iso:before { content: "Rapport de Décision - Grille Labo"; display: block; font-size: 24px; font-weight: bold; text-align: center; margin-bottom: 30px; border-bottom: 4px solid #39ff14; padding-bottom: 10px; } }

Grille Labo v2.0

Sécuriser une décision : Cadre → Critères → Verdict

Le Cadre

👋 Minute Papillon !

L'objectif n'est pas l'option parfaite, mais l'option suffisamment bonne pour avancer.

Les options en lice :

// --- STATE MANAGEMENT --- let currentStep = 1; // --- PLACEHOLDER ROTATION --- const examples = ["Ex: Salaire", "Ex: Distance domicile", "Ex: Horaires", "Ex: Télétravail", "Ex: Ambiance", "Ex: Type de contrat", "Ex: Autre avantage"]; let exampleIndex = 0; function getNextPlaceholder() { const ph = examples[exampleIndex]; exampleIndex = (exampleIndex + 1) % examples.length; return ph; } // --- HELPERS (scopés WP-friendly) --- function $(sel) { return document.querySelector(sel); } function $iso(sel) { const iso = document.getElementById("labo-app-iso"); return iso ? iso.querySelector(sel) : null; } function $isoAll(sel) { const iso = document.getElementById("labo-app-iso"); return iso ? iso.querySelectorAll(sel) : []; } // --- MODE TOGGLE --- function toggleMode() { const checked = $iso('input[name="mode"]:checked'); const guide = $iso("#guideBlock"); if (!checked || !guide) return; guide.style.display = checked.value === "autonome" ? "none" : "block"; } // --- NAVIGATION --- function goToStep(step) { if (step === 2) { const a = ($iso("#optA")?.value || "").trim(); const b = ($iso("#optB")?.value || "").trim(); if (!a || !b) { alert("⚠️ Il faut au moins nommer l'Option A et l'Option B !"); return; } updateTableHeaders(); } if (step === 3) analyzeResults(); // UI Updates (scopés) $iso("#step1")?.classList.add("hidden"); $iso("#step2")?.classList.add("hidden"); $iso("#step3")?.classList.add("hidden"); $iso(`#step${step}`)?.classList.remove("hidden"); // Progress styling const progress = step === 1 ? "33%" : step === 2 ? "66%" : "100%"; const pb = $iso("#progressBar"); if (pb) pb.style.width = progress; // Nav text styling const s1 = $iso("#navStep1"), s2 = $iso("#navStep2"), s3 = $iso("#navStep3"); if (s1) s1.style.color = step === 1 ? "var(--text-main)" : "var(--text-sec)"; if (s2) s2.style.color = step === 2 ? "var(--text-main)" : "var(--text-sec)"; if (s3) s3.style.color = step === 3 ? "var(--text-main)" : "var(--text-sec)"; currentStep = step; // scroll léger (utile sur mobile / WP) try { document.getElementById("labo-app-iso").scrollIntoView({ behavior: "smooth", block: "start" }); } catch (e) {} } // --- CRITERIA LOGIC --- function updateTableHeaders() { const nameA = $iso("#optA")?.value || "Option A"; const nameB = $iso("#optB")?.value || "Option B"; const nameC = $iso("#optC")?.value || ""; const thA = $iso("#thOptA"), thB = $iso("#thOptB"), thC = $iso("#thOptC"); if (thA) thA.textContent = nameA; if (thB) thB.textContent = nameB; const cellsC = $isoAll(".cell-c"); if (nameC.trim() !== "") { if (thC) { thC.style.display = "table-cell"; thC.textContent = nameC; } cellsC.forEach((c) => (c.style.display = "table-cell")); } else { if (thC) thC.style.display = "none"; cellsC.forEach((c) => (c.style.display = "none")); } } function addCriterion(defaultType = "Important", customPlaceholder = null) { const tbody = $iso("#criteriaBody"); if (!tbody) return; const tr = document.createElement("tr"); const selectStyle = "width:100%; padding:0.5rem; border-radius:0.5rem; border:1px solid #D1D5DB; background:#fff; font-weight:600; font-family:inherit;"; const placeholder = customPlaceholder || getNextPlaceholder(); const selectHTML = ` ⛔ Indispensable ⭐ Important 🔹 Secondaire `; const nameC = ($iso("#optC")?.value || "").trim(); const displayC = nameC !== "" ? "table-cell" : "none"; tr.innerHTML = `${selectHTML} `; tbody.appendChild(tr); } // --- ANALYSIS ENGINE --- function analyzeResults() { const rows = $isoAll("#criteriaBody tr"); const nameA = $iso("#optA")?.value || "Option A"; const nameB = $iso("#optB")?.value || "Option B"; const nameC = $iso("#optC")?.value || ""; const hasC = nameC.trim() !== ""; const stats = { A: { name: nameA, score: 0, dead: false, miss: [] }, B: { name: nameB, score: 0, dead: false, miss: [] }, C: { name: nameC, score: 0, dead: false, miss: [] } }; rows.forEach((row) => { const weight = parseInt(row.querySelector("select")?.value || "0", 10); const critName = row.querySelector(".crit-name")?.value || "Critère"; const checkedA = !!row.querySelector(".cb-a")?.checked; const checkedB = !!row.querySelector(".cb-b")?.checked; const checkedC = !!row.querySelector(".cb-c")?.checked; // A if (weight === 3 && !checkedA) { stats.A.dead = true; stats.A.miss.push(critName); } if (weight === 2 && checkedA) stats.A.score += 3; if (weight === 1 && checkedA) stats.A.score += 1; // B if (weight === 3 && !checkedB) { stats.B.dead = true; stats.B.miss.push(critName); } if (weight === 2 && checkedB) stats.B.score += 3; if (weight === 1 && checkedB) stats.B.score += 1; // C if (hasC) { if (weight === 3 && !checkedC) { stats.C.dead = true; stats.C.miss.push(critName); } if (weight === 2 && checkedC) stats.C.score += 3; if (weight === 1 && checkedC) stats.C.score += 1; } }); const container = $iso("#resultsContainer"); if (!container) return; container.innerHTML = ""; const optionsToRender = hasC ? ["A", "B", "C"] : ["A", "B"]; optionsToRender.sort((k1, k2) => { if (stats[k1].dead && !stats[k2].dead) return 1; if (!stats[k1].dead && stats[k2].dead) return -1; return stats[k2].score - stats[k1].score; }); let winnerFound = false; optionsToRender.forEach((key) => { const obj = stats[key]; const div = document.createElement("div"); let classes = "result-card"; let html = ""; if (obj.dead) { classes += " eliminated"; html = `

${escapeHtml(obj.name)}

⛔ Bloquant : ${escapeHtml(obj.miss.join(", "))}
Éliminé
`; } else { if (!winnerFound) { classes += " winner"; winnerFound = true; html = `

🏆 ${escapeHtml(obj.name)}

Meilleur équilibre & Critères indispensables validés.
${obj.score} pts
`; } else { html = `

${escapeHtml(obj.name)}

Option valide.
${obj.score} pts
`; } } div.className = classes; div.innerHTML = html; container.appendChild(div); }); if (!winnerFound) { container.innerHTML = `
⚠️ Impasse technique
Toutes les options sont bloquées par un indispensable. Il faut revoir le cadre ou les critères.
` + container.innerHTML; } } function resetAll() { if (confirm("Tout effacer ?")) location.reload(); } // --- PRINT ROBUSTE POUR WORDPRESS (anti-cache/minify/iframe) --- function laboPrint() { // Doit rester synchro pour conserver le "user gesture" try { if (window.top && window.top !== window && typeof window.top.print === "function") { window.top.print(); return; } } catch (e) { // iframe verrouillé / cross-origin => fallback } window.print(); } function bindPrintButton() { const btn = $iso("#btn-print-labo"); if (!btn) return false; btn.removeEventListener("click", laboPrint); btn.addEventListener("click", laboPrint, { passive: true }); return true; } // --- MINI SÉCURITÉ XSS (noms) --- function escapeHtml(str) { return String(str) .replaceAll("&", "&") .replaceAll("", ">") .replaceAll('"', """) .replaceAll("'", "'"); } // --- DELEGATION D'ÉVÉNEMENTS (WP-friendly) --- function bindAppEvents() { const iso = document.getElementById("labo-app-iso"); if (!iso) return; // Radio mode iso.querySelectorAll('input[name="mode"]').forEach((r) => { r.addEventListener("change", toggleMode); }); // Clicks (boutons) iso.addEventListener("click", (e) => { const t = e.target; // remove row if (t && t.matches('[data-action="remove-row"]')) { const tr = t.closest("tr"); if (tr) tr.remove(); return; } // go step if (t && t.matches('[data-action="go-step"]')) { const step = parseInt(t.getAttribute("data-step") || "1", 10); goToStep(step); return; } // add criterion if (t && t.matches('[data-action="add-criterion"]')) { addCriterion(); return; } // reset if (t && t.matches('[data-action="reset"]')) { resetAll(); return; } }); } // --- INIT --- document.addEventListener("DOMContentLoaded", () => { bindAppEvents(); toggleMode(); // Init with default examples addCriterion("Indispensable", "Ex: Permis B (Indispensable)"); addCriterion("Important", "Ex: Salaire > 1800€"); addCriterion("Secondaire", "Ex: Tickets resto"); // Print binding standard + filet de sécurité (WP builders ré-injectent parfois le DOM) bindPrintButton(); let tries = 0; const timer = setInterval(() => { tries++; if (bindPrintButton() || tries > 20) clearInterval(timer); // ~2s max }, 100); });

Topics and keywords

Themes: Labonautes ad, outils, Outils pour accompagner

Keywords: labonautes, outils

License & attribution

License: CC BY-ND 4.0.

Attribution required: yes.

Manifest: https://lelabodescip.fr/llm-endpoints-manifest.json

LLM Endpoints plugin version 1.1.2.