{"id":3517,"date":"2026-09-13T00:01:49","date_gmt":"2026-09-13T00:01:49","guid":{"rendered":"https:\/\/jiris.ca\/?page_id=3517"},"modified":"2026-09-13T00:43:54","modified_gmt":"2026-09-13T00:43:54","slug":"fiche-faire-face-a-une-critique","status":"publish","type":"page","link":"https:\/\/jiris.ca\/en\/fiche-faire-face-a-une-critique\/","title":{"rendered":"Fiche-Faire face \u00e0 une critique"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3517\" class=\"elementor elementor-3517\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6e89b5e9 e-flex e-con-boxed e-con e-parent\" data-id=\"6e89b5e9\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d02bb27 e-con-full e-flex e-con e-child\" data-id=\"d02bb27\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2b562688 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"2b562688\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:200}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Faire face \u00e0 une critique\n<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-98aeed2 e-flex e-con-boxed e-con e-parent\" data-id=\"98aeed2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-50e53c9 elementor-widget elementor-widget-html\" data-id=\"50e53c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Faire face \u00e0 une critique \u2014 Outil d'accompagnement JIRIS<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;1,9..144,400&family=Work+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n  :root {\n    --bg: #F4F2F8;\n    --surface: #FFFFFF;\n    --surface-soft: #FAF8FE;\n    --ink: #2A2438;\n    --muted: #756E8C;\n    --divider: #E1DCEC;\n    --primary: #453876;\n    --primary-light: #6D5AA0;\n    --primary-soft: #ECE8F8;\n    --primary-shadow: rgba(69, 56, 118, 0.14);\n    --accent: #2F8F5B;\n    --accent-soft: #E6F5EE;\n    --accent-shadow: rgba(47, 143, 91, 0.16);\n    --warm: #D97706;\n    --warm-soft: #FEF3C7;\n    --warm-border: #FDE68A;\n    --danger: #DC2626;\n    --danger-soft: #FEF2F2;\n    --danger-border: #FCA5A5;\n    --radius: 18px;\n    --radius-sm: 12px;\n    --transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  }\n\n  * { box-sizing: border-box; margin: 0; padding: 0; }\n\n  body {\n    background: var(--bg);\n    color: var(--ink);\n    font-family: \"Work Sans\", sans-serif;\n    line-height: 1.6;\n    -webkit-font-smoothing: antialiased;\n    min-height: 100vh;\n    background-image:\n      radial-gradient(circle at 15% 0%, rgba(109, 90, 160, 0.08) 0%, transparent 45%),\n      radial-gradient(circle at 85% 100%, rgba(47, 143, 91, 0.06) 0%, transparent 45%);\n    background-attachment: fixed;\n  }\n\n  .wrap {\n    max-width: 780px;\n    margin: 0 auto;\n    padding: 40px 20px 80px;\n  }\n\n  \/* ===== HERO ===== *\/\n  .hero {\n    text-align: center;\n    margin-bottom: 32px;\n  }\n\n  .hero-frame {\n    width: 72px;\n    height: 72px;\n    margin: 0 auto 20px;\n    border-radius: 22px;\n    background: linear-gradient(135deg, var(--primary-soft), var(--accent-soft));\n    border: 1.5px solid var(--divider);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 34px;\n    box-shadow: 0 12px 32px var(--primary-shadow);\n    animation: float 4s ease-in-out infinite;\n  }\n\n  @keyframes float {\n    0%, 100% { transform: translateY(0); }\n    50% { transform: translateY(-6px); }\n  }\n\n  .hero h1 {\n    font-family: \"Fraunces\", serif;\n    font-weight: 600;\n    font-size: clamp(28px, 5.5vw, 40px);\n    color: var(--primary);\n    margin-bottom: 10px;\n    letter-spacing: -0.02em;\n  }\n\n  .hero .subtitle {\n    font-family: \"Fraunces\", serif;\n    font-style: italic;\n    color: var(--muted);\n    font-size: 17px;\n    max-width: 620px;\n    margin: 0 auto;\n  }\n\n  \/* ===== INTRO CARD ===== *\/\n  .intro-card {\n    background: var(--surface);\n    border-radius: var(--radius);\n    padding: 30px 32px;\n    margin-bottom: 32px;\n    box-shadow: 0 10px 30px rgba(42, 36, 56, 0.06);\n    border: 1px solid var(--divider);\n    border-left: 5px solid var(--primary);\n  }\n\n  .intro-card h2 {\n    font-family: \"Fraunces\", serif;\n    font-weight: 600;\n    font-size: 20px;\n    color: var(--primary);\n    margin-bottom: 14px;\n  }\n\n  .intro-card p {\n    font-size: 15.5px;\n    color: var(--ink);\n    margin-bottom: 12px;\n    line-height: 1.7;\n  }\n\n  .intro-card p:last-child { margin-bottom: 0; }\n  .intro-card strong { color: var(--primary); font-weight: 600; }\n\n  .intro-note {\n    margin-top: 18px;\n    padding: 14px 18px;\n    background: var(--primary-soft);\n    border-left: 4px solid var(--primary);\n    border-radius: 0 10px 10px 0;\n    font-size: 14px;\n    color: var(--primary);\n    line-height: 1.6;\n  }\n\n  .intro-note strong { color: var(--primary); }\n\n  \/* ===== AVERTISSEMENT (dans l'intro) ===== *\/\n  .warning-card {\n    background: var(--warm-soft);\n    border: 1.5px solid var(--warm-border);\n    border-radius: var(--radius-sm);\n    padding: 20px 22px;\n    margin-bottom: 22px;\n    display: flex;\n    gap: 14px;\n    align-items: flex-start;\n  }\n\n  .warning-card .warning-icon {\n    font-size: 24px;\n    line-height: 1;\n    flex-shrink: 0;\n    margin-top: 2px;\n  }\n\n  .warning-card .warning-content h3 {\n    font-family: \"Fraunces\", serif;\n    font-weight: 600;\n    font-size: 16px;\n    color: #92400E;\n    margin-bottom: 8px;\n  }\n\n  .warning-card .warning-content p {\n    font-size: 14px;\n    color: #78350F;\n    line-height: 1.6;\n    margin-bottom: 6px;\n  }\n\n  .warning-card .warning-content p:last-child { margin-bottom: 0; }\n\n  .warning-card strong {\n    color: #78350F;\n    font-weight: 700;\n  }\n\n  \/* ===== AVIS DE COMPL\u00c9TION ===== *\/\n  .completed-notice {\n    background: var(--accent-soft);\n    border-left: 4px solid var(--accent);\n    border-radius: 0 10px 10px 0;\n    padding: 16px 20px;\n    margin-bottom: 18px;\n    display: flex;\n    gap: 14px;\n    align-items: flex-start;\n  }\n  .completed-notice .completed-icon {\n    font-size: 22px;\n    line-height: 1;\n    flex-shrink: 0;\n    margin-top: 2px;\n  }\n  .completed-notice .completed-text { flex: 1; }\n  .completed-notice .completed-text strong {\n    display: block;\n    color: var(--accent);\n    font-family: \"Fraunces\", serif;\n    font-weight: 600;\n    font-size: 15px;\n    margin-bottom: 6px;\n  }\n  .completed-notice .completed-text p {\n    font-size: 14px;\n    color: var(--ink);\n    line-height: 1.6;\n    margin: 0;\n  }\n\n  .restart-hint {\n    text-align: center;\n    font-size: 13px;\n    color: var(--muted);\n    font-style: italic;\n    margin-top: 16px;\n    line-height: 1.6;\n  }\n\n  \/* ===== PROGRESSION ===== *\/\n  .progress-wrapper {\n    margin-bottom: 28px;\n  }\n\n  .progress-text {\n    display: flex;\n    justify-content: space-between;\n    font-size: 13.5px;\n    font-weight: 600;\n    color: var(--muted);\n    margin-bottom: 8px;\n    letter-spacing: 0.02em;\n  }\n\n  .progress-bar {\n    width: 100%;\n    height: 8px;\n    background: var(--primary-soft);\n    border-radius: 99px;\n    overflow: hidden;\n  }\n\n  .progress-fill {\n    height: 100%;\n    background: linear-gradient(90deg, var(--primary), var(--accent));\n    border-radius: 99px;\n    transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n    width: 0%;\n  }\n\n  \/* ===== \u00c9TAPE ===== *\/\n  .step {\n    display: none;\n    background: var(--surface);\n    border-radius: var(--radius);\n    padding: 34px 32px;\n    margin-bottom: 24px;\n    box-shadow: 0 10px 30px rgba(42, 36, 56, 0.06);\n    border: 1px solid var(--divider);\n    animation: fadeInUp 0.4s ease;\n  }\n\n  .step.active { display: block; }\n\n  @keyframes fadeInUp {\n    from { opacity: 0; transform: translateY(12px); }\n    to { opacity: 1; transform: translateY(0); }\n  }\n\n  .step-badge {\n    display: inline-block;\n    padding: 5px 14px;\n    background: var(--primary-soft);\n    color: var(--primary);\n    border-radius: 99px;\n    font-size: 11.5px;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    margin-bottom: 14px;\n  }\n\n  .step-title {\n    font-family: \"Fraunces\", serif;\n    font-weight: 600;\n    font-size: 24px;\n    color: var(--primary);\n    margin-bottom: 8px;\n    line-height: 1.3;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n  }\n\n  .step-title .step-emoji {\n    font-size: 26px;\n    line-height: 1;\n  }\n\n  .step-hint {\n    font-size: 14.5px;\n    color: var(--muted);\n    margin-bottom: 22px;\n    font-style: italic;\n    line-height: 1.6;\n  }\n\n  .field-group {\n    margin-bottom: 18px;\n  }\n\n  .field-label {\n    display: block;\n    font-size: 14.5px;\n    font-weight: 600;\n    color: var(--ink);\n    margin-bottom: 8px;\n    line-height: 1.5;\n  }\n\n  .field-label .field-example {\n    display: block;\n    font-weight: 400;\n    font-style: italic;\n    font-size: 13px;\n    color: var(--muted);\n    margin-top: 4px;\n  }\n\n  textarea,\n  input[type=\"text\"] {\n    width: 100%;\n    border: 1.5px solid var(--divider);\n    background: var(--surface);\n    border-radius: 12px;\n    padding: 14px 16px;\n    font-family: \"Work Sans\", sans-serif;\n    font-size: 15px;\n    color: var(--ink);\n    transition: all var(--transition);\n    resize: vertical;\n    line-height: 1.6;\n    min-height: 90px;\n  }\n\n  input[type=\"text\"] { min-height: auto; }\n\n  textarea:focus,\n  input[type=\"text\"]:focus {\n    outline: none;\n    border-color: var(--primary-light);\n    box-shadow: 0 0 0 4px rgba(69, 56, 118, 0.08);\n  }\n\n  textarea::placeholder,\n  input::placeholder {\n    color: var(--muted);\n    opacity: 0.7;\n  }\n\n  .helper-text {\n    font-size: 13px;\n    color: var(--muted);\n    margin-top: 8px;\n    line-height: 1.6;\n    font-style: italic;\n  }\n\n  .guided-list {\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n    margin-bottom: 18px;\n  }\n\n  .guided-item {\n    background: var(--surface-soft);\n    border: 1.5px solid var(--divider);\n    border-radius: var(--radius-sm);\n    padding: 14px 18px;\n    transition: all var(--transition);\n  }\n\n  .guided-item:focus-within {\n    border-color: var(--primary);\n    background: var(--surface);\n    box-shadow: 0 0 0 4px rgba(69, 56, 118, 0.06);\n  }\n\n  .guided-item .item-label {\n    font-size: 13.5px;\n    font-weight: 600;\n    color: var(--primary);\n    margin-bottom: 8px;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n\n  .guided-item .item-num {\n    display: inline-flex;\n    width: 22px;\n    height: 22px;\n    border-radius: 50%;\n    background: var(--primary-soft);\n    color: var(--primary);\n    align-items: center;\n    justify-content: center;\n    font-size: 11px;\n    font-weight: 700;\n    flex-shrink: 0;\n  }\n\n  .guided-item textarea {\n    min-height: 64px;\n    padding: 10px 14px;\n    font-size: 14.5px;\n    border: 1px solid var(--divider);\n    background: var(--surface);\n  }\n\n  \/* ===== DEUX COLONNES (faits \/ interpr\u00e9tations) ===== *\/\n  .control-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n    margin-bottom: 8px;\n  }\n\n  .control-box {\n    background: var(--surface-soft);\n    border: 1.5px solid var(--divider);\n    border-radius: var(--radius-sm);\n    padding: 16px 18px;\n    transition: all var(--transition);\n  }\n\n  .control-box:focus-within {\n    border-color: var(--primary);\n    background: var(--surface);\n    box-shadow: 0 0 0 4px rgba(69, 56, 118, 0.06);\n  }\n\n  .control-box.facts {\n    border-left: 4px solid var(--accent);\n  }\n\n  .control-box.interpretations {\n    border-left: 4px solid var(--warm);\n  }\n\n  .control-box .control-header {\n    font-size: 13.5px;\n    font-weight: 700;\n    margin-bottom: 10px;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    line-height: 1.4;\n  }\n\n  .control-box.facts .control-header { color: var(--accent); }\n  .control-box.interpretations .control-header { color: var(--warm); }\n\n  .control-box .control-icon {\n    font-size: 16px;\n    line-height: 1;\n  }\n\n  .control-box textarea {\n    min-height: 120px;\n    font-size: 14.5px;\n    padding: 12px 14px;\n    border: 1px solid var(--divider);\n    background: var(--surface);\n  }\n\n  .control-box .control-help {\n    font-size: 12px;\n    color: var(--muted);\n    font-style: italic;\n    margin-top: 8px;\n    line-height: 1.5;\n  }\n\n  @media (max-width: 640px) {\n    .control-grid {\n      grid-template-columns: 1fr;\n    }\n  }\n\n  \/* ===== CHIPS ===== *\/\n  .chips-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-bottom: 14px;\n  }\n\n  .chip {\n    padding: 8px 16px;\n    background: var(--surface);\n    border: 1.5px solid var(--divider);\n    border-radius: 99px;\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--ink);\n    cursor: pointer;\n    transition: all var(--transition);\n    font-family: inherit;\n  }\n\n  .chip:hover {\n    border-color: var(--primary);\n    color: var(--primary);\n    background: var(--primary-soft);\n  }\n\n  .chip.selected {\n    background: var(--primary);\n    border-color: var(--primary);\n    color: #FFFFFF;\n  }\n\n  \/* ===== GRILLE MULTI-S\u00c9LECTION ===== *\/\n  .multi-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n    gap: 10px;\n    margin-bottom: 8px;\n  }\n\n  .multi-chip {\n    padding: 12px 16px;\n    background: var(--surface-soft);\n    border: 1.5px solid var(--divider);\n    border-radius: var(--radius-sm);\n    font-size: 13.5px;\n    font-weight: 500;\n    color: var(--ink);\n    cursor: pointer;\n    transition: all var(--transition);\n    text-align: left;\n    font-family: inherit;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    line-height: 1.4;\n  }\n\n  .multi-chip::before {\n    content: \"\";\n    width: 18px;\n    height: 18px;\n    border-radius: 5px;\n    border: 1.5px solid var(--divider);\n    background: var(--surface);\n    flex-shrink: 0;\n    transition: all var(--transition);\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .multi-chip:hover {\n    border-color: var(--primary);\n    background: var(--primary-soft);\n  }\n\n  .multi-chip.selected {\n    border-color: var(--primary);\n    background: var(--primary-soft);\n    color: var(--primary);\n    font-weight: 600;\n  }\n\n  .multi-chip.selected::before {\n    background: var(--primary);\n    border-color: var(--primary);\n    content: \"\u2713\";\n    color: #FFFFFF;\n    font-size: 12px;\n    font-weight: 700;\n  }\n\n  \/* ===== INFO ENCADR\u00c9 ===== *\/\n  .info-callout {\n    background: var(--accent-soft);\n    border-left: 4px solid var(--accent);\n    border-radius: 0 12px 12px 0;\n    padding: 16px 20px;\n    margin: 16px 0;\n    font-size: 14px;\n    color: var(--ink);\n    line-height: 1.65;\n  }\n\n  .info-callout strong {\n    color: var(--accent);\n    font-weight: 700;\n  }\n\n  .info-emphasis {\n    background: var(--primary-soft);\n    border-left: 4px solid var(--primary);\n    border-radius: 0 12px 12px 0;\n    padding: 16px 20px;\n    margin: 16px 0;\n    font-size: 14px;\n    color: var(--ink);\n    line-height: 1.65;\n  }\n\n  .info-emphasis strong {\n    color: var(--primary);\n    font-weight: 700;\n  }\n\n  \/* ===== BOUTONS ===== *\/\n  .btn-group {\n    display: flex;\n    gap: 12px;\n    flex-wrap: wrap;\n    margin-top: 26px;\n    justify-content: space-between;\n  }\n\n  .btn {\n    padding: 14px 28px;\n    border: none;\n    border-radius: var(--radius-sm);\n    font-family: \"Work Sans\", sans-serif;\n    font-weight: 600;\n    font-size: 15px;\n    cursor: pointer;\n    transition: all var(--transition);\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    white-space: nowrap;\n  }\n\n  .btn-primary {\n    background: var(--primary);\n    color: #FFFFFF;\n    box-shadow: 0 6px 20px var(--primary-shadow);\n  }\n\n  .btn-primary:hover {\n    background: var(--primary-light);\n    transform: translateY(-2px);\n    box-shadow: 0 10px 28px var(--primary-shadow);\n  }\n\n  .btn-accent {\n    background: var(--accent);\n    color: #FFFFFF;\n    box-shadow: 0 6px 20px var(--accent-shadow);\n  }\n\n  .btn-accent:hover {\n    background: #27794d;\n    transform: translateY(-2px);\n    box-shadow: 0 10px 28px var(--accent-shadow);\n  }\n\n  .btn-secondary {\n    background: var(--surface);\n    color: var(--ink);\n    border: 1.5px solid var(--divider);\n  }\n\n  .btn-secondary:hover {\n    background: var(--primary-soft);\n    border-color: var(--primary);\n    color: var(--primary);\n  }\n\n  \/* ===== R\u00c9SUM\u00c9 ===== *\/\n  .summary-section {\n    background: var(--surface);\n    border-radius: var(--radius);\n    padding: 34px 32px;\n    margin-bottom: 24px;\n    box-shadow: 0 16px 40px rgba(42, 36, 56, 0.08);\n    border: 1px solid var(--divider);\n    border-top: 5px solid var(--accent);\n    display: none;\n  }\n\n  .summary-section.active { display: block; animation: fadeInUp 0.5s ease; }\n\n  .summary-hero {\n    text-align: center;\n    margin-bottom: 28px;\n    padding-bottom: 24px;\n    border-bottom: 1px dashed var(--divider);\n  }\n\n  .summary-hero .summary-emoji {\n    font-size: 44px;\n    line-height: 1;\n    margin-bottom: 12px;\n  }\n\n  .summary-hero h2 {\n    font-family: \"Fraunces\", serif;\n    font-weight: 600;\n    font-size: 26px;\n    color: var(--primary);\n    margin-bottom: 10px;\n  }\n\n  .summary-hero p {\n    font-size: 15px;\n    color: var(--muted);\n    font-style: italic;\n    max-width: 520px;\n    margin: 0 auto;\n  }\n\n  .summary-block {\n    margin-bottom: 22px;\n    padding-bottom: 22px;\n    border-bottom: 1px solid var(--divider);\n  }\n\n  .summary-block:last-child {\n    border-bottom: none;\n    padding-bottom: 0;\n    margin-bottom: 0;\n  }\n\n  .summary-block h3 {\n    font-family: \"Fraunces\", serif;\n    font-weight: 600;\n    font-size: 17px;\n    color: var(--primary);\n    margin-bottom: 10px;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n\n  .summary-block p {\n    font-size: 15px;\n    color: var(--ink);\n    line-height: 1.7;\n    white-space: pre-wrap;\n  }\n\n  .summary-block ul {\n    list-style: none;\n    padding-left: 0;\n  }\n\n  .summary-block ul li {\n    position: relative;\n    padding-left: 22px;\n    font-size: 14.5px;\n    color: var(--ink);\n    line-height: 1.65;\n    margin-bottom: 8px;\n  }\n\n  .summary-block ul li::before {\n    content: \"\u2726\";\n    position: absolute;\n    left: 0;\n    color: var(--accent);\n    font-size: 13px;\n    top: 1px;\n  }\n\n  .summary-control-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 14px;\n    margin-top: 8px;\n  }\n\n  .summary-control-box {\n    padding: 14px 16px;\n    border-radius: 10px;\n    border: 1px solid var(--divider);\n    font-size: 14.5px;\n    line-height: 1.65;\n  }\n\n  .summary-control-box.facts {\n    background: var(--accent-soft);\n    border-left: 4px solid var(--accent);\n  }\n\n  .summary-control-box.interpretations {\n    background: var(--warm-soft);\n    border-left: 4px solid var(--warm);\n  }\n\n  .summary-control-box .summary-control-label {\n    font-weight: 700;\n    font-size: 12.5px;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    margin-bottom: 6px;\n    display: block;\n  }\n\n  .summary-control-box.facts .summary-control-label { color: var(--accent); }\n  .summary-control-box.interpretations .summary-control-label { color: #92400E; }\n\n  @media (max-width: 640px) {\n    .summary-control-grid {\n      grid-template-columns: 1fr;\n    }\n  }\n\n  .summary-resources {\n    background: var(--accent-soft);\n    border-left: 4px solid var(--accent);\n    border-radius: 0 10px 10px 0;\n    padding: 16px 20px;\n    margin-top: 10px;\n    font-size: 14.5px;\n    color: var(--ink);\n    line-height: 1.7;\n  }\n\n  .summary-resources strong {\n    color: var(--accent);\n    display: block;\n    margin-bottom: 6px;\n  }\n\n  .summary-actions {\n    display: flex;\n    gap: 12px;\n    flex-wrap: wrap;\n    justify-content: center;\n    margin-top: 26px;\n    padding-top: 24px;\n    border-top: 1px solid var(--divider);\n  }\n\n  \/* ===== FOOTER ===== *\/\n  .footer {\n    text-align: center;\n    margin-top: 56px;\n    padding-top: 28px;\n    border-top: 1px solid var(--divider);\n    color: var(--muted);\n    font-size: 13px;\n    line-height: 1.7;\n  }\n\n  .footer strong {\n    color: var(--primary);\n    font-weight: 600;\n  }\n\n  \/* ===== RESPONSIVE ===== *\/\n  @media (max-width: 640px) {\n    .wrap { padding: 28px 16px 60px; }\n    .step { padding: 24px 20px; }\n    .intro-card { padding: 22px 20px; }\n    .summary-section { padding: 24px 20px; }\n    .step-title { font-size: 20px; }\n    .step-title .step-emoji { font-size: 22px; }\n    .btn-group { flex-direction: column-reverse; }\n    .btn-group .btn { width: 100%; }\n    .summary-actions { flex-direction: column; }\n    .summary-actions .btn { width: 100%; }\n    .warning-card { padding: 16px 16px; flex-direction: column; gap: 10px; }\n    .completed-notice { padding: 14px 16px; flex-direction: column; gap: 10px; }\n    .multi-grid { grid-template-columns: 1fr; }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    *, *::before, *::after {\n      animation-duration: 0.01ms !important;\n      transition-duration: 0.01ms !important;\n    }\n  }\n\n  @media print {\n    body { background: white; }\n    .wrap { padding: 0; }\n    .hero-frame, .btn, .intro-note, .footer, .progress-wrapper, .restart-hint { display: none !important; }\n    .summary-section { box-shadow: none; border: 1px solid #ccc; page-break-inside: avoid; }\n    .step { display: none !important; }\n  }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"wrap\">\n\n  <!-- HERO -->\n  <header class=\"hero\">\n    <div class=\"hero-frame\">\ud83e\ude9e<\/div>\n    <h1>Faire face \u00e0 une critique<\/h1>\n    <p class=\"subtitle\">Un outil d'accompagnement pour accueillir une critique sans s'effondrer, distinguer ce qui est juste de ce qui blesse, et r\u00e9pondre avec justesse.<\/p>\n  <\/header>\n\n  <!-- INTRO -->\n  <div class=\"intro-card\" id=\"introCard\">\n    <h2>Avant de commencer<\/h2>\n\n    <!-- AVERTISSEMENT -->\n    <div class=\"warning-card\">\n      <div class=\"warning-icon\">\u26a0\ufe0f<\/div>\n      <div class=\"warning-content\">\n        <h3>Critique n'est pas attaque<\/h3>\n        <p>Une critique est un <strong>avis, un retour, un point de vue<\/strong>. Une attaque vise \u00e0 blesser, humilier ou d\u00e9truire. Les deux ne se confondent pas, m\u00eame si sur le moment elles peuvent sembler identiques.<\/p>\n        <p>Si vous \u00eates expos\u00e9\u00b7e \u00e0 des <strong>paroles humiliantes, du harc\u00e8lement, des menaces ou de la violence verbale r\u00e9p\u00e9t\u00e9e<\/strong>, il ne s'agit pas d'une critique mais d'une atteinte. Dans ce cas, cherchez de l'aide : <strong>811<\/strong> (Info-Social), <strong>1 800 363-9010<\/strong> (SOS violence conjugale), ou <strong>911<\/strong> en cas d'urgence.<\/p>\n      <\/div>\n    <\/div>\n\n    <p>Recevoir une critique, c'est souvent recevoir un choc. M\u00eame formul\u00e9e avec bienveillance, une critique peut r\u00e9veiller une blessure, une peur, un doute. Il n'y a rien d'anormal \u00e0 se sentir \u00e9branl\u00e9\u00b7e.<\/p>\n    <p>Cet outil vous propose de <strong>prendre un temps pour respirer<\/strong>, nommer ce qui a \u00e9t\u00e9 dit, comprendre ce qui a \u00e9t\u00e9 touch\u00e9 en vous, distinguer les faits des interpr\u00e9tations, reconna\u00eetre vos besoins, et pr\u00e9parer une r\u00e9ponse pos\u00e9e \u2014 qui pr\u00e9serve votre dignit\u00e9 et votre lien avec l'autre.<\/p>\n    <p><strong>Il ne remplace pas un accompagnement professionnel<\/strong>, mais il peut vous aider \u00e0 traverser ce moment avec plus de clart\u00e9.<\/p>\n    <div class=\"intro-note\">\n      <strong>\u23f1\ufe0f Dur\u00e9e estim\u00e9e :<\/strong> 15 \u00e0 25 minutes. Prenez le temps qu'il vous faut. Vos r\u00e9ponses sont enregistr\u00e9es automatiquement dans votre navigateur et restent confidentielles.\n    <\/div>\n\n    <!-- AVIS DE COMPL\u00c9TION -->\n    <div class=\"completed-notice\" id=\"completedNotice\" style=\"display: none;\">\n      <div class=\"completed-icon\">\u2705<\/div>\n      <div class=\"completed-text\">\n        <strong>Vous avez termin\u00e9 cette exploration.<\/strong>\n        <p>Votre synth\u00e8se est pr\u00eate. Vous pouvez la revoir ou recommencer une nouvelle exploration.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-group\" style=\"justify-content: flex-start;\">\n      <button class=\"btn btn-primary\" id=\"startBtn\" type=\"button\">Commencer \u2192<\/button>\n      <button class=\"btn btn-accent\" id=\"reviewBtn\" type=\"button\" style=\"display: none;\">\u2728 Revoir ma synth\u00e8se<\/button>\n      <button class=\"btn btn-secondary\" id=\"resetBtn\" type=\"button\">R\u00e9initialiser<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- PROGRESSION -->\n  <div class=\"progress-wrapper\" id=\"progressWrapper\" style=\"display: none;\">\n    <div class=\"progress-text\">\n      <span id=\"progressLabel\">\u00c9tape 1 sur 6<\/span>\n      <span id=\"progressPercent\">0%<\/span>\n    <\/div>\n    <div class=\"progress-bar\">\n      <div class=\"progress-fill\" id=\"progressFill\"><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- ===== \u00c9TAPE 1 ===== -->\n  <section class=\"step\" id=\"step1\" data-step=\"1\">\n    <span class=\"step-badge\">\u00c9tape 1 \u00b7 Nommer<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83d\udcdd<\/span> La critique re\u00e7ue<\/h2>\n    <p class=\"step-hint\">Commen\u00e7ons par poser les choses : d'o\u00f9 vient cette critique, qu'a-t-elle dit, et comment l'avez-vous re\u00e7ue.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"source\">\n        De qui vient cette critique ?\n        <span class=\"field-example\">Un proche, un\u00b7e coll\u00e8gue, un\u00b7e sup\u00e9rieur\u00b7e, un membre de la famille, un\u00b7e ami\u00b7e, une personne inconnue\u2026<\/span>\n      <\/label>\n      <input type=\"text\" id=\"source\" placeholder=\"De\u2026\">\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"content\">\n        Qu'a-t-on dit, exactement \u2014 ou le plus fid\u00e8lement possible ?\n        <span class=\"field-example\">Essayez de retrouver les mots prononc\u00e9s, sans les reformuler. C'est \u00e0 partir de ces mots bruts qu'on travaillera.<\/span>\n      <\/label>\n      <textarea id=\"content\" placeholder=\"Ce qui m'a \u00e9t\u00e9 dit\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"context\">\n        Dans quel contexte cette critique a-t-elle \u00e9t\u00e9 formul\u00e9e ?\n        <span class=\"field-example\">Ex. : \u00ab Devant d'autres personnes \u00bb, \u00ab En priv\u00e9 \u00bb, \u00ab Par \u00e9crit \u00bb, \u00ab Sur le moment, \u00e0 chaud \u00bb, \u00ab Apr\u00e8s une longue journ\u00e9e \u00bb\u2026<\/span>\n      <\/label>\n      <textarea id=\"context\" placeholder=\"Le contexte\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">Sur une \u00e9chelle de 0 \u00e0 10, quelle a \u00e9t\u00e9 l'intensit\u00e9 de la blessure ressentie ?<\/label>\n      <div class=\"chips-row\" id=\"hurtChips\"><\/div>\n      <div class=\"helper-text\">0 = \u00e0 peine remarqu\u00e9e \u00b7 10 = tr\u00e8s douloureuse. Aucun jugement \u2014 juste un rep\u00e8re.<\/div>\n    <\/div>\n\n    <div class=\"btn-group\">\n      <button class=\"btn btn-secondary\" type=\"button\" data-action=\"intro\">\u2190 Retour<\/button>\n      <button class=\"btn btn-primary\" type=\"button\" data-action=\"step\" data-target=\"2\">Continuer \u2192<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- ===== \u00c9TAPE 2 ===== -->\n  <section class=\"step\" id=\"step2\" data-step=\"2\">\n    <span class=\"step-badge\">\u00c9tape 2 \u00b7 Comprendre<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83d\udc94<\/span> Ce qui a \u00e9t\u00e9 touch\u00e9<\/h2>\n    <p class=\"step-hint\">Une critique blesse rarement pour ce qu'elle dit en surface. Elle touche souvent quelque chose de plus profond \u2014 une valeur, une peur, une blessure ancienne.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        Qu'est-ce que cette critique a touch\u00e9 en vous ?\n        <span class=\"field-example\">Cochez tout ce qui r\u00e9sonne, puis compl\u00e9tez.<\/span>\n      <\/label>\n      <div class=\"multi-grid\" id=\"touchedGrid\"><\/div>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"touchedText\">\n        Formulez plus pr\u00e9cis\u00e9ment ce qui a \u00e9t\u00e9 touch\u00e9 :\n      <\/label>\n      <textarea id=\"touchedText\" placeholder=\"Ce qui a \u00e9t\u00e9 touch\u00e9, c'est\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"bodyReaction\">\n        Comment votre corps a-t-il r\u00e9agi \u00e0 cette critique ?\n        <span class=\"field-example\">Ex. : gorge serr\u00e9e, larmes, chaleur, tremblement, envie de dispara\u00eetre, sid\u00e9ration, envie de crier\u2026<\/span>\n      <\/label>\n      <textarea id=\"bodyReaction\" placeholder=\"Ce que j'ai ressenti dans mon corps\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"btn-group\">\n      <button class=\"btn btn-secondary\" type=\"button\" data-action=\"step\" data-target=\"1\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" type=\"button\" data-action=\"step\" data-target=\"3\">Continuer \u2192<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- ===== \u00c9TAPE 3 ===== -->\n  <section class=\"step\" id=\"step3\" data-step=\"3\">\n    <span class=\"step-badge\">\u00c9tape 3 \u00b7 Distinguer<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83d\udd0d<\/span> Faits et interpr\u00e9tations<\/h2>\n    <p class=\"step-hint\">Une critique m\u00e9lange souvent plusieurs couches : ce qui a \u00e9t\u00e9 dit (les faits), ce qu'on en comprend (l'interpr\u00e9tation), et ce qu'on y ajoute (nos peurs, nos histoires). Les d\u00e9m\u00ealer permet de r\u00e9pondre plus justement.<\/p>\n\n    <div class=\"info-callout\">\n      <strong>\ud83d\udca1 Pourquoi c'est utile<\/strong><br>\n      Souvent, ce qui blesse le plus n'est pas la critique elle-m\u00eame, mais <strong>l'interpr\u00e9tation qu'on en fait<\/strong> \u2014 \u00ab elle me trouve nul\u00b7le \u00bb, \u00ab je ne vaux rien \u00bb, \u00ab tout le monde pense comme \u00e7a \u00bb. Distinguer les faits de ces pens\u00e9es permet de sortir du tourbillon.\n    <\/div>\n\n    <div class=\"control-grid\">\n      <div class=\"control-box facts\">\n        <div class=\"control-header\">\n          <span class=\"control-icon\">\u2705<\/span>\n          <span>Ce qui a \u00e9t\u00e9 dit (faits)<\/span>\n        <\/div>\n        <textarea id=\"facts\" placeholder=\"Les mots exacts, ce qui s'est pass\u00e9, dans quel contexte. Sans y ajouter de sens.\"><\/textarea>\n        <div class=\"control-help\">Observable, v\u00e9rifiable, factuel.<\/div>\n      <\/div>\n\n      <div class=\"control-box interpretations\">\n        <div class=\"control-header\">\n          <span class=\"control-icon\">\ud83d\udcad<\/span>\n          <span>Ce que j'en ai compris (interpr\u00e9tations)<\/span>\n        <\/div>\n        <textarea id=\"interpretations\" placeholder=\"Ex. : \u00ab Elle me trouve incapable \u00bb, \u00ab Il veut me rabaisser \u00bb, \u00ab C'est la preuve que je ne suis pas \u00e0 la hauteur \u00bb\u2026\"><\/textarea>\n        <div class=\"control-help\">Ce que je pense que \u00e7a veut dire, sans preuve.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"field-group\" style=\"margin-top: 18px;\">\n      <label class=\"field-label\" for=\"aboutSelf\">\n        Y a-t-il une part de <strong>v\u00e9rit\u00e9<\/strong> dans cette critique \u2014 m\u00eame minime, m\u00eame partielle ?\n        <span class=\"field-example\">Sans se flageller. Juste se demander honn\u00eatement : y a-t-il quelque chose de juste l\u00e0-dedans, m\u00eame 5 % ?<\/span>\n      <\/label>\n      <textarea id=\"aboutSelf\" placeholder=\"Ce qui, dans cette critique, pourrait \u00eatre juste\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"aboutGiver\">\n        Qu'est-ce que cette critique dit de la personne qui l'a formul\u00e9e ?\n        <span class=\"field-example\">Ex. : ses propres peurs, son stress, son besoin d'\u00eatre rassur\u00e9\u00b7e, ses propres blessures\u2026 Cela ne l'excuse pas, mais aide \u00e0 relativiser.<\/span>\n      <\/label>\n      <textarea id=\"aboutGiver\" placeholder=\"Ce que \u00e7a dit de l'autre\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"btn-group\">\n      <button class=\"btn btn-secondary\" type=\"button\" data-action=\"step\" data-target=\"2\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" type=\"button\" data-action=\"step\" data-target=\"4\">Continuer \u2192<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- ===== \u00c9TAPE 4 ===== -->\n  <section class=\"step\" id=\"step4\" data-step=\"4\">\n    <span class=\"step-badge\">\u00c9tape 4 \u00b7 Besoins<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83c\udf31<\/span> Ce dont j'aurais besoin<\/h2>\n    <p class=\"step-hint\">Derri\u00e8re la blessure, il y a des besoins. Les nommer, c'est se donner une chance de les faire entendre \u2014 et de ne pas rester seul\u00b7e avec eux.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        De quoi auriez-vous besoin <em>maintenant<\/em>, pour vous ?\n        <span class=\"field-example\">Cochez tout ce qui r\u00e9sonne, m\u00eame partiellement.<\/span>\n      <\/label>\n      <div class=\"chips-row\" id=\"needsChips\"><\/div>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"needText\">\n        Ce besoin, formul\u00e9 plus pr\u00e9cis\u00e9ment :\n      <\/label>\n      <textarea id=\"needText\" placeholder=\"J'aurais besoin de\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"fromOther\">\n        Y a-t-il quelque chose dont vous auriez besoin <strong>de la part de la personne<\/strong> qui a critiqu\u00e9 ?\n        <span class=\"field-example\">Ex. : \u00ab Qu'elle pr\u00e9cise ce qu'elle voulait dire \u00bb, \u00ab Qu'elle reconnaisse que c'\u00e9tait maladroit \u00bb, \u00ab Qu'on en reparle calmement \u00bb, \u00ab Rien \u2014 je ne veux plus rien lui demander \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"fromOther\" placeholder=\"De la part de l'autre, j'aurais besoin de\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"btn-group\">\n      <button class=\"btn btn-secondary\" type=\"button\" data-action=\"step\" data-target=\"3\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" type=\"button\" data-action=\"step\" data-target=\"5\">Continuer \u2192<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- ===== \u00c9TAPE 5 ===== -->\n  <section class=\"step\" id=\"step5\" data-step=\"5\">\n    <span class=\"step-badge\">\u00c9tape 5 \u00b7 Formuler<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83d\udcac<\/span> R\u00e9ponse possible<\/h2>\n    <p class=\"step-hint\">R\u00e9pondre ne veut pas dire se justifier ni contre-attaquer. C'est choisir ce qu'on veut dire, \u00e0 quel moment, et de quelle mani\u00e8re \u2014 au service de sa dignit\u00e9.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        Comment souhaitez-vous r\u00e9pondre ?\n        <span class=\"field-example\">Plusieurs approches sont l\u00e9gitimes. Cochez ce qui vous convient.<\/span>\n      <\/label>\n      <div class=\"multi-grid\" id=\"responsesGrid\"><\/div>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"responseText\">\n        Quelle r\u00e9ponse aimeriez-vous formuler \u2014 ou vous autoriser \u00e0 ne pas r\u00e9pondre ?\n        <span class=\"field-example\">Ex. : \u00ab Merci de me le dire, j'ai besoin d'y r\u00e9fl\u00e9chir \u00bb, \u00ab Ce que tu dis m'a bless\u00e9\u00b7e \u00bb, \u00ab Peux-tu me donner un exemple pr\u00e9cis ? \u00bb, \u00ab Je ne souhaite pas en parler maintenant \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"responseText\" placeholder=\"Ma r\u00e9ponse possible\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"whatToAvoid\">\n        Qu'est-ce que vous <strong>ne voulez pas<\/strong> faire dans votre r\u00e9ponse ?\n        <span class=\"field-example\">Ex. : \u00ab Ne pas me justifier en long et en large \u00bb, \u00ab Ne pas contre-attaquer \u00bb, \u00ab Ne pas m'excuser de quelque chose que je n'ai pas fait \u00bb, \u00ab Ne pas rester silencieux\u00b7se si je veux parler \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"whatToAvoid\" placeholder=\"Ce que je ne veux pas faire\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"timing\">\n        \u00c0 quel moment voulez-vous r\u00e9pondre ?\n        <span class=\"field-example\">Ex. : \u00ab \u00c0 chaud, tout de suite \u00bb, \u00ab Apr\u00e8s avoir r\u00e9fl\u00e9chi quelques heures \u00bb, \u00ab Dans une conversation en personne \u00bb, \u00ab Par \u00e9crit, plus pos\u00e9ment \u00bb.<\/span>\n      <\/label>\n      <input type=\"text\" id=\"timing\" placeholder=\"Quand\u2026\">\n    <\/div>\n\n    <div class=\"btn-group\">\n      <button class=\"btn btn-secondary\" type=\"button\" data-action=\"step\" data-target=\"4\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" type=\"button\" data-action=\"step\" data-target=\"6\">Continuer \u2192<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- ===== \u00c9TAPE 6 ===== -->\n  <section class=\"step\" id=\"step6\" data-step=\"6\">\n    <span class=\"step-badge\">\u00c9tape 6 \u00b7 Premier pas<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83d\udc63<\/span> Un premier pas pos\u00e9<\/h2>\n    <p class=\"step-hint\">Un tout petit geste concret, choisi par vous, qui vous remet en mouvement \u2014 sans nier la blessure, sans vous pr\u00e9cipiter.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"firstStep\">\n        Quel serait votre premier pas \u2014 m\u00eame minuscule \u2014 pour faire face \u00e0 cette critique ?\n        <span class=\"field-example\">Ex. : \u00ab \u00c9crire \u00e0 chaud ce que je ressens, sans l'envoyer \u00bb, \u00ab Respirer et me donner 24 h avant de r\u00e9pondre \u00bb, \u00ab En parler \u00e0 une personne de confiance \u00bb, \u00ab Pr\u00e9parer une phrase courte pour poser ma limite \u00bb, \u00ab Me rappeler ce qui est vrai chez moi \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"firstStep\" placeholder=\"Mon premier pas serait\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"whenStep\">\n        Quand pourrais-je le faire ?\n        <span class=\"field-example\">Un moment pr\u00e9cis, dans un d\u00e9lai r\u00e9aliste.<\/span>\n      <\/label>\n      <input type=\"text\" id=\"whenStep\" placeholder=\"Ex. : dans l'heure, ce soir, demain matin, dans les 3 prochains jours\u2026\">\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"supportStep\">\n        De qui ou de quoi aurais-je besoin pour m'y tenir ?\n        <span class=\"field-example\">Optionnel \u2014 mais souvent utile.<\/span>\n      <\/label>\n      <textarea id=\"supportStep\" placeholder=\"Pour m'aider \u00e0 faire ce premier pas, je pourrais\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        Apr\u00e8s ce travail, quelle est l'intensit\u00e9 de la blessure <em>maintenant<\/em> ?\n      <\/label>\n      <div class=\"chips-row\" id=\"hurtChipsAfter\"><\/div>\n      <div class=\"helper-text\">Aucun jugement. Simplement observer, m\u00eame un l\u00e9ger changement.<\/div>\n    <\/div>\n\n    <div class=\"btn-group\">\n      <button class=\"btn btn-secondary\" type=\"button\" data-action=\"step\" data-target=\"5\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-accent\" type=\"button\" data-action=\"summary\">Voir ma synth\u00e8se \u2728<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- ===== R\u00c9SUM\u00c9 ===== -->\n  <section class=\"summary-section\" id=\"summarySection\">\n    <div class=\"summary-hero\">\n      <div class=\"summary-emoji\">\ud83c\udf3f<\/div>\n      <h2>Votre synth\u00e8se<\/h2>\n      <p>Voici ce que vous avez mis en ordre. Ce document vous appartient \u2014 vous pouvez le relire, l'imprimer, en parler \u00e0 une personne de confiance ou \u00e0 un professionnel.<\/p>\n    <\/div>\n\n    <div id=\"summaryContent\"><\/div>\n\n    <div class=\"summary-resources\">\n      <strong>\ud83e\udded Ressources \u00e0 garder sous la main<\/strong>\n      \u2022 <strong>811 (Info-Social)<\/strong> \u2014 Soutien psychosocial 24\/7 (Qu\u00e9bec)<br>\n      \u2022 <strong>1 800 363-9010<\/strong> \u2014 SOS violence conjugale (24\/7, gratuit, confidentiel)<br>\n      \u2022 <strong>911<\/strong> \u2014 En cas de danger imm\u00e9diat<br>\n      \u2022 <strong>CNESST<\/strong> \u2014 Pour signaler du harc\u00e8lement ou de la violence au travail<br>\n      \u2022 <strong>Clinique juridique<\/strong> \u2014 Pour toute question sur vos droits<br>\n      \u2022 <strong>Programme d'aide aux employ\u00e9s (PAE)<\/strong> \u2014 Si vous \u00eates en emploi<br>\n      \u2022 <strong>Organismes communautaires<\/strong> \u2014 Soutien et \u00e9coute dans votre r\u00e9gion\n    <\/div>\n\n    <div class=\"summary-actions\">\n      <button class=\"btn btn-primary\" id=\"printBtn\" type=\"button\">\ud83d\udda8\ufe0f Imprimer<\/button>\n      <button class=\"btn btn-secondary\" id=\"downloadBtn\" type=\"button\">\ud83d\udce5 T\u00e9l\u00e9charger<\/button>\n      <button class=\"btn btn-secondary\" id=\"restartBtn\" type=\"button\">\ud83d\udd04 Nouvelle exploration<\/button>\n    <\/div>\n    <p class=\"restart-hint\">Envie de refaire l'exercice ? Vos r\u00e9ponses actuelles seront effac\u00e9es \u2014 pensez \u00e0 imprimer ou t\u00e9l\u00e9charger votre synth\u00e8se avant.<\/p>\n  <\/section>\n\n  <!-- FOOTER -->\n  <footer class=\"footer\">\n    <p>\ud83e\ude9e <strong>Outil d'accompagnement JIRIS<\/strong> \u2014 Justice \u00b7 Inclusion \u00b7 R\u00e9int\u00e9gration \u00b7 Innovation Sociale<\/p>\n    <p style=\"margin-top: 8px; opacity: 0.8;\">Cet outil ne pose aucun diagnostic et ne remplace pas un accompagnement professionnel. Vos r\u00e9ponses restent dans votre navigateur.<\/p>\n  <\/footer>\n\n<\/div>\n\n<script>\n(function () {\n  \"use strict\";\n\n  const STORAGE_KEY = 'jiris-critique-outil';\n  const TOTAL_STEPS = 6;\n\n  const state = {\n    currentStep: 0,\n    source: '',\n    content: '',\n    context: '',\n    hurtBefore: null,\n    touched: [],\n    touchedText: '',\n    bodyReaction: '',\n    facts: '',\n    interpretations: '',\n    aboutSelf: '',\n    aboutGiver: '',\n    needs: [],\n    needText: '',\n    fromOther: '',\n    responses: [],\n    responseText: '',\n    whatToAvoid: '',\n    timing: '',\n    firstStep: '',\n    whenStep: '',\n    supportStep: '',\n    hurtAfter: null,\n    completed: false\n  };\n\n  const HURT_LEVELS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n  const TOUCHED_LIST = [\n    'Ma valeur, mon estime de moi',\n    'Mon identit\u00e9, qui je suis',\n    'Ma comp\u00e9tence, mon travail',\n    'Ma place dans le groupe, l\\'appartenance',\n    'Ma relation avec la personne',\n    'Une blessure ancienne r\u00e9activ\u00e9e',\n    'Ma peur du jugement, du rejet',\n    'Une ins\u00e9curit\u00e9 profonde',\n    'Mon image, comment je me per\u00e7ois',\n    'Quelque chose que je savais d\u00e9j\u00e0',\n    'Mon besoin d\\'\u00eatre reconnu\u00b7e',\n    'Ma l\u00e9gitimit\u00e9 \u00e0 exister, \u00e0 prendre ma place'\n  ];\n\n  const NEEDS_LIST = [\n    '\u00catre reconnu\u00b7e dans ma valeur',\n    'Un peu de temps pour dig\u00e9rer',\n    'Du r\u00e9confort, de la douceur',\n    '\u00catre \u00e9cout\u00e9\u00b7e sans jugement',\n    'Comprendre ce qui s\\'est vraiment pass\u00e9',\n    'Poser une limite claire',\n    'Dire ce que j\\'ai ressenti',\n    'Faire la distinction entre la critique et moi',\n    'Me sentir respect\u00e9\u00b7e',\n    'Un espace pour ne pas \u00eatre d\\'accord',\n    'De la bienveillance envers moi-m\u00eame',\n    '\u00catre accompagn\u00e9\u00b7e pour en parler'\n  ];\n\n  const RESPONSES_LIST = [\n    'Remercier sans forc\u00e9ment accepter',\n    'Demander une pr\u00e9cision, un exemple concret',\n    'Nommer ce que j\\'ai ressenti',\n    'Poser une limite (\u00ab je n\\'accepte pas ce ton \u00bb)',\n    'Prendre un temps avant de r\u00e9pondre',\n    'Ne pas r\u00e9pondre tout de suite',\n    'R\u00e9pondre uniquement sur ce qui est juste',\n    'Reconna\u00eetre une part de v\u00e9rit\u00e9, sans m\\'\u00e9craser',\n    'Ne pas me justifier',\n    'Choisir un moment plus calme pour en reparler',\n    'Ne rien dire pour l\\'instant, mais revenir plus tard',\n    'R\u00e9pondre par \u00e9crit, plus pos\u00e9ment'\n  ];\n\n  const introCard = document.getElementById('introCard');\n  const progressWrapper = document.getElementById('progressWrapper');\n  const progressLabel = document.getElementById('progressLabel');\n  const progressPercent = document.getElementById('progressPercent');\n  const progressFill = document.getElementById('progressFill');\n  const summarySection = document.getElementById('summarySection');\n  const summaryContent = document.getElementById('summaryContent');\n\n  function renderHurtChips(containerId, keyName) {\n    const container = document.getElementById(containerId);\n    if (!container) return;\n    container.innerHTML = '';\n    HURT_LEVELS.forEach(n => {\n      const btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'chip';\n      btn.textContent = n;\n      if (state[keyName] === n) btn.classList.add('selected');\n      btn.addEventListener('click', () => {\n        state[keyName] = n;\n        container.querySelectorAll('.chip').forEach(c => c.classList.remove('selected'));\n        btn.classList.add('selected');\n        saveState();\n      });\n      container.appendChild(btn);\n    });\n  }\n\n  function renderMultiGrid(containerId, keyName, list) {\n    const container = document.getElementById(containerId);\n    if (!container) return;\n    container.innerHTML = '';\n    list.forEach(item => {\n      const btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'multi-chip';\n      btn.textContent = item;\n      if (state[keyName].includes(item)) btn.classList.add('selected');\n      btn.addEventListener('click', () => {\n        const idx = state[keyName].indexOf(item);\n        if (idx >= 0) {\n          state[keyName].splice(idx, 1);\n          btn.classList.remove('selected');\n        } else {\n          state[keyName].push(item);\n          btn.classList.add('selected');\n        }\n        saveState();\n      });\n      container.appendChild(btn);\n    });\n  }\n\n  function renderChipsRow(containerId, keyName, list) {\n    const container = document.getElementById(containerId);\n    if (!container) return;\n    container.innerHTML = '';\n    list.forEach(item => {\n      const btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'chip';\n      btn.textContent = item;\n      if (state[keyName].includes(item)) btn.classList.add('selected');\n      btn.addEventListener('click', () => {\n        const idx = state[keyName].indexOf(item);\n        if (idx >= 0) {\n          state[keyName].splice(idx, 1);\n          btn.classList.remove('selected');\n        } else {\n          state[keyName].push(item);\n          btn.classList.add('selected');\n        }\n        saveState();\n      });\n      container.appendChild(btn);\n    });\n  }\n\n  function saveState() {\n    try {\n      localStorage.setItem(STORAGE_KEY, JSON.stringify(state));\n    } catch (e) {\n      console.warn('Sauvegarde impossible :', e);\n    }\n  }\n\n  function loadState() {\n    try {\n      const raw = localStorage.getItem(STORAGE_KEY);\n      if (!raw) return false;\n      const saved = JSON.parse(raw);\n      Object.keys(state).forEach(k => {\n        if (saved[k] !== undefined) state[k] = saved[k];\n      });\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function bindInputs() {\n    const bind = (id, key) => {\n      const el = document.getElementById(id);\n      if (!el) return;\n      el.addEventListener('input', e => {\n        state[key] = e.target.value;\n        saveState();\n      });\n    };\n    bind('source', 'source');\n    bind('content', 'content');\n    bind('context', 'context');\n    bind('touchedText', 'touchedText');\n    bind('bodyReaction', 'bodyReaction');\n    bind('facts', 'facts');\n    bind('interpretations', 'interpretations');\n    bind('aboutSelf', 'aboutSelf');\n    bind('aboutGiver', 'aboutGiver');\n    bind('needText', 'needText');\n    bind('fromOther', 'fromOther');\n    bind('responseText', 'responseText');\n    bind('whatToAvoid', 'whatToAvoid');\n    bind('timing', 'timing');\n    bind('firstStep', 'firstStep');\n    bind('whenStep', 'whenStep');\n    bind('supportStep', 'supportStep');\n  }\n\n  function fillInputs() {\n    const fill = (id, val) => {\n      const el = document.getElementById(id);\n      if (el) el.value = val || '';\n    };\n    fill('source', state.source);\n    fill('content', state.content);\n    fill('context', state.context);\n    fill('touchedText', state.touchedText);\n    fill('bodyReaction', state.bodyReaction);\n    fill('facts', state.facts);\n    fill('interpretations', state.interpretations);\n    fill('aboutSelf', state.aboutSelf);\n    fill('aboutGiver', state.aboutGiver);\n    fill('needText', state.needText);\n    fill('fromOther', state.fromOther);\n    fill('responseText', state.responseText);\n    fill('whatToAvoid', state.whatToAvoid);\n    fill('timing', state.timing);\n    fill('firstStep', state.firstStep);\n    fill('whenStep', state.whenStep);\n    fill('supportStep', state.supportStep);\n  }\n\n  function goToIntro() {\n    state.currentStep = 0;\n    introCard.style.display = 'block';\n    progressWrapper.style.display = 'none';\n    summarySection.classList.remove('active');\n    document.querySelectorAll('.step').forEach(s => s.classList.remove('active'));\n    updateIntroForCompleted();\n    window.scrollTo({ top: 0, behavior: 'smooth' });\n    saveState();\n  }\n\n  function goToStep(n) {\n    if (n < 1 || n > TOTAL_STEPS) return;\n    state.currentStep = n;\n    introCard.style.display = 'none';\n    progressWrapper.style.display = 'block';\n    summarySection.classList.remove('active');\n    document.querySelectorAll('.step').forEach(s => s.classList.remove('active'));\n    const target = document.getElementById('step' + n);\n    if (target) target.classList.add('active');\n    updateProgress();\n    window.scrollTo({ top: 0, behavior: 'smooth' });\n    saveState();\n  }\n\n  function updateProgress() {\n    const pct = Math.round((state.currentStep \/ TOTAL_STEPS) * 100);\n    progressLabel.textContent = '\u00c9tape ' + state.currentStep + ' sur ' + TOTAL_STEPS;\n    progressPercent.textContent = pct + '%';\n    progressFill.style.width = pct + '%';\n  }\n\n  function escapeHtml(s) {\n    const div = document.createElement('div');\n    div.textContent = s || '';\n    return div.innerHTML;\n  }\n\n  function buildSummaryHtml() {\n    const blocks = [];\n\n    if (state.source || state.content || state.context || state.hurtBefore !== null) {\n      let inner = '';\n      if (state.source) inner += '<p><strong>De :<\/strong> ' + escapeHtml(state.source) + '<\/p>';\n      if (state.content) inner += '<p style=\"margin-top: 10px;\"><strong>Ce qui a \u00e9t\u00e9 dit :<\/strong><br>' + escapeHtml(state.content) + '<\/p>';\n      if (state.context) inner += '<p style=\"margin-top: 10px;\"><strong>Contexte :<\/strong><br>' + escapeHtml(state.context) + '<\/p>';\n      if (state.hurtBefore !== null) inner += '<p style=\"margin-top: 10px; font-size: 14px; color: var(--muted);\">Intensit\u00e9 ressentie au d\u00e9part : <strong style=\"color: var(--primary);\">' + state.hurtBefore + '\/10<\/strong><\/p>';\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udcdd La critique<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.touched.length > 0 || state.touchedText || state.bodyReaction) {\n      let inner = '';\n      if (state.touched.length > 0) {\n        inner += '<ul>' + state.touched.map(t => '<li>' + escapeHtml(t) + '<\/li>').join('') + '<\/ul>';\n      }\n      if (state.touchedText) {\n        inner += '<p style=\"margin-top: 10px;\">' + escapeHtml(state.touchedText) + '<\/p>';\n      }\n      if (state.bodyReaction) {\n        inner += '<p style=\"margin-top: 12px;\"><strong>R\u00e9action du corps :<\/strong><br>' + escapeHtml(state.bodyReaction) + '<\/p>';\n      }\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udc94 Ce qui a \u00e9t\u00e9 touch\u00e9<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.facts || state.interpretations || state.aboutSelf || state.aboutGiver) {\n      let inner = '<div class=\"summary-control-grid\">';\n      if (state.facts) {\n        inner += '<div class=\"summary-control-box facts\">' +\n          '<span class=\"summary-control-label\">\u2705 Faits<\/span>' +\n          escapeHtml(state.facts) +\n          '<\/div>';\n      }\n      if (state.interpretations) {\n        inner += '<div class=\"summary-control-box interpretations\">' +\n          '<span class=\"summary-control-label\">\ud83d\udcad Interpr\u00e9tations<\/span>' +\n          escapeHtml(state.interpretations) +\n          '<\/div>';\n      }\n      inner += '<\/div>';\n      if (state.aboutSelf) {\n        inner += '<p style=\"margin-top: 14px;\"><strong>Ce qui pourrait \u00eatre juste :<\/strong><br>' + escapeHtml(state.aboutSelf) + '<\/p>';\n      }\n      if (state.aboutGiver) {\n        inner += '<p style=\"margin-top: 10px;\"><strong>Ce que \u00e7a dit de l\\'autre :<\/strong><br>' + escapeHtml(state.aboutGiver) + '<\/p>';\n      }\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udd0d Faits et interpr\u00e9tations<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.needs.length > 0 || state.needText || state.fromOther) {\n      let inner = '';\n      if (state.needs.length > 0) {\n        inner += '<ul>' + state.needs.map(n => '<li>' + escapeHtml(n) + '<\/li>').join('') + '<\/ul>';\n      }\n      if (state.needText) {\n        inner += '<p style=\"margin-top: 10px;\">' + escapeHtml(state.needText) + '<\/p>';\n      }\n      if (state.fromOther) {\n        inner += '<p style=\"margin-top: 12px;\"><strong>De la part de l\\'autre :<\/strong><br>' + escapeHtml(state.fromOther) + '<\/p>';\n      }\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83c\udf31 Mes besoins<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.responses.length > 0 || state.responseText || state.whatToAvoid || state.timing) {\n      let inner = '';\n      if (state.responses.length > 0) {\n        inner += '<p><strong>Approches que j\\'envisage :<\/strong><\/p>';\n        inner += '<ul>' + state.responses.map(r => '<li>' + escapeHtml(r) + '<\/li>').join('') + '<\/ul>';\n      }\n      if (state.responseText) {\n        inner += '<p style=\"margin-top: 12px;\"><strong>Ma r\u00e9ponse possible :<\/strong><br>' + escapeHtml(state.responseText) + '<\/p>';\n      }\n      if (state.whatToAvoid) {\n        inner += '<p style=\"margin-top: 10px;\"><strong>Ce que je ne veux pas faire :<\/strong><br>' + escapeHtml(state.whatToAvoid) + '<\/p>';\n      }\n      if (state.timing) {\n        inner += '<p style=\"margin-top: 10px;\"><strong>Quand :<\/strong> ' + escapeHtml(state.timing) + '<\/p>';\n      }\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udcac R\u00e9ponse possible<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.firstStep || state.whenStep || state.supportStep) {\n      let inner = '';\n      if (state.firstStep) inner += '<p><strong>Mon premier pas :<\/strong><br>' + escapeHtml(state.firstStep) + '<\/p>';\n      if (state.whenStep) inner += '<p style=\"margin-top: 10px;\"><strong>Quand :<\/strong> ' + escapeHtml(state.whenStep) + '<\/p>';\n      if (state.supportStep) inner += '<p style=\"margin-top: 10px;\"><strong>Soutien pr\u00e9vu :<\/strong> ' + escapeHtml(state.supportStep) + '<\/p>';\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udc63 Premier pas pos\u00e9<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.hurtBefore !== null && state.hurtAfter !== null) {\n      const diff = state.hurtBefore - state.hurtAfter;\n      let evoText = '';\n      if (diff > 0) evoText = 'L\\'intensit\u00e9 de la blessure a <strong style=\"color: var(--accent);\">diminu\u00e9 de ' + diff + ' point' + (diff > 1 ? 's' : '') + '<\/strong> apr\u00e8s ce travail. C\\'est pr\u00e9cieux \u00e0 noter.';\n      else if (diff === 0) evoText = 'L\\'intensit\u00e9 est rest\u00e9e <strong>stable<\/strong>. Simplement avoir pris ce temps compte d\u00e9j\u00e0.';\n      else evoText = 'L\\'intensit\u00e9 a <strong>augment\u00e9<\/strong> de ' + Math.abs(diff) + ' point' + (Math.abs(diff) > 1 ? 's' : '') + '. Mettre des mots sur une blessure peut parfois raviver la douleur \u2014 c\\'est un passage possible. Prenez soin de vous, doucement.';\n\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udcca \u00c9volution de la blessure ressentie<\/h3>' +\n        '<p>Avant : <strong>' + state.hurtBefore + '\/10<\/strong> \u00b7 Apr\u00e8s : <strong>' + state.hurtAfter + '\/10<\/strong><\/p>' +\n        '<p style=\"margin-top: 8px;\">' + evoText + '<\/p>' +\n        '<\/div>'\n      );\n    }\n\n    if (blocks.length === 0) {\n      return '<p style=\"text-align: center; color: var(--muted); font-style: italic;\">Vous n\\'avez encore rien not\u00e9. Revenez en arri\u00e8re pour compl\u00e9ter quelques \u00e9tapes \u2014 \u00e0 votre rythme.<\/p>';\n    }\n\n    return blocks.join('');\n  }\n\n  function showSummary() {\n    state.completed = true;\n    summaryContent.innerHTML = buildSummaryHtml();\n    document.querySelectorAll('.step').forEach(s => s.classList.remove('active'));\n    summarySection.classList.add('active');\n    progressWrapper.style.display = 'none';\n    progressLabel.textContent = 'Synth\u00e8se';\n    progressPercent.textContent = '100%';\n    progressFill.style.width = '100%';\n    window.scrollTo({ top: 0, behavior: 'smooth' });\n    saveState();\n  }\n\n  function printSummary() {\n    try {\n      if (typeof window.print === 'function') {\n        window.print();\n      } else {\n        throw new Error('window.print non disponible');\n      }\n    } catch (err) {\n      console.warn('Impression non disponible :', err);\n      alert('L\\'impression n\\'est pas disponible dans cet environnement.\\n\\nVous pouvez utiliser la fonction \"T\u00e9l\u00e9charger\" pour sauvegarder votre synth\u00e8se.');\n    }\n  }\n\n  function buildPlainTextSummary() {\n    let t = '\ud83e\ude9e FAIRE FACE \u00c0 UNE CRITIQUE\\n';\n    t += '================================================\\n';\n    t += 'Outil JIRIS \u2014 Justice \u00b7 Inclusion \u00b7 R\u00e9int\u00e9gration \u00b7 Innovation Sociale\\n\\n';\n\n    t += '\u26a0\ufe0f RAPPEL\\n';\n    t += 'Critique n\\'est pas attaque. En cas de harc\u00e8lement, menaces ou violence verbale r\u00e9p\u00e9t\u00e9e, cherchez de l\\'aide.\\n';\n    t += 'Ressources : 811 Info-Social \u00b7 1 800 363-9010 SOS violence conjugale \u00b7 911 en urgence\\n\\n';\n\n    if (state.source || state.content || state.context || state.hurtBefore !== null) {\n      t += '\ud83d\udcdd LA CRITIQUE\\n';\n      if (state.source) t += 'De : ' + state.source + '\\n';\n      if (state.content) t += 'Ce qui a \u00e9t\u00e9 dit : ' + state.content + '\\n';\n      if (state.context) t += 'Contexte : ' + state.context + '\\n';\n      if (state.hurtBefore !== null) t += 'Intensit\u00e9 ressentie : ' + state.hurtBefore + '\/10\\n';\n      t += '\\n';\n    }\n\n    if (state.touched.length > 0 || state.touchedText || state.bodyReaction) {\n      t += '\ud83d\udc94 CE QUI A \u00c9T\u00c9 TOUCH\u00c9\\n';\n      state.touched.forEach((item, i) => t += (i + 1) + '. ' + item + '\\n');\n      if (state.touchedText) t += state.touchedText + '\\n';\n      if (state.bodyReaction) t += 'R\u00e9action du corps : ' + state.bodyReaction + '\\n';\n      t += '\\n';\n    }\n\n    if (state.facts || state.interpretations || state.aboutSelf || state.aboutGiver) {\n      t += '\ud83d\udd0d FAITS ET INTERPR\u00c9TATIONS\\n';\n      if (state.facts) t += 'Faits : ' + state.facts + '\\n';\n      if (state.interpretations) t += 'Interpr\u00e9tations : ' + state.interpretations + '\\n';\n      if (state.aboutSelf) t += 'Ce qui pourrait \u00eatre juste : ' + state.aboutSelf + '\\n';\n      if (state.aboutGiver) t += 'Ce que \u00e7a dit de l\\'autre : ' + state.aboutGiver + '\\n';\n      t += '\\n';\n    }\n\n    if (state.needs.length > 0 || state.needText || state.fromOther) {\n      t += '\ud83c\udf31 MES BESOINS\\n';\n      if (state.needs.length > 0) t += 'Besoins identifi\u00e9s : ' + state.needs.join(', ') + '\\n';\n      if (state.needText) t += state.needText + '\\n';\n      if (state.fromOther) t += 'De la part de l\\'autre : ' + state.fromOther + '\\n';\n      t += '\\n';\n    }\n\n    if (state.responses.length > 0 || state.responseText || state.whatToAvoid || state.timing) {\n      t += '\ud83d\udcac R\u00c9PONSE POSSIBLE\\n';\n      state.responses.forEach((r, i) => t += (i + 1) + '. ' + r + '\\n');\n      if (state.responseText) t += 'Ma r\u00e9ponse : ' + state.responseText + '\\n';\n      if (state.whatToAvoid) t += 'Ce que je ne veux pas faire : ' + state.whatToAvoid + '\\n';\n      if (state.timing) t += 'Quand : ' + state.timing + '\\n';\n      t += '\\n';\n    }\n\n    if (state.firstStep || state.whenStep || state.supportStep) {\n      t += '\ud83d\udc63 PREMIER PAS POS\u00c9\\n';\n      if (state.firstStep) t += 'Mon premier pas : ' + state.firstStep + '\\n';\n      if (state.whenStep) t += 'Quand : ' + state.whenStep + '\\n';\n      if (state.supportStep) t += 'Soutien pr\u00e9vu : ' + state.supportStep + '\\n';\n      t += '\\n';\n    }\n\n    if (state.hurtBefore !== null && state.hurtAfter !== null) {\n      t += '\ud83d\udcca \u00c9VOLUTION DE LA BLESSURE RESSENTIE\\n';\n      t += 'Avant : ' + state.hurtBefore + '\/10 \u00b7 Apr\u00e8s : ' + state.hurtAfter + '\/10\\n\\n';\n    }\n\n    t += '================================================\\n';\n    t += 'G\u00e9n\u00e9r\u00e9 le ' + new Date().toLocaleDateString('fr-CA', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }) + '\\n';\n    t += 'Cet outil ne pose aucun diagnostic et ne remplace pas un accompagnement professionnel.';\n\n    return t;\n  }\n\n  function downloadSummary() {\n    const text = buildPlainTextSummary();\n    const filename = 'critique-jiris-' + new Date().toISOString().slice(0, 10) + '.txt';\n\n    try {\n      const blob = new Blob([text], { type: 'text\/plain;charset=utf-8' });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement('a');\n      a.href = url;\n      a.download = filename;\n      a.style.display = 'none';\n      document.body.appendChild(a);\n      a.click();\n      setTimeout(() => {\n        document.body.removeChild(a);\n        URL.revokeObjectURL(url);\n      }, 500);\n      console.log('\u2705 T\u00e9l\u00e9chargement lanc\u00e9 via Blob');\n      return;\n    } catch (err1) {\n      console.warn('M\u00e9thode Blob \u00e9chou\u00e9e :', err1);\n    }\n\n    try {\n      const dataUri = 'data:text\/plain;charset=utf-8,' + encodeURIComponent(text);\n      const a = document.createElement('a');\n      a.href = dataUri;\n      a.download = filename;\n      a.style.display = 'none';\n      document.body.appendChild(a);\n      a.click();\n      setTimeout(() => document.body.removeChild(a), 500);\n      console.log('\u2705 T\u00e9l\u00e9chargement lanc\u00e9 via data URI');\n      return;\n    } catch (err2) {\n      console.warn('M\u00e9thode data URI \u00e9chou\u00e9e :', err2);\n    }\n\n    try {\n      const blob = new Blob([text], { type: 'text\/plain;charset=utf-8' });\n      const url = URL.createObjectURL(blob);\n      const newWindow = window.open(url, '_blank');\n      if (!newWindow) throw new Error('Popup bloqu\u00e9e');\n      console.log('\u2705 Ouverture dans un nouvel onglet');\n      return;\n    } catch (err3) {\n      console.warn('Ouverture nouvel onglet \u00e9chou\u00e9e :', err3);\n    }\n\n    alert('Le t\u00e9l\u00e9chargement automatique n\\'est pas disponible dans cet environnement.\\n\\nLe texte de votre synth\u00e8se va s\\'afficher dans une nouvelle fen\u00eatre.');\n    const w = window.open('', '_blank');\n    if (w) {\n      w.document.write('<pre style=\"font-family: monospace; white-space: pre-wrap; padding: 20px; line-height: 1.5;\">' + escapeHtml(text) + '<\/pre>');\n      w.document.title = 'Synth\u00e8se \u2014 Faire face \u00e0 une critique';\n    }\n  }\n\n  function restart() {\n    if (!confirm('Effacer toutes vos r\u00e9ponses et recommencer ?')) return;\n    try { localStorage.removeItem(STORAGE_KEY); } catch (e) {}\n    Object.keys(state).forEach(k => {\n      if (k === 'touched' || k === 'needs' || k === 'responses') state[k] = [];\n      else if (k === 'hurtBefore' || k === 'hurtAfter') state[k] = null;\n      else if (k === 'completed') state[k] = false;\n      else if (k === 'currentStep') state[k] = 0;\n      else state[k] = '';\n    });\n    saveState();\n    location.reload();\n  }\n\n  function updateIntroForCompleted() {\n    const notice = document.getElementById('completedNotice');\n    const startBtn = document.getElementById('startBtn');\n    const reviewBtn = document.getElementById('reviewBtn');\n    const resetBtn = document.getElementById('resetBtn');\n\n    if (state.completed) {\n      if (notice) notice.style.display = 'flex';\n      if (startBtn) startBtn.style.display = 'none';\n      if (reviewBtn) reviewBtn.style.display = 'inline-flex';\n      if (resetBtn) resetBtn.textContent = '\ud83d\udd04 Recommencer une nouvelle exploration';\n    } else {\n      if (notice) notice.style.display = 'none';\n      if (startBtn) startBtn.style.display = 'inline-flex';\n      if (reviewBtn) reviewBtn.style.display = 'none';\n      if (resetBtn) resetBtn.textContent = 'R\u00e9initialiser';\n    }\n  }\n\n  function init() {\n    const hasSaved = loadState();\n    fillInputs();\n    bindInputs();\n\n    renderHurtChips('hurtChips', 'hurtBefore');\n    renderHurtChips('hurtChipsAfter', 'hurtAfter');\n    renderMultiGrid('touchedGrid', 'touched', TOUCHED_LIST);\n    renderMultiGrid('responsesGrid', 'responses', RESPONSES_LIST);\n    renderChipsRow('needsChips', 'needs', NEEDS_LIST);\n\n    const printBtn = document.getElementById('printBtn');\n    const downloadBtn = document.getElementById('downloadBtn');\n    const restartBtn = document.getElementById('restartBtn');\n    const reviewBtn = document.getElementById('reviewBtn');\n\n    if (printBtn) {\n      printBtn.addEventListener('click', function (e) {\n        e.preventDefault();\n        printSummary();\n      });\n    }\n    if (downloadBtn) {\n      downloadBtn.addEventListener('click', function (e) {\n        e.preventDefault();\n        downloadSummary();\n      });\n    }\n    if (restartBtn) {\n      restartBtn.addEventListener('click', function (e) {\n        e.preventDefault();\n        restart();\n      });\n    }\n    if (reviewBtn) {\n      reviewBtn.addEventListener('click', function (e) {\n        e.preventDefault();\n        showSummary();\n      });\n    }\n\n    const startBtn = document.getElementById('startBtn');\n    const resetBtn = document.getElementById('resetBtn');\n    if (startBtn) {\n      startBtn.addEventListener('click', function () {\n        if (hasSaved && state.currentStep > 0 && state.currentStep <= TOTAL_STEPS) {\n          goToStep(state.currentStep);\n        } else {\n          goToStep(1);\n        }\n      });\n    }\n    if (resetBtn) {\n      resetBtn.addEventListener('click', restart);\n    }\n\n    document.querySelectorAll('[data-action]').forEach(btn => {\n      btn.addEventListener('click', function () {\n        const action = this.dataset.action;\n        const target = this.dataset.target;\n        if (action === 'intro') goToIntro();\n        else if (action === 'step') goToStep(parseInt(target, 10));\n        else if (action === 'summary') showSummary();\n      });\n    });\n\n    if (state.completed) {\n      updateIntroForCompleted();\n    } else if (hasSaved && state.currentStep > 0 && state.currentStep <= TOTAL_STEPS && startBtn) {\n      startBtn.textContent = 'Reprendre o\u00f9 j\\'en \u00e9tais \u2192';\n    }\n\n    console.log('\u2705 Outil \u00ab Faire face \u00e0 une critique \u00bb initialis\u00e9');\n  }\n\n  window.jirisCritique = {\n    state,\n    goToStep,\n    showSummary,\n    printSummary,\n    downloadSummary,\n    restart\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Faire face \u00e0 une critique Faire face \u00e0 une critique \u2014 Outil d&rsquo;accompagnement JIRIS \ud83e\ude9e Faire face \u00e0 une critique Un outil d&rsquo;accompagnement pour accueillir une critique sans s&rsquo;effondrer, distinguer ce qui est juste de ce qui blesse, et r\u00e9pondre avec justesse. Avant de commencer \u26a0\ufe0f Critique n&rsquo;est pas attaque Une critique est un avis, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"iawp_total_views":0,"footnotes":""},"class_list":["post-3517","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/pages\/3517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/comments?post=3517"}],"version-history":[{"count":17,"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/pages\/3517\/revisions"}],"predecessor-version":[{"id":3603,"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/pages\/3517\/revisions\/3603"}],"wp:attachment":[{"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/media?parent=3517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}